ETH Price: $2,634.99 (+2.24%)

Token

PEPEFi (PEPEFi)
 

Overview

Max Total Supply

42,000,000 PEPEFi

Holders

565

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000001850083 PEPEFi

Value
$0.00
0xf16bb2dc4DdBa780312bCCdDE60d7666C885d4c3
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:
PEPEFiToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-04
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.15;

abstract contract Context {

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

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

interface IERC20 {

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
    
}

library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Sorts the pair (a, b) and hashes the result.
     */
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);  return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target,
         data, value, errorMessage);
    }

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

        (bool success, bytes memory returndata) = target.call{ value : weiValue}(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address public _owner;

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


    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

}

interface IUniswapV2Factory {


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


interface ISwapPair {
     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;

}

contract PEPEFiToken is Context, IERC20, Ownable {


    using SafeMath for uint256;
    using Address for address;

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable private marketingWalletAddress;
    address payable private teamWalletAddress;
    address private deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private preLPUnlockTime = 1695661511;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private isMarketPair;

    mapping(address => UserInfo) private _userInfo;
    struct UserInfo {
        uint256 lpAmount;
        bool preLP;
        uint256 unlockTime;
    }
    
    uint256 private _totalTaxIfBuying = 0;
    uint256 private _totalTaxIfSelling = 0;

    uint256 private _totalSupply;
    uint256 private _minimumTokensBeforeSwap = 0;

    IUniswapV2Router02 private uniswap;
    address private uniswapPair;

    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = false;
    bool private swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn, address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }


    constructor (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = 0x8b3fD273699312b5587f2F98B77FEaa1613A13F7;
        _totalSupply = supply  * 10 ** _decimals;
        marketingWalletAddress = payable(0x8b3fD273699312b5587f2F98B77FEaa1613A13F7);
        teamWalletAddress = payable(0x8b3fD273699312b5587f2F98B77FEaa1613A13F7);
        uniswap = _uniswapV2Router;
        _allowances[address(this)][address(uniswap)] = _totalSupply;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _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 view override returns (uint256) {
        return _totalSupply;
    }

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

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

    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 spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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



    function changeRouter(address newRouterAddress) external onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswap);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        _uniswapV2Router = IUniswapV2Router02(newRouterAddress);
        uniswap = _uniswapV2Router;
        swapAndLiquifyEnabled = true;
        isMarketPair[address(uniswapPair)] = true;
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = _minimumTokensBeforeSwap;
                addLiquidity(sender,contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = takeFee(sender, recipient, amount);


            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }


    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        
        // swap token -> eth
        swapTokensForEth(tAmount);
        uint256 amountReceived = address(this).balance;
         
        // team eth
        uint256 amountUSDTTeam = amountReceived.mul(50).div(100);
        // marketing eth
        uint256 amountUSDTMarketing = amountReceived.sub(amountUSDTTeam);

        if(amountUSDTMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountUSDTMarketing);

        if(amountUSDTTeam > 0)
            transferToAddressETH(teamWalletAddress, amountUSDTTeam);


    }

    function addLiquidity(address sender,uint256 tokenAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswap), tokenAmount);
        uint256 ethAmount =  address(this).balance;
        // add the liquidity
        uniswap.addLiquidityETH{value: ethAmount}(
            sender,
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }



    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
    

}


