ETH Price: $3,352.09 (-0.35%)

Token

Paper Dragon (PAD)
 

Overview

Max Total Supply

1,000,000,000 PAD

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.389909114 PAD

Value
$0.00
0x4231b9cae923ea29fd04ce184040705a9f7a7d36
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:
PaperDragon

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-19
*/

// SPDX-License-Identifier: MIT

/**
                                                               __                                                  
                                                              /  |                                                 
  ______    ______    ______    ______    ______          ____$$ |  ______   ______    ______    ______   _______  
 /      \  /      \  /      \  /      \  /      \        /    $$ | /      \ /      \  /      \  /      \ /       \ 
/$$$$$$  | $$$$$$  |/$$$$$$  |/$$$$$$  |/$$$$$$  |      /$$$$$$$ |/$$$$$$  |$$$$$$  |/$$$$$$  |/$$$$$$  |$$$$$$$  |
$$ |  $$ | /    $$ |$$ |  $$ |$$    $$ |$$ |  $$/       $$ |  $$ |$$ |  $$/ /    $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |
$$ |__$$ |/$$$$$$$ |$$ |__$$ |$$$$$$$$/ $$ |            $$ \__$$ |$$ |     /$$$$$$$ |$$ \__$$ |$$ \__$$ |$$ |  $$ |
$$    $$/ $$    $$ |$$    $$/ $$       |$$ |            $$    $$ |$$ |     $$    $$ |$$    $$ |$$    $$/ $$ |  $$ |
$$$$$$$/   $$$$$$$/ $$$$$$$/   $$$$$$$/ $$/              $$$$$$$/ $$/       $$$$$$$/  $$$$$$$ | $$$$$$/  $$/   $$/ 
$$ |                $$ |                                                             /  \__$$ |                    
$$ |                $$ |                                                             $$    $$/                     
$$/                 $$/                                                               $$$$$$/                      
                                                               ....                         ..      
                                                             .:^.                       ...:.       
                                                           .:^:                      .::...         
                                                        .:^^:.                    ..:^:             
                                                     .::^^:                     ..:::.              
                                                  .^~~^^.                    ...:^^:                
                                              ..:^^^^^:.                 ..:::^^^:.   ..            
                                   :.     .:^^^~~~!J7:....           ..:^^^^^^::.....:.             
                                 .::..^~!7JY?77!?5J~.....         ..::^^~~^::::::::..               
                               ..:^^!?YY5GGY?7JP5~..:::.  ....::^~!7???7~~~~^^::..              .   
                              .::~!YYJ5GP?7!7Y?^.:^~^^~~~~!!7?JYYYYJ7!~~~~~^:.             ...::.   
                             .^!Y557!GGJ!!!~^::^!~~~77777?JJJJ??7!^::^:...              ....:.      
                           :^!YGBY~^J57!7!^^~!!!!7?YYJJ?7!~~^~~~^:.        .:~!7~   ........        
                         :~^!GG5?^^5P!!!~~~!!!?Y55Y?7!!!!!!!JP5^    ...:^7J5Y7^:...:::::.           
                       .~?~:5B?7^:~7~^~~~~~!7JJ?!~~~!!!~~7YPGY: ......!??7~^..:^^^^^:...            
                      :JY!^Y57~^:^^~!!!!~~~77!~!!~~^^^~!77!~^:::^~!???7!~~~~!!!~^^:.                
                    .~YP!~JG?^:^!7?J?7!~!777!!~~^^!JYYJ?7~~^^:^~!!7!~^^::^^^~^~!?Y555YJ?7~:         
                    .7G?!~7!^~?YYJ?7!!7???7!~^~!JPPYJ?!!!~~~~~~~~~~~!!!7??JYPB##BPY?!~^:::.         
                  .::!Y!!~~7Y55Y?7??????7!!!?Y55YJJJJJYY5555YYYYYJ??7?JP#&&&BY!:                    
                :J55^!J77YPGP55YYYJ??JJJYYPGGPP5YYJJJ??77!!~~~^~!JY555P5GBG!        ......          
               ~5??Y77?YPG5YPYPGPPPP555555555YYJ??777!!~~~~!77JYY55Y555PP55YJ~~7J5PGGGPPYJ7:        
              .?Y7YYJYY5JY5PGPGPPGPPP555YJ??77!!!!!!!!?JJY5PPPPP555Y5YY55PPGGG#@&GY!^:.             
           .:^7JJ55555PPGBB55JBBGGGPPP5YJ????????JYY5PPGGPPPGGPPPPPP55555PGGGGBBY                   
        .^~7??JYYYYYY5PBB#GP5PP5YYPPP5YJJJYYYYYYYPPPPPPPGGGGGG5PP5PPPP555PPPGBBGGJ.......           
     .^!7??JJYYYJJ???Y5PG5Y5YYYY55Y5YYYYJYYJYYJ??JY5PPPPPPPPPGGG5555PP555Y5PPGBBBBBBBGPP55YJ!.      
   .~7?JY5Y5GPYY?JYJY5YJJJYJJJJJ?JJYYYYYJJJY55YYPGGGGPPPPPPPPY5GGPPP55555Y555PGBBB#J^......::.      
   !??J55YPGPP55555P5JJ??7?JJJJ5PPYJJJJYY5555Y5PBGGGPPPPPPPPPGJYBGGGGGG555P55PGGBBG.                
  ~7?JYPBGPP5YYYYY55YJJJJJY55PPPYYYJ?JJJJ555J???J5GGPPPPPPPPPGGPGGGGGGBGGPPPPPPGGBBYJJJ?7~:.        
 ^??JY5PPPPPP5YYJYYYY555PPGP55YJJYYJJJJJJJYY5YJ???JY55PPPPP55PPPPPGGGGBBBGGGGGGGBBBB5J777?J7        
 7JJJYYYYYYYY5YJYJY5PPPPP5YJJJJYYYJJJJJJJ???5GGP5YJ?JJJJY55PPPPP5PPPPPGGBGGGGGGBBB#7                
 ^!~YYJJ5!7YYYY555YYYYYJ?JJJYJYY55555J?JY5Y?J5PGPP5YYYYY55YYYYYPPGP5PGGGGGGPPPGBBB#P. .:^~~:        
    ~JJ?J~5JPY5YYJJJYYYYYY5555PGGGBBBGYJG#BB5JJYPP5YYYYYY55PPP5YYYPP5PGGGGGGPPPGBBB#GB##57~:        
    7JJJ5Y5YYYYY555P55YYY5PGB######B##BYB#B##BG5J5GP55YYJJY5PPPPPPY5P5PPGGGGBGPPGBBB##&!            
    ^!!7?JJY55GGBBJ^:..  ..^~??5GBBBBBGPB#######BPYGPP5YYYJY555PPPPP5P55PGBGBBGGPPGBBBBPJ:          
      :~7?JJ55PY7^              ...^~~^~^^!JP5YY7?5YBPP5YYYYYYY5PPPPPP555GGGBBBGGGPGB#G!:.          
        ... .. .                            .     ?YBGP55YYJ??Y55PPPGPPPPPPGBBBBBGPPPG?             
                                               .~!?PBGGPP5J?!!JY5PPPPPPPPPPGGBBBBGGPY5^             
                                                 .^7JPGGPJ!!!7?Y5YJYPPPPPPPPGBBBBBGPP?              
                                                 .:~!7???!!7!7???7?5PPPPPPPPGBBBGBGG5.              
                                                  .^~!77!!77??7777?JPGPPP5PPGGBBGGGB?               
                                                   ^!!~!77?7!77?!775GGGPPPPPPPPGBBBP:               
                                                   :!77!!7!!77?7!7JP5YPPP55PPPPBBGJ.                
                                                 .^^~!77777?7?7!777??JPYJJ5PPPGGJ:                  
                                                  :^~!~!!77??7~!7?77?YJ?JYP55P5:                    
                                                   .^!!7!!!!77!77?J??JJJJYP55P~                     
                                                     :!!!777!7777??JJJJJJJ5PPJ.                     
                                                      .:~!7??777???JJJJJYJ?7~                       
                                                         .:~!!!!77!!~~~~~:             
                                                         

https://www.paperdragon.io/
                                                          
**/

