ETH Price: $2,914.23 (-3.01%)
Gas: 1 Gwei

Token

Aluminium (ALM)
 

Overview

Max Total Supply

1,000,000,000 ALM

Holders

21

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,763,104.094582963 ALM

Value
$0.00
0x0525fa029ab0be79e4dC798B8e6F0e8Fb209D8B7
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:
ALUMINIUM

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-28
*/

/**
 *Submitted for verification at Etherscan.io on 2023-09-25
*/

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

abstract contract Context 
{
    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

}


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

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

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

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

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

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

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

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


/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}


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



interface IUniswapV2Pair {
    function factory() external view returns (address);
}


interface IUniswapV2Router01 
{
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}


interface IUniswapV2Router02 is IUniswapV2Router01 
{
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}


/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */

contract ALUMINIUM is Context, IERC20, Ownable 
{
      using SafeMath for uint256;
      event SwapTokensForETH(uint256 amountIn, address[] path);
      event SwapAndLiquifyEnabledUpdated(bool enabled);
      bool inSwapAndLiquify;
      bool public swapAndLiquifyEnabled = true;
   
      modifier lockTheSwap {
         inSwapAndLiquify = true;
         _;
         inSwapAndLiquify = false;
      }

      mapping (address => uint256) private _balances;
      mapping (address => mapping (address => uint256)) private _allowances;
      mapping (address => bool) private _isExcludedFromFee;
      mapping (address => bool) private _isExcludedFromWhale;

      uint256 private _totalSupply;
      string private _name;
      string private _symbol;
      uint8 private _decimals;
      address payable public marketingAddress; 
      IUniswapV2Router02 public immutable uniswapV2Router;
      address public uniswapV2Pair;
      uint256 public sellMarketingFee;
      uint256 public buyMarketingFee;
      uint256 public _maxTxAmount;
      uint256 public minimumTokensBeforeSwap;


    constructor() 
    { 
      _name = "Aluminium";
      _symbol = "ALM";
      _decimals = 9;

      _mint(msg.sender, 1000_000_000 * 10**9);

      IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
      uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
      .createPair(address(this), _uniswapV2Router.WETH());
      uniswapV2Router = _uniswapV2Router;  

      _maxTxAmount = 1000_000_0 * 10**9;
      minimumTokensBeforeSwap = 1000_0 * 10**9;  

      sellMarketingFee = 90;
      buyMarketingFee = 0;
      
      _isExcludedFromFee[owner()] = true;
      _isExcludedFromFee[address(this)] = true;

      marketingAddress = payable(0xBE1f7Fc58Daf4D60b86dFC5198D593B7bc96722D);
    }


    function isExcludedFromFee(address account) external view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */

   function setFeeRate(uint256 _sellMarketingFee, uint256 _buyMarketingFee) external onlyOwner
   {
      buyMarketingFee = _buyMarketingFee;
      sellMarketingFee = _sellMarketingFee;
   }


    function swapAllFee() public onlyOwner 
    {
        uint256 contractTokenBalance = balanceOf(address(this));
        swapFeeTokensForEth(contractTokenBalance);
    }


    function swapFeeTokensForEth(uint256 contractTokenBalance) private lockTheSwap 
    {
        swapTokensForEth(contractTokenBalance); 
        uint256 ethBalance = address(this).balance;
        marketingAddress.transfer(ethBalance);
    }


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

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

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





    function _transferTokens(address from, address to, uint256 amount) internal virtual 
    {

         if(from != owner() && to != owner()) 
         {
            require(amount <= _maxTxAmount, "Exceeds Max Tx Amount");
         }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify 
            && swapAndLiquifyEnabled 
            && from != uniswapV2Pair 
            && from != owner() 
            && balanceOf(uniswapV2Pair)>0) 
        {
            if (overMinimumTokenBalance) 
            {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapFeeTokensForEth(contractTokenBalance);
            }
        }


         if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to])
         {
             uint256 _feeTokens = 0;
             if(to==uniswapV2Pair)
             {
                 _feeTokens = amount.div(100).mul(sellMarketingFee);
             }
             else 
             {
                  _feeTokens = amount.div(100).mul(buyMarketingFee);
             }

            if(_feeTokens>0)
            {
                _transfer(from, address(this), _feeTokens);
                amount = amount.sub(_feeTokens);
            }
         }
         
         _transfer(from, to, amount);
    }



    function _transfer(address sender, address recipient, uint256 amount) internal virtual 
    {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);

    }

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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);
    }


    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */


    function setMinimumTokensBeforeSwap(uint256 _minimumTokensBeforeSwap) external onlyOwner() 
    {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }


    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner 
    {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }



    function setMarketingAddress(address _marketingAddress) external onlyOwner() 
    {
        marketingAddress = payable(_marketingAddress);
    }

   receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_maxTxAmount","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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAllFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60a060405260018060156101000a81548160ff0219169083151502179055503480156200002b57600080fd5b5060006200003e620004d760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600981526020017f416c756d696e69756d00000000000000000000000000000000000000000000008152506007908162000122919062000981565b506040518060400160405280600381526020017f414c4d00000000000000000000000000000000000000000000000000000000008152506008908162000169919062000981565b5060098060006101000a81548160ff021916908360ff1602179055506200019f33670de0b6b3a7640000620004df60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022a919062000ad2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062000ad2565b6040518363ffffffff1660e01b8152600401620002d792919062000b15565b6020604051808303816000875af1158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000ad2565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050662386f26fc10000600d819055506509184e72a000600e81905550605a600b819055506000600c81905550600160046000620003d26200067b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073be1f7fc58daf4d60b86dfc5198d593b7bc96722d600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000ccf565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005489062000ba3565b60405180910390fd5b6200056d81600654620006a460201b620015af1790919060201c565b600681905550620005cc81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006a460201b620015af1790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200066f919062000bd6565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808284620006b5919062000c22565b905083811015620006fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f49062000cad565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200078957607f821691505b6020821081036200079f576200079e62000741565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007ca565b620008158683620007ca565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008626200085c62000856846200082d565b62000837565b6200082d565b9050919050565b6000819050919050565b6200087e8362000841565b620008966200088d8262000869565b848454620007d7565b825550505050565b600090565b620008ad6200089e565b620008ba81848462000873565b505050565b5b81811015620008e257620008d6600082620008a3565b600181019050620008c0565b5050565b601f8211156200093157620008fb81620007a5565b6200090684620007ba565b8101602085101562000916578190505b6200092e6200092585620007ba565b830182620008bf565b50505b505050565b600082821c905092915050565b6000620009566000198460080262000936565b1980831691505092915050565b600062000971838362000943565b9150826002028217905092915050565b6200098c8262000707565b67ffffffffffffffff811115620009a857620009a762000712565b5b620009b4825462000770565b620009c1828285620008e6565b600060209050601f831160018114620009f95760008415620009e4578287015190505b620009f0858262000963565b86555062000a60565b601f19841662000a0986620007a5565b60005b8281101562000a335784890151825560018201915060208501945060208101905062000a0c565b8683101562000a53578489015162000a4f601f89168262000943565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a9a8262000a6d565b9050919050565b62000aac8162000a8d565b811462000ab857600080fd5b50565b60008151905062000acc8162000aa1565b92915050565b60006020828403121562000aeb5762000aea62000a68565b5b600062000afb8482850162000abb565b91505092915050565b62000b0f8162000a8d565b82525050565b600060408201905062000b2c600083018562000b04565b62000b3b602083018462000b04565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b8b601f8362000b42565b915062000b988262000b53565b602082019050919050565b6000602082019050818103600083015262000bbe8162000b7c565b9050919050565b62000bd0816200082d565b82525050565b600060208201905062000bed600083018462000bc5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c2f826200082d565b915062000c3c836200082d565b925082820190508082111562000c575762000c5662000bf3565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000c95601b8362000b42565b915062000ca28262000c5d565b602082019050919050565b6000602082019050818103600083015262000cc88162000c86565b9050919050565b60805161311162000d00600039600081816107f3015281816120c5015281816121a601526121cd01526131116000f3fe6080604052600436106101d15760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e14610689578063ea2f0b37146106c6578063f2d2a751146106ef578063f2fde38b14610718576101d8565b8063a9059cbb146105cf578063aee50b1e1461060c578063c49b9a8014610635578063d2d7ad831461065e576101d8565b806392136913116100d1578063921369131461051157806395d89b411461053c578063a457c2d714610567578063a5ece941146105a4576101d8565b80637d1db4a5146104925780638da5cb5b146104bd578063906e9dd0146104e8576101d8565b8063437823ec1161016f57806370a082311161013e57806370a08231146103fc578063715018a61461043957806377e3e3fb146104505780637bce5a0414610467576101d8565b8063437823ec1461034057806349bd5a5e146103695780634a74bb02146103945780635342acb4146103bf576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610741565b6040516101ff919061232c565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a91906123e7565b6107d3565b60405161023c9190612442565b60405180910390f35b34801561025157600080fd5b5061025a6107f1565b60405161026791906124bc565b60405180910390f35b34801561027c57600080fd5b50610285610815565b60405161029291906124e6565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612501565b61081f565b6040516102cf9190612442565b60405180910390f35b3480156102e457600080fd5b506102ed6108f8565b6040516102fa9190612570565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906123e7565b61090f565b6040516103379190612442565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061258b565b6109c2565b005b34801561037557600080fd5b5061037e610ab2565b60405161038b91906125c7565b60405180910390f35b3480156103a057600080fd5b506103a9610ad8565b6040516103b69190612442565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e1919061258b565b610aeb565b6040516103f39190612442565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061258b565b610b41565b60405161043091906124e6565b60405180910390f35b34801561044557600080fd5b5061044e610b8a565b005b34801561045c57600080fd5b50610465610cdd565b005b34801561047357600080fd5b5061047c610d8b565b60405161048991906124e6565b60405180910390f35b34801561049e57600080fd5b506104a7610d91565b6040516104b491906124e6565b60405180910390f35b3480156104c957600080fd5b506104d2610d97565b6040516104df91906125c7565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061258b565b610dc0565b005b34801561051d57600080fd5b50610526610e99565b60405161053391906124e6565b60405180910390f35b34801561054857600080fd5b50610551610e9f565b60405161055e919061232c565b60405180910390f35b34801561057357600080fd5b5061058e600480360381019061058991906123e7565b610f31565b60405161059b9190612442565b60405180910390f35b3480156105b057600080fd5b506105b9610ffe565b6040516105c69190612603565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906123e7565b611024565b6040516106039190612442565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e919061261e565b611042565b005b34801561064157600080fd5b5061065c60048036038101906106579190612677565b6110e1565b005b34801561066a57600080fd5b506106736111ca565b60405161068091906124e6565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906126a4565b6111d0565b6040516106bd91906124e6565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e8919061258b565b611257565b005b3480156106fb57600080fd5b50610716600480360381019061071191906126e4565b611347565b005b34801561072457600080fd5b5061073f600480360381019061073a919061258b565b6113ee565b005b60606007805461075090612753565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90612753565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107e76107e061160d565b8484611615565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600654905090565b600061082c8484846117de565b6108ed8461083861160d565b6108e88560405180606001604052806028815260200161308f60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061089e61160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b611615565b600190509392505050565b6000600960009054906101000a900460ff16905090565b60006109b861091c61160d565b846109b3856003600061092d61160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115af90919063ffffffff16565b611615565b6001905092915050565b6109ca61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e906127d0565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160159054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9261160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906127d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ce561160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906127d0565b60405180910390fd5b6000610d7d30610b41565b9050610d8881611bbf565b50565b600c5481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dc861160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906127d0565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b606060088054610eae90612753565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90612753565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b5050505050905090565b6000610ff4610f3e61160d565b84610fef856040518060600160405280602581526020016130b76025913960036000610f6861160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b611615565b6001905092915050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061103861103161160d565b84846117de565b6001905092915050565b61104a61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906127d0565b60405180910390fd5b80600e8190555050565b6110e961160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906127d0565b60405180910390fd5b80600160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516111bf9190612442565b60405180910390a150565b600e5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61125f61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906127d0565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61134f61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906127d0565b60405180910390fd5b80600c8190555081600b819055505050565b6113f661160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a906127d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990612862565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846115be91906128b1565b905083811015611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90612931565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906129c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612a55565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117d191906124e6565b60405180910390a3505050565b6117e6610d97565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118545750611824610d97565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561189f57600d5481111561189e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189590612ac1565b60405180910390fd5b5b60006118aa30610b41565b90506000600e548210159050600160149054906101000a900460ff161580156118df5750600160159054906101000a900460ff165b80156119395750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119785750611948610d97565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119ae575060006119ac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b41565b115b156119c95780156119c857600e5491506119c782611bbf565b5b5b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a6d5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b4f576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611af857611af1600b54611ae3606487611c6f90919063ffffffff16565b611cc790919063ffffffff16565b9050611b23565b611b20600c54611b12606487611c6f90919063ffffffff16565b611cc790919063ffffffff16565b90505b6000811115611b4d57611b37863083611d41565b611b4a8185611fcd90919063ffffffff16565b93505b505b611b5a858585611d41565b5050505050565b6000838311158290611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba0919061232c565b60405180910390fd5b508284611bb69190612ae1565b90509392505050565b60018060146101000a81548160ff021916908315150217905550611be281612026565b6000479050600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c4f573d6000803e3d6000fd5b50506000600160146101000a81548160ff02191690831515021790555050565b6000808211611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90612b61565b60405180910390fd5b8183611cbf9190612bb0565b905092915050565b6000808303611cd95760009050611d3b565b60008284611ce79190612be1565b9050828482611cf69190612bb0565b14611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90612c95565b60405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790612d27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690612db9565b60405180910390fd5b611e8b8160405180606001604052806026815260200161306960269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f2081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115af90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fc091906124e6565b60405180910390a3505050565b600082821115612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990612e25565b60405180910390fd5b818361201e9190612ae1565b905092915050565b6000600267ffffffffffffffff81111561204357612042612e45565b5b6040519080825280602002602001820160405280156120715781602001602082028036833780820191505090505b509050308160008151811061208957612088612e74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190612eb8565b8160018151811061216657612165612e74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121cb307f000000000000000000000000000000000000000000000000000000000000000084611615565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161222d959493929190612fde565b600060405180830381600087803b15801561224757600080fd5b505af115801561225b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612290929190613038565b60405180910390a15050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122d65780820151818401526020810190506122bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006122fe8261229c565b61230881856122a7565b93506123188185602086016122b8565b612321816122e2565b840191505092915050565b6000602082019050818103600083015261234681846122f3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061237e82612353565b9050919050565b61238e81612373565b811461239957600080fd5b50565b6000813590506123ab81612385565b92915050565b6000819050919050565b6123c4816123b1565b81146123cf57600080fd5b50565b6000813590506123e1816123bb565b92915050565b600080604083850312156123fe576123fd61234e565b5b600061240c8582860161239c565b925050602061241d858286016123d2565b9150509250929050565b60008115159050919050565b61243c81612427565b82525050565b60006020820190506124576000830184612433565b92915050565b6000819050919050565b600061248261247d61247884612353565b61245d565b612353565b9050919050565b600061249482612467565b9050919050565b60006124a682612489565b9050919050565b6124b68161249b565b82525050565b60006020820190506124d160008301846124ad565b92915050565b6124e0816123b1565b82525050565b60006020820190506124fb60008301846124d7565b92915050565b60008060006060848603121561251a5761251961234e565b5b60006125288682870161239c565b93505060206125398682870161239c565b925050604061254a868287016123d2565b9150509250925092565b600060ff82169050919050565b61256a81612554565b82525050565b60006020820190506125856000830184612561565b92915050565b6000602082840312156125a1576125a061234e565b5b60006125af8482850161239c565b91505092915050565b6125c181612373565b82525050565b60006020820190506125dc60008301846125b8565b92915050565b60006125ed82612353565b9050919050565b6125fd816125e2565b82525050565b600060208201905061261860008301846125f4565b92915050565b6000602082840312156126345761263361234e565b5b6000612642848285016123d2565b91505092915050565b61265481612427565b811461265f57600080fd5b50565b6000813590506126718161264b565b92915050565b60006020828403121561268d5761268c61234e565b5b600061269b84828501612662565b91505092915050565b600080604083850312156126bb576126ba61234e565b5b60006126c98582860161239c565b92505060206126da8582860161239c565b9150509250929050565b600080604083850312156126fb576126fa61234e565b5b6000612709858286016123d2565b925050602061271a858286016123d2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061276b57607f821691505b60208210810361277e5761277d612724565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127ba6020836122a7565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061284c6026836122a7565b9150612857826127f0565b604082019050919050565b6000602082019050818103600083015261287b8161283f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128bc826123b1565b91506128c7836123b1565b92508282019050808211156128df576128de612882565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061291b601b836122a7565b9150612926826128e5565b602082019050919050565b6000602082019050818103600083015261294a8161290e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129ad6024836122a7565b91506129b882612951565b604082019050919050565b600060208201905081810360008301526129dc816129a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a3f6022836122a7565b9150612a4a826129e3565b604082019050919050565b60006020820190508181036000830152612a6e81612a32565b9050919050565b7f45786365656473204d617820547820416d6f756e740000000000000000000000600082015250565b6000612aab6015836122a7565b9150612ab682612a75565b602082019050919050565b60006020820190508181036000830152612ada81612a9e565b9050919050565b6000612aec826123b1565b9150612af7836123b1565b9250828203905081811115612b0f57612b0e612882565b5b92915050565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b6000612b4b601a836122a7565b9150612b5682612b15565b602082019050919050565b60006020820190508181036000830152612b7a81612b3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bbb826123b1565b9150612bc6836123b1565b925082612bd657612bd5612b81565b5b828204905092915050565b6000612bec826123b1565b9150612bf7836123b1565b9250828202612c05816123b1565b91508282048414831517612c1c57612c1b612882565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7f6021836122a7565b9150612c8a82612c23565b604082019050919050565b60006020820190508181036000830152612cae81612c72565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d116025836122a7565b9150612d1c82612cb5565b604082019050919050565b60006020820190508181036000830152612d4081612d04565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612da36023836122a7565b9150612dae82612d47565b604082019050919050565b60006020820190508181036000830152612dd281612d96565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000612e0f601e836122a7565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612eb281612385565b92915050565b600060208284031215612ece57612ecd61234e565b5b6000612edc84828501612ea3565b91505092915050565b6000819050919050565b6000612f0a612f05612f0084612ee5565b61245d565b6123b1565b9050919050565b612f1a81612eef565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f5581612373565b82525050565b6000612f678383612f4c565b60208301905092915050565b6000602082019050919050565b6000612f8b82612f20565b612f958185612f2b565b9350612fa083612f3c565b8060005b83811015612fd1578151612fb88882612f5b565b9750612fc383612f73565b925050600181019050612fa4565b5085935050505092915050565b600060a082019050612ff360008301886124d7565b6130006020830187612f11565b81810360408301526130128186612f80565b905061302160608301856125b8565b61302e60808301846124d7565b9695505050505050565b600060408201905061304d60008301856124d7565b818103602083015261305f8184612f80565b9050939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc4faa8f8c46ea11d90fb71ed7cd0f04d9c71c4d54582b6812ed3cd09164354f64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e14610689578063ea2f0b37146106c6578063f2d2a751146106ef578063f2fde38b14610718576101d8565b8063a9059cbb146105cf578063aee50b1e1461060c578063c49b9a8014610635578063d2d7ad831461065e576101d8565b806392136913116100d1578063921369131461051157806395d89b411461053c578063a457c2d714610567578063a5ece941146105a4576101d8565b80637d1db4a5146104925780638da5cb5b146104bd578063906e9dd0146104e8576101d8565b8063437823ec1161016f57806370a082311161013e57806370a08231146103fc578063715018a61461043957806377e3e3fb146104505780637bce5a0414610467576101d8565b8063437823ec1461034057806349bd5a5e146103695780634a74bb02146103945780635342acb4146103bf576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610741565b6040516101ff919061232c565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a91906123e7565b6107d3565b60405161023c9190612442565b60405180910390f35b34801561025157600080fd5b5061025a6107f1565b60405161026791906124bc565b60405180910390f35b34801561027c57600080fd5b50610285610815565b60405161029291906124e6565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612501565b61081f565b6040516102cf9190612442565b60405180910390f35b3480156102e457600080fd5b506102ed6108f8565b6040516102fa9190612570565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906123e7565b61090f565b6040516103379190612442565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061258b565b6109c2565b005b34801561037557600080fd5b5061037e610ab2565b60405161038b91906125c7565b60405180910390f35b3480156103a057600080fd5b506103a9610ad8565b6040516103b69190612442565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e1919061258b565b610aeb565b6040516103f39190612442565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061258b565b610b41565b60405161043091906124e6565b60405180910390f35b34801561044557600080fd5b5061044e610b8a565b005b34801561045c57600080fd5b50610465610cdd565b005b34801561047357600080fd5b5061047c610d8b565b60405161048991906124e6565b60405180910390f35b34801561049e57600080fd5b506104a7610d91565b6040516104b491906124e6565b60405180910390f35b3480156104c957600080fd5b506104d2610d97565b6040516104df91906125c7565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061258b565b610dc0565b005b34801561051d57600080fd5b50610526610e99565b60405161053391906124e6565b60405180910390f35b34801561054857600080fd5b50610551610e9f565b60405161055e919061232c565b60405180910390f35b34801561057357600080fd5b5061058e600480360381019061058991906123e7565b610f31565b60405161059b9190612442565b60405180910390f35b3480156105b057600080fd5b506105b9610ffe565b6040516105c69190612603565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906123e7565b611024565b6040516106039190612442565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e919061261e565b611042565b005b34801561064157600080fd5b5061065c60048036038101906106579190612677565b6110e1565b005b34801561066a57600080fd5b506106736111ca565b60405161068091906124e6565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906126a4565b6111d0565b6040516106bd91906124e6565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e8919061258b565b611257565b005b3480156106fb57600080fd5b50610716600480360381019061071191906126e4565b611347565b005b34801561072457600080fd5b5061073f600480360381019061073a919061258b565b6113ee565b005b60606007805461075090612753565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90612753565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107e76107e061160d565b8484611615565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600654905090565b600061082c8484846117de565b6108ed8461083861160d565b6108e88560405180606001604052806028815260200161308f60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061089e61160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b611615565b600190509392505050565b6000600960009054906101000a900460ff16905090565b60006109b861091c61160d565b846109b3856003600061092d61160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115af90919063ffffffff16565b611615565b6001905092915050565b6109ca61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e906127d0565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160159054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b9261160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906127d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ce561160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906127d0565b60405180910390fd5b6000610d7d30610b41565b9050610d8881611bbf565b50565b600c5481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dc861160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906127d0565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b606060088054610eae90612753565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90612753565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b5050505050905090565b6000610ff4610f3e61160d565b84610fef856040518060600160405280602581526020016130b76025913960036000610f6861160d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b611615565b6001905092915050565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061103861103161160d565b84846117de565b6001905092915050565b61104a61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906127d0565b60405180910390fd5b80600e8190555050565b6110e961160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906127d0565b60405180910390fd5b80600160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516111bf9190612442565b60405180910390a150565b600e5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61125f61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906127d0565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61134f61160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906127d0565b60405180910390fd5b80600c8190555081600b819055505050565b6113f661160d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a906127d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990612862565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846115be91906128b1565b905083811015611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90612931565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906129c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90612a55565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117d191906124e6565b60405180910390a3505050565b6117e6610d97565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118545750611824610d97565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561189f57600d5481111561189e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189590612ac1565b60405180910390fd5b5b60006118aa30610b41565b90506000600e548210159050600160149054906101000a900460ff161580156118df5750600160159054906101000a900460ff165b80156119395750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119785750611948610d97565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156119ae575060006119ac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b41565b115b156119c95780156119c857600e5491506119c782611bbf565b5b5b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a6d5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b4f576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611af857611af1600b54611ae3606487611c6f90919063ffffffff16565b611cc790919063ffffffff16565b9050611b23565b611b20600c54611b12606487611c6f90919063ffffffff16565b611cc790919063ffffffff16565b90505b6000811115611b4d57611b37863083611d41565b611b4a8185611fcd90919063ffffffff16565b93505b505b611b5a858585611d41565b5050505050565b6000838311158290611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba0919061232c565b60405180910390fd5b508284611bb69190612ae1565b90509392505050565b60018060146101000a81548160ff021916908315150217905550611be281612026565b6000479050600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c4f573d6000803e3d6000fd5b50506000600160146101000a81548160ff02191690831515021790555050565b6000808211611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90612b61565b60405180910390fd5b8183611cbf9190612bb0565b905092915050565b6000808303611cd95760009050611d3b565b60008284611ce79190612be1565b9050828482611cf69190612bb0565b14611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90612c95565b60405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790612d27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690612db9565b60405180910390fd5b611e8b8160405180606001604052806026815260200161306960269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b619092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f2081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115af90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fc091906124e6565b60405180910390a3505050565b600082821115612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990612e25565b60405180910390fd5b818361201e9190612ae1565b905092915050565b6000600267ffffffffffffffff81111561204357612042612e45565b5b6040519080825280602002602001820160405280156120715781602001602082028036833780820191505090505b509050308160008151811061208957612088612e74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190612eb8565b8160018151811061216657612165612e74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121cb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611615565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161222d959493929190612fde565b600060405180830381600087803b15801561224757600080fd5b505af115801561225b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612290929190613038565b60405180910390a15050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122d65780820151818401526020810190506122bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006122fe8261229c565b61230881856122a7565b93506123188185602086016122b8565b612321816122e2565b840191505092915050565b6000602082019050818103600083015261234681846122f3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061237e82612353565b9050919050565b61238e81612373565b811461239957600080fd5b50565b6000813590506123ab81612385565b92915050565b6000819050919050565b6123c4816123b1565b81146123cf57600080fd5b50565b6000813590506123e1816123bb565b92915050565b600080604083850312156123fe576123fd61234e565b5b600061240c8582860161239c565b925050602061241d858286016123d2565b9150509250929050565b60008115159050919050565b61243c81612427565b82525050565b60006020820190506124576000830184612433565b92915050565b6000819050919050565b600061248261247d61247884612353565b61245d565b612353565b9050919050565b600061249482612467565b9050919050565b60006124a682612489565b9050919050565b6124b68161249b565b82525050565b60006020820190506124d160008301846124ad565b92915050565b6124e0816123b1565b82525050565b60006020820190506124fb60008301846124d7565b92915050565b60008060006060848603121561251a5761251961234e565b5b60006125288682870161239c565b93505060206125398682870161239c565b925050604061254a868287016123d2565b9150509250925092565b600060ff82169050919050565b61256a81612554565b82525050565b60006020820190506125856000830184612561565b92915050565b6000602082840312156125a1576125a061234e565b5b60006125af8482850161239c565b91505092915050565b6125c181612373565b82525050565b60006020820190506125dc60008301846125b8565b92915050565b60006125ed82612353565b9050919050565b6125fd816125e2565b82525050565b600060208201905061261860008301846125f4565b92915050565b6000602082840312156126345761263361234e565b5b6000612642848285016123d2565b91505092915050565b61265481612427565b811461265f57600080fd5b50565b6000813590506126718161264b565b92915050565b60006020828403121561268d5761268c61234e565b5b600061269b84828501612662565b91505092915050565b600080604083850312156126bb576126ba61234e565b5b60006126c98582860161239c565b92505060206126da8582860161239c565b9150509250929050565b600080604083850312156126fb576126fa61234e565b5b6000612709858286016123d2565b925050602061271a858286016123d2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061276b57607f821691505b60208210810361277e5761277d612724565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127ba6020836122a7565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061284c6026836122a7565b9150612857826127f0565b604082019050919050565b6000602082019050818103600083015261287b8161283f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128bc826123b1565b91506128c7836123b1565b92508282019050808211156128df576128de612882565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061291b601b836122a7565b9150612926826128e5565b602082019050919050565b6000602082019050818103600083015261294a8161290e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129ad6024836122a7565b91506129b882612951565b604082019050919050565b600060208201905081810360008301526129dc816129a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a3f6022836122a7565b9150612a4a826129e3565b604082019050919050565b60006020820190508181036000830152612a6e81612a32565b9050919050565b7f45786365656473204d617820547820416d6f756e740000000000000000000000600082015250565b6000612aab6015836122a7565b9150612ab682612a75565b602082019050919050565b60006020820190508181036000830152612ada81612a9e565b9050919050565b6000612aec826123b1565b9150612af7836123b1565b9250828203905081811115612b0f57612b0e612882565b5b92915050565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b6000612b4b601a836122a7565b9150612b5682612b15565b602082019050919050565b60006020820190508181036000830152612b7a81612b3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bbb826123b1565b9150612bc6836123b1565b925082612bd657612bd5612b81565b5b828204905092915050565b6000612bec826123b1565b9150612bf7836123b1565b9250828202612c05816123b1565b91508282048414831517612c1c57612c1b612882565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7f6021836122a7565b9150612c8a82612c23565b604082019050919050565b60006020820190508181036000830152612cae81612c72565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d116025836122a7565b9150612d1c82612cb5565b604082019050919050565b60006020820190508181036000830152612d4081612d04565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612da36023836122a7565b9150612dae82612d47565b604082019050919050565b60006020820190508181036000830152612dd281612d96565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000612e0f601e836122a7565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612eb281612385565b92915050565b600060208284031215612ece57612ecd61234e565b5b6000612edc84828501612ea3565b91505092915050565b6000819050919050565b6000612f0a612f05612f0084612ee5565b61245d565b6123b1565b9050919050565b612f1a81612eef565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f5581612373565b82525050565b6000612f678383612f4c565b60208301905092915050565b6000602082019050919050565b6000612f8b82612f20565b612f958185612f2b565b9350612fa083612f3c565b8060005b83811015612fd1578151612fb88882612f5b565b9750612fc383612f73565b925050600181019050612fa4565b5085935050505092915050565b600060a082019050612ff360008301886124d7565b6130006020830187612f11565b81810360408301526130128186612f80565b905061302160608301856125b8565b61302e60808301846124d7565b9695505050505050565b600060408201905061304d60008301856124d7565b818103602083015261305f8184612f80565b9050939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc4faa8f8c46ea11d90fb71ed7cd0f04d9c71c4d54582b6812ed3cd09164354f64736f6c63430008120033