library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    /**
     * @dev The signature derives the `address(0)`.
     */
    error ECDSAInvalidSignature();

    /**
     * @dev The signature has an invalid length.
     */
    error ECDSAInvalidSignatureLength(uint256 length);

    /**
     * @dev The signature has an S value that is in the upper half order.
     */
    error ECDSAInvalidSignatureS(bytes32 s);

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
     * return address(0) without also returning an error description. Errors are documented using an enum (error type)
     * and a bytes32 providing additional information about the error.
     *
     * If no error is returned, then the address can be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            /// @solidity memory-safe-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     */
    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            // We do not check for an overflow here since the shift operation results in 0 or 1.
            uint8 v = uint8((uint256(vs) >> 255) + 27);
            return tryRecover(hash, v, r, s);
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError, bytes32) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature, bytes32(0));
        }

        return (signer, RecoverError.NoError, bytes32(0));
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
     */
    function _throwError(RecoverError error, bytes32 errorArg) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert ECDSAInvalidSignature();
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert ECDSAInvalidSignatureLength(uint256(errorArg));
        } else if (error == RecoverError.InvalidSignatureS) {
            revert ECDSAInvalidSignatureS(errorArg);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"coinName","type":"string"},{"internalType":"string","name":"coinSymbol","type":"string"},{"internalType":"uint8","name":"coinDecimals","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouter","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550636511bdc76006556000600b556000600c556000600e556000601060156101000a81548160ff0219169083151502179055506000601060166101000a81548160ff02191690831515021790555060405162003447380380620034478339818101604052810190620000b9919062000638565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508460019081620000e3919062000929565b508360029081620000f5919062000929565b5082600360006101000a81548160ff021916908360ff160217905550738b3fd273699312b5587f2f98b77feaa1613a13f76000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900460ff16600a62000183919062000b93565b8262000190919062000be4565b600d81905550738b3fd273699312b5587f2f98b77feaa1613a13f7600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738b3fd273699312b5587f2f98b77feaa1613a13f7600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d54600760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200040f919062000c56565b60405180910390a3505050505062000c73565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200048b8262000440565b810181811067ffffffffffffffff82111715620004ad57620004ac62000451565b5b80604052505050565b6000620004c262000422565b9050620004d0828262000480565b919050565b600067ffffffffffffffff821115620004f357620004f262000451565b5b620004fe8262000440565b9050602081019050919050565b60005b838110156200052b5780820151818401526020810190506200050e565b838111156200053b576000848401525b50505050565b6000620005586200055284620004d5565b620004b6565b9050828152602081018484840111156200057757620005766200043b565b5b620005848482856200050b565b509392505050565b600082601f830112620005a457620005a362000436565b5b8151620005b684826020860162000541565b91505092915050565b600060ff82169050919050565b620005d781620005bf565b8114620005e357600080fd5b50565b600081519050620005f781620005cc565b92915050565b6000819050919050565b6200061281620005fd565b81146200061e57600080fd5b50565b600081519050620006328162000607565b92915050565b600080600080608085870312156200065557620006546200042c565b5b600085015167ffffffffffffffff81111562000676576200067562000431565b5b62000684878288016200058c565b945050602085015167ffffffffffffffff811115620006a857620006a762000431565b5b620006b6878288016200058c565b9350506040620006c987828801620005e6565b9250506060620006dc8782880162000621565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073b57607f821691505b602082108103620007515762000750620006f3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200077c565b620007c786836200077c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200080a62000804620007fe84620005fd565b620007df565b620005fd565b9050919050565b6000819050919050565b6200082683620007e9565b6200083e620008358262000811565b84845462000789565b825550505050565b600090565b6200085562000846565b620008628184846200081b565b505050565b5b818110156200088a576200087e6000826200084b565b60018101905062000868565b5050565b601f821115620008d957620008a38162000757565b620008ae846200076c565b81016020851015620008be578190505b620008d6620008cd856200076c565b83018262000867565b50505b505050565b600082821c905092915050565b6000620008fe60001984600802620008de565b1980831691505092915050565b6000620009198383620008eb565b9150826002028217905092915050565b6200093482620006e8565b67ffffffffffffffff81111562000950576200094f62000451565b5b6200095c825462000722565b620009698282856200088e565b600060209050601f831160018114620009a157600084156200098c578287015190505b6200099885826200090b565b86555062000a08565b601f198416620009b18662000757565b60005b82811015620009db57848901518255600182019150602085019450602081019050620009b4565b86831015620009fb5784890151620009f7601f891682620008eb565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a9e5780860481111562000a765762000a7562000a10565b5b600185161562000a865780820291505b808102905062000a968562000a3f565b945062000a56565b94509492505050565b60008262000ab9576001905062000b8c565b8162000ac9576000905062000b8c565b816001811462000ae2576002811462000aed5762000b23565b600191505062000b8c565b60ff84111562000b025762000b0162000a10565b5b8360020a91508482111562000b1c5762000b1b62000a10565b5b5062000b8c565b5060208310610133831016604e8410600b841016171562000b5d5782820a90508381111562000b575762000b5662000a10565b5b62000b8c565b62000b6c848484600162000a4c565b9250905081840481111562000b865762000b8562000a10565b5b81810290505b9392505050565b600062000ba082620005fd565b915062000bad83620005bf565b925062000bdc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000aa7565b905092915050565b600062000bf182620005fd565b915062000bfe83620005fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c3a5762000c3962000a10565b5b828202905092915050565b62000c5081620005fd565b82525050565b600060208201905062000c6d600083018462000c45565b92915050565b6127c48062000c836000396000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063a9059cbb11610059578063a9059cbb1461035f578063b2bdfa7b1461039c578063dd62ed3e146103c7578063f2fde38b14610404576100fe565b80638da5cb5b146102b5578063914eb66a146102e057806395d89b41146102f7578063a457c2d714610322576100fe565b8063313ce567116100c6578063313ce567146101d3578063340ac20f146101fe578063395093511461023b57806370a0823114610278576100fe565b806306fdde0314610103578063095ea7b31461012e57806318160ddd1461016b57806323b872dd14610196576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b5061011861042d565b6040516101259190611ca3565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611d5e565b6104bf565b6040516101629190611db9565b60405180910390f35b34801561017757600080fd5b506101806104dd565b60405161018d9190611de3565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611dfe565b6104e7565b6040516101ca9190611db9565b60405180910390f35b3480156101df57600080fd5b506101e86105c1565b6040516101f59190611e6d565b60405180910390f35b34801561020a57600080fd5b5061022560048036038101906102209190611e88565b6105d8565b6040516102329190611ec4565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190611d5e565b6108cf565b60405161026f9190611db9565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190611e88565b610982565b6040516102ac9190611de3565b60405180910390f35b3480156102c157600080fd5b506102ca6109cb565b6040516102d79190611ec4565b60405180910390f35b3480156102ec57600080fd5b506102f56109f4565b005b34801561030357600080fd5b5061030c610b47565b6040516103199190611ca3565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190611d5e565b610bd9565b6040516103569190611db9565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190611d5e565b610ca6565b6040516103939190611db9565b60405180910390f35b3480156103a857600080fd5b506103b1610cc5565b6040516103be9190611ec4565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190611edf565b610ce9565b6040516103fb9190611de3565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190611e88565b610d70565b005b60606001805461043c90611f4e565b80601f016020809104026020016040519081016040528092919081815260200182805461046890611f4e565b80156104b55780601f1061048a576101008083540402835291602001916104b5565b820191906000526020600020905b81548152906001019060200180831161049857829003601f168201915b5050505050905090565b60006104d36104cc610f31565b8484610f39565b6001905092915050565b6000600d54905090565b60006104f4848484611102565b506105b684610501610f31565b6105b18560405180606001604052806028815260200161274260289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610567610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b610f39565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60006105e2610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066690611fcb565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107059190612000565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107909190612000565b6040518363ffffffff1660e01b81526004016107ad92919061202d565b602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190612000565b915082905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060156101000a81548160ff021916908315150217905550600160096000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60006109786108dc610f31565b8461097385600860006108ed610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b610f39565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109fc610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090611fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054610b5690611f4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f4e565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b6000610c9c610be6610f31565b84610c978560405180606001604052806025815260200161276a6025913960086000610c10610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b610f39565b6001905092915050565b6000610cba610cb3610f31565b8484611102565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d78610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90611fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906120c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f9061215a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906121ec565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f59190611de3565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111699061227e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890612310565b60405180910390fd5b60008211611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906123a2565b60405180910390fd5b601060149054906101000a900460ff161561124b576112448484846115bb565b90506114f2565b600061125630610982565b90506000600e54821015905080801561127c5750601060149054906101000a900460ff16155b80156112d25750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156112ea5750601060159054906101000a900460ff165b1561131557601060169054906101000a900460ff161561130a57600e5491505b611314868361178e565b5b61139e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006113ee878787611872565b905061144281600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114e29190611de3565b60405180910390a3600193505050505b9392505050565b6000838311158290611541576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115389190611ca3565b60405180910390fd5b506000838561155091906123f1565b9050809150509392505050565b600080828461156c9190612425565b9050838110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a8906124c7565b60405180910390fd5b8091505092915050565b6000611646826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116db82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161177b9190611de3565b60405180910390a3600190509392505050565b6117bb30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610f39565b6000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982858560008030426040518863ffffffff1660e01b81526004016118279695949392919061252c565b60606040518083038185885af1158015611845573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061186a91906125a2565b505050505050565b60008060009050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118fa576118f360646118e5600b5486611a9990919063ffffffff16565b611b1390919063ffffffff16565b9050611978565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611977576119746064611966600c5486611a9990919063ffffffff16565b611b1390919063ffffffff16565b90505b5b6000811115611a7c576119d381600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a739190611de3565b60405180910390a35b611a8f8184611b5d90919063ffffffff16565b9150509392505050565b6000808303611aab5760009050611b0d565b60008284611ab991906125f5565b9050828482611ac8919061267e565b14611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90612721565b60405180910390fd5b809150505b92915050565b6000611b5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ba7565b905092915050565b6000611b9f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114f9565b905092915050565b60008083118290611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be59190611ca3565b60405180910390fd5b5060008385611bfd919061267e565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c44578082015181840152602081019050611c29565b83811115611c53576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c7582611c0a565b611c7f8185611c15565b9350611c8f818560208601611c26565b611c9881611c59565b840191505092915050565b60006020820190508181036000830152611cbd8184611c6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf582611cca565b9050919050565b611d0581611cea565b8114611d1057600080fd5b50565b600081359050611d2281611cfc565b92915050565b6000819050919050565b611d3b81611d28565b8114611d4657600080fd5b50565b600081359050611d5881611d32565b92915050565b60008060408385031215611d7557611d74611cc5565b5b6000611d8385828601611d13565b9250506020611d9485828601611d49565b9150509250929050565b60008115159050919050565b611db381611d9e565b82525050565b6000602082019050611dce6000830184611daa565b92915050565b611ddd81611d28565b82525050565b6000602082019050611df86000830184611dd4565b92915050565b600080600060608486031215611e1757611e16611cc5565b5b6000611e2586828701611d13565b9350506020611e3686828701611d13565b9250506040611e4786828701611d49565b9150509250925092565b600060ff82169050919050565b611e6781611e51565b82525050565b6000602082019050611e826000830184611e5e565b92915050565b600060208284031215611e9e57611e9d611cc5565b5b6000611eac84828501611d13565b91505092915050565b611ebe81611cea565b82525050565b6000602082019050611ed96000830184611eb5565b92915050565b60008060408385031215611ef657611ef5611cc5565b5b6000611f0485828601611d13565b9250506020611f1585828601611d13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f6657607f821691505b602082108103611f7957611f78611f1f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611fb5602083611c15565b9150611fc082611f7f565b602082019050919050565b60006020820190508181036000830152611fe481611fa8565b9050919050565b600081519050611ffa81611cfc565b92915050565b60006020828403121561201657612015611cc5565b5b600061202484828501611feb565b91505092915050565b60006040820190506120426000830185611eb5565b61204f6020830184611eb5565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120b2602683611c15565b91506120bd82612056565b604082019050919050565b600060208201905081810360008301526120e1816120a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612144602483611c15565b915061214f826120e8565b604082019050919050565b6000602082019050818103600083015261217381612137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006121d6602283611c15565b91506121e18261217a565b604082019050919050565b60006020820190508181036000830152612205816121c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612268602583611c15565b91506122738261220c565b604082019050919050565b600060208201905081810360008301526122978161225b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006122fa602383611c15565b91506123058261229e565b604082019050919050565b60006020820190508181036000830152612329816122ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061238c602983611c15565b915061239782612330565b604082019050919050565b600060208201905081810360008301526123bb8161237f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123fc82611d28565b915061240783611d28565b92508282101561241a576124196123c2565b5b828203905092915050565b600061243082611d28565b915061243b83611d28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124705761246f6123c2565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006124b1601b83611c15565b91506124bc8261247b565b602082019050919050565b600060208201905081810360008301526124e0816124a4565b9050919050565b6000819050919050565b6000819050919050565b600061251661251161250c846124e7565b6124f1565b611d28565b9050919050565b612526816124fb565b82525050565b600060c0820190506125416000830189611eb5565b61254e6020830188611dd4565b61255b604083018761251d565b612568606083018661251d565b6125756080830185611eb5565b61258260a0830184611dd4565b979650505050505050565b60008151905061259c81611d32565b92915050565b6000806000606084860312156125bb576125ba611cc5565b5b60006125c98682870161258d565b93505060206125da8682870161258d565b92505060406125eb8682870161258d565b9150509250925092565b600061260082611d28565b915061260b83611d28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612644576126436123c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061268982611d28565b915061269483611d28565b9250826126a4576126a361264f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061270b602183611c15565b9150612716826126af565b604082019050919050565b6000602082019050818103600083015261273a816126fe565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015d5f08530e0402623a742a2e936265b836d4910dc6e6eed1bb33d7d42ed17c264736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000280de800000000000000000000000000000000000000000000000000000000000000006504550454669000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065045504546690000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063a9059cbb11610059578063a9059cbb1461035f578063b2bdfa7b1461039c578063dd62ed3e146103c7578063f2fde38b14610404576100fe565b80638da5cb5b146102b5578063914eb66a146102e057806395d89b41146102f7578063a457c2d714610322576100fe565b8063313ce567116100c6578063313ce567146101d3578063340ac20f146101fe578063395093511461023b57806370a0823114610278576100fe565b806306fdde0314610103578063095ea7b31461012e57806318160ddd1461016b57806323b872dd14610196576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b5061011861042d565b6040516101259190611ca3565b60405180910390f35b34801561013a57600080fd5b5061015560048036038101906101509190611d5e565b6104bf565b6040516101629190611db9565b60405180910390f35b34801561017757600080fd5b506101806104dd565b60405161018d9190611de3565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611dfe565b6104e7565b6040516101ca9190611db9565b60405180910390f35b3480156101df57600080fd5b506101e86105c1565b6040516101f59190611e6d565b60405180910390f35b34801561020a57600080fd5b5061022560048036038101906102209190611e88565b6105d8565b6040516102329190611ec4565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190611d5e565b6108cf565b60405161026f9190611db9565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190611e88565b610982565b6040516102ac9190611de3565b60405180910390f35b3480156102c157600080fd5b506102ca6109cb565b6040516102d79190611ec4565b60405180910390f35b3480156102ec57600080fd5b506102f56109f4565b005b34801561030357600080fd5b5061030c610b47565b6040516103199190611ca3565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190611d5e565b610bd9565b6040516103569190611db9565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190611d5e565b610ca6565b6040516103939190611db9565b60405180910390f35b3480156103a857600080fd5b506103b1610cc5565b6040516103be9190611ec4565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190611edf565b610ce9565b6040516103fb9190611de3565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190611e88565b610d70565b005b60606001805461043c90611f4e565b80601f016020809104026020016040519081016040528092919081815260200182805461046890611f4e565b80156104b55780601f1061048a576101008083540402835291602001916104b5565b820191906000526020600020905b81548152906001019060200180831161049857829003601f168201915b5050505050905090565b60006104d36104cc610f31565b8484610f39565b6001905092915050565b6000600d54905090565b60006104f4848484611102565b506105b684610501610f31565b6105b18560405180606001604052806028815260200161274260289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610567610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b610f39565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60006105e2610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066690611fcb565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107059190612000565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107909190612000565b6040518363ffffffff1660e01b81526004016107ad92919061202d565b602060405180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190612000565b915082905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060156101000a81548160ff021916908315150217905550600160096000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60006109786108dc610f31565b8461097385600860006108ed610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b610f39565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109fc610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090611fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054610b5690611f4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f4e565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b6000610c9c610be6610f31565b84610c978560405180606001604052806025815260200161276a6025913960086000610c10610f31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b610f39565b6001905092915050565b6000610cba610cb3610f31565b8484611102565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d78610f31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90611fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b906120c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f9061215a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906121ec565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f59190611de3565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111699061227e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890612310565b60405180910390fd5b60008211611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906123a2565b60405180910390fd5b601060149054906101000a900460ff161561124b576112448484846115bb565b90506114f2565b600061125630610982565b90506000600e54821015905080801561127c5750601060149054906101000a900460ff16155b80156112d25750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156112ea5750601060159054906101000a900460ff165b1561131557601060169054906101000a900460ff161561130a57600e5491505b611314868361178e565b5b61139e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006113ee878787611872565b905061144281600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114e29190611de3565b60405180910390a3600193505050505b9392505050565b6000838311158290611541576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115389190611ca3565b60405180910390fd5b506000838561155091906123f1565b9050809150509392505050565b600080828461156c9190612425565b9050838110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a8906124c7565b60405180910390fd5b8091505092915050565b6000611646826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f99092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116db82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161177b9190611de3565b60405180910390a3600190509392505050565b6117bb30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610f39565b6000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982858560008030426040518863ffffffff1660e01b81526004016118279695949392919061252c565b60606040518083038185885af1158015611845573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061186a91906125a2565b505050505050565b60008060009050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118fa576118f360646118e5600b5486611a9990919063ffffffff16565b611b1390919063ffffffff16565b9050611978565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611977576119746064611966600c5486611a9990919063ffffffff16565b611b1390919063ffffffff16565b90505b5b6000811115611a7c576119d381600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155d90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a739190611de3565b60405180910390a35b611a8f8184611b5d90919063ffffffff16565b9150509392505050565b6000808303611aab5760009050611b0d565b60008284611ab991906125f5565b9050828482611ac8919061267e565b14611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90612721565b60405180910390fd5b809150505b92915050565b6000611b5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ba7565b905092915050565b6000611b9f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114f9565b905092915050565b60008083118290611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be59190611ca3565b60405180910390fd5b5060008385611bfd919061267e565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c44578082015181840152602081019050611c29565b83811115611c53576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c7582611c0a565b611c7f8185611c15565b9350611c8f818560208601611c26565b611c9881611c59565b840191505092915050565b60006020820190508181036000830152611cbd8184611c6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cf582611cca565b9050919050565b611d0581611cea565b8114611d1057600080fd5b50565b600081359050611d2281611cfc565b92915050565b6000819050919050565b611d3b81611d28565b8114611d4657600080fd5b50565b600081359050611d5881611d32565b92915050565b60008060408385031215611d7557611d74611cc5565b5b6000611d8385828601611d13565b9250506020611d9485828601611d49565b9150509250929050565b60008115159050919050565b611db381611d9e565b82525050565b6000602082019050611dce6000830184611daa565b92915050565b611ddd81611d28565b82525050565b6000602082019050611df86000830184611dd4565b92915050565b600080600060608486031215611e1757611e16611cc5565b5b6000611e2586828701611d13565b9350506020611e3686828701611d13565b9250506040611e4786828701611d49565b9150509250925092565b600060ff82169050919050565b611e6781611e51565b82525050565b6000602082019050611e826000830184611e5e565b92915050565b600060208284031215611e9e57611e9d611cc5565b5b6000611eac84828501611d13565b91505092915050565b611ebe81611cea565b82525050565b6000602082019050611ed96000830184611eb5565b92915050565b60008060408385031215611ef657611ef5611cc5565b5b6000611f0485828601611d13565b9250506020611f1585828601611d13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f6657607f821691505b602082108103611f7957611f78611f1f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611fb5602083611c15565b9150611fc082611f7f565b602082019050919050565b60006020820190508181036000830152611fe481611fa8565b9050919050565b600081519050611ffa81611cfc565b92915050565b60006020828403121561201657612015611cc5565b5b600061202484828501611feb565b91505092915050565b60006040820190506120426000830185611eb5565b61204f6020830184611eb5565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120b2602683611c15565b91506120bd82612056565b604082019050919050565b600060208201905081810360008301526120e1816120a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612144602483611c15565b915061214f826120e8565b604082019050919050565b6000602082019050818103600083015261217381612137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006121d6602283611c15565b91506121e18261217a565b604082019050919050565b60006020820190508181036000830152612205816121c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612268602583611c15565b91506122738261220c565b604082019050919050565b600060208201905081810360008301526122978161225b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006122fa602383611c15565b91506123058261229e565b604082019050919050565b60006020820190508181036000830152612329816122ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061238c602983611c15565b915061239782612330565b604082019050919050565b600060208201905081810360008301526123bb8161237f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123fc82611d28565b915061240783611d28565b92508282101561241a576124196123c2565b5b828203905092915050565b600061243082611d28565b915061243b83611d28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124705761246f6123c2565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006124b1601b83611c15565b91506124bc8261247b565b602082019050919050565b600060208201905081810360008301526124e0816124a4565b9050919050565b6000819050919050565b6000819050919050565b600061251661251161250c846124e7565b6124f1565b611d28565b9050919050565b612526816124fb565b82525050565b600060c0820190506125416000830189611eb5565b61254e6020830188611dd4565b61255b604083018761251d565b612568606083018661251d565b6125756080830185611eb5565b61258260a0830184611dd4565b979650505050505050565b60008151905061259c81611d32565b92915050565b6000806000606084860312156125bb576125ba611cc5565b5b60006125c98682870161258d565b93505060206125da8682870161258d565b92505060406125eb8682870161258d565b9150509250925092565b600061260082611d28565b915061260b83611d28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612644576126436123c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061268982611d28565b915061269483611d28565b9250826126a4576126a361264f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061270b602183611c15565b9150612716826126af565b604082019050919050565b6000602082019050818103600083015261273a816126fe565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015d5f08530e0402623a742a2e936265b836d4910dc6e6eed1bb33d7d42ed17c264736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000280de800000000000000000000000000000000000000000000000000000000000000006504550454669000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065045504546690000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : coinName (string): PEPEFi
Arg [1] : coinSymbol (string): PEPEFi
Arg [2] : coinDecimals (uint8): 18
Arg [3] : supply (uint256): 42000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000000000000000000000000000000000000280de80
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 5045504546690000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 5045504546690000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

23857:12970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26603:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27769:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26880:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29208:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26789:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28287:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27266:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26988:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14803:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15017:145;;;;;;;;;;;;;:::i;:::-;;26694:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27492:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29033:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14679:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27115:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15170:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26603:83;26640:13;26673:5;26666:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26603:83;:::o;27769:161::-;27844:4;27861:39;27870:12;:10;:12::i;:::-;27884:7;27893:6;27861:8;:39::i;:::-;27918:4;27911:11;;27769:161;;;;:::o;26880:100::-;26933:7;26960:12;;26953:19;;26880:100;:::o;29208:313::-;29306:4;29323:36;29333:6;29341:9;29352:6;29323:9;:36::i;:::-;;29370:121;29379:6;29387:12;:10;:12::i;:::-;29401:89;29439:6;29401:89;;;;;;;;;;;;;;;;;:11;:19;29413:6;29401:19;;;;;;;;;;;;;;;:33;29421:12;:10;:12::i;:::-;29401:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29370:8;:121::i;:::-;29509:4;29502:11;;29208:313;;;;;:::o;26789:83::-;26830:5;26855:9;;;;;;;;;;;26848:16;;26789:83;:::o;28287:504::-;28362:22;14940:12;:10;:12::i;:::-;14930:22;;:6;;;;;;;;;;:22;;;14922:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28399:35:::1;28456:7;;;;;;;;;;;28399:65;;28512:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28494:53;;;28556:4;28563:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28494:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28477:110;;28638:16;28600:55;;28676:16;28666:7;;:26;;;;;;;;;;;;;;;;;;28727:4;28703:21;;:28;;;;;;;;;;;;;;;;;;28779:4;28742:12;:34;28763:11;;;;;;;;;;;28742:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;28386:405;28287:504:::0;;;:::o;27266:218::-;27354:4;27371:83;27380:12;:10;:12::i;:::-;27394:7;27403:50;27442:10;27403:11;:25;27415:12;:10;:12::i;:::-;27403:25;;;;;;;;;;;;;;;:34;27429:7;27403:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27371:8;:83::i;:::-;27472:4;27465:11;;27266:218;;;;:::o;26988:119::-;27054:7;27081:9;:18;27091:7;27081:18;;;;;;;;;;;;;;;;27074:25;;26988:119;;;:::o;14803:79::-;14841:7;14868:6;;;;;;;;;;;14861:13;;14803:79;:::o;15017:145::-;14940:12;:10;:12::i;:::-;14930:22;;:6;;;;;;;;;;:22;;;14922:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15121:1:::1;15084:40;;15105:6;::::0;::::1;;;;;;;;15084:40;;;;;;;;;;;;15152:1;15135:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15017:145::o:0;26694:87::-;26733:13;26766:7;26759:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26694:87;:::o;27492:269::-;27585:4;27602:129;27611:12;:10;:12::i;:::-;27625:7;27634:96;27673:15;27634:96;;;;;;;;;;;;;;;;;:11;:25;27646:12;:10;:12::i;:::-;27634:25;;;;;;;;;;;;;;;:34;27660:7;27634:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;27602:8;:129::i;:::-;27749:4;27742:11;;27492:269;;;;:::o;29033:167::-;29111:4;29128:42;29138:12;:10;:12::i;:::-;29152:9;29163:6;29128:9;:42::i;:::-;;29188:4;29181:11;;29033:167;;;;:::o;14679:21::-;;;;;;;;;;;;:::o;27115:143::-;27196:7;27223:11;:18;27235:5;27223:18;;;;;;;;;;;;;;;:27;27242:7;27223:27;;;;;;;;;;;;;;;;27216:34;;27115:143;;;;:::o;15170:236::-;14940:12;:10;:12::i;:::-;14930:22;;:6;;;;;;;;;;:22;;;14922:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15279:1:::1;15259:22;;:8;:22;;::::0;15251:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15369:8;15340:38;;15361:6;::::0;::::1;;;;;;;;15340:38;;;;;;;;;;;;15390:8;15381:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15170:236:::0;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;27938:337::-;28048:1;28031:19;;:5;:19;;;28023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28129:1;28110:21;;:7;:21;;;28102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28213:6;28183:11;:18;28195:5;28183:18;;;;;;;;;;;;;;;:27;28202:7;28183:27;;;;;;;;;;;;;;;:36;;;;28251:7;28235:32;;28244:5;28235:32;;;28260:6;28235:32;;;;;;:::i;:::-;;;;;;;;27938:337;;;:::o;29529:1312::-;29616:4;29661:1;29643:20;;:6;:20;;;29635:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29745:1;29724:23;;:9;:23;;;29716:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29815:1;29806:6;:10;29798:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29878:16;;;;;;;;;;;29875:959;;;29927:41;29942:6;29950:9;29961:6;29927:14;:41::i;:::-;29920:48;;;;29875:959;30021:28;30052:24;30070:4;30052:9;:24::i;:::-;30021:55;;30091:28;30146:24;;30122:20;:48;;30091:79;;30191:23;:44;;;;;30219:16;;;;;;;;;;;30218:17;30191:44;:69;;;;;30240:12;:20;30253:6;30240:20;;;;;;;;;;;;;;;;;;;;;;;;;30239:21;30191:69;:94;;;;;30264:21;;;;;;;;;;;30191:94;30187:306;;;30322:25;;;;;;;;;;;30319:98;;;30393:24;;30370:47;;30319:98;30436:41;30449:6;30456:20;30436:12;:41::i;:::-;30187:306;30529:53;30551:6;30529:53;;;;;;;;;;;;;;;;;:9;:17;30539:6;30529:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30509:9;:17;30519:6;30509:17;;;;;;;;;;;;;;;:73;;;;30599:19;30621:34;30629:6;30637:9;30648:6;30621:7;:34::i;:::-;30599:56;;30697:37;30722:11;30697:9;:20;30707:9;30697:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;30674:9;:20;30684:9;30674:20;;;;;;;;;;;;;;;:60;;;;30773:9;30756:40;;30765:6;30756:40;;;30784:11;30756:40;;;;;;:::i;:::-;;;;;;;;30818:4;30811:11;;;;;29529:1312;;;;;;:::o;10747:192::-;10833:7;10866:1;10861;:6;;10869:12;10853:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10893:9;10909:1;10905;:5;;;;:::i;:::-;10893:17;;10930:1;10923:8;;;10747:192;;;;;:::o;10414:181::-;10472:7;10492:9;10508:1;10504;:5;;;;:::i;:::-;10492:17;;10533:1;10528;:6;;10520:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10586:1;10579:8;;;10414:181;;;;:::o;30849:330::-;30942:4;30979:53;31001:6;30979:53;;;;;;;;;;;;;;;;;:9;:17;30989:6;30979:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;30959:9;:17;30969:6;30959:17;;;;;;;;;;;;;;;:73;;;;31066:32;31091:6;31066:9;:20;31076:9;31066:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;31043:9;:20;31053:9;31043:20;;;;;;;;;;;;;;;:55;;;;31131:9;31114:35;;31123:6;31114:35;;;31142:6;31114:35;;;;;;:::i;:::-;;;;;;;;31167:4;31160:11;;30849:330;;;;;:::o;31828:543::-;31972:54;31989:4;32004:7;;;;;;;;;;;32014:11;31972:8;:54::i;:::-;32037:17;32058:21;32037:42;;32120:7;;;;;;;;;;;:23;;;32151:9;32176:6;32197:11;32223:1;32266;32317:4;32337:15;32120:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31894:477;31828:543;;:::o;33025:596::-;33111:7;33133:17;33153:1;33133:21;;33168:12;:20;33181:6;33168:20;;;;;;;;;;;;;;;;;;;;;;;;;33165:223;;;33217:38;33251:3;33217:29;33228:17;;33217:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;33205:50;;33165:223;;;33285:12;:23;33298:9;33285:23;;;;;;;;;;;;;;;;;;;;;;;;;33282:106;;;33337:39;33372:3;33337:30;33348:18;;33337:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;33325:51;;33282:106;33165:223;33415:1;33403:9;:13;33400:173;;;33460:39;33489:9;33460;:24;33478:4;33460:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;33433:9;:24;33451:4;33433:24;;;;;;;;;;;;;;;:66;;;;33544:4;33519:42;;33528:6;33519:42;;;33551:9;33519:42;;;;;;:::i;:::-;;;;;;;;33400:173;33592:21;33603:9;33592:6;:10;;:21;;;;:::i;:::-;33585:28;;;33025:596;;;;;:::o;10947:250::-;11005:7;11034:1;11029;:6;11025:47;;11059:1;11052:8;;;;11025:47;11084:9;11100:1;11096;:5;;;;:::i;:::-;11084:17;;11129:1;11124;11120;:5;;;;:::i;:::-;:10;11112:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11188:1;11181:8;;;10947:250;;;;;:::o;11205:132::-;11263:7;11290:39;11294:1;11297;11290:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11283:46;;11205:132;;;;:::o;10603:136::-;10661:7;10688:43;10692:1;10695;10688:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10681:50;;10603:136;;;;:::o;11345:278::-;11431:7;11463:1;11459;:5;11466:12;11451:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11490:9;11506:1;11502;:5;;;;:::i;:::-;11490:17;;11614:1;11607:8;;;11345: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:118::-;5323:24;5341:5;5323:24;:::i;:::-;5318:3;5311:37;5236:118;;:::o;5360:222::-;5453:4;5491:2;5480:9;5476:18;5468:26;;5504:71;5572:1;5561:9;5557:17;5548:6;5504:71;:::i;:::-;5360:222;;;;:::o;5588:474::-;5656:6;5664;5713:2;5701:9;5692:7;5688:23;5684:32;5681:119;;;5719:79;;:::i;:::-;5681:119;5839:1;5864:53;5909:7;5900:6;5889:9;5885:22;5864:53;:::i;:::-;5854:63;;5810:117;5966:2;5992:53;6037:7;6028:6;6017:9;6013:22;5992:53;:::i;:::-;5982:63;;5937:118;5588:474;;;;;:::o;6068:180::-;6116:77;6113:1;6106:88;6213:4;6210:1;6203:15;6237:4;6234:1;6227:15;6254:320;6298:6;6335:1;6329:4;6325:12;6315:22;;6382:1;6376:4;6372:12;6403:18;6393:81;;6459:4;6451:6;6447:17;6437:27;;6393:81;6521:2;6513:6;6510:14;6490:18;6487:38;6484:84;;6540:18;;:::i;:::-;6484:84;6305:269;6254:320;;;:::o;6580:182::-;6720:34;6716:1;6708:6;6704:14;6697:58;6580:182;:::o;6768:366::-;6910:3;6931:67;6995:2;6990:3;6931:67;:::i;:::-;6924:74;;7007:93;7096:3;7007:93;:::i;:::-;7125:2;7120:3;7116:12;7109:19;;6768:366;;;:::o;7140:419::-;7306:4;7344:2;7333:9;7329:18;7321:26;;7393:9;7387:4;7383:20;7379:1;7368:9;7364:17;7357:47;7421:131;7547:4;7421:131;:::i;:::-;7413:139;;7140:419;;;:::o;7565:143::-;7622:5;7653:6;7647:13;7638:22;;7669:33;7696:5;7669:33;:::i;:::-;7565:143;;;;:::o;7714:351::-;7784:6;7833:2;7821:9;7812:7;7808:23;7804:32;7801:119;;;7839:79;;:::i;:::-;7801:119;7959:1;7984:64;8040:7;8031:6;8020:9;8016:22;7984:64;:::i;:::-;7974:74;;7930:128;7714:351;;;;:::o;8071:332::-;8192:4;8230:2;8219:9;8215:18;8207:26;;8243:71;8311:1;8300:9;8296:17;8287:6;8243:71;:::i;:::-;8324:72;8392:2;8381:9;8377:18;8368:6;8324:72;:::i;:::-;8071:332;;;;;:::o;8409:225::-;8549:34;8545:1;8537:6;8533:14;8526:58;8618:8;8613:2;8605:6;8601:15;8594:33;8409:225;:::o;8640:366::-;8782:3;8803:67;8867:2;8862:3;8803:67;:::i;:::-;8796:74;;8879:93;8968:3;8879:93;:::i;:::-;8997:2;8992:3;8988:12;8981:19;;8640:366;;;:::o;9012:419::-;9178:4;9216:2;9205:9;9201:18;9193:26;;9265:9;9259:4;9255:20;9251:1;9240:9;9236:17;9229:47;9293:131;9419:4;9293:131;:::i;:::-;9285:139;;9012:419;;;:::o;9437:223::-;9577:34;9573:1;9565:6;9561:14;9554:58;9646:6;9641:2;9633:6;9629:15;9622:31;9437:223;:::o;9666:366::-;9808:3;9829:67;9893:2;9888:3;9829:67;:::i;:::-;9822:74;;9905:93;9994:3;9905:93;:::i;:::-;10023:2;10018:3;10014:12;10007:19;;9666:366;;;:::o;10038:419::-;10204:4;10242:2;10231:9;10227:18;10219:26;;10291:9;10285:4;10281:20;10277:1;10266:9;10262:17;10255:47;10319:131;10445:4;10319:131;:::i;:::-;10311:139;;10038:419;;;:::o;10463:221::-;10603:34;10599:1;10591:6;10587:14;10580:58;10672:4;10667:2;10659:6;10655:15;10648:29;10463:221;:::o;10690:366::-;10832:3;10853:67;10917:2;10912:3;10853:67;:::i;:::-;10846:74;;10929:93;11018:3;10929:93;:::i;:::-;11047:2;11042:3;11038:12;11031:19;;10690:366;;;:::o;11062:419::-;11228:4;11266:2;11255:9;11251:18;11243:26;;11315:9;11309:4;11305:20;11301:1;11290:9;11286:17;11279:47;11343:131;11469:4;11343:131;:::i;:::-;11335:139;;11062:419;;;:::o;11487:224::-;11627:34;11623:1;11615:6;11611:14;11604:58;11696:7;11691:2;11683:6;11679:15;11672:32;11487:224;:::o;11717:366::-;11859:3;11880:67;11944:2;11939:3;11880:67;:::i;:::-;11873:74;;11956:93;12045:3;11956:93;:::i;:::-;12074:2;12069:3;12065:12;12058:19;;11717:366;;;:::o;12089:419::-;12255:4;12293:2;12282:9;12278:18;12270:26;;12342:9;12336:4;12332:20;12328:1;12317:9;12313:17;12306:47;12370:131;12496:4;12370:131;:::i;:::-;12362:139;;12089:419;;;:::o;12514:222::-;12654:34;12650:1;12642:6;12638:14;12631:58;12723:5;12718:2;12710:6;12706:15;12699:30;12514:222;:::o;12742:366::-;12884:3;12905:67;12969:2;12964:3;12905:67;:::i;:::-;12898:74;;12981:93;13070:3;12981:93;:::i;:::-;13099:2;13094:3;13090:12;13083:19;;12742:366;;;:::o;13114:419::-;13280:4;13318:2;13307:9;13303:18;13295:26;;13367:9;13361:4;13357:20;13353:1;13342:9;13338:17;13331:47;13395:131;13521:4;13395:131;:::i;:::-;13387:139;;13114:419;;;:::o;13539:228::-;13679:34;13675:1;13667:6;13663:14;13656:58;13748:11;13743:2;13735:6;13731:15;13724:36;13539:228;:::o;13773:366::-;13915:3;13936:67;14000:2;13995:3;13936:67;:::i;:::-;13929:74;;14012:93;14101:3;14012:93;:::i;:::-;14130:2;14125:3;14121:12;14114:19;;13773:366;;;:::o;14145:419::-;14311:4;14349:2;14338:9;14334:18;14326:26;;14398:9;14392:4;14388:20;14384:1;14373:9;14369:17;14362:47;14426:131;14552:4;14426:131;:::i;:::-;14418:139;;14145:419;;;:::o;14570:180::-;14618:77;14615:1;14608:88;14715:4;14712:1;14705:15;14739:4;14736:1;14729:15;14756:191;14796:4;14816:20;14834:1;14816:20;:::i;:::-;14811:25;;14850:20;14868:1;14850:20;:::i;:::-;14845:25;;14889:1;14886;14883:8;14880:34;;;14894:18;;:::i;:::-;14880:34;14939:1;14936;14932:9;14924:17;;14756:191;;;;:::o;14953:305::-;14993:3;15012:20;15030:1;15012:20;:::i;:::-;15007:25;;15046:20;15064:1;15046:20;:::i;:::-;15041:25;;15200:1;15132:66;15128:74;15125:1;15122:81;15119:107;;;15206:18;;:::i;:::-;15119:107;15250:1;15247;15243:9;15236:16;;14953:305;;;;:::o;15264:177::-;15404:29;15400:1;15392:6;15388:14;15381:53;15264:177;:::o;15447:366::-;15589:3;15610:67;15674:2;15669:3;15610:67;:::i;:::-;15603:74;;15686:93;15775:3;15686:93;:::i;:::-;15804:2;15799:3;15795:12;15788:19;;15447:366;;;:::o;15819:419::-;15985:4;16023:2;16012:9;16008:18;16000:26;;16072:9;16066:4;16062:20;16058:1;16047:9;16043:17;16036:47;16100:131;16226:4;16100:131;:::i;:::-;16092:139;;15819:419;;;:::o;16244:85::-;16289:7;16318:5;16307:16;;16244:85;;;:::o;16335:60::-;16363:3;16384:5;16377:12;;16335:60;;;:::o;16401:158::-;16459:9;16492:61;16510:42;16519:32;16545:5;16519:32;:::i;:::-;16510:42;:::i;:::-;16492:61;:::i;:::-;16479:74;;16401:158;;;:::o;16565:147::-;16660:45;16699:5;16660:45;:::i;:::-;16655:3;16648:58;16565:147;;:::o;16718:807::-;16967:4;17005:3;16994:9;16990:19;16982:27;;17019:71;17087:1;17076:9;17072:17;17063:6;17019:71;:::i;:::-;17100:72;17168:2;17157:9;17153:18;17144:6;17100:72;:::i;:::-;17182:80;17258:2;17247:9;17243:18;17234:6;17182:80;:::i;:::-;17272;17348:2;17337:9;17333:18;17324:6;17272:80;:::i;:::-;17362:73;17430:3;17419:9;17415:19;17406:6;17362:73;:::i;:::-;17445;17513:3;17502:9;17498:19;17489:6;17445:73;:::i;:::-;16718:807;;;;;;;;;:::o;17531:143::-;17588:5;17619:6;17613:13;17604:22;;17635:33;17662:5;17635:33;:::i;:::-;17531:143;;;;:::o;17680:663::-;17768:6;17776;17784;17833:2;17821:9;17812:7;17808:23;17804:32;17801:119;;;17839:79;;:::i;:::-;17801:119;17959:1;17984:64;18040:7;18031:6;18020:9;18016:22;17984:64;:::i;:::-;17974:74;;17930:128;18097:2;18123:64;18179:7;18170:6;18159:9;18155:22;18123:64;:::i;:::-;18113:74;;18068:129;18236:2;18262:64;18318:7;18309:6;18298:9;18294:22;18262:64;:::i;:::-;18252:74;;18207:129;17680:663;;;;;:::o;18349:348::-;18389:7;18412:20;18430:1;18412:20;:::i;:::-;18407:25;;18446:20;18464:1;18446:20;:::i;:::-;18441:25;;18634:1;18566:66;18562:74;18559:1;18556:81;18551:1;18544:9;18537:17;18533:105;18530:131;;;18641:18;;:::i;:::-;18530:131;18689:1;18686;18682:9;18671:20;;18349:348;;;;:::o;18703:180::-;18751:77;18748:1;18741:88;18848:4;18845:1;18838:15;18872:4;18869:1;18862:15;18889:185;18929:1;18946:20;18964:1;18946:20;:::i;:::-;18941:25;;18980:20;18998:1;18980:20;:::i;:::-;18975:25;;19019:1;19009:35;;19024:18;;:::i;:::-;19009:35;19066:1;19063;19059:9;19054:14;;18889:185;;;;:::o;19080:220::-;19220:34;19216:1;19208:6;19204:14;19197:58;19289:3;19284:2;19276:6;19272:15;19265:28;19080:220;:::o;19306:366::-;19448:3;19469:67;19533:2;19528:3;19469:67;:::i;:::-;19462:74;;19545:93;19634:3;19545:93;:::i;:::-;19663:2;19658:3;19654:12;19647:19;;19306:366;;;:::o;19678:419::-;19844:4;19882:2;19871:9;19867:18;19859:26;;19931:9;19925:4;19921:20;19917:1;19906:9;19902:17;19895:47;19959:131;20085:4;19959:131;:::i;:::-;19951:139;;19678:419;;;:::o

Swarm Source

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