pragma solidity ^0.8.4;

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

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

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

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


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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _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");

        _beforeTokenTransfer(account, address(0), amount);

        _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 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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract PaperDragon is IERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _balance;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    uint256 private _totalSupply = 1000000000 * (10**9);    
    string private _name = "Paper Dragon";
    string private _symbol = "PAD";
    uint8 private _decimals = 9;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping(address => bool) public isBlacklist;

    uint256 public burnFeeOnBuy = 0;
    uint256 public burnFeeOnSell = 1;
    uint256 public burnFeeOnTransfer = 2;

    // once set to true can never be set false again
    bool public tradingOpen = false;
    uint256 public launchTime; 

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() {    	

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;        

        // exclude from paying fees or having max transaction amount
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);        

        _balance[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {

  	}    

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }    

    function updateFees(uint256 _burnFeeOnBuy, uint256 _burnFeeOnSell, uint256 _burnFeeOnTransfer) public onlyOwner {
        burnFeeOnBuy = _burnFeeOnBuy;
        burnFeeOnSell = _burnFeeOnSell;
        burnFeeOnTransfer = _burnFeeOnTransfer;
    }

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

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

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {                         
            require(!isBlacklist[from], 'Bots not allowed here! Play fair.');//antibot                
        }

        if ((from == uniswapV2Pair ||
            to == uniswapV2Pair) &&
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(tradingOpen, "Trading not yet enabled.");

            //antibot: block zero bots will be added to bot blacklist
            if (block.timestamp == launchTime) {
                isBlacklist[to] = true;                
            }
        }

        if((!_isExcludedFromFees[from] && !_isExcludedFromFees[to])) {
            uint256 burnAmt = 0;
            if (from == uniswapV2Pair){
                burnAmt = amount.div(100).mul(burnFeeOnBuy);
            } else if (to == uniswapV2Pair){
                burnAmt = amount.div(100).mul(burnFeeOnSell);
            } else {
                burnAmt = amount.div(100).mul(burnFeeOnTransfer);
            }            
            amount = amount.sub(burnAmt);
            _basicTransfer(from, to, amount);
            _basicTransfer(from, deadAddress, burnAmt);           
        } else {
            _basicTransfer(from, to, amount);
        }                
    }    

    function _basicTransfer(address sender, address recipient, uint256 amount) internal {        
        _balance[sender] = _balance[sender].sub(amount);
        _balance[recipient] = _balance[recipient].add(amount);        
        emit Transfer(sender, recipient, amount);
    }    

    function openTrading() external onlyOwner {
        require(!tradingOpen, "Trading already Opened!");
        tradingOpen = true;
        launchTime = block.timestamp;
    }

    function isBot(address account) public view returns (bool) {
        return isBlacklist[account];
    }
    //manual antibot, play fair!
    function _blacklistBot(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We cannot blacklist Uniswap');
        require(!isBlacklist[account], "Account is already blacklisted");
        isBlacklist[account] = true;        
    }

    function _amnestyBot(address account) external onlyOwner() {
        require(isBlacklist[account], "Account is not blacklisted");
        isBlacklist[account] = false;        
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestyBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_blacklistBot","outputs":[],"stateMutability":"nonpayable","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":"burnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","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":"openTrading","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeOnTransfer","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052670de0b6b3a76400006003556040518060400160405280600c81526020017f506170657220447261676f6e00000000000000000000000000000000000000008152506004908162000056919062000953565b506040518060400160405280600381526020017f5041440000000000000000000000000000000000000000000000000000000000815250600590816200009d919062000953565b506009600660006101000a81548160ff021916908360ff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525060006009556001600a556002600b556000600c60006101000a81548160ff0219169083151502179055503480156200012657600080fd5b50600062000139620004c860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000264919062000aa4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000aa4565b6040518363ffffffff1660e01b81526004016200031192919062000ae7565b6020604051808303816000875af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000aa4565b905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ee306001620004d060201b60201c565b6200041062000402620006b060201b60201c565b6001620004d060201b60201c565b600354600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051620004b8919062000b25565b60405180910390a3505062000c97565b600033905090565b620004e0620004c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005679062000ba3565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000605576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005fc9062000c3b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006a4919062000c7a565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200075b57607f821691505b60208210810362000771576200077062000713565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200079c565b620007e786836200079c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008346200082e6200082884620007ff565b62000809565b620007ff565b9050919050565b6000819050919050565b620008508362000813565b620008686200085f826200083b565b848454620007a9565b825550505050565b600090565b6200087f62000870565b6200088c81848462000845565b505050565b5b81811015620008b457620008a860008262000875565b60018101905062000892565b5050565b601f8211156200090357620008cd8162000777565b620008d8846200078c565b81016020851015620008e8578190505b62000900620008f7856200078c565b83018262000891565b50505b505050565b600082821c905092915050565b6000620009286000198460080262000908565b1980831691505092915050565b600062000943838362000915565b9150826002028217905092915050565b6200095e82620006d9565b67ffffffffffffffff8111156200097a5762000979620006e4565b5b62000986825462000742565b62000993828285620008b8565b600060209050601f831160018114620009cb5760008415620009b6578287015190505b620009c2858262000935565b86555062000a32565b601f198416620009db8662000777565b60005b8281101562000a0557848901518255600182019150602085019450602081019050620009de565b8683101562000a25578489015162000a21601f89168262000915565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a6c8262000a3f565b9050919050565b62000a7e8162000a5f565b811462000a8a57600080fd5b50565b60008151905062000a9e8162000a73565b92915050565b60006020828403121562000abd5762000abc62000a3a565b5b600062000acd8482850162000a8d565b91505092915050565b62000ae18162000a5f565b82525050565b600060408201905062000afe600083018562000ad6565b62000b0d602083018462000ad6565b9392505050565b62000b1f81620007ff565b82525050565b600060208201905062000b3c600083018462000b14565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b8b60208362000b42565b915062000b988262000b53565b602082019050919050565b6000602082019050818103600083015262000bbe8162000b7c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000c23602a8362000b42565b915062000c308262000bc5565b604082019050919050565b6000602082019050818103600083015262000c568162000c14565b9050919050565b60008115159050919050565b62000c748162000c5d565b82525050565b600060208201905062000c91600083018462000c69565b92915050565b60805161326e62000cba600039600081816109d30152611ff4015261326e6000f3fe6080604052600436106101d15760003560e01c8063786c8d11116100f7578063a938d1c911610095578063dd62ed3e11610064578063dd62ed3e146106af578063f2fde38b146106ec578063f79d86ec14610715578063ffb54a991461073e576101d8565b8063a938d1c914610619578063c024666814610644578063c9567bf91461066d578063d05b396214610684576101d8565b806395d89b41116100d157806395d89b4114610549578063989a124f14610574578063a457c2d71461059f578063a9059cbb146105dc576101d8565b8063786c8d11146104ca578063790ca413146104f35780638da5cb5b1461051e576101d8565b8063313ce5671161016f57806349bd5a5e1161013e57806349bd5a5e1461040e5780634fbee1931461043957806370a0823114610476578063715018a6146104b3576101d8565b8063313ce5671461032c578063333e99db1461035757806339509351146103945780633bbac579146103d1576101d8565b806318160ddd116101ab57806318160ddd14610270578063224290851461029b57806323b872dd146102c457806327c8f83514610301576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190612487565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612542565b6107fb565b60405161023c919061259d565b60405180910390f35b34801561025157600080fd5b5061025a610819565b6040516102679190612617565b60405180910390f35b34801561027c57600080fd5b5061028561083f565b6040516102929190612641565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd919061265c565b610849565b005b3480156102d057600080fd5b506102eb60048036038101906102e691906126af565b6108f8565b6040516102f8919061259d565b60405180910390f35b34801561030d57600080fd5b506103166109d1565b6040516103239190612711565b60405180910390f35b34801561033857600080fd5b506103416109f5565b60405161034e9190612748565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612763565b610a0c565b60405161038b919061259d565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612542565b610a2c565b6040516103c8919061259d565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612763565b610adf565b604051610405919061259d565b60405180910390f35b34801561041a57600080fd5b50610423610b35565b6040516104309190612711565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190612763565b610b5b565b60405161046d919061259d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190612763565b610bb1565b6040516104aa9190612641565b60405180910390f35b3480156104bf57600080fd5b506104c8610bfa565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612763565b610d4d565b005b3480156104ff57600080fd5b50610508610f4c565b6040516105159190612641565b60405180910390f35b34801561052a57600080fd5b50610533610f52565b6040516105409190612711565b60405180910390f35b34801561055557600080fd5b5061055e610f7b565b60405161056b9190612487565b60405180910390f35b34801561058057600080fd5b5061058961100d565b6040516105969190612641565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612542565b611013565b6040516105d3919061259d565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190612542565b6110e0565b604051610610919061259d565b60405180910390f35b34801561062557600080fd5b5061062e6110fe565b60405161063b9190612641565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906127bc565b611104565b005b34801561067957600080fd5b506106826112d4565b005b34801561069057600080fd5b506106996113dd565b6040516106a69190612641565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906127fc565b6113e3565b6040516106e39190612641565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190612763565b61146a565b005b34801561072157600080fd5b5061073c60048036038101906107379190612763565b61162b565b005b34801561074a57600080fd5b506107536117a7565b604051610760919061259d565b60405180910390f35b6060600480546107789061286b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a49061286b565b80156107f15780601f106107c6576101008083540402835291602001916107f1565b820191906000526020600020905b8154815290600101906020018083116107d457829003601f168201915b5050505050905090565b600061080f6108086117ba565b84846117c2565b6001905092915050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6108516117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d5906128e8565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b600061090584848461198b565b6109c6846109116117ba565b6109c1856040518060600160405280602881526020016131ec60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109776117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120309092919063ffffffff16565b6117c2565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600660009054906101000a900460ff16905090565b60086020528060005260406000206000915054906101000a900460ff1681565b6000610ad5610a396117ba565b84610ad08560026000610a4a6117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461209490919063ffffffff16565b6117c2565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c026117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d556117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd9906128e8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612954565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee8906129c0565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f8a9061286b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb69061286b565b80156110035780601f10610fd857610100808354040283529160200191611003565b820191906000526020600020905b815481529060010190602001808311610fe657829003601f168201915b5050505050905090565b600a5481565b60006110d66110206117ba565b846110d185604051806060016040528060258152602001613214602591396002600061104a6117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120309092919063ffffffff16565b6117c2565b6001905092915050565b60006110f46110ed6117ba565b848461198b565b6001905092915050565b60095481565b61110c6117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906128e8565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290612a52565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112c8919061259d565b60405180910390a25050565b6112dc6117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906128e8565b60405180910390fd5b600c60009054906101000a900460ff16156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090612abe565b60405180910390fd5b6001600c60006101000a81548160ff02191690831515021790555042600d81905550565b600b5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114726117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612b50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116336117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906128e8565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612bbc565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890612c4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790612ce0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197e9190612641565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190612d72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090612e04565b60405180910390fd5b60008111611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390612e96565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b505750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611be357600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990612f28565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611c8c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611ce25750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d385750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611def57600c60009054906101000a900460ff16611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390612f94565b60405180910390fd5b600d544203611dee576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e935750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561201f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f1e57611f17600954611f096064856120f290919063ffffffff16565b61213c90919063ffffffff16565b9050611fce565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa257611f9b600a54611f8d6064856120f290919063ffffffff16565b61213c90919063ffffffff16565b9050611fcd565b611fca600b54611fbc6064856120f290919063ffffffff16565b61213c90919063ffffffff16565b90505b5b611fe181836121b690919063ffffffff16565b9150611fee848484612200565b612019847f000000000000000000000000000000000000000000000000000000000000000083612200565b5061202b565b61202a838383612200565b5b505050565b6000838311158290612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f9190612487565b60405180910390fd5b50600083856120879190612fe3565b9050809150509392505050565b60008082846120a39190613017565b9050838110156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90613097565b60405180910390fd5b8091505092915050565b600061213483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612394565b905092915050565b600080830361214e57600090506121b0565b6000828461215c91906130b7565b905082848261216b9190613128565b146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a2906131cb565b60405180910390fd5b809150505b92915050565b60006121f883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612030565b905092915050565b61225281600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122e781600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461209490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123879190612641565b60405180910390a3505050565b600080831182906123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d29190612487565b60405180910390fd5b50600083856123ea9190613128565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612431578082015181840152602081019050612416565b60008484015250505050565b6000601f19601f8301169050919050565b6000612459826123f7565b6124638185612402565b9350612473818560208601612413565b61247c8161243d565b840191505092915050565b600060208201905081810360008301526124a1818461244e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124d9826124ae565b9050919050565b6124e9816124ce565b81146124f457600080fd5b50565b600081359050612506816124e0565b92915050565b6000819050919050565b61251f8161250c565b811461252a57600080fd5b50565b60008135905061253c81612516565b92915050565b60008060408385031215612559576125586124a9565b5b6000612567858286016124f7565b92505060206125788582860161252d565b9150509250929050565b60008115159050919050565b61259781612582565b82525050565b60006020820190506125b2600083018461258e565b92915050565b6000819050919050565b60006125dd6125d86125d3846124ae565b6125b8565b6124ae565b9050919050565b60006125ef826125c2565b9050919050565b6000612601826125e4565b9050919050565b612611816125f6565b82525050565b600060208201905061262c6000830184612608565b92915050565b61263b8161250c565b82525050565b60006020820190506126566000830184612632565b92915050565b600080600060608486031215612675576126746124a9565b5b60006126838682870161252d565b93505060206126948682870161252d565b92505060406126a58682870161252d565b9150509250925092565b6000806000606084860312156126c8576126c76124a9565b5b60006126d6868287016124f7565b93505060206126e7868287016124f7565b92505060406126f88682870161252d565b9150509250925092565b61270b816124ce565b82525050565b60006020820190506127266000830184612702565b92915050565b600060ff82169050919050565b6127428161272c565b82525050565b600060208201905061275d6000830184612739565b92915050565b600060208284031215612779576127786124a9565b5b6000612787848285016124f7565b91505092915050565b61279981612582565b81146127a457600080fd5b50565b6000813590506127b681612790565b92915050565b600080604083850312156127d3576127d26124a9565b5b60006127e1858286016124f7565b92505060206127f2858286016127a7565b9150509250929050565b60008060408385031215612813576128126124a9565b5b6000612821858286016124f7565b9250506020612832858286016124f7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061288357607f821691505b6020821081036128965761289561283c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128d2602083612402565b91506128dd8261289c565b602082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b7f57652063616e6e6f7420626c61636b6c69737420556e69737761700000000000600082015250565b600061293e601b83612402565b915061294982612908565b602082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b60006129aa601e83612402565b91506129b582612974565b602082019050919050565b600060208201905081810360008301526129d98161299d565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000612a3c602a83612402565b9150612a47826129e0565b604082019050919050565b60006020820190508181036000830152612a6b81612a2f565b9050919050565b7f54726164696e6720616c7265616479204f70656e656421000000000000000000600082015250565b6000612aa8601783612402565b9150612ab382612a72565b602082019050919050565b60006020820190508181036000830152612ad781612a9b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b3a602683612402565b9150612b4582612ade565b604082019050919050565b60006020820190508181036000830152612b6981612b2d565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b6000612ba6601a83612402565b9150612bb182612b70565b602082019050919050565b60006020820190508181036000830152612bd581612b99565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c38602483612402565b9150612c4382612bdc565b604082019050919050565b60006020820190508181036000830152612c6781612c2b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cca602283612402565b9150612cd582612c6e565b604082019050919050565b60006020820190508181036000830152612cf981612cbd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d5c602583612402565b9150612d6782612d00565b604082019050919050565b60006020820190508181036000830152612d8b81612d4f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dee602383612402565b9150612df982612d92565b604082019050919050565b60006020820190508181036000830152612e1d81612de1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612e80602983612402565b9150612e8b82612e24565b604082019050919050565b60006020820190508181036000830152612eaf81612e73565b9050919050565b7f426f7473206e6f7420616c6c6f77656420686572652120506c6179206661697260008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f12602183612402565b9150612f1d82612eb6565b604082019050919050565b60006020820190508181036000830152612f4181612f05565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b6000612f7e601883612402565b9150612f8982612f48565b602082019050919050565b60006020820190508181036000830152612fad81612f71565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fee8261250c565b9150612ff98361250c565b925082820390508181111561301157613010612fb4565b5b92915050565b60006130228261250c565b915061302d8361250c565b925082820190508082111561304557613044612fb4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613081601b83612402565b915061308c8261304b565b602082019050919050565b600060208201905081810360008301526130b081613074565b9050919050565b60006130c28261250c565b91506130cd8361250c565b92508282026130db8161250c565b915082820484148315176130f2576130f1612fb4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131338261250c565b915061313e8361250c565b92508261314e5761314d6130f9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006131b5602183612402565b91506131c082613159565b604082019050919050565b600060208201905081810360008301526131e4816131a8565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e0bb53d5f8c4a82a8fe838d2f8917df49343f462c566e9a92b5151e39bacec164736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c8063786c8d11116100f7578063a938d1c911610095578063dd62ed3e11610064578063dd62ed3e146106af578063f2fde38b146106ec578063f79d86ec14610715578063ffb54a991461073e576101d8565b8063a938d1c914610619578063c024666814610644578063c9567bf91461066d578063d05b396214610684576101d8565b806395d89b41116100d157806395d89b4114610549578063989a124f14610574578063a457c2d71461059f578063a9059cbb146105dc576101d8565b8063786c8d11146104ca578063790ca413146104f35780638da5cb5b1461051e576101d8565b8063313ce5671161016f57806349bd5a5e1161013e57806349bd5a5e1461040e5780634fbee1931461043957806370a0823114610476578063715018a6146104b3576101d8565b8063313ce5671461032c578063333e99db1461035757806339509351146103945780633bbac579146103d1576101d8565b806318160ddd116101ab57806318160ddd14610270578063224290851461029b57806323b872dd146102c457806327c8f83514610301576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610769565b6040516101ff9190612487565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612542565b6107fb565b60405161023c919061259d565b60405180910390f35b34801561025157600080fd5b5061025a610819565b6040516102679190612617565b60405180910390f35b34801561027c57600080fd5b5061028561083f565b6040516102929190612641565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd919061265c565b610849565b005b3480156102d057600080fd5b506102eb60048036038101906102e691906126af565b6108f8565b6040516102f8919061259d565b60405180910390f35b34801561030d57600080fd5b506103166109d1565b6040516103239190612711565b60405180910390f35b34801561033857600080fd5b506103416109f5565b60405161034e9190612748565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612763565b610a0c565b60405161038b919061259d565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612542565b610a2c565b6040516103c8919061259d565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612763565b610adf565b604051610405919061259d565b60405180910390f35b34801561041a57600080fd5b50610423610b35565b6040516104309190612711565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190612763565b610b5b565b60405161046d919061259d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190612763565b610bb1565b6040516104aa9190612641565b60405180910390f35b3480156104bf57600080fd5b506104c8610bfa565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190612763565b610d4d565b005b3480156104ff57600080fd5b50610508610f4c565b6040516105159190612641565b60405180910390f35b34801561052a57600080fd5b50610533610f52565b6040516105409190612711565b60405180910390f35b34801561055557600080fd5b5061055e610f7b565b60405161056b9190612487565b60405180910390f35b34801561058057600080fd5b5061058961100d565b6040516105969190612641565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612542565b611013565b6040516105d3919061259d565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190612542565b6110e0565b604051610610919061259d565b60405180910390f35b34801561062557600080fd5b5061062e6110fe565b60405161063b9190612641565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906127bc565b611104565b005b34801561067957600080fd5b506106826112d4565b005b34801561069057600080fd5b506106996113dd565b6040516106a69190612641565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906127fc565b6113e3565b6040516106e39190612641565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190612763565b61146a565b005b34801561072157600080fd5b5061073c60048036038101906107379190612763565b61162b565b005b34801561074a57600080fd5b506107536117a7565b604051610760919061259d565b60405180910390f35b6060600480546107789061286b565b80601f01602080910402602001604051908101604052809291908181526020018280546107a49061286b565b80156107f15780601f106107c6576101008083540402835291602001916107f1565b820191906000526020600020905b8154815290600101906020018083116107d457829003601f168201915b5050505050905090565b600061080f6108086117ba565b84846117c2565b6001905092915050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6108516117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d5906128e8565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b600061090584848461198b565b6109c6846109116117ba565b6109c1856040518060600160405280602881526020016131ec60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109776117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120309092919063ffffffff16565b6117c2565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000600660009054906101000a900460ff16905090565b60086020528060005260406000206000915054906101000a900460ff1681565b6000610ad5610a396117ba565b84610ad08560026000610a4a6117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461209490919063ffffffff16565b6117c2565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c026117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d556117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd9906128e8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612954565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee8906129c0565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f8a9061286b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb69061286b565b80156110035780601f10610fd857610100808354040283529160200191611003565b820191906000526020600020905b815481529060010190602001808311610fe657829003601f168201915b5050505050905090565b600a5481565b60006110d66110206117ba565b846110d185604051806060016040528060258152602001613214602591396002600061104a6117ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120309092919063ffffffff16565b6117c2565b6001905092915050565b60006110f46110ed6117ba565b848461198b565b6001905092915050565b60095481565b61110c6117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906128e8565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290612a52565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112c8919061259d565b60405180910390a25050565b6112dc6117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906128e8565b60405180910390fd5b600c60009054906101000a900460ff16156113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090612abe565b60405180910390fd5b6001600c60006101000a81548160ff02191690831515021790555042600d81905550565b600b5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114726117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906128e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612b50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116336117ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906128e8565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612bbc565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890612c4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790612ce0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197e9190612641565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190612d72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090612e04565b60405180910390fd5b60008111611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390612e96565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b505750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611be357600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990612f28565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611c8c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611ce25750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d385750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611def57600c60009054906101000a900460ff16611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390612f94565b60405180910390fd5b600d544203611dee576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e935750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561201f576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f1e57611f17600954611f096064856120f290919063ffffffff16565b61213c90919063ffffffff16565b9050611fce565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa257611f9b600a54611f8d6064856120f290919063ffffffff16565b61213c90919063ffffffff16565b9050611fcd565b611fca600b54611fbc6064856120f290919063ffffffff16565b61213c90919063ffffffff16565b90505b5b611fe181836121b690919063ffffffff16565b9150611fee848484612200565b612019847f000000000000000000000000000000000000000000000000000000000000dead83612200565b5061202b565b61202a838383612200565b5b505050565b6000838311158290612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f9190612487565b60405180910390fd5b50600083856120879190612fe3565b9050809150509392505050565b60008082846120a39190613017565b9050838110156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90613097565b60405180910390fd5b8091505092915050565b600061213483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612394565b905092915050565b600080830361214e57600090506121b0565b6000828461215c91906130b7565b905082848261216b9190613128565b146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a2906131cb565b60405180910390fd5b809150505b92915050565b60006121f883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612030565b905092915050565b61225281600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121b690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122e781600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461209490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123879190612641565b60405180910390a3505050565b600080831182906123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d29190612487565b60405180910390fd5b50600083856123ea9190613128565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612431578082015181840152602081019050612416565b60008484015250505050565b6000601f19601f8301169050919050565b6000612459826123f7565b6124638185612402565b9350612473818560208601612413565b61247c8161243d565b840191505092915050565b600060208201905081810360008301526124a1818461244e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124d9826124ae565b9050919050565b6124e9816124ce565b81146124f457600080fd5b50565b600081359050612506816124e0565b92915050565b6000819050919050565b61251f8161250c565b811461252a57600080fd5b50565b60008135905061253c81612516565b92915050565b60008060408385031215612559576125586124a9565b5b6000612567858286016124f7565b92505060206125788582860161252d565b9150509250929050565b60008115159050919050565b61259781612582565b82525050565b60006020820190506125b2600083018461258e565b92915050565b6000819050919050565b60006125dd6125d86125d3846124ae565b6125b8565b6124ae565b9050919050565b60006125ef826125c2565b9050919050565b6000612601826125e4565b9050919050565b612611816125f6565b82525050565b600060208201905061262c6000830184612608565b92915050565b61263b8161250c565b82525050565b60006020820190506126566000830184612632565b92915050565b600080600060608486031215612675576126746124a9565b5b60006126838682870161252d565b93505060206126948682870161252d565b92505060406126a58682870161252d565b9150509250925092565b6000806000606084860312156126c8576126c76124a9565b5b60006126d6868287016124f7565b93505060206126e7868287016124f7565b92505060406126f88682870161252d565b9150509250925092565b61270b816124ce565b82525050565b60006020820190506127266000830184612702565b92915050565b600060ff82169050919050565b6127428161272c565b82525050565b600060208201905061275d6000830184612739565b92915050565b600060208284031215612779576127786124a9565b5b6000612787848285016124f7565b91505092915050565b61279981612582565b81146127a457600080fd5b50565b6000813590506127b681612790565b92915050565b600080604083850312156127d3576127d26124a9565b5b60006127e1858286016124f7565b92505060206127f2858286016127a7565b9150509250929050565b60008060408385031215612813576128126124a9565b5b6000612821858286016124f7565b9250506020612832858286016124f7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061288357607f821691505b6020821081036128965761289561283c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128d2602083612402565b91506128dd8261289c565b602082019050919050565b60006020820190508181036000830152612901816128c5565b9050919050565b7f57652063616e6e6f7420626c61636b6c69737420556e69737761700000000000600082015250565b600061293e601b83612402565b915061294982612908565b602082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b60006129aa601e83612402565b91506129b582612974565b602082019050919050565b600060208201905081810360008301526129d98161299d565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000612a3c602a83612402565b9150612a47826129e0565b604082019050919050565b60006020820190508181036000830152612a6b81612a2f565b9050919050565b7f54726164696e6720616c7265616479204f70656e656421000000000000000000600082015250565b6000612aa8601783612402565b9150612ab382612a72565b602082019050919050565b60006020820190508181036000830152612ad781612a9b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b3a602683612402565b9150612b4582612ade565b604082019050919050565b60006020820190508181036000830152612b6981612b2d565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b6000612ba6601a83612402565b9150612bb182612b70565b602082019050919050565b60006020820190508181036000830152612bd581612b99565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c38602483612402565b9150612c4382612bdc565b604082019050919050565b60006020820190508181036000830152612c6781612c2b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cca602283612402565b9150612cd582612c6e565b604082019050919050565b60006020820190508181036000830152612cf981612cbd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d5c602583612402565b9150612d6782612d00565b604082019050919050565b60006020820190508181036000830152612d8b81612d4f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dee602383612402565b9150612df982612d92565b604082019050919050565b60006020820190508181036000830152612e1d81612de1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612e80602983612402565b9150612e8b82612e24565b604082019050919050565b60006020820190508181036000830152612eaf81612e73565b9050919050565b7f426f7473206e6f7420616c6c6f77656420686572652120506c6179206661697260008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f12602183612402565b9150612f1d82612eb6565b604082019050919050565b60006020820190508181036000830152612f4181612f05565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b6000612f7e601883612402565b9150612f8982612f48565b602082019050919050565b60006020820190508181036000830152612fad81612f71565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fee8261250c565b9150612ff98361250c565b925082820390508181111561301157613010612fb4565b5b92915050565b60006130228261250c565b915061302d8361250c565b925082820190508082111561304557613044612fb4565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613081601b83612402565b915061308c8261304b565b602082019050919050565b600060208201905081810360008301526130b081613074565b9050919050565b60006130c28261250c565b91506130cd8361250c565b92508282026130db8161250c565b915082820484148315176130f2576130f1612fb4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131338261250c565b915061313e8361250c565b92508261314e5761314d6130f9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006131b5602183612402565b91506131c082613159565b604082019050919050565b600060208201905081810360008301526131e4816131a8565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e0bb53d5f8c4a82a8fe838d2f8917df49343f462c566e9a92b5151e39bacec164736f6c63430008110033

Deployed Bytecode Sourcemap

35740:7574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37523:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38380:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36133:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37800:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40143:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38549:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36218:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37709:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36312:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38904:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42680:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36181:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40400:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37908:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17804:148;;;;;;;;;;;;;:::i;:::-;;42825:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36578:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17162:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37614:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36402:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39130:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38046:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36364:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39841:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42495:177;;;;;;;;;;;;;:::i;:::-;;36441:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38229:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18107:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43127:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36540:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37523:83;37560:13;37593:5;37586:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37523:83;:::o;38380:161::-;38455:4;38472:39;38481:12;:10;:12::i;:::-;38495:7;38504:6;38472:8;:39::i;:::-;38529:4;38522:11;;38380:161;;;;:::o;36133:41::-;;;;;;;;;;;;;:::o;37800:100::-;37853:7;37880:12;;37873:19;;37800:100;:::o;40143:249::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40281:13:::1;40266:12;:28;;;;40321:14;40305:13;:30;;;;40366:18;40346:17;:38;;;;40143:249:::0;;;:::o;38549:347::-;38681:4;38698:36;38708:6;38716:9;38727:6;38698:9;:36::i;:::-;38745:121;38754:6;38762:12;:10;:12::i;:::-;38776:89;38814:6;38776:89;;;;;;;;;;;;;;;;;:11;:19;38788:6;38776:19;;;;;;;;;;;;;;;:33;38796:12;:10;:12::i;:::-;38776:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;38745:8;:121::i;:::-;38884:4;38877:11;;38549:347;;;;;:::o;36218:81::-;;;:::o;37709:83::-;37750:5;37775:9;;;;;;;;;;;37768:16;;37709:83;:::o;36312:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;38904:218::-;38992:4;39009:83;39018:12;:10;:12::i;:::-;39032:7;39041:50;39080:10;39041:11;:25;39053:12;:10;:12::i;:::-;39041:25;;;;;;;;;;;;;;;:34;39067:7;39041:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39009:8;:83::i;:::-;39110:4;39103:11;;38904:218;;;;:::o;42680:105::-;42733:4;42757:11;:20;42769:7;42757:20;;;;;;;;;;;;;;;;;;;;;;;;;42750:27;;42680:105;;;:::o;36181:28::-;;;;;;;;;;;;;:::o;40400:125::-;40465:4;40489:19;:28;40509:7;40489:28;;;;;;;;;;;;;;;;;;;;;;;;;40482:35;;40400:125;;;:::o;37908:126::-;37974:7;38009:8;:17;38018:7;38009:17;;;;;;;;;;;;;;;;38002:24;;37908:126;;;:::o;17804:148::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17911:1:::1;17874:40;;17895:6;::::0;::::1;;;;;;;;17874:40;;;;;;;;;;;;17942:1;17925:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17804:148::o:0;42825:294::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42916:42:::1;42905:53;;:7;:53;;::::0;42897:93:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43010:11;:20;43022:7;43010:20;;;;;;;;;;;;;;;;;;;;;;;;;43009:21;43001:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43099:4;43076:11;:20;43088:7;43076:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;42825:294:::0;:::o;36578:25::-;;;;:::o;17162:79::-;17200:7;17227:6;;;;;;;;;;;17220:13;;17162:79;:::o;37614:87::-;37653:13;37686:7;37679:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37614:87;:::o;36402:32::-;;;;:::o;39130:269::-;39223:4;39240:129;39249:12;:10;:12::i;:::-;39263:7;39272:96;39311:15;39272:96;;;;;;;;;;;;;;;;;:11;:25;39284:12;:10;:12::i;:::-;39272:25;;;;;;;;;;;;;;;:34;39298:7;39272:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;39240:8;:129::i;:::-;39387:4;39380:11;;39130:269;;;;:::o;38046:175::-;38124:4;38141:42;38151:12;:10;:12::i;:::-;38165:9;38176:6;38141:9;:42::i;:::-;38209:4;38202:11;;38046:175;;;;:::o;36364:31::-;;;;:::o;39841:290::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39966:8:::1;39934:40;;:19;:28;39954:7;39934:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;39926:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40063:8;40032:19;:28;40052:7;40032:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40105:7;40089:34;;;40114:8;40089:34;;;;;;:::i;:::-;;;;;;;;39841:290:::0;;:::o;42495:177::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42557:11:::1;;;;;;;;;;;42556:12;42548:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42621:4;42607:11;;:18;;;;;;;;;;;;;;;;;;42649:15;42636:10;:28;;;;42495:177::o:0;36441:36::-;;;;:::o;38229:143::-;38310:7;38337:11;:18;38349:5;38337:18;;;;;;;;;;;;;;;:27;38356:7;38337:27;;;;;;;;;;;;;;;;38330:34;;38229:143;;;;:::o;18107:244::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18216:1:::1;18196:22;;:8;:22;;::::0;18188:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18306:8;18277:38;;18298:6;::::0;::::1;;;;;;;;18277:38;;;;;;;;;;;;18335:8;18326:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18107:244:::0;:::o;43127:184::-;17384:12;:10;:12::i;:::-;17374:22;;:6;;;;;;;;;;:22;;;17366:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43205:11:::1;:20;43217:7;43205:20;;;;;;;;;;;;;;;;;;;;;;;;;43197:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43290:5;43267:11;:20;43279:7;43267:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;43127:184:::0;:::o;36540:31::-;;;;;;;;;;;;;:::o;6544:98::-;6597:7;6624:10;6617:17;;6544:98;:::o;39407:378::-;39560:1;39543:19;;:5;:19;;;39535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39641:1;39622:21;;:7;:21;;;39614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39723:6;39693:11;:18;39705:5;39693:18;;;;;;;;;;;;;;;:27;39712:7;39693:27;;;;;;;;;;;;;;;:36;;;;39761:7;39745:32;;39754:5;39745:32;;;39770:6;39745:32;;;;;;:::i;:::-;;;;;;;;39407:378;;;:::o;40533:1657::-;40672:1;40656:18;;:4;:18;;;40648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40749:1;40735:16;;:2;:16;;;40727:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40819:1;40810:6;:10;40802:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40883:19;:25;40903:4;40883:25;;;;;;;;;;;;;;;;;;;;;;;;;40882:26;:54;;;;;40913:19;:23;40933:2;40913:23;;;;;;;;;;;;;;;;;;;;;;;;;40912:24;40882:54;40879:200;;;40987:11;:17;40999:4;40987:17;;;;;;;;;;;;;;;;;;;;;;;;;40986:18;40978:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40879:200;41104:13;;;;;;;;;;;41096:21;;:4;:21;;;:57;;;;41140:13;;;;;;;;;;;41134:19;;:2;:19;;;41096:57;41095:102;;;;;41172:19;:25;41192:4;41172:25;;;;;;;;;;;;;;;;;;;;;;;;;41171:26;41095:102;:130;;;;;41202:19;:23;41222:2;41202:23;;;;;;;;;;;;;;;;;;;;;;;;;41201:24;41095:130;41091:406;;;41250:11;;;;;;;;;;;41242:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41401:10;;41382:15;:29;41378:108;;41450:4;41432:11;:15;41444:2;41432:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;41378:108;41091:406;41514:19;:25;41534:4;41514:25;;;;;;;;;;;;;;;;;;;;;;;;;41513:26;:54;;;;;41544:19;:23;41564:2;41544:23;;;;;;;;;;;;;;;;;;;;;;;;;41543:24;41513:54;41509:658;;;41585:15;41631:13;;;;;;;;;;;41623:21;;:4;:21;;;41619:302;;41674:33;41694:12;;41674:15;41685:3;41674:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;41664:43;;41619:302;;;41739:13;;;;;;;;;;;41733:19;;:2;:19;;;41729:192;;41782:34;41802:13;;41782:15;41793:3;41782:6;:10;;:15;;;;:::i;:::-;:19;;:34;;;;:::i;:::-;41772:44;;41729:192;;;41867:38;41887:17;;41867:15;41878:3;41867:6;:10;;:15;;;;:::i;:::-;:19;;:38;;;;:::i;:::-;41857:48;;41729:192;41619:302;41956:19;41967:7;41956:6;:10;;:19;;;;:::i;:::-;41947:28;;41990:32;42005:4;42011:2;42015:6;41990:14;:32::i;:::-;42037:42;42052:4;42058:11;42071:7;42037:14;:42::i;:::-;41570:532;41509:658;;;42123:32;42138:4;42144:2;42148:6;42123:14;:32::i;:::-;41509:658;40533:1657;;;:::o;11155:192::-;11241:7;11274:1;11269;:6;;11277:12;11261:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11301:9;11317:1;11313;:5;;;;:::i;:::-;11301:17;;11338:1;11331:8;;;11155:192;;;;;:::o;10252:181::-;10310:7;10330:9;10346:1;10342;:5;;;;:::i;:::-;10330:17;;10371:1;10366;:6;;10358:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10424:1;10417:8;;;10252:181;;;;:::o;12553:132::-;12611:7;12638:39;12642:1;12645;12638:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12631:46;;12553:132;;;;:::o;11606:471::-;11664:7;11914:1;11909;:6;11905:47;;11939:1;11932:8;;;;11905:47;11964:9;11980:1;11976;:5;;;;:::i;:::-;11964:17;;12009:1;12004;12000;:5;;;;:::i;:::-;:10;11992:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12068:1;12061:8;;;11606:471;;;;;:::o;10716:136::-;10774:7;10801:43;10805:1;10808;10801:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10794:50;;10716:136;;;;:::o;42202:281::-;42324:28;42345:6;42324:8;:16;42333:6;42324:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;42305:8;:16;42314:6;42305:16;;;;;;;;;;;;;;;:47;;;;42385:31;42409:6;42385:8;:19;42394:9;42385:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;42363:8;:19;42372:9;42363:19;;;;;;;;;;;;;;;:53;;;;42457:9;42440:35;;42449:6;42440:35;;;42468:6;42440:35;;;;;;:::i;:::-;;;;;;;;42202:281;;;:::o;13181:278::-;13267:7;13299:1;13295;:5;13302:12;13287:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13326:9;13342:1;13338;:5;;;;:::i;:::-;13326:17;;13450:1;13443:8;;;13181:278;;;;;:::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:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5796:2;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5767:118;5924:2;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5895:118;5401:619;;;;;:::o;6026:118::-;6113:24;6131:5;6113:24;:::i;:::-;6108:3;6101:37;6026:118;;:::o;6150:222::-;6243:4;6281:2;6270:9;6266:18;6258:26;;6294:71;6362:1;6351:9;6347:17;6338:6;6294:71;:::i;:::-;6150:222;;;;:::o;6378:86::-;6413:7;6453:4;6446:5;6442:16;6431:27;;6378:86;;;:::o;6470:112::-;6553:22;6569:5;6553:22;:::i;:::-;6548:3;6541:35;6470:112;;:::o;6588:214::-;6677:4;6715:2;6704:9;6700:18;6692:26;;6728:67;6792:1;6781:9;6777:17;6768:6;6728:67;:::i;:::-;6588:214;;;;:::o;6808:329::-;6867:6;6916:2;6904:9;6895:7;6891:23;6887:32;6884:119;;;6922:79;;:::i;:::-;6884:119;7042:1;7067:53;7112:7;7103:6;7092:9;7088:22;7067:53;:::i;:::-;7057:63;;7013:117;6808:329;;;;:::o;7143:116::-;7213:21;7228:5;7213:21;:::i;:::-;7206:5;7203:32;7193:60;;7249:1;7246;7239:12;7193:60;7143:116;:::o;7265:133::-;7308:5;7346:6;7333:20;7324:29;;7362:30;7386:5;7362:30;:::i;:::-;7265:133;;;;:::o;7404:468::-;7469:6;7477;7526:2;7514:9;7505:7;7501:23;7497:32;7494:119;;;7532:79;;:::i;:::-;7494:119;7652:1;7677:53;7722:7;7713:6;7702:9;7698:22;7677:53;:::i;:::-;7667:63;;7623:117;7779:2;7805:50;7847:7;7838:6;7827:9;7823:22;7805:50;:::i;:::-;7795:60;;7750:115;7404:468;;;;;:::o;7878:474::-;7946:6;7954;8003:2;7991:9;7982:7;7978:23;7974:32;7971:119;;;8009:79;;:::i;:::-;7971:119;8129:1;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8100:117;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7878:474;;;;;:::o;8358:180::-;8406:77;8403:1;8396:88;8503:4;8500:1;8493:15;8527:4;8524:1;8517:15;8544:320;8588:6;8625:1;8619:4;8615:12;8605:22;;8672:1;8666:4;8662:12;8693:18;8683:81;;8749:4;8741:6;8737:17;8727:27;;8683:81;8811:2;8803:6;8800:14;8780:18;8777:38;8774:84;;8830:18;;:::i;:::-;8774:84;8595:269;8544:320;;;:::o;8870:182::-;9010:34;9006:1;8998:6;8994:14;8987:58;8870:182;:::o;9058:366::-;9200:3;9221:67;9285:2;9280:3;9221:67;:::i;:::-;9214:74;;9297:93;9386:3;9297:93;:::i;:::-;9415:2;9410:3;9406:12;9399:19;;9058:366;;;:::o;9430:419::-;9596:4;9634:2;9623:9;9619:18;9611:26;;9683:9;9677:4;9673:20;9669:1;9658:9;9654:17;9647:47;9711:131;9837:4;9711:131;:::i;:::-;9703:139;;9430:419;;;:::o;9855:177::-;9995:29;9991:1;9983:6;9979:14;9972:53;9855:177;:::o;10038:366::-;10180:3;10201:67;10265:2;10260:3;10201:67;:::i;:::-;10194:74;;10277:93;10366:3;10277:93;:::i;:::-;10395:2;10390:3;10386:12;10379:19;;10038:366;;;:::o;10410:419::-;10576:4;10614:2;10603:9;10599:18;10591:26;;10663:9;10657:4;10653:20;10649:1;10638:9;10634:17;10627:47;10691:131;10817:4;10691:131;:::i;:::-;10683:139;;10410:419;;;:::o;10835:180::-;10975:32;10971:1;10963:6;10959:14;10952:56;10835:180;:::o;11021:366::-;11163:3;11184:67;11248:2;11243:3;11184:67;:::i;:::-;11177:74;;11260:93;11349:3;11260:93;:::i;:::-;11378:2;11373:3;11369:12;11362:19;;11021:366;;;:::o;11393:419::-;11559:4;11597:2;11586:9;11582:18;11574:26;;11646:9;11640:4;11636:20;11632:1;11621:9;11617:17;11610:47;11674:131;11800:4;11674:131;:::i;:::-;11666:139;;11393:419;;;:::o;11818:229::-;11958:34;11954:1;11946:6;11942:14;11935:58;12027:12;12022:2;12014:6;12010:15;12003:37;11818:229;:::o;12053:366::-;12195:3;12216:67;12280:2;12275:3;12216:67;:::i;:::-;12209:74;;12292:93;12381:3;12292:93;:::i;:::-;12410:2;12405:3;12401:12;12394:19;;12053:366;;;:::o;12425:419::-;12591:4;12629:2;12618:9;12614:18;12606:26;;12678:9;12672:4;12668:20;12664:1;12653:9;12649:17;12642:47;12706:131;12832:4;12706:131;:::i;:::-;12698:139;;12425:419;;;:::o;12850:173::-;12990:25;12986:1;12978:6;12974:14;12967:49;12850:173;:::o;13029:366::-;13171:3;13192:67;13256:2;13251:3;13192:67;:::i;:::-;13185:74;;13268:93;13357:3;13268:93;:::i;:::-;13386:2;13381:3;13377:12;13370:19;;13029:366;;;:::o;13401:419::-;13567:4;13605:2;13594:9;13590:18;13582:26;;13654:9;13648:4;13644:20;13640:1;13629:9;13625:17;13618:47;13682:131;13808:4;13682:131;:::i;:::-;13674:139;;13401:419;;;:::o;13826:225::-;13966:34;13962:1;13954:6;13950:14;13943:58;14035:8;14030:2;14022:6;14018:15;14011:33;13826:225;:::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:176::-;14994:28;14990:1;14982:6;14978:14;14971:52;14854:176;:::o;15036:366::-;15178:3;15199:67;15263:2;15258:3;15199:67;:::i;:::-;15192:74;;15275:93;15364:3;15275:93;:::i;:::-;15393:2;15388:3;15384:12;15377:19;;15036:366;;;:::o;15408:419::-;15574:4;15612:2;15601:9;15597:18;15589:26;;15661:9;15655:4;15651:20;15647:1;15636:9;15632:17;15625:47;15689:131;15815:4;15689:131;:::i;:::-;15681:139;;15408:419;;;:::o;15833:223::-;15973:34;15969:1;15961:6;15957:14;15950:58;16042:6;16037:2;16029:6;16025:15;16018:31;15833:223;:::o;16062:366::-;16204:3;16225:67;16289:2;16284:3;16225:67;:::i;:::-;16218:74;;16301:93;16390:3;16301:93;:::i;:::-;16419:2;16414:3;16410:12;16403:19;;16062:366;;;:::o;16434:419::-;16600:4;16638:2;16627:9;16623:18;16615:26;;16687:9;16681:4;16677:20;16673:1;16662:9;16658:17;16651:47;16715:131;16841:4;16715:131;:::i;:::-;16707:139;;16434:419;;;:::o;16859:221::-;16999:34;16995:1;16987:6;16983:14;16976:58;17068:4;17063:2;17055:6;17051:15;17044:29;16859:221;:::o;17086:366::-;17228:3;17249:67;17313:2;17308:3;17249:67;:::i;:::-;17242:74;;17325:93;17414:3;17325:93;:::i;:::-;17443:2;17438:3;17434:12;17427:19;;17086:366;;;:::o;17458:419::-;17624:4;17662:2;17651:9;17647:18;17639:26;;17711:9;17705:4;17701:20;17697:1;17686:9;17682:17;17675:47;17739:131;17865:4;17739:131;:::i;:::-;17731:139;;17458:419;;;:::o;17883:224::-;18023:34;18019:1;18011:6;18007:14;18000:58;18092:7;18087:2;18079:6;18075:15;18068:32;17883:224;:::o;18113:366::-;18255:3;18276:67;18340:2;18335:3;18276:67;:::i;:::-;18269:74;;18352:93;18441:3;18352:93;:::i;:::-;18470:2;18465:3;18461:12;18454:19;;18113:366;;;:::o;18485:419::-;18651:4;18689:2;18678:9;18674:18;18666:26;;18738:9;18732:4;18728:20;18724:1;18713:9;18709:17;18702:47;18766:131;18892:4;18766:131;:::i;:::-;18758:139;;18485:419;;;:::o;18910:222::-;19050:34;19046:1;19038:6;19034:14;19027:58;19119:5;19114:2;19106:6;19102:15;19095:30;18910:222;:::o;19138:366::-;19280:3;19301:67;19365:2;19360:3;19301:67;:::i;:::-;19294:74;;19377:93;19466:3;19377:93;:::i;:::-;19495:2;19490:3;19486:12;19479:19;;19138:366;;;:::o;19510:419::-;19676:4;19714:2;19703:9;19699:18;19691:26;;19763:9;19757:4;19753:20;19749:1;19738:9;19734:17;19727:47;19791:131;19917:4;19791:131;:::i;:::-;19783:139;;19510:419;;;:::o;19935:228::-;20075:34;20071:1;20063:6;20059:14;20052:58;20144:11;20139:2;20131:6;20127:15;20120:36;19935:228;:::o;20169:366::-;20311:3;20332:67;20396:2;20391:3;20332:67;:::i;:::-;20325:74;;20408:93;20497:3;20408:93;:::i;:::-;20526:2;20521:3;20517:12;20510:19;;20169:366;;;:::o;20541:419::-;20707:4;20745:2;20734:9;20730:18;20722:26;;20794:9;20788:4;20784:20;20780:1;20769:9;20765:17;20758:47;20822:131;20948:4;20822:131;:::i;:::-;20814:139;;20541:419;;;:::o;20966:220::-;21106:34;21102:1;21094:6;21090:14;21083:58;21175:3;21170:2;21162:6;21158:15;21151:28;20966:220;:::o;21192:366::-;21334:3;21355:67;21419:2;21414:3;21355:67;:::i;:::-;21348:74;;21431:93;21520:3;21431:93;:::i;:::-;21549:2;21544:3;21540:12;21533:19;;21192:366;;;:::o;21564:419::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21564:419;;;:::o;21989:174::-;22129:26;22125:1;22117:6;22113:14;22106:50;21989:174;:::o;22169:366::-;22311:3;22332:67;22396:2;22391:3;22332:67;:::i;:::-;22325:74;;22408:93;22497:3;22408:93;:::i;:::-;22526:2;22521:3;22517:12;22510:19;;22169:366;;;:::o;22541:419::-;22707:4;22745:2;22734:9;22730:18;22722:26;;22794:9;22788:4;22784:20;22780:1;22769:9;22765:17;22758:47;22822:131;22948:4;22822:131;:::i;:::-;22814:139;;22541:419;;;:::o;22966:180::-;23014:77;23011:1;23004:88;23111:4;23108:1;23101:15;23135:4;23132:1;23125:15;23152:194;23192:4;23212:20;23230:1;23212:20;:::i;:::-;23207:25;;23246:20;23264:1;23246:20;:::i;:::-;23241:25;;23290:1;23287;23283:9;23275:17;;23314:1;23308:4;23305:11;23302:37;;;23319:18;;:::i;:::-;23302:37;23152:194;;;;:::o;23352:191::-;23392:3;23411:20;23429:1;23411:20;:::i;:::-;23406:25;;23445:20;23463:1;23445:20;:::i;:::-;23440:25;;23488:1;23485;23481:9;23474:16;;23509:3;23506:1;23503:10;23500:36;;;23516:18;;:::i;:::-;23500:36;23352:191;;;;:::o;23549:177::-;23689:29;23685:1;23677:6;23673:14;23666:53;23549:177;:::o;23732:366::-;23874:3;23895:67;23959:2;23954:3;23895:67;:::i;:::-;23888:74;;23971:93;24060:3;23971:93;:::i;:::-;24089:2;24084:3;24080:12;24073:19;;23732:366;;;:::o;24104:419::-;24270:4;24308:2;24297:9;24293:18;24285:26;;24357:9;24351:4;24347:20;24343:1;24332:9;24328:17;24321:47;24385:131;24511:4;24385:131;:::i;:::-;24377:139;;24104:419;;;:::o;24529:410::-;24569:7;24592:20;24610:1;24592:20;:::i;:::-;24587:25;;24626:20;24644:1;24626:20;:::i;:::-;24621:25;;24681:1;24678;24674:9;24703:30;24721:11;24703:30;:::i;:::-;24692:41;;24882:1;24873:7;24869:15;24866:1;24863:22;24843:1;24836:9;24816:83;24793:139;;24912:18;;:::i;:::-;24793:139;24577:362;24529:410;;;;:::o;24945:180::-;24993:77;24990:1;24983:88;25090:4;25087:1;25080:15;25114:4;25111:1;25104:15;25131:185;25171:1;25188:20;25206:1;25188:20;:::i;:::-;25183:25;;25222:20;25240:1;25222:20;:::i;:::-;25217:25;;25261:1;25251:35;;25266:18;;:::i;:::-;25251:35;25308:1;25305;25301:9;25296:14;;25131:185;;;;:::o;25322:220::-;25462:34;25458:1;25450:6;25446:14;25439:58;25531:3;25526:2;25518:6;25514:15;25507:28;25322:220;:::o;25548:366::-;25690:3;25711:67;25775:2;25770:3;25711:67;:::i;:::-;25704:74;;25787:93;25876:3;25787:93;:::i;:::-;25905:2;25900:3;25896:12;25889:19;;25548:366;;;:::o;25920:419::-;26086:4;26124:2;26113:9;26109:18;26101:26;;26173:9;26167:4;26163:20;26159:1;26148:9;26144:17;26137:47;26201:131;26327:4;26201:131;:::i;:::-;26193:139;;25920:419;;;:::o

Swarm Source

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