Deployed Bytecode Sourcemap

13732:14278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16082:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18234:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14593:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17181:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18885:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17025:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19621:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15775:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14653:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13977:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17352:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1111:148;;;;;;;;;;;;;:::i;:::-;;21303:171;;;;;;;;;;;;;:::i;:::-;;14730:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14769:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;886:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27822:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14690:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16292:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20342:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14544:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17692:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27457:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27633:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14805:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17936:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15900:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21102:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1267:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16082:91;16127:13;16160:5;16153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16082:91;:::o;18234:169::-;18317:4;18334:39;18343:12;:10;:12::i;:::-;18357:7;18366:6;18334:8;:39::i;:::-;18391:4;18384:11;;18234:169;;;;:::o;14593:51::-;;;:::o;17181:108::-;17242:7;17269:12;;17262:19;;17181:108;:::o;18885:327::-;18991:4;19008:42;19024:6;19032:9;19043:6;19008:15;:42::i;:::-;19061:121;19070:6;19078:12;:10;:12::i;:::-;19092:89;19130:6;19092:89;;;;;;;;;;;;;;;;;:11;:19;19104:6;19092:19;;;;;;;;;;;;;;;:33;19112:12;:10;:12::i;:::-;19092:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19061:8;:121::i;:::-;19200:4;19193:11;;18885:327;;;;;:::o;17025:91::-;17074:5;17099:9;;;;;;;;;;;17092:16;;17025:91;:::o;19621:218::-;19709:4;19726:83;19735:12;:10;:12::i;:::-;19749:7;19758:50;19797:10;19758:11;:25;19770:12;:10;:12::i;:::-;19758:25;;;;;;;;;;;;;;;:34;19784:7;19758:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19726:8;:83::i;:::-;19827:4;19820:11;;19621:218;;;;:::o;15775:113::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15876:4:::1;15846:18;:27;15865:7;15846:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;15775:113:::0;:::o;14653:28::-;;;;;;;;;;;;;:::o;13977:40::-;;;;;;;;;;;;;:::o;15638:125::-;15704:4;15728:18;:27;15747:7;15728:27;;;;;;;;;;;;;;;;;;;;;;;;;15721:34;;15638:125;;;:::o;17352:127::-;17426:7;17453:9;:18;17463:7;17453:18;;;;;;;;;;;;;;;;17446:25;;17352:127;;;:::o;1111:148::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1218:1:::1;1181:40;;1202:6;::::0;::::1;;;;;;;;1181:40;;;;;;;;;;;;1249:1;1232:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1111:148::o:0;21303:171::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21359:28:::1;21390:24;21408:4;21390:9;:24::i;:::-;21359:55;;21425:41;21445:20;21425:19;:41::i;:::-;21348:126;21303:171::o:0;14730:30::-;;;;:::o;14769:27::-;;;;:::o;886:79::-;924:7;951:6;;;;;;;;;;;944:13;;886:79;:::o;27822:147::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27943:17:::1;27916:16;;:45;;;;;;;;;;;;;;;;;;27822:147:::0;:::o;14690:31::-;;;;:::o;16292:95::-;16339:13;16372:7;16365:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16292:95;:::o;20342:269::-;20435:4;20452:129;20461:12;:10;:12::i;:::-;20475:7;20484:96;20523:15;20484:96;;;;;;;;;;;;;;;;;:11;:25;20496:12;:10;:12::i;:::-;20484:25;;;;;;;;;;;;;;;:34;20510:7;20484:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20452:8;:129::i;:::-;20599:4;20592:11;;20342:269;;;;:::o;14544:39::-;;;;;;;;;;;;;:::o;17692:181::-;17778:4;17795:48;17811:12;:10;:12::i;:::-;17825:9;17836:6;17795:15;:48::i;:::-;17861:4;17854:11;;17692:181;;;;:::o;27457:166::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27591:24:::1;27565:23;:50;;;;27457:166:::0;:::o;27633:177::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27740:8:::1;27716:21;;:32;;;;;;;;;;;;;;;;;;27764:38;27793:8;27764:38;;;;;;:::i;:::-;;;;;;;;27633:177:::0;:::o;14805:38::-;;;;:::o;17936:151::-;18025:7;18052:11;:18;18064:5;18052:18;;;;;;;;;;;;;;;:27;18071:7;18052:27;;;;;;;;;;;;;;;;18045:34;;17936:151;;;;:::o;15900:112::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15999:5:::1;15969:18;:27;15988:7;15969:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;15900:112:::0;:::o;21102:191::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21225:16:::1;21207:15;:34;;;;21269:17;21250:16;:36;;;;21102:191:::0;;:::o;1267:244::-;1030:12;:10;:12::i;:::-;1020:22;;:6;;;;;;;;;;:22;;;1012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1376:1:::1;1356:22;;:8;:22;;::::0;1348:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1466:8;1437:38;;1458:6;::::0;::::1;;;;;;;;1437:38;;;;;;;;;;;;1495:8;1486:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1267:244:::0;:::o;6867:179::-;6925:7;6945:9;6961:1;6957;:5;;;;:::i;:::-;6945:17;;6986:1;6981;:6;;6973:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7037:1;7030:8;;;6867:179;;;;:::o;166:115::-;219:15;262:10;247:26;;166:115;:::o;26074:344::-;26193:1;26176:19;;:5;:19;;;26168:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26274:1;26255:21;;:7;:21;;;26247:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26356:6;26326:11;:18;26338:5;26326:18;;;;;;;;;;;;;;;:27;26345:7;26326:27;;;;;;;;;;;;;;;:36;;;;26394:7;26378:32;;26387:5;26378:32;;;26403:6;26378:32;;;;;;:::i;:::-;;;;;;;;26074:344;;;:::o;22420:1434::-;22535:7;:5;:7::i;:::-;22527:15;;:4;:15;;;;:32;;;;;22552:7;:5;:7::i;:::-;22546:13;;:2;:13;;;;22527:32;22524:132;;;22605:12;;22595:6;:22;;22587:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22524:132;22668:28;22699:24;22717:4;22699:9;:24::i;:::-;22668:55;;22734:28;22789:23;;22765:20;:47;;22734:78;;22838:16;;;;;;;;;;;22837:17;:56;;;;;22872:21;;;;;;;;;;;22837:56;:95;;;;;22919:13;;;;;;;;;;;22911:21;;:4;:21;;;;22837:95;:128;;;;;22958:7;:5;:7::i;:::-;22950:15;;:4;:15;;;;22837:128;:172;;;;;23008:1;22983:24;22993:13;;;;;;;;;;;22983:9;:24::i;:::-;:26;22837:172;22833:398;;;23040:23;23036:184;;;23121:23;;23098:46;;23163:41;23183:20;23163:19;:41::i;:::-;23036:184;22833:398;23250:18;:24;23269:4;23250:24;;;;;;;;;;;;;;;;;;;;;;;;;23249:25;:52;;;;;23279:18;:22;23298:2;23279:22;;;;;;;;;;;;;;;;;;;;;;;;;23278:23;23249:52;23246:551;;;23329:18;23374:13;;;;;;;;;;;23370:17;;:2;:17;;;23367:245;;23436:37;23456:16;;23436:15;23447:3;23436:6;:10;;:15;;;;:::i;:::-;:19;;:37;;;;:::i;:::-;23423:50;;23367:245;;;23559:36;23579:15;;23559;23570:3;23559:6;:10;;:15;;;;:::i;:::-;:19;;:36;;;;:::i;:::-;23546:49;;23367:245;23642:1;23631:10;:12;23628:157;;;23677:42;23687:4;23701;23708:10;23677:9;:42::i;:::-;23747:22;23758:10;23747:6;:10;;:22;;;;:::i;:::-;23738:31;;23628:157;23313:484;23246:551;23819:27;23829:4;23835:2;23839:6;23819:9;:27::i;:::-;22510:1344;;22420:1434;;;:::o;9694:166::-;9780:7;9813:1;9808;:6;;9816:12;9800:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9851:1;9847;:5;;;;:::i;:::-;9840:12;;9694:166;;;;;:::o;21484:244::-;14083:4;14064:16;;:23;;;;;;;;;;;;;;;;;;21580:38:::1;21597:20;21580:16;:38::i;:::-;21630:18;21651:21;21630:42;;21683:16;;;;;;;;;;;:25;;:37;21709:10;21683:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21569:159;14131:5:::0;14112:16;;:24;;;;;;;;;;;;;;;;;;21484:244;:::o;8444:153::-;8502:7;8534:1;8530;:5;8522:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;8588:1;8584;:5;;;;:::i;:::-;8577:12;;8444:153;;;;:::o;7746:220::-;7804:7;7833:1;7828;:6;7824:20;;7843:1;7836:8;;;;7824:20;7855:9;7871:1;7867;:5;;;;:::i;:::-;7855:17;;7900:1;7895;7891;:5;;;;:::i;:::-;:10;7883:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7957:1;7950:8;;;7746:220;;;;;:::o;23866:485::-;23996:1;23978:20;;:6;:20;;;23970:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24080:1;24059:23;;:9;:23;;;24051:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24153;24175:6;24153:71;;;;;;;;;;;;;;;;;:9;:17;24163:6;24153:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;24133:9;:17;24143:6;24133:17;;;;;;;;;;;;;;;:91;;;;24258:32;24283:6;24258:9;:20;24268:9;24258:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24235:9;:20;24245:9;24235:20;;;;;;;;;;;;;;;:55;;;;24323:9;24306:35;;24315:6;24306:35;;;24334:6;24306:35;;;;;;:::i;:::-;;;;;;;;23866:485;;;:::o;7329:158::-;7387:7;7420:1;7415;:6;;7407:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;7478:1;7474;:5;;;;:::i;:::-;7467:12;;7329:158;;;;:::o;21738:666::-;21864:21;21902:1;21888:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21864:40;;21933:4;21915;21920:1;21915:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21959:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21949:4;21954:1;21949:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21994:62;22011:4;22026:15;22044:11;21994:8;:62::i;:::-;22095:15;:66;;;22176:11;22202:1;22246:4;22273;22309:15;22095:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22361:35;22378:11;22391:4;22361:35;;;;;;;:::i;:::-;;;;;;;;21793:611;21738:666;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:329::-;5885:6;5934:2;5922:9;5913:7;5909:23;5905:32;5902:119;;;5940:79;;:::i;:::-;5902:119;6060:1;6085:53;6130:7;6121:6;6110:9;6106:22;6085:53;:::i;:::-;6075:63;;6031:117;5826:329;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:104::-;6558:7;6587:24;6605:5;6587:24;:::i;:::-;6576:35;;6513:104;;;:::o;6623:142::-;6726:32;6752:5;6726:32;:::i;:::-;6721:3;6714:45;6623:142;;:::o;6771:254::-;6880:4;6918:2;6907:9;6903:18;6895:26;;6931:87;7015:1;7004:9;7000:17;6991:6;6931:87;:::i;:::-;6771:254;;;;:::o;7031:329::-;7090:6;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7031:329;;;;:::o;7366:116::-;7436:21;7451:5;7436:21;:::i;:::-;7429:5;7426:32;7416:60;;7472:1;7469;7462:12;7416:60;7366:116;:::o;7488:133::-;7531:5;7569:6;7556:20;7547:29;;7585:30;7609:5;7585:30;:::i;:::-;7488:133;;;;:::o;7627:323::-;7683:6;7732:2;7720:9;7711:7;7707:23;7703:32;7700:119;;;7738:79;;:::i;:::-;7700:119;7858:1;7883:50;7925:7;7916:6;7905:9;7901:22;7883:50;:::i;:::-;7873:60;;7829:114;7627:323;;;;:::o;7956:474::-;8024:6;8032;8081:2;8069:9;8060:7;8056:23;8052:32;8049:119;;;8087:79;;:::i;:::-;8049:119;8207:1;8232:53;8277:7;8268:6;8257:9;8253:22;8232:53;:::i;:::-;8222:63;;8178:117;8334:2;8360:53;8405:7;8396:6;8385:9;8381:22;8360:53;:::i;:::-;8350:63;;8305:118;7956:474;;;;;:::o;8436:::-;8504:6;8512;8561:2;8549:9;8540:7;8536:23;8532:32;8529:119;;;8567:79;;:::i;:::-;8529:119;8687:1;8712:53;8757:7;8748:6;8737:9;8733:22;8712:53;:::i;:::-;8702:63;;8658:117;8814:2;8840:53;8885:7;8876:6;8865:9;8861:22;8840:53;:::i;:::-;8830:63;;8785:118;8436:474;;;;;:::o;8916:180::-;8964:77;8961:1;8954:88;9061:4;9058:1;9051:15;9085:4;9082:1;9075:15;9102:320;9146:6;9183:1;9177:4;9173:12;9163:22;;9230:1;9224:4;9220:12;9251:18;9241:81;;9307:4;9299:6;9295:17;9285:27;;9241:81;9369:2;9361:6;9358:14;9338:18;9335:38;9332:84;;9388:18;;:::i;:::-;9332:84;9153:269;9102:320;;;:::o;9428:182::-;9568:34;9564:1;9556:6;9552:14;9545:58;9428:182;:::o;9616:366::-;9758:3;9779:67;9843:2;9838:3;9779:67;:::i;:::-;9772:74;;9855:93;9944:3;9855:93;:::i;:::-;9973:2;9968:3;9964:12;9957:19;;9616:366;;;:::o;9988:419::-;10154:4;10192:2;10181:9;10177:18;10169:26;;10241:9;10235:4;10231:20;10227:1;10216:9;10212:17;10205:47;10269:131;10395:4;10269:131;:::i;:::-;10261:139;;9988:419;;;:::o;10413:225::-;10553:34;10549:1;10541:6;10537:14;10530:58;10622:8;10617:2;10609:6;10605:15;10598:33;10413:225;:::o;10644:366::-;10786:3;10807:67;10871:2;10866:3;10807:67;:::i;:::-;10800:74;;10883:93;10972:3;10883:93;:::i;:::-;11001:2;10996:3;10992:12;10985:19;;10644:366;;;:::o;11016:419::-;11182:4;11220:2;11209:9;11205:18;11197:26;;11269:9;11263:4;11259:20;11255:1;11244:9;11240:17;11233:47;11297:131;11423:4;11297:131;:::i;:::-;11289:139;;11016:419;;;:::o;11441:180::-;11489:77;11486:1;11479:88;11586:4;11583:1;11576:15;11610:4;11607:1;11600:15;11627:191;11667:3;11686:20;11704:1;11686:20;:::i;:::-;11681:25;;11720:20;11738:1;11720:20;:::i;:::-;11715:25;;11763:1;11760;11756:9;11749:16;;11784:3;11781:1;11778:10;11775:36;;;11791:18;;:::i;:::-;11775:36;11627:191;;;;:::o;11824:177::-;11964:29;11960:1;11952:6;11948:14;11941:53;11824:177;:::o;12007:366::-;12149:3;12170:67;12234:2;12229:3;12170:67;:::i;:::-;12163:74;;12246:93;12335:3;12246:93;:::i;:::-;12364:2;12359:3;12355:12;12348:19;;12007:366;;;:::o;12379:419::-;12545:4;12583:2;12572:9;12568:18;12560:26;;12632:9;12626:4;12622:20;12618:1;12607:9;12603:17;12596:47;12660:131;12786:4;12660:131;:::i;:::-;12652:139;;12379:419;;;:::o;12804:223::-;12944:34;12940:1;12932:6;12928:14;12921:58;13013:6;13008:2;13000:6;12996:15;12989:31;12804:223;:::o;13033:366::-;13175:3;13196:67;13260:2;13255:3;13196:67;:::i;:::-;13189:74;;13272:93;13361:3;13272:93;:::i;:::-;13390:2;13385:3;13381:12;13374:19;;13033:366;;;:::o;13405:419::-;13571:4;13609:2;13598:9;13594:18;13586:26;;13658:9;13652:4;13648:20;13644:1;13633:9;13629:17;13622:47;13686:131;13812:4;13686:131;:::i;:::-;13678:139;;13405:419;;;:::o;13830:221::-;13970:34;13966:1;13958:6;13954:14;13947:58;14039:4;14034:2;14026:6;14022:15;14015:29;13830:221;:::o;14057:366::-;14199:3;14220:67;14284:2;14279:3;14220:67;:::i;:::-;14213:74;;14296:93;14385:3;14296:93;:::i;:::-;14414:2;14409:3;14405:12;14398:19;;14057:366;;;:::o;14429:419::-;14595:4;14633:2;14622:9;14618:18;14610:26;;14682:9;14676:4;14672:20;14668:1;14657:9;14653:17;14646:47;14710:131;14836:4;14710:131;:::i;:::-;14702:139;;14429:419;;;:::o;14854:171::-;14994:23;14990:1;14982:6;14978:14;14971:47;14854:171;:::o;15031:366::-;15173:3;15194:67;15258:2;15253:3;15194:67;:::i;:::-;15187:74;;15270:93;15359:3;15270:93;:::i;:::-;15388:2;15383:3;15379:12;15372:19;;15031:366;;;:::o;15403:419::-;15569:4;15607:2;15596:9;15592:18;15584:26;;15656:9;15650:4;15646:20;15642:1;15631:9;15627:17;15620:47;15684:131;15810:4;15684:131;:::i;:::-;15676:139;;15403:419;;;:::o;15828:194::-;15868:4;15888:20;15906:1;15888:20;:::i;:::-;15883:25;;15922:20;15940:1;15922:20;:::i;:::-;15917:25;;15966:1;15963;15959:9;15951:17;;15990:1;15984:4;15981:11;15978:37;;;15995:18;;:::i;:::-;15978:37;15828:194;;;;:::o;16028:176::-;16168:28;16164:1;16156:6;16152:14;16145:52;16028:176;:::o;16210:366::-;16352:3;16373:67;16437:2;16432:3;16373:67;:::i;:::-;16366:74;;16449:93;16538:3;16449:93;:::i;:::-;16567:2;16562:3;16558:12;16551:19;;16210:366;;;:::o;16582:419::-;16748:4;16786:2;16775:9;16771:18;16763:26;;16835:9;16829:4;16825:20;16821:1;16810:9;16806:17;16799:47;16863:131;16989:4;16863:131;:::i;:::-;16855:139;;16582:419;;;:::o;17007:180::-;17055:77;17052:1;17045:88;17152:4;17149:1;17142:15;17176:4;17173:1;17166:15;17193:185;17233:1;17250:20;17268:1;17250:20;:::i;:::-;17245:25;;17284:20;17302:1;17284:20;:::i;:::-;17279:25;;17323:1;17313:35;;17328:18;;:::i;:::-;17313:35;17370:1;17367;17363:9;17358:14;;17193:185;;;;:::o;17384:410::-;17424:7;17447:20;17465:1;17447:20;:::i;:::-;17442:25;;17481:20;17499:1;17481:20;:::i;:::-;17476:25;;17536:1;17533;17529:9;17558:30;17576:11;17558:30;:::i;:::-;17547:41;;17737:1;17728:7;17724:15;17721:1;17718:22;17698:1;17691:9;17671:83;17648:139;;17767:18;;:::i;:::-;17648:139;17432:362;17384:410;;;;:::o;17800:220::-;17940:34;17936:1;17928:6;17924:14;17917:58;18009:3;18004:2;17996:6;17992:15;17985:28;17800:220;:::o;18026:366::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:419::-;18564:4;18602:2;18591:9;18587:18;18579:26;;18651:9;18645:4;18641:20;18637:1;18626:9;18622:17;18615:47;18679:131;18805:4;18679:131;:::i;:::-;18671:139;;18398:419;;;:::o;18823:224::-;18963:34;18959:1;18951:6;18947:14;18940:58;19032:7;19027:2;19019:6;19015:15;19008:32;18823:224;:::o;19053:366::-;19195:3;19216:67;19280:2;19275:3;19216:67;:::i;:::-;19209:74;;19292:93;19381:3;19292:93;:::i;:::-;19410:2;19405:3;19401:12;19394:19;;19053:366;;;:::o;19425:419::-;19591:4;19629:2;19618:9;19614:18;19606:26;;19678:9;19672:4;19668:20;19664:1;19653:9;19649:17;19642:47;19706:131;19832:4;19706:131;:::i;:::-;19698:139;;19425:419;;;:::o;19850:222::-;19990:34;19986:1;19978:6;19974:14;19967:58;20059:5;20054:2;20046:6;20042:15;20035:30;19850:222;:::o;20078:366::-;20220:3;20241:67;20305:2;20300:3;20241:67;:::i;:::-;20234:74;;20317:93;20406:3;20317:93;:::i;:::-;20435:2;20430:3;20426:12;20419:19;;20078:366;;;:::o;20450:419::-;20616:4;20654:2;20643:9;20639:18;20631:26;;20703:9;20697:4;20693:20;20689:1;20678:9;20674:17;20667:47;20731:131;20857:4;20731:131;:::i;:::-;20723:139;;20450:419;;;:::o;20875:180::-;21015:32;21011:1;21003:6;20999:14;20992:56;20875:180;:::o;21061:366::-;21203:3;21224:67;21288:2;21283:3;21224:67;:::i;:::-;21217:74;;21300:93;21389:3;21300:93;:::i;:::-;21418:2;21413:3;21409:12;21402:19;;21061:366;;;:::o;21433:419::-;21599:4;21637:2;21626:9;21622:18;21614:26;;21686:9;21680:4;21676:20;21672:1;21661:9;21657:17;21650:47;21714:131;21840:4;21714:131;:::i;:::-;21706:139;;21433:419;;;:::o;21858:180::-;21906:77;21903:1;21896:88;22003:4;22000:1;21993:15;22027:4;22024:1;22017:15;22044:180;22092:77;22089:1;22082:88;22189:4;22186:1;22179:15;22213:4;22210:1;22203:15;22230:143;22287:5;22318:6;22312:13;22303:22;;22334:33;22361:5;22334:33;:::i;:::-;22230:143;;;;:::o;22379:351::-;22449:6;22498:2;22486:9;22477:7;22473:23;22469:32;22466:119;;;22504:79;;:::i;:::-;22466:119;22624:1;22649:64;22705:7;22696:6;22685:9;22681:22;22649:64;:::i;:::-;22639:74;;22595:128;22379:351;;;;:::o;22736:85::-;22781:7;22810:5;22799:16;;22736:85;;;:::o;22827:158::-;22885:9;22918:61;22936:42;22945:32;22971:5;22945:32;:::i;:::-;22936:42;:::i;:::-;22918:61;:::i;:::-;22905:74;;22827:158;;;:::o;22991:147::-;23086:45;23125:5;23086:45;:::i;:::-;23081:3;23074:58;22991:147;;:::o;23144:114::-;23211:6;23245:5;23239:12;23229:22;;23144:114;;;:::o;23264:184::-;23363:11;23397:6;23392:3;23385:19;23437:4;23432:3;23428:14;23413:29;;23264:184;;;;:::o;23454:132::-;23521:4;23544:3;23536:11;;23574:4;23569:3;23565:14;23557:22;;23454:132;;;:::o;23592:108::-;23669:24;23687:5;23669:24;:::i;:::-;23664:3;23657:37;23592:108;;:::o;23706:179::-;23775:10;23796:46;23838:3;23830:6;23796:46;:::i;:::-;23874:4;23869:3;23865:14;23851:28;;23706:179;;;;:::o;23891:113::-;23961:4;23993;23988:3;23984:14;23976:22;;23891:113;;;:::o;24040:732::-;24159:3;24188:54;24236:5;24188:54;:::i;:::-;24258:86;24337:6;24332:3;24258:86;:::i;:::-;24251:93;;24368:56;24418:5;24368:56;:::i;:::-;24447:7;24478:1;24463:284;24488:6;24485:1;24482:13;24463:284;;;24564:6;24558:13;24591:63;24650:3;24635:13;24591:63;:::i;:::-;24584:70;;24677:60;24730:6;24677:60;:::i;:::-;24667:70;;24523:224;24510:1;24507;24503:9;24498:14;;24463:284;;;24467:14;24763:3;24756:10;;24164:608;;;24040:732;;;;:::o;24778:831::-;25041:4;25079:3;25068:9;25064:19;25056:27;;25093:71;25161:1;25150:9;25146:17;25137:6;25093:71;:::i;:::-;25174:80;25250:2;25239:9;25235:18;25226:6;25174:80;:::i;:::-;25301:9;25295:4;25291:20;25286:2;25275:9;25271:18;25264:48;25329:108;25432:4;25423:6;25329:108;:::i;:::-;25321:116;;25447:72;25515:2;25504:9;25500:18;25491:6;25447:72;:::i;:::-;25529:73;25597:3;25586:9;25582:19;25573:6;25529:73;:::i;:::-;24778:831;;;;;;;;:::o;25615:483::-;25786:4;25824:2;25813:9;25809:18;25801:26;;25837:71;25905:1;25894:9;25890:17;25881:6;25837:71;:::i;:::-;25955:9;25949:4;25945:20;25940:2;25929:9;25925:18;25918:48;25983:108;26086:4;26077:6;25983:108;:::i;:::-;25975:116;;25615:483;;;;;:::o

Swarm Source

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