ETH Price: $3,479.06 (+0.90%)

Token

PWRCASH (PWRC)
 

Overview

Max Total Supply

100,000,000 PWRC

Holders

426

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
190,494.626870967434368872 PWRC

Value
$0.00
0xeD22B4B3ad611a608B66c8a43A1EcC3308a319b6
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:
PWRCASH

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-07
*/

/**
 *Submitted for verification at BscScan.com on 2023-01-31
*/

// SPDX-License-Identifier: MIT
 
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/math/SafeMath.sol
 
pragma solidity ^0.8.0;
 
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
 
    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
 
    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
 
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
 
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
// File: pwr.sol
 
 
 
pragma solidity ^0.8.7;
 
 
 
/**
 * @dev Interfaces
 */
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        payable
        returns (uint256[] memory amounts);
    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline)
        external
        returns (uint256[] memory amounts);
    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        returns (uint256[] memory amounts);
    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline)
        external
        payable
        returns (uint256[] memory amounts);
 
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);
    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut);
    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01{
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint256 amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
 
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
 
    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
}
 
contract PWRCASH is Context, IERC20, IERC20Metadata, Ownable {
    receive() external payable {}
 
    event SendNative(bool _wallet);
 
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;

    address public tAddress1;
 
    uint256 _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
 
    mapping (string => uint256) txCut;
 
    mapping (address => bool) public cutExempt;
    mapping (address => bool) public txExempt;
 
    // taxes for differnet levels
 
    struct TokenCut {
        uint256 forMarketing;
        uint256 forFarming;
    }
 
    struct TxLimit {
        uint256 buyLimit;
        uint256 sellLimit;
        bool inactive;
    }
 
    TxLimit txLimits;
 
    struct SwapToken {
        uint256 swapTokensAt;
        uint256 lastSwap;
        uint256 swapDelay;
        uint256 minToSend;
    }
 
    SwapToken public swapTokens;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    constructor() {
        _name = "PWRCASH";
        _symbol = "PWRC";
        _decimals = 18;
        _totalSupply = 100_000_000 * (10 ** decimals());

        tAddress1 = msg.sender;
 
        cutExempt[msg.sender] = true;
        txExempt[msg.sender] = true;
        cutExempt[address(this)] = true;
        txExempt[address(this)] = true;
        cutExempt[tAddress1] = true;
        txExempt[tAddress1] = true;
 
        /**
            - marketing, farming
        */
        txCut["marketingBuy"] = 75; // 1%
        txCut["farmingBuy"] = 75;
 
        txCut["marketingSell"] = 75;
        txCut["farmingSell"] = 75;
 
        /**
            Set default tx limits
            - buy limit, sell limit
        */
        txLimits.buyLimit = _totalSupply.div(100);
        txLimits.sellLimit = _totalSupply.div(400);
 
        swapTokens.swapTokensAt = _totalSupply.div(1794);
        swapTokens.minToSend = 1 ether;
        swapTokens.swapDelay = 5 minutes;
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _totalSupply);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint256).max);
 
        approve(address(uniswapV2Router), _totalSupply);
        cutExempt[address(uniswapV2Router)] = true;
 
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
 
    /**
        Sets buy/sell transaction cut
    */
    event Cuts(
        uint256 _marketingBuy,
        uint256 _farmingBuy,
        uint256 _marketingSell,
        uint256 _farmingSell
    );
    

    // Remove cut forever
    function removeCuts() external onlyOwner {
        txCut["marketingBuy"] = 0;
        txCut["farmingBuy"] = 0;
 
        txCut["marketingSell"] = 0;
        txCut["farmingSell"] = 0;
 
        emit Cuts(
            0,
            0,
            0,
            0
        );
    }
 
    /**
        Returns buy/sell transaction
    */
    function getCut() public view returns(
        uint256 marketingBuy,
        uint256 farmingBuy,
        uint256 marketingSell,
        uint256 farmingSell
    ) {
        return (
            txCut["marketingBuy"],
            txCut["farmingBuy"],
            txCut["marketingSell"],
            txCut["farmingSell"]
        );
    }
 
    /**
        Sets the tax collector contracts
    */
    function setTaxAddress(address _tAddress1) external onlyOwner {
        tAddress1 = _tAddress1;
    }
 
    /**
        Sets the tax free trading for the specific address
    */
    function setCutExempt(address _address, bool _value) external onlyOwner {
        cutExempt[_address] = _value;
    }
 
    /**
        Sets the limit free trading for the specific address
    */
    function setTxExempt(address _address, bool _value) external onlyOwner {
        txExempt[_address] = _value;
    }
 
    /**
        Remove limits forever
    */
    function removeLimits() external onlyOwner {
        txLimits.inactive = true;
    }
 
    /**
        Sell tokens at
    */
    function setSwapTokens(uint256 _swapTokensAt, uint256 _lastSwap, uint256 _delay, uint256 _minToSend) external onlyOwner {
        swapTokens.swapTokensAt = _swapTokensAt;
        swapTokens.lastSwap = _lastSwap;
        swapTokens.swapDelay = _delay;
        swapTokens.minToSend = _minToSend;
    }
 
    /**
        Returns the sell/buy limits & cooldown period
    */
    function getTxLimits() public view returns(uint256 buyLimit, uint256 sellLimit, bool inactive) {
        return (txLimits.buyLimit, txLimits.sellLimit, txLimits.inactive);
    }
 
    /**
        Checks the BUY transaction limits for the specific user with the sent amount
    */
    function checkBuyTx(address _sender, uint256 _amount) internal view {
        require(
            txLimits.inactive == true ||
            txExempt[_sender] == true ||
            _amount < txLimits.buyLimit,
            "Buy transaction limit reached!"
        );
    }
 
    /**
        Checks the SELL transaction limits for the specific user with the sent amount
    */
    function checkSellTx(address _sender, uint256 _amount) internal view {
        require(
            txLimits.inactive == true ||
            txExempt[_sender] == true ||
            _amount < txLimits.sellLimit,
            "Sell transaction limit reached!"
        );
    }
 
    /**
        Automatic swap
    */
 
    function swapTokensForNative(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _amount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function manualSwapTokensForNative(uint256 _amount) external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _amount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function manualSendNative() external onlyOwner {
        uint256 contractNativeBalance = address(this).balance;
        sendNativeTokens(contractNativeBalance);
    }
 
    function withdrawAnyToken(address payable _to, IERC20 _token) public onlyOwner {
        _token.transfer(_to, _token.balanceOf(address(this)));
    }
 
    function sendNativeTokens(uint256 _amount) private {
        payable(tAddress1).transfer(_amount);
    }
 
   /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
 
        return true;
    }
 
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
 
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
 
        uint256 marketingCut;
        uint256 farmingCut;
 
        bool hasCut = true;
 
        // BUY
        if(from == uniswapV2Pair) {
 
            checkBuyTx(to, amount);
 
            marketingCut = txCut["marketingBuy"];
            farmingCut = txCut["farmingBuy"];
        }
        // SELL
        else if(to == uniswapV2Pair) {
            checkSellTx(from, amount);
 
            marketingCut = txCut["marketingSell"];
            farmingCut = txCut["farmingSell"];
        }
 
        unchecked {
            _balances[from] = fromBalance - amount;
        }
 
        if(cutExempt[to] || cutExempt[from]) {
            hasCut = false;
        }
 
        if(hasCut && (to == uniswapV2Pair || from == uniswapV2Pair)) {
            TokenCut memory TokenCuts;
            TokenCuts.forMarketing = amount.mul(marketingCut).div(10000);
            TokenCuts.forFarming = amount.mul(farmingCut).div(10000);
 
            uint256 totalCuts =
                TokenCuts.forMarketing
                .add(TokenCuts.forFarming);
 
            amount = amount.sub(totalCuts);
 
            _balances[address(this)] += totalCuts; // farming, marketing
            emit Transfer(from, address(this), totalCuts);
 
            // If active we do swap
            uint256 contractTokenBalance = _balances[address(this)];
 
            if (
                contractTokenBalance > swapTokens.swapTokensAt &&
                block.timestamp > swapTokens.lastSwap + swapTokens.swapDelay &&
                to == uniswapV2Pair
            ) {
 
                // Random tokens between 0 - 50000
                uint256 randomTokens = (uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender))) % 50000) * 10**18;
 
                // Balance can be 15% more
                if(contractTokenBalance > (swapTokens.swapTokensAt.add(randomTokens)).mul(1500).div(10000)) {
                    swapTokensForNative(swapTokens.swapTokensAt.add(randomTokens));
                }
 
                swapTokens.lastSwap = block.timestamp;
 
                if(address(this).balance > swapTokens.minToSend) {
                    sendNativeTokens(address(this).balance);
                 }
            }
        }
 
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }
 
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"Cuts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_wallet","type":"bool"}],"name":"SendNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cutExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCut","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"farmingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"farmingSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTxLimits","outputs":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"bool","name":"inactive","type":"bool"}],"stateMutability":"view","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":"manualSendNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualSwapTokensForNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeCuts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setCutExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"_lastSwap","type":"uint256"},{"internalType":"uint256","name":"_delay","type":"uint256"},{"internalType":"uint256","name":"_minToSend","type":"uint256"}],"name":"setSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tAddress1","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokens","outputs":[{"internalType":"uint256","name":"swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"lastSwap","type":"uint256"},{"internalType":"uint256","name":"swapDelay","type":"uint256"},{"internalType":"uint256","name":"minToSend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"","type":"address"}],"name":"txExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"withdrawAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5062000032620000266200094e60201b60201c565b6200095660201b60201c565b6040518060400160405280600781526020017f50575243415348000000000000000000000000000000000000000000000000008152506005908162000078919062000ec7565b506040518060400160405280600481526020017f505752430000000000000000000000000000000000000000000000000000000081525060069081620000bf919062000ec7565b506012600760006101000a81548160ff021916908360ff160217905550620000ec62000a1a60201b60201c565b600a620000fa91906200113e565b6305f5e1006200010b91906200118f565b60048190555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550604b6008604051620003b89062001235565b908152602001604051809103902081905550604b6008604051620003dc906200129c565b908152602001604051809103902081905550604b6008604051620004009062001303565b908152602001604051809103902081905550604b600860405162000424906200136a565b90815260200160405180910390208190555062000453606460045462000a3160201b620012d91790919060201c565b600b600001819055506200047a61019060045462000a3160201b620012d91790919060201c565b600b60010181905550620004a161070260045462000a3160201b620012d91790919060201c565b600e60000181905550670de0b6b3a7640000600e6003018190555061012c600e600201819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055930601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660045462000a4960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005cb9190620013eb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006599190620013eb565b6040518363ffffffff1660e01b8152600401620006789291906200142e565b6020604051808303816000875af115801562000698573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006be9190620013eb565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200079f9291906200146c565b6020604051808303816000875af1158015620007bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007e59190620014d6565b506200081c601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660045462000c1a60201b60201c565b50600160096000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600454600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200093f919062001508565b60405180910390a350620016cd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600760009054906101000a900460ff16905090565b6000818362000a41919062001554565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab29062001613565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2490620016ab565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c0d919062001508565b60405180910390a3505050565b60008062000c2d6200094e60201b60201c565b905062000c4281858562000a4960201b60201c565b600191505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ccf57607f821691505b60208210810362000ce55762000ce462000c87565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d4f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d10565b62000d5b868362000d10565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000da862000da262000d9c8462000d73565b62000d7d565b62000d73565b9050919050565b6000819050919050565b62000dc48362000d87565b62000ddc62000dd38262000daf565b84845462000d1d565b825550505050565b600090565b62000df362000de4565b62000e0081848462000db9565b505050565b5b8181101562000e285762000e1c60008262000de9565b60018101905062000e06565b5050565b601f82111562000e775762000e418162000ceb565b62000e4c8462000d00565b8101602085101562000e5c578190505b62000e7462000e6b8562000d00565b83018262000e05565b50505b505050565b600082821c905092915050565b600062000e9c6000198460080262000e7c565b1980831691505092915050565b600062000eb7838362000e89565b9150826002028217905092915050565b62000ed28262000c4d565b67ffffffffffffffff81111562000eee5762000eed62000c58565b5b62000efa825462000cb6565b62000f0782828562000e2c565b600060209050601f83116001811462000f3f576000841562000f2a578287015190505b62000f36858262000ea9565b86555062000fa6565b601f19841662000f4f8662000ceb565b60005b8281101562000f795784890151825560018201915060208501945060208101905062000f52565b8683101562000f99578489015162000f95601f89168262000e89565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200103c5780860481111562001014576200101362000fae565b5b6001851615620010245780820291505b8081029050620010348562000fdd565b945062000ff4565b94509492505050565b6000826200105757600190506200112a565b816200106757600090506200112a565b81600181146200108057600281146200108b57620010c1565b60019150506200112a565b60ff841115620010a0576200109f62000fae565b5b8360020a915084821115620010ba57620010b962000fae565b5b506200112a565b5060208310610133831016604e8410600b8410161715620010fb5782820a905083811115620010f557620010f462000fae565b5b6200112a565b6200110a848484600162000fea565b9250905081840481111562001124576200112362000fae565b5b81810290505b9392505050565b600060ff82169050919050565b60006200114b8262000d73565b9150620011588362001131565b9250620011877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001045565b905092915050565b60006200119c8262000d73565b9150620011a98362000d73565b9250828202620011b98162000d73565b91508282048414831517620011d357620011d262000fae565b5b5092915050565b600081905092915050565b7f6d61726b6574696e674275790000000000000000000000000000000000000000600082015250565b60006200121d600c83620011da565b91506200122a82620011e5565b600c82019050919050565b600062001242826200120e565b9150819050919050565b7f6661726d696e6742757900000000000000000000000000000000000000000000600082015250565b600062001284600a83620011da565b915062001291826200124c565b600a82019050919050565b6000620012a98262001275565b9150819050919050565b7f6d61726b6574696e6753656c6c00000000000000000000000000000000000000600082015250565b6000620012eb600d83620011da565b9150620012f882620012b3565b600d82019050919050565b60006200131082620012dc565b9150819050919050565b7f6661726d696e6753656c6c000000000000000000000000000000000000000000600082015250565b600062001352600b83620011da565b91506200135f826200131a565b600b82019050919050565b6000620013778262001343565b9150819050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013b38262001386565b9050919050565b620013c581620013a6565b8114620013d157600080fd5b50565b600081519050620013e581620013ba565b92915050565b60006020828403121562001404576200140362001381565b5b60006200141484828501620013d4565b91505092915050565b6200142881620013a6565b82525050565b60006040820190506200144560008301856200141d565b6200145460208301846200141d565b9392505050565b620014668162000d73565b82525050565b60006040820190506200148360008301856200141d565b6200149260208301846200145b565b9392505050565b60008115159050919050565b620014b08162001499565b8114620014bc57600080fd5b50565b600081519050620014d081620014a5565b92915050565b600060208284031215620014ef57620014ee62001381565b5b6000620014ff84828501620014bf565b91505092915050565b60006020820190506200151f60008301846200145b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620015618262000d73565b91506200156e8362000d73565b92508262001581576200158062001525565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620015fb6024836200158c565b915062001608826200159d565b604082019050919050565b600060208201905081810360008301526200162e81620015ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620016936022836200158c565b9150620016a08262001635565b604082019050919050565b60006020820190508181036000830152620016c68162001684565b9050919050565b6138b380620016dd6000396000f3fe6080604052600436106101e75760003560e01c80636519aa24116101025780638da5cb5b11610095578063a9059cbb11610064578063a9059cbb146106e3578063bcab75ab14610720578063dd62ed3e14610737578063f2fde38b14610774576101ee565b80638da5cb5b1461062757806395d89b4114610652578063a1883d261461067d578063a457c2d7146106a6576101ee565b8063751039fc116100d1578063751039fc1461058e57806377f59966146105a5578063844cd9e8146105d35780638ce12f0f146105fe576101ee565b80636519aa24146104e357806370a082311461050c578063715018a61461054957806373d0022414610560576101ee565b8063395093511161017a578063526731e611610149578063526731e61461042b57806354f05ed5146104545780636006a9a41461047d57806361b97324146104ba576101ee565b8063395093511461038357806342966c68146103c057806349bd5a5e146103e957806349d3c13514610414576101ee565b80631694505e116101b65780631694505e146102c557806318160ddd146102f057806323b872dd1461031b578063313ce56714610358576101ee565b806303f3d310146101f35780630402a4d21461022057806306fdde031461025d578063095ea7b314610288576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061020861079d565b6040516102179392919061252d565b60405180910390f35b34801561022c57600080fd5b50610247600480360381019061024291906125c7565b6107cc565b60405161025491906125f4565b60405180910390f35b34801561026957600080fd5b506102726107ec565b60405161027f919061269f565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906126ed565b61087e565b6040516102bc91906125f4565b60405180910390f35b3480156102d157600080fd5b506102da6108a1565b6040516102e7919061278c565b60405180910390f35b3480156102fc57600080fd5b506103056108c7565b60405161031291906127a7565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906127c2565b6108d1565b60405161034f91906125f4565b60405180910390f35b34801561036457600080fd5b5061036d610900565b60405161037a9190612831565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906126ed565b610917565b6040516103b791906125f4565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e2919061284c565b61094e565b005b3480156103f557600080fd5b506103fe610962565b60405161040b9190612888565b60405180910390f35b34801561042057600080fd5b50610429610988565b005b34801561043757600080fd5b50610452600480360381019061044d919061291f565b6109a1565b005b34801561046057600080fd5b5061047b6004803603810190610476919061298b565b610aa5565b005b34801561048957600080fd5b506104a4600480360381019061049f91906125c7565b610b08565b6040516104b191906125f4565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906129cb565b610b28565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061284c565b610b5e565b005b34801561051857600080fd5b50610533600480360381019061052e91906125c7565b610da9565b60405161054091906127a7565b60405180910390f35b34801561055557600080fd5b5061055e610df2565b005b34801561056c57600080fd5b50610575610e06565b6040516105859493929190612a32565b60405180910390f35b34801561059a57600080fd5b506105a3610e24565b005b3480156105b157600080fd5b506105ba610e4c565b6040516105ca9493929190612a32565b60405180910390f35b3480156105df57600080fd5b506105e8610ed4565b6040516105f59190612888565b60405180910390f35b34801561060a57600080fd5b506106256004803603810190610620919061298b565b610efa565b005b34801561063357600080fd5b5061063c610f5d565b6040516106499190612888565b60405180910390f35b34801561065e57600080fd5b50610667610f86565b604051610674919061269f565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906125c7565b611018565b005b3480156106b257600080fd5b506106cd60048036038101906106c891906126ed565b611064565b6040516106da91906125f4565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906126ed565b6110db565b60405161071791906125f4565b60405180910390f35b34801561072c57600080fd5b506107356110fe565b005b34801561074357600080fd5b5061075e60048036038101906107599190612a77565b6111cf565b60405161076b91906127a7565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906125c7565b611256565b005b6000806000600b60000154600b60010154600b60020160009054906101000a900460ff16925092509250909192565b60096020528060005260406000206000915054906101000a900460ff1681565b6060600580546107fb90612ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612ae6565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b6000806108896112ef565b90506108968185856112f7565b600191505092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000806108dc6112ef565b90506108e98582856114c0565b6108f485858561154c565b60019150509392505050565b6000600760009054906101000a900460ff16905090565b6000806109226112ef565b905061094381858561093485896111cf565b61093e9190612b46565b6112f7565b600191505092915050565b61095f6109596112ef565b82611d67565b50565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610990611f1e565b600047905061099e81611f9c565b50565b6109a9611f1e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109ff9190612888565b602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190612b8f565b6040518363ffffffff1660e01b8152600401610a5d929190612bdd565b6020604051808303816000875af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190612c1b565b505050565b610aad611f1e565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b610b30611f1e565b83600e6000018190555082600e6001018190555081600e6002018190555080600e6003018190555050505050565b610b66611f1e565b6000600267ffffffffffffffff811115610b8357610b82612c48565b5b604051908082528060200260200182016040528015610bb15781602001602082028036833780820191505090505b5090503081600081518110610bc957610bc8612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190612cbb565b81600181518110610ca857610ca7612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610d0f30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112f7565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401610d73959493929190612de1565b600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dfa611f1e565b610e046000612008565b565b600e8060000154908060010154908060020154908060030154905084565b610e2c611f1e565b6001600b60020160006101000a81548160ff021916908315150217905550565b6000806000806008604051610e6090612e92565b9081526020016040518091039020546008604051610e7d90612ef3565b9081526020016040518091039020546008604051610e9a90612f54565b9081526020016040518091039020546008604051610eb790612fb5565b908152602001604051809103902054935093509350935090919293565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f02611f1e565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610f9590612ae6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc190612ae6565b801561100e5780601f10610fe35761010080835404028352916020019161100e565b820191906000526020600020905b815481529060010190602001808311610ff157829003601f168201915b5050505050905090565b611020611f1e565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061106f6112ef565b9050600061107d82866111cf565b9050838110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b99061303c565b60405180910390fd5b6110cf82868684036112f7565b60019250505092915050565b6000806110e66112ef565b90506110f381858561154c565b600191505092915050565b611106611f1e565b6000600860405161111690612e92565b9081526020016040518091039020819055506000600860405161113890612ef3565b9081526020016040518091039020819055506000600860405161115a90612f54565b9081526020016040518091039020819055506000600860405161117c90612fb5565b9081526020016040518091039020819055507fbd15f91222454d1b865dec8cc9c6f4b629fa59ff68ce2e1230ebf4b870e56c746000806000806040516111c5949392919061305c565b60405180910390a1565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61125e611f1e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613113565b60405180910390fd5b6112d681612008565b50565b600081836112e79190613162565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613205565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc90613297565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114b391906127a7565b60405180910390a3505050565b60006114cc84846111cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115465781811015611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613303565b60405180910390fd5b61154584848484036112f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290613395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613427565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906134b9565b60405180910390fd5b600080600060019050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361175c5761171986866120cc565b600860405161172790612e92565b9081526020016040518091039020549250600860405161174690612ef3565b90815260200160405180910390205491506117fb565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036117fa576117bb8786612193565b60086040516117c990612f54565b908152602001604051809103902054925060086040516117e890612fb5565b90815260200160405180910390205491505b5b848403600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118e25750600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118ec57600090505b80801561199e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061199d5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b15611ca3576119ab6124df565b6119d26127106119c4868961225a90919063ffffffff16565b6112d990919063ffffffff16565b816000018181525050611a026127106119f4858961225a90919063ffffffff16565b6112d990919063ffffffff16565b8160200181815250506000611a288260200151836000015161227090919063ffffffff16565b9050611a3d818861228690919063ffffffff16565b965080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8e9190612b46565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611af291906127a7565b60405180910390a36000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e6000015481118015611b665750600e60020154600e60010154611b639190612b46565b42115b8015611bbf5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611c9f576000670de0b6b3a764000061c3504233604051602001611be5929190613542565b6040516020818303038152906040528051906020012060001c611c08919061356e565b611c12919061359f565b9050611c54612710611c466105dc611c3885600e6000015461227090919063ffffffff16565b61225a90919063ffffffff16565b6112d990919063ffffffff16565b821115611c7c57611c7b611c7682600e6000015461227090919063ffffffff16565b61229c565b5b42600e60010181905550600e60030154471115611c9d57611c9c47611f9c565b5b505b5050505b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cf29190612b46565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611d5691906127a7565b60405180910390a350505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613653565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906136e5565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1191906127a7565b60405180910390a3505050565b611f266112ef565b73ffffffffffffffffffffffffffffffffffffffff16611f44610f5d565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613751565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612004573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60011515600b60020160009054906101000a900460ff1615151480612141575060011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b806121505750600b6000015481105b61218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906137bd565b60405180910390fd5b5050565b60011515600b60020160009054906101000a900460ff1615151480612208575060011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b806122175750600b6001015481105b612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613829565b60405180910390fd5b5050565b60008183612268919061359f565b905092915050565b6000818361227e9190612b46565b905092915050565b600081836122949190613849565b905092915050565b6000600267ffffffffffffffff8111156122b9576122b8612c48565b5b6040519080825280602002602001820160405280156122e75781602001602082028036833780820191505090505b50905030816000815181106122ff576122fe612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190612cbb565b816001815181106123de576123dd612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061244530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112f7565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124a9959493929190612de1565b600060405180830381600087803b1580156124c357600080fd5b505af11580156124d7573d6000803e3d6000fd5b505050505050565b604051806040016040528060008152602001600081525090565b6000819050919050565b61250c816124f9565b82525050565b60008115159050919050565b61252781612512565b82525050565b60006060820190506125426000830186612503565b61254f6020830185612503565b61255c604083018461251e565b949350505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061259482612569565b9050919050565b6125a481612589565b81146125af57600080fd5b50565b6000813590506125c18161259b565b92915050565b6000602082840312156125dd576125dc612564565b5b60006125eb848285016125b2565b91505092915050565b6000602082019050612609600083018461251e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561264957808201518184015260208101905061262e565b60008484015250505050565b6000601f19601f8301169050919050565b60006126718261260f565b61267b818561261a565b935061268b81856020860161262b565b61269481612655565b840191505092915050565b600060208201905081810360008301526126b98184612666565b905092915050565b6126ca816124f9565b81146126d557600080fd5b50565b6000813590506126e7816126c1565b92915050565b6000806040838503121561270457612703612564565b5b6000612712858286016125b2565b9250506020612723858286016126d8565b9150509250929050565b6000819050919050565b600061275261274d61274884612569565b61272d565b612569565b9050919050565b600061276482612737565b9050919050565b600061277682612759565b9050919050565b6127868161276b565b82525050565b60006020820190506127a1600083018461277d565b92915050565b60006020820190506127bc6000830184612503565b92915050565b6000806000606084860312156127db576127da612564565b5b60006127e9868287016125b2565b93505060206127fa868287016125b2565b925050604061280b868287016126d8565b9150509250925092565b600060ff82169050919050565b61282b81612815565b82525050565b60006020820190506128466000830184612822565b92915050565b60006020828403121561286257612861612564565b5b6000612870848285016126d8565b91505092915050565b61288281612589565b82525050565b600060208201905061289d6000830184612879565b92915050565b60006128ae82612569565b9050919050565b6128be816128a3565b81146128c957600080fd5b50565b6000813590506128db816128b5565b92915050565b60006128ec82612589565b9050919050565b6128fc816128e1565b811461290757600080fd5b50565b600081359050612919816128f3565b92915050565b6000806040838503121561293657612935612564565b5b6000612944858286016128cc565b92505060206129558582860161290a565b9150509250929050565b61296881612512565b811461297357600080fd5b50565b6000813590506129858161295f565b92915050565b600080604083850312156129a2576129a1612564565b5b60006129b0858286016125b2565b92505060206129c185828601612976565b9150509250929050565b600080600080608085870312156129e5576129e4612564565b5b60006129f3878288016126d8565b9450506020612a04878288016126d8565b9350506040612a15878288016126d8565b9250506060612a26878288016126d8565b91505092959194509250565b6000608082019050612a476000830187612503565b612a546020830186612503565b612a616040830185612503565b612a6e6060830184612503565b95945050505050565b60008060408385031215612a8e57612a8d612564565b5b6000612a9c858286016125b2565b9250506020612aad858286016125b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612afe57607f821691505b602082108103612b1157612b10612ab7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b51826124f9565b9150612b5c836124f9565b9250828201905080821115612b7457612b73612b17565b5b92915050565b600081519050612b89816126c1565b92915050565b600060208284031215612ba557612ba4612564565b5b6000612bb384828501612b7a565b91505092915050565b6000612bc782612759565b9050919050565b612bd781612bbc565b82525050565b6000604082019050612bf26000830185612bce565b612bff6020830184612503565b9392505050565b600081519050612c158161295f565b92915050565b600060208284031215612c3157612c30612564565b5b6000612c3f84828501612c06565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612cb58161259b565b92915050565b600060208284031215612cd157612cd0612564565b5b6000612cdf84828501612ca6565b91505092915050565b6000819050919050565b6000612d0d612d08612d0384612ce8565b61272d565b6124f9565b9050919050565b612d1d81612cf2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d5881612589565b82525050565b6000612d6a8383612d4f565b60208301905092915050565b6000602082019050919050565b6000612d8e82612d23565b612d988185612d2e565b9350612da383612d3f565b8060005b83811015612dd4578151612dbb8882612d5e565b9750612dc683612d76565b925050600181019050612da7565b5085935050505092915050565b600060a082019050612df66000830188612503565b612e036020830187612d14565b8181036040830152612e158186612d83565b9050612e246060830185612879565b612e316080830184612503565b9695505050505050565b600081905092915050565b7f6d61726b6574696e674275790000000000000000000000000000000000000000600082015250565b6000612e7c600c83612e3b565b9150612e8782612e46565b600c82019050919050565b6000612e9d82612e6f565b9150819050919050565b7f6661726d696e6742757900000000000000000000000000000000000000000000600082015250565b6000612edd600a83612e3b565b9150612ee882612ea7565b600a82019050919050565b6000612efe82612ed0565b9150819050919050565b7f6d61726b6574696e6753656c6c00000000000000000000000000000000000000600082015250565b6000612f3e600d83612e3b565b9150612f4982612f08565b600d82019050919050565b6000612f5f82612f31565b9150819050919050565b7f6661726d696e6753656c6c000000000000000000000000000000000000000000600082015250565b6000612f9f600b83612e3b565b9150612faa82612f69565b600b82019050919050565b6000612fc082612f92565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061302660258361261a565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b60006080820190506130716000830187612d14565b61307e6020830186612d14565b61308b6040830185612d14565b6130986060830184612d14565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130fd60268361261a565b9150613108826130a1565b604082019050919050565b6000602082019050818103600083015261312c816130f0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061316d826124f9565b9150613178836124f9565b92508261318857613187613133565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131ef60248361261a565b91506131fa82613193565b604082019050919050565b6000602082019050818103600083015261321e816131e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061328160228361261a565b915061328c82613225565b604082019050919050565b600060208201905081810360008301526132b081613274565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006132ed601d8361261a565b91506132f8826132b7565b602082019050919050565b6000602082019050818103600083015261331c816132e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061337f60258361261a565b915061338a82613323565b604082019050919050565b600060208201905081810360008301526133ae81613372565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061341160238361261a565b915061341c826133b5565b604082019050919050565b6000602082019050818103600083015261344081613404565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134a360268361261a565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b6000819050919050565b6134f46134ef826124f9565b6134d9565b82525050565b60008160601b9050919050565b6000613512826134fa565b9050919050565b600061352482613507565b9050919050565b61353c61353782612589565b613519565b82525050565b600061354e82856134e3565b60208201915061355e828461352b565b6014820191508190509392505050565b6000613579826124f9565b9150613584836124f9565b92508261359457613593613133565b5b828206905092915050565b60006135aa826124f9565b91506135b5836124f9565b92508282026135c3816124f9565b915082820484148315176135da576135d9612b17565b5b5092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061363d60218361261a565b9150613648826135e1565b604082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006136cf60228361261a565b91506136da82613673565b604082019050919050565b600060208201905081810360008301526136fe816136c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373b60208361261a565b915061374682613705565b602082019050919050565b6000602082019050818103600083015261376a8161372e565b9050919050565b7f427579207472616e73616374696f6e206c696d69742072656163686564210000600082015250565b60006137a7601e8361261a565b91506137b282613771565b602082019050919050565b600060208201905081810360008301526137d68161379a565b9050919050565b7f53656c6c207472616e73616374696f6e206c696d697420726561636865642100600082015250565b6000613813601f8361261a565b915061381e826137dd565b602082019050919050565b6000602082019050818103600083015261384281613806565b9050919050565b6000613854826124f9565b915061385f836124f9565b925082820390508181111561387757613876612b17565b5b9291505056fea2646970667358221220c7d3b799b7be028b9ee956c5834cd0b9c79df1a426c082a83dd2bcf96a2bd9f964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80636519aa24116101025780638da5cb5b11610095578063a9059cbb11610064578063a9059cbb146106e3578063bcab75ab14610720578063dd62ed3e14610737578063f2fde38b14610774576101ee565b80638da5cb5b1461062757806395d89b4114610652578063a1883d261461067d578063a457c2d7146106a6576101ee565b8063751039fc116100d1578063751039fc1461058e57806377f59966146105a5578063844cd9e8146105d35780638ce12f0f146105fe576101ee565b80636519aa24146104e357806370a082311461050c578063715018a61461054957806373d0022414610560576101ee565b8063395093511161017a578063526731e611610149578063526731e61461042b57806354f05ed5146104545780636006a9a41461047d57806361b97324146104ba576101ee565b8063395093511461038357806342966c68146103c057806349bd5a5e146103e957806349d3c13514610414576101ee565b80631694505e116101b65780631694505e146102c557806318160ddd146102f057806323b872dd1461031b578063313ce56714610358576101ee565b806303f3d310146101f35780630402a4d21461022057806306fdde031461025d578063095ea7b314610288576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061020861079d565b6040516102179392919061252d565b60405180910390f35b34801561022c57600080fd5b50610247600480360381019061024291906125c7565b6107cc565b60405161025491906125f4565b60405180910390f35b34801561026957600080fd5b506102726107ec565b60405161027f919061269f565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906126ed565b61087e565b6040516102bc91906125f4565b60405180910390f35b3480156102d157600080fd5b506102da6108a1565b6040516102e7919061278c565b60405180910390f35b3480156102fc57600080fd5b506103056108c7565b60405161031291906127a7565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906127c2565b6108d1565b60405161034f91906125f4565b60405180910390f35b34801561036457600080fd5b5061036d610900565b60405161037a9190612831565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906126ed565b610917565b6040516103b791906125f4565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e2919061284c565b61094e565b005b3480156103f557600080fd5b506103fe610962565b60405161040b9190612888565b60405180910390f35b34801561042057600080fd5b50610429610988565b005b34801561043757600080fd5b50610452600480360381019061044d919061291f565b6109a1565b005b34801561046057600080fd5b5061047b6004803603810190610476919061298b565b610aa5565b005b34801561048957600080fd5b506104a4600480360381019061049f91906125c7565b610b08565b6040516104b191906125f4565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc91906129cb565b610b28565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061284c565b610b5e565b005b34801561051857600080fd5b50610533600480360381019061052e91906125c7565b610da9565b60405161054091906127a7565b60405180910390f35b34801561055557600080fd5b5061055e610df2565b005b34801561056c57600080fd5b50610575610e06565b6040516105859493929190612a32565b60405180910390f35b34801561059a57600080fd5b506105a3610e24565b005b3480156105b157600080fd5b506105ba610e4c565b6040516105ca9493929190612a32565b60405180910390f35b3480156105df57600080fd5b506105e8610ed4565b6040516105f59190612888565b60405180910390f35b34801561060a57600080fd5b506106256004803603810190610620919061298b565b610efa565b005b34801561063357600080fd5b5061063c610f5d565b6040516106499190612888565b60405180910390f35b34801561065e57600080fd5b50610667610f86565b604051610674919061269f565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f91906125c7565b611018565b005b3480156106b257600080fd5b506106cd60048036038101906106c891906126ed565b611064565b6040516106da91906125f4565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906126ed565b6110db565b60405161071791906125f4565b60405180910390f35b34801561072c57600080fd5b506107356110fe565b005b34801561074357600080fd5b5061075e60048036038101906107599190612a77565b6111cf565b60405161076b91906127a7565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906125c7565b611256565b005b6000806000600b60000154600b60010154600b60020160009054906101000a900460ff16925092509250909192565b60096020528060005260406000206000915054906101000a900460ff1681565b6060600580546107fb90612ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612ae6565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b6000806108896112ef565b90506108968185856112f7565b600191505092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000806108dc6112ef565b90506108e98582856114c0565b6108f485858561154c565b60019150509392505050565b6000600760009054906101000a900460ff16905090565b6000806109226112ef565b905061094381858561093485896111cf565b61093e9190612b46565b6112f7565b600191505092915050565b61095f6109596112ef565b82611d67565b50565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610990611f1e565b600047905061099e81611f9c565b50565b6109a9611f1e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109ff9190612888565b602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190612b8f565b6040518363ffffffff1660e01b8152600401610a5d929190612bdd565b6020604051808303816000875af1158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190612c1b565b505050565b610aad611f1e565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b610b30611f1e565b83600e6000018190555082600e6001018190555081600e6002018190555080600e6003018190555050505050565b610b66611f1e565b6000600267ffffffffffffffff811115610b8357610b82612c48565b5b604051908082528060200260200182016040528015610bb15781602001602082028036833780820191505090505b5090503081600081518110610bc957610bc8612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190612cbb565b81600181518110610ca857610ca7612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610d0f30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112f7565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401610d73959493929190612de1565b600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dfa611f1e565b610e046000612008565b565b600e8060000154908060010154908060020154908060030154905084565b610e2c611f1e565b6001600b60020160006101000a81548160ff021916908315150217905550565b6000806000806008604051610e6090612e92565b9081526020016040518091039020546008604051610e7d90612ef3565b9081526020016040518091039020546008604051610e9a90612f54565b9081526020016040518091039020546008604051610eb790612fb5565b908152602001604051809103902054935093509350935090919293565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f02611f1e565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610f9590612ae6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc190612ae6565b801561100e5780601f10610fe35761010080835404028352916020019161100e565b820191906000526020600020905b815481529060010190602001808311610ff157829003601f168201915b5050505050905090565b611020611f1e565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061106f6112ef565b9050600061107d82866111cf565b9050838110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b99061303c565b60405180910390fd5b6110cf82868684036112f7565b60019250505092915050565b6000806110e66112ef565b90506110f381858561154c565b600191505092915050565b611106611f1e565b6000600860405161111690612e92565b9081526020016040518091039020819055506000600860405161113890612ef3565b9081526020016040518091039020819055506000600860405161115a90612f54565b9081526020016040518091039020819055506000600860405161117c90612fb5565b9081526020016040518091039020819055507fbd15f91222454d1b865dec8cc9c6f4b629fa59ff68ce2e1230ebf4b870e56c746000806000806040516111c5949392919061305c565b60405180910390a1565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61125e611f1e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613113565b60405180910390fd5b6112d681612008565b50565b600081836112e79190613162565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613205565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc90613297565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114b391906127a7565b60405180910390a3505050565b60006114cc84846111cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115465781811015611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613303565b60405180910390fd5b61154584848484036112f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290613395565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613427565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906134b9565b60405180910390fd5b600080600060019050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361175c5761171986866120cc565b600860405161172790612e92565b9081526020016040518091039020549250600860405161174690612ef3565b90815260200160405180910390205491506117fb565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036117fa576117bb8786612193565b60086040516117c990612f54565b908152602001604051809103902054925060086040516117e890612fb5565b90815260200160405180910390205491505b5b848403600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118e25750600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118ec57600090505b80801561199e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061199d5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b5b15611ca3576119ab6124df565b6119d26127106119c4868961225a90919063ffffffff16565b6112d990919063ffffffff16565b816000018181525050611a026127106119f4858961225a90919063ffffffff16565b6112d990919063ffffffff16565b8160200181815250506000611a288260200151836000015161227090919063ffffffff16565b9050611a3d818861228690919063ffffffff16565b965080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8e9190612b46565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611af291906127a7565b60405180910390a36000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e6000015481118015611b665750600e60020154600e60010154611b639190612b46565b42115b8015611bbf5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611c9f576000670de0b6b3a764000061c3504233604051602001611be5929190613542565b6040516020818303038152906040528051906020012060001c611c08919061356e565b611c12919061359f565b9050611c54612710611c466105dc611c3885600e6000015461227090919063ffffffff16565b61225a90919063ffffffff16565b6112d990919063ffffffff16565b821115611c7c57611c7b611c7682600e6000015461227090919063ffffffff16565b61229c565b5b42600e60010181905550600e60030154471115611c9d57611c9c47611f9c565b5b505b5050505b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cf29190612b46565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611d5691906127a7565b60405180910390a350505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613653565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906136e5565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1191906127a7565b60405180910390a3505050565b611f266112ef565b73ffffffffffffffffffffffffffffffffffffffff16611f44610f5d565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613751565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612004573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60011515600b60020160009054906101000a900460ff1615151480612141575060011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b806121505750600b6000015481105b61218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906137bd565b60405180910390fd5b5050565b60011515600b60020160009054906101000a900460ff1615151480612208575060011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b806122175750600b6001015481105b612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613829565b60405180910390fd5b5050565b60008183612268919061359f565b905092915050565b6000818361227e9190612b46565b905092915050565b600081836122949190613849565b905092915050565b6000600267ffffffffffffffff8111156122b9576122b8612c48565b5b6040519080825280602002602001820160405280156122e75781602001602082028036833780820191505090505b50905030816000815181106122ff576122fe612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190612cbb565b816001815181106123de576123dd612c77565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061244530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112f7565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124a9959493929190612de1565b600060405180830381600087803b1580156124c357600080fd5b505af11580156124d7573d6000803e3d6000fd5b505050505050565b604051806040016040528060008152602001600081525090565b6000819050919050565b61250c816124f9565b82525050565b60008115159050919050565b61252781612512565b82525050565b60006060820190506125426000830186612503565b61254f6020830185612503565b61255c604083018461251e565b949350505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061259482612569565b9050919050565b6125a481612589565b81146125af57600080fd5b50565b6000813590506125c18161259b565b92915050565b6000602082840312156125dd576125dc612564565b5b60006125eb848285016125b2565b91505092915050565b6000602082019050612609600083018461251e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561264957808201518184015260208101905061262e565b60008484015250505050565b6000601f19601f8301169050919050565b60006126718261260f565b61267b818561261a565b935061268b81856020860161262b565b61269481612655565b840191505092915050565b600060208201905081810360008301526126b98184612666565b905092915050565b6126ca816124f9565b81146126d557600080fd5b50565b6000813590506126e7816126c1565b92915050565b6000806040838503121561270457612703612564565b5b6000612712858286016125b2565b9250506020612723858286016126d8565b9150509250929050565b6000819050919050565b600061275261274d61274884612569565b61272d565b612569565b9050919050565b600061276482612737565b9050919050565b600061277682612759565b9050919050565b6127868161276b565b82525050565b60006020820190506127a1600083018461277d565b92915050565b60006020820190506127bc6000830184612503565b92915050565b6000806000606084860312156127db576127da612564565b5b60006127e9868287016125b2565b93505060206127fa868287016125b2565b925050604061280b868287016126d8565b9150509250925092565b600060ff82169050919050565b61282b81612815565b82525050565b60006020820190506128466000830184612822565b92915050565b60006020828403121561286257612861612564565b5b6000612870848285016126d8565b91505092915050565b61288281612589565b82525050565b600060208201905061289d6000830184612879565b92915050565b60006128ae82612569565b9050919050565b6128be816128a3565b81146128c957600080fd5b50565b6000813590506128db816128b5565b92915050565b60006128ec82612589565b9050919050565b6128fc816128e1565b811461290757600080fd5b50565b600081359050612919816128f3565b92915050565b6000806040838503121561293657612935612564565b5b6000612944858286016128cc565b92505060206129558582860161290a565b9150509250929050565b61296881612512565b811461297357600080fd5b50565b6000813590506129858161295f565b92915050565b600080604083850312156129a2576129a1612564565b5b60006129b0858286016125b2565b92505060206129c185828601612976565b9150509250929050565b600080600080608085870312156129e5576129e4612564565b5b60006129f3878288016126d8565b9450506020612a04878288016126d8565b9350506040612a15878288016126d8565b9250506060612a26878288016126d8565b91505092959194509250565b6000608082019050612a476000830187612503565b612a546020830186612503565b612a616040830185612503565b612a6e6060830184612503565b95945050505050565b60008060408385031215612a8e57612a8d612564565b5b6000612a9c858286016125b2565b9250506020612aad858286016125b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612afe57607f821691505b602082108103612b1157612b10612ab7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b51826124f9565b9150612b5c836124f9565b9250828201905080821115612b7457612b73612b17565b5b92915050565b600081519050612b89816126c1565b92915050565b600060208284031215612ba557612ba4612564565b5b6000612bb384828501612b7a565b91505092915050565b6000612bc782612759565b9050919050565b612bd781612bbc565b82525050565b6000604082019050612bf26000830185612bce565b612bff6020830184612503565b9392505050565b600081519050612c158161295f565b92915050565b600060208284031215612c3157612c30612564565b5b6000612c3f84828501612c06565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612cb58161259b565b92915050565b600060208284031215612cd157612cd0612564565b5b6000612cdf84828501612ca6565b91505092915050565b6000819050919050565b6000612d0d612d08612d0384612ce8565b61272d565b6124f9565b9050919050565b612d1d81612cf2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d5881612589565b82525050565b6000612d6a8383612d4f565b60208301905092915050565b6000602082019050919050565b6000612d8e82612d23565b612d988185612d2e565b9350612da383612d3f565b8060005b83811015612dd4578151612dbb8882612d5e565b9750612dc683612d76565b925050600181019050612da7565b5085935050505092915050565b600060a082019050612df66000830188612503565b612e036020830187612d14565b8181036040830152612e158186612d83565b9050612e246060830185612879565b612e316080830184612503565b9695505050505050565b600081905092915050565b7f6d61726b6574696e674275790000000000000000000000000000000000000000600082015250565b6000612e7c600c83612e3b565b9150612e8782612e46565b600c82019050919050565b6000612e9d82612e6f565b9150819050919050565b7f6661726d696e6742757900000000000000000000000000000000000000000000600082015250565b6000612edd600a83612e3b565b9150612ee882612ea7565b600a82019050919050565b6000612efe82612ed0565b9150819050919050565b7f6d61726b6574696e6753656c6c00000000000000000000000000000000000000600082015250565b6000612f3e600d83612e3b565b9150612f4982612f08565b600d82019050919050565b6000612f5f82612f31565b9150819050919050565b7f6661726d696e6753656c6c000000000000000000000000000000000000000000600082015250565b6000612f9f600b83612e3b565b9150612faa82612f69565b600b82019050919050565b6000612fc082612f92565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061302660258361261a565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b60006080820190506130716000830187612d14565b61307e6020830186612d14565b61308b6040830185612d14565b6130986060830184612d14565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130fd60268361261a565b9150613108826130a1565b604082019050919050565b6000602082019050818103600083015261312c816130f0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061316d826124f9565b9150613178836124f9565b92508261318857613187613133565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131ef60248361261a565b91506131fa82613193565b604082019050919050565b6000602082019050818103600083015261321e816131e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061328160228361261a565b915061328c82613225565b604082019050919050565b600060208201905081810360008301526132b081613274565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006132ed601d8361261a565b91506132f8826132b7565b602082019050919050565b6000602082019050818103600083015261331c816132e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061337f60258361261a565b915061338a82613323565b604082019050919050565b600060208201905081810360008301526133ae81613372565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061341160238361261a565b915061341c826133b5565b604082019050919050565b6000602082019050818103600083015261344081613404565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134a360268361261a565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b6000819050919050565b6134f46134ef826124f9565b6134d9565b82525050565b60008160601b9050919050565b6000613512826134fa565b9050919050565b600061352482613507565b9050919050565b61353c61353782612589565b613519565b82525050565b600061354e82856134e3565b60208201915061355e828461352b565b6014820191508190509392505050565b6000613579826124f9565b9150613584836124f9565b92508261359457613593613133565b5b828206905092915050565b60006135aa826124f9565b91506135b5836124f9565b92508282026135c3816124f9565b915082820484148315176135da576135d9612b17565b5b5092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061363d60218361261a565b9150613648826135e1565b604082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006136cf60228361261a565b91506136da82613673565b604082019050919050565b600060208201905081810360008301526136fe816136c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061373b60208361261a565b915061374682613705565b602082019050919050565b6000602082019050818103600083015261376a8161372e565b9050919050565b7f427579207472616e73616374696f6e206c696d69742072656163686564210000600082015250565b60006137a7601e8361261a565b91506137b282613771565b602082019050919050565b600060208201905081810360008301526137d68161379a565b9050919050565b7f53656c6c207472616e73616374696f6e206c696d697420726561636865642100600082015250565b6000613813601f8361261a565b915061381e826137dd565b602082019050919050565b6000602082019050818103600083015261384281613806565b9050919050565b6000613854826124f9565b915061385f836124f9565b925082820390508181111561387757613876612b17565b5b9291505056fea2646970667358221220c7d3b799b7be028b9ee956c5834cd0b9c79df1a426c082a83dd2bcf96a2bd9f964736f6c63430008120033

Deployed Bytecode Sourcemap

18332:17607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:179;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18838:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27368:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19391:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26188:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28150:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26079:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28855:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35845:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19439:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25232:169;;;;;;;;;;;;;:::i;:::-;;25410:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22561:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18887:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22871:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24744:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26305:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10186:103;;;;;;;;;;;;;:::i;:::-;;19354:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22735:86;;;;;;;;;;;;;:::i;:::-;;21751:346;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;18645:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22354:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9536:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25966:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22165:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29597:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26639:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:292;;;;;;;;;;;;;:::i;:::-;;26896:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10445:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23256:179;23299:16;23317:17;23336:13;23370:8;:17;;;23389:8;:18;;;23409:8;:17;;;;;;;;;;;;23362:65;;;;;;23256:179;;;:::o;18838:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;25746:100::-;25800:13;25833:5;25826:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25746:100;:::o;27368:201::-;27451:4;27468:13;27484:12;:10;:12::i;:::-;27468:28;;27507:32;27516:5;27523:7;27532:6;27507:8;:32::i;:::-;27557:4;27550:11;;;27368:201;;;;:::o;19391:41::-;;;;;;;;;;;;;:::o;26188:108::-;26249:7;26276:12;;26269:19;;26188:108;:::o;28150:295::-;28281:4;28298:15;28316:12;:10;:12::i;:::-;28298:30;;28339:38;28355:4;28361:7;28370:6;28339:15;:38::i;:::-;28388:27;28398:4;28404:2;28408:6;28388:9;:27::i;:::-;28433:4;28426:11;;;28150:295;;;;;:::o;26079:100::-;26137:5;26162:9;;;;;;;;;;;26155:16;;26079:100;:::o;28855:238::-;28943:4;28960:13;28976:12;:10;:12::i;:::-;28960:28;;28999:64;29008:5;29015:7;29052:10;29024:25;29034:5;29041:7;29024:9;:25::i;:::-;:38;;;;:::i;:::-;28999:8;:64::i;:::-;29081:4;29074:11;;;28855:238;;;;:::o;35845:91::-;35901:27;35907:12;:10;:12::i;:::-;35921:6;35901:5;:27::i;:::-;35845:91;:::o;19439:28::-;;;;;;;;;;;;;:::o;25232:169::-;9421:13;:11;:13::i;:::-;25290:29:::1;25322:21;25290:53;;25354:39;25371:21;25354:16;:39::i;:::-;25279:122;25232:169::o:0;25410:151::-;9421:13;:11;:13::i;:::-;25500:6:::1;:15;;;25516:3;25521:6;:16;;;25546:4;25521:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25500:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25410:151:::0;;:::o;22561:117::-;9421:13;:11;:13::i;:::-;22664:6:::1;22643:8;:18;22652:8;22643:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22561:117:::0;;:::o;18887:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;22871:304::-;9421:13;:11;:13::i;:::-;23028::::1;23002:10;:23;;:39;;;;23074:9;23052:10;:19;;:31;;;;23117:6;23094:10;:20;;:29;;;;23157:10;23134;:20;;:33;;;;22871:304:::0;;;;:::o;24744:479::-;9421:13;:11;:13::i;:::-;24826:21:::1;24864:1;24850:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24826:40;;24895:4;24877;24882:1;24877:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;24921:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24911:4;24916:1;24911:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;24954:58;24971:4;24986:15;;;;;;;;;;;25004:7;24954:8;:58::i;:::-;25023:15;;;;;;;;;;;:66;;;25104:7;25126:1;25142:4;25169;25189:15;25023:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24815:408;24744:479:::0;:::o;26305:127::-;26379:7;26406:9;:18;26416:7;26406:18;;;;;;;;;;;;;;;;26399:25;;26305:127;;;:::o;10186:103::-;9421:13;:11;:13::i;:::-;10251:30:::1;10278:1;10251:18;:30::i;:::-;10186:103::o:0;19354:27::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;22735:86::-;9421:13;:11;:13::i;:::-;22809:4:::1;22789:8;:17;;;:24;;;;;;;;;;;;;;;;;;22735:86::o:0;21751:346::-;21799:20;21830:18;21859:21;21891:19;21951:5;:21;;;;;:::i;:::-;;;;;;;;;;;;;;21987:5;:19;;;;;:::i;:::-;;;;;;;;;;;;;;22021:5;:22;;;;;:::i;:::-;;;;;;;;;;;;;;22058:5;:20;;;;;:::i;:::-;;;;;;;;;;;;;;21929:160;;;;;;;;21751:346;;;;:::o;18645:24::-;;;;;;;;;;;;;:::o;22354:119::-;9421:13;:11;:13::i;:::-;22459:6:::1;22437:9;:19;22447:8;22437:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22354:119:::0;;:::o;9536:87::-;9582:7;9609:6;;;;;;;;;;;9602:13;;9536:87;:::o;25966:104::-;26022:13;26055:7;26048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25966:104;:::o;22165:103::-;9421:13;:11;:13::i;:::-;22250:10:::1;22238:9;;:22;;;;;;;;;;;;;;;;;;22165:103:::0;:::o;29597:437::-;29690:4;29707:13;29723:12;:10;:12::i;:::-;29707:28;;29746:24;29773:25;29783:5;29790:7;29773:9;:25::i;:::-;29746:52;;29837:15;29817:16;:35;;29809:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29930:60;29939:5;29946:7;29974:15;29955:16;:34;29930:8;:60::i;:::-;30022:4;30015:11;;;;29597:437;;;;:::o;26639:193::-;26718:4;26735:13;26751:12;:10;:12::i;:::-;26735:28;;26774;26784:5;26791:2;26795:6;26774:9;:28::i;:::-;26820:4;26813:11;;;26639:193;;;;:::o;21395:292::-;9421:13;:11;:13::i;:::-;21471:1:::1;21447:5;:21;;;;;:::i;:::-;;;;;;;;;;;;;:25;;;;21505:1;21483:5;:19;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;21545:1;21520:5;:22;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;21580:1;21557:5;:20;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;;21600:79;21619:1;21635::::0;21651::::1;21667::::0;21600:79:::1;;;;;;;;;:::i;:::-;;;;;;;;21395:292::o:0;26896:151::-;26985:7;27012:11;:18;27024:5;27012:18;;;;;;;;;;;;;;;:27;27031:7;27012:27;;;;;;;;;;;;;;;;27005:34;;26896:151;;;;:::o;10445:201::-;9421:13;:11;:13::i;:::-;10554:1:::1;10534:22;;:8;:22;;::::0;10526:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10610:28;10629:8;10610:18;:28::i;:::-;10445:201:::0;:::o;4129:98::-;4187:7;4218:1;4214;:5;;;;:::i;:::-;4207:12;;4129:98;;;;:::o;8023:::-;8076:7;8103:10;8096:17;;8023:98;:::o;33714:381::-;33867:1;33850:19;;:5;:19;;;33842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33948:1;33929:21;;:7;:21;;;33921:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34033:6;34003:11;:18;34015:5;34003:18;;;;;;;;;;;;;;;:27;34022:7;34003:27;;;;;;;;;;;;;;;:36;;;;34071:7;34055:32;;34064:5;34055:32;;;34080:6;34055:32;;;;;;:::i;:::-;;;;;;;;33714:381;;;:::o;34387:453::-;34522:24;34549:25;34559:5;34566:7;34549:9;:25::i;:::-;34522:52;;34609:17;34589:16;:37;34585:248;;34671:6;34651:16;:26;;34643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34755:51;34764:5;34771:7;34799:6;34780:16;:25;34755:8;:51::i;:::-;34585:248;34511:329;34387:453;;;:::o;30514:2761::-;30661:1;30645:18;;:4;:18;;;30637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30738:1;30724:16;;:2;:16;;;30716:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30794:19;30816:9;:15;30826:4;30816:15;;;;;;;;;;;;;;;;30794:37;;30865:6;30850:11;:21;;30842:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30928:20;30959:18;30991:11;31005:4;30991:18;;31050:13;;;;;;;;;;;31042:21;;:4;:21;;;31039:390;;31083:22;31094:2;31098:6;31083:10;:22::i;:::-;31138:5;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31123:36;;31187:5;:19;;;;;:::i;:::-;;;;;;;;;;;;;;31174:32;;31039:390;;;31259:13;;;;;;;;;;;31253:19;;:2;:19;;;31250:179;;31289:25;31301:4;31307:6;31289:11;:25::i;:::-;31347:5;:22;;;;;:::i;:::-;;;;;;;;;;;;;;31332:37;;31397:5;:20;;;;;:::i;:::-;;;;;;;;;;;;;;31384:33;;31250:179;31039:390;31499:6;31485:11;:20;31467:9;:15;31477:4;31467:15;;;;;;;;;;;;;;;:38;;;;31533:9;:13;31543:2;31533:13;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;31550:9;:15;31560:4;31550:15;;;;;;;;;;;;;;;;;;;;;;;;;31533:32;31530:78;;;31591:5;31582:14;;31530:78;31624:6;:56;;;;;31641:13;;;;;;;;;;;31635:19;;:2;:19;;;:44;;;;31666:13;;;;;;;;;;;31658:21;;:4;:21;;;31635:44;31624:56;31621:1568;;;31697:25;;:::i;:::-;31762:35;31791:5;31762:24;31773:12;31762:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;31737:9;:22;;:60;;;;;31835:33;31862:5;31835:22;31846:10;31835:6;:10;;:22;;;;:::i;:::-;:26;;:33;;;;:::i;:::-;31812:9;:20;;:56;;;;;31886:17;31923:66;31968:9;:20;;;31923:9;:22;;;:44;;:66;;;;:::i;:::-;31886:103;;32016:21;32027:9;32016:6;:10;;:21;;;;:::i;:::-;32007:30;;32083:9;32055;:24;32073:4;32055:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;32157:4;32134:40;;32143:4;32134:40;;;32164:9;32134:40;;;;;;:::i;:::-;;;;;;;;32229:28;32260:9;:24;32278:4;32260:24;;;;;;;;;;;;;;;;32229:55;;32347:10;:23;;;32324:20;:46;:127;;;;;32431:10;:20;;;32409:10;:19;;;:42;;;;:::i;:::-;32391:15;:60;32324:127;:167;;;;;32478:13;;;;;;;;;;;32472:19;;:2;:19;;;32324:167;32302:876;;;32581:20;32682:6;32673:5;32640:15;32657:10;32623:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32613:56;;;;;;32605:65;;:73;;;;:::i;:::-;32604:84;;;;:::i;:::-;32581:107;;32780:64;32838:5;32780:53;32828:4;32781:41;32809:12;32781:10;:23;;;:27;;:41;;;;:::i;:::-;32780:47;;:53;;;;:::i;:::-;:57;;:64;;;;:::i;:::-;32757:20;:87;32754:197;;;32869:62;32889:41;32917:12;32889:10;:23;;;:27;;:41;;;;:::i;:::-;32869:19;:62::i;:::-;32754:197;32994:15;32972:10;:19;;:37;;;;33058:10;:20;;;33034:21;:44;33031:132;;;33103:39;33120:21;33103:16;:39::i;:::-;33031:132;32507:671;32302:876;31682:1507;;;31621:1568;33219:6;33202:9;:13;33212:2;33202:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;33256:2;33241:26;;33250:4;33241:26;;;33260:6;33241:26;;;;;;:::i;:::-;;;;;;;;30626:2649;;;;30514:2761;;;:::o;35174:554::-;35277:1;35258:21;;:7;:21;;;35250:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35331:22;35356:9;:18;35366:7;35356:18;;;;;;;;;;;;;;;;35331:43;;35411:6;35393:14;:24;;35385:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35530:6;35513:14;:23;35492:9;:18;35502:7;35492:18;;;;;;;;;;;;;;;:44;;;;35647:6;35631:12;;:22;;;;;;;;;;;35709:1;35683:37;;35692:7;35683:37;;;35713:6;35683:37;;;;;;:::i;:::-;;;;;;;;35239:489;35174:554;;:::o;9702:132::-;9777:12;:10;:12::i;:::-;9766:23;;:7;:5;:7::i;:::-;:23;;;9758:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9702:132::o;25570:106::-;25640:9;;;;;;;;;;;25632:27;;:36;25660:7;25632:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25570:106;:::o;10807:191::-;10881:16;10900:6;;;;;;;;;;;10881:25;;10926:8;10917:6;;:17;;;;;;;;;;;;;;;;;;10981:8;10950:40;;10971:8;10950:40;;;;;;;;;;;;10870:128;10807:191;:::o;23547:278::-;23669:4;23648:25;;:8;:17;;;;;;;;;;;;:25;;;:67;;;;23711:4;23690:25;;:8;:17;23699:7;23690:17;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;23648:67;:111;;;;23742:8;:17;;;23732:7;:27;23648:111;23626:191;;;;;;;;;;;;:::i;:::-;;;;;;;;;23547:278;;:::o;23938:281::-;24061:4;24040:25;;:8;:17;;;;;;;;;;;;:25;;;:67;;;;24103:4;24082:25;;:8;:17;24091:7;24082:17;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;24040:67;:112;;;;24134:8;:18;;;24124:7;:28;24040:112;24018:193;;;;;;;;;;;;:::i;:::-;;;;;;;;;23938:281;;:::o;3729:98::-;3787:7;3818:1;3814;:5;;;;:::i;:::-;3807:12;;3729:98;;;;:::o;2989:::-;3047:7;3078:1;3074;:5;;;;:::i;:::-;3067:12;;2989:98;;;;:::o;3371:::-;3429:7;3460:1;3456;:5;;;;:::i;:::-;3449:12;;3371:98;;;;:::o;24272:463::-;24338:21;24376:1;24362:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24338:40;;24407:4;24389;24394:1;24389:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24433:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24423:4;24428:1;24423:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24466:58;24483:4;24498:15;;;;;;;;;;;24516:7;24466:8;:58::i;:::-;24535:15;;;;;;;;;;;:66;;;24616:7;24638:1;24654:4;24681;24701:15;24535:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24327:408;24272:463;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:90::-;248:7;291:5;284:13;277:21;266:32;;214:90;;;:::o;310:109::-;391:21;406:5;391:21;:::i;:::-;386:3;379:34;310:109;;:::o;425:430::-;568:4;606:2;595:9;591:18;583:26;;619:71;687:1;676:9;672:17;663:6;619:71;:::i;:::-;700:72;768:2;757:9;753:18;744:6;700:72;:::i;:::-;782:66;844:2;833:9;829:18;820:6;782:66;:::i;:::-;425:430;;;;;;:::o;942:117::-;1051:1;1048;1041:12;1188:126;1225:7;1265:42;1258:5;1254:54;1243:65;;1188:126;;;:::o;1320:96::-;1357:7;1386:24;1404:5;1386:24;:::i;:::-;1375:35;;1320:96;;;:::o;1422:122::-;1495:24;1513:5;1495:24;:::i;:::-;1488:5;1485:35;1475:63;;1534:1;1531;1524:12;1475:63;1422:122;:::o;1550:139::-;1596:5;1634:6;1621:20;1612:29;;1650:33;1677:5;1650:33;:::i;:::-;1550:139;;;;:::o;1695:329::-;1754:6;1803:2;1791:9;1782:7;1778:23;1774:32;1771:119;;;1809:79;;:::i;:::-;1771:119;1929:1;1954:53;1999:7;1990:6;1979:9;1975:22;1954:53;:::i;:::-;1944:63;;1900:117;1695:329;;;;:::o;2030:210::-;2117:4;2155:2;2144:9;2140:18;2132:26;;2168:65;2230:1;2219:9;2215:17;2206:6;2168:65;:::i;:::-;2030:210;;;;:::o;2246:99::-;2298:6;2332:5;2326:12;2316:22;;2246:99;;;:::o;2351:169::-;2435:11;2469:6;2464:3;2457:19;2509:4;2504:3;2500:14;2485:29;;2351:169;;;;:::o;2526:246::-;2607:1;2617:113;2631:6;2628:1;2625:13;2617:113;;;2716:1;2711:3;2707:11;2701:18;2697:1;2692:3;2688:11;2681:39;2653:2;2650:1;2646:10;2641:15;;2617:113;;;2764:1;2755:6;2750:3;2746:16;2739:27;2588:184;2526:246;;;:::o;2778:102::-;2819:6;2870:2;2866:7;2861:2;2854:5;2850:14;2846:28;2836:38;;2778:102;;;:::o;2886:377::-;2974:3;3002:39;3035:5;3002:39;:::i;:::-;3057:71;3121:6;3116:3;3057:71;:::i;:::-;3050:78;;3137:65;3195:6;3190:3;3183:4;3176:5;3172:16;3137:65;:::i;:::-;3227:29;3249:6;3227:29;:::i;:::-;3222:3;3218:39;3211:46;;2978:285;2886:377;;;;:::o;3269:313::-;3382:4;3420:2;3409:9;3405:18;3397:26;;3469:9;3463:4;3459:20;3455:1;3444:9;3440:17;3433:47;3497:78;3570:4;3561:6;3497:78;:::i;:::-;3489:86;;3269:313;;;;:::o;3588:122::-;3661:24;3679:5;3661:24;:::i;:::-;3654:5;3651:35;3641:63;;3700:1;3697;3690:12;3641:63;3588:122;:::o;3716:139::-;3762:5;3800:6;3787:20;3778:29;;3816:33;3843:5;3816:33;:::i;:::-;3716:139;;;;:::o;3861:474::-;3929:6;3937;3986:2;3974:9;3965:7;3961:23;3957:32;3954:119;;;3992:79;;:::i;:::-;3954:119;4112:1;4137:53;4182:7;4173:6;4162:9;4158:22;4137:53;:::i;:::-;4127:63;;4083:117;4239:2;4265:53;4310:7;4301:6;4290:9;4286:22;4265:53;:::i;:::-;4255:63;;4210:118;3861:474;;;;;:::o;4341:60::-;4369:3;4390:5;4383:12;;4341:60;;;:::o;4407:142::-;4457:9;4490:53;4508:34;4517:24;4535:5;4517:24;:::i;:::-;4508:34;:::i;:::-;4490:53;:::i;:::-;4477:66;;4407:142;;;:::o;4555:126::-;4605:9;4638:37;4669:5;4638:37;:::i;:::-;4625:50;;4555:126;;;:::o;4687:152::-;4763:9;4796:37;4827:5;4796:37;:::i;:::-;4783:50;;4687:152;;;:::o;4845:183::-;4958:63;5015:5;4958:63;:::i;:::-;4953:3;4946:76;4845:183;;:::o;5034:274::-;5153:4;5191:2;5180:9;5176:18;5168:26;;5204:97;5298:1;5287:9;5283:17;5274:6;5204:97;:::i;:::-;5034:274;;;;:::o;5314:222::-;5407:4;5445:2;5434:9;5430:18;5422:26;;5458:71;5526:1;5515:9;5511:17;5502:6;5458:71;:::i;:::-;5314:222;;;;:::o;5542:619::-;5619:6;5627;5635;5684:2;5672:9;5663:7;5659:23;5655:32;5652:119;;;5690:79;;:::i;:::-;5652:119;5810:1;5835:53;5880:7;5871:6;5860:9;5856:22;5835:53;:::i;:::-;5825:63;;5781:117;5937:2;5963:53;6008:7;5999:6;5988:9;5984:22;5963:53;:::i;:::-;5953:63;;5908:118;6065:2;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6036:118;5542:619;;;;;:::o;6167:86::-;6202:7;6242:4;6235:5;6231:16;6220:27;;6167:86;;;:::o;6259:112::-;6342:22;6358:5;6342:22;:::i;:::-;6337:3;6330:35;6259:112;;:::o;6377:214::-;6466:4;6504:2;6493:9;6489:18;6481:26;;6517:67;6581:1;6570:9;6566:17;6557:6;6517:67;:::i;:::-;6377:214;;;;:::o;6597:329::-;6656:6;6705:2;6693:9;6684:7;6680:23;6676:32;6673:119;;;6711:79;;:::i;:::-;6673:119;6831:1;6856:53;6901:7;6892:6;6881:9;6877:22;6856:53;:::i;:::-;6846:63;;6802:117;6597:329;;;;:::o;6932:118::-;7019:24;7037:5;7019:24;:::i;:::-;7014:3;7007:37;6932:118;;:::o;7056:222::-;7149:4;7187:2;7176:9;7172:18;7164:26;;7200:71;7268:1;7257:9;7253:17;7244:6;7200:71;:::i;:::-;7056:222;;;;:::o;7284:104::-;7329:7;7358:24;7376:5;7358:24;:::i;:::-;7347:35;;7284:104;;;:::o;7394:138::-;7475:32;7501:5;7475:32;:::i;:::-;7468:5;7465:43;7455:71;;7522:1;7519;7512:12;7455:71;7394:138;:::o;7538:155::-;7592:5;7630:6;7617:20;7608:29;;7646:41;7681:5;7646:41;:::i;:::-;7538:155;;;;:::o;7699:110::-;7750:7;7779:24;7797:5;7779:24;:::i;:::-;7768:35;;7699:110;;;:::o;7815:150::-;7902:38;7934:5;7902:38;:::i;:::-;7895:5;7892:49;7882:77;;7955:1;7952;7945:12;7882:77;7815:150;:::o;7971:167::-;8031:5;8069:6;8056:20;8047:29;;8085:47;8126:5;8085:47;:::i;:::-;7971:167;;;;:::o;8144:518::-;8234:6;8242;8291:2;8279:9;8270:7;8266:23;8262:32;8259:119;;;8297:79;;:::i;:::-;8259:119;8417:1;8442:61;8495:7;8486:6;8475:9;8471:22;8442:61;:::i;:::-;8432:71;;8388:125;8552:2;8578:67;8637:7;8628:6;8617:9;8613:22;8578:67;:::i;:::-;8568:77;;8523:132;8144:518;;;;;:::o;8668:116::-;8738:21;8753:5;8738:21;:::i;:::-;8731:5;8728:32;8718:60;;8774:1;8771;8764:12;8718:60;8668:116;:::o;8790:133::-;8833:5;8871:6;8858:20;8849:29;;8887:30;8911:5;8887:30;:::i;:::-;8790:133;;;;:::o;8929:468::-;8994:6;9002;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:53;9247:7;9238:6;9227:9;9223:22;9202:53;:::i;:::-;9192:63;;9148:117;9304:2;9330:50;9372:7;9363:6;9352:9;9348:22;9330:50;:::i;:::-;9320:60;;9275:115;8929:468;;;;;:::o;9403:765::-;9489:6;9497;9505;9513;9562:3;9550:9;9541:7;9537:23;9533:33;9530:120;;;9569:79;;:::i;:::-;9530:120;9689:1;9714:53;9759:7;9750:6;9739:9;9735:22;9714:53;:::i;:::-;9704:63;;9660:117;9816:2;9842:53;9887:7;9878:6;9867:9;9863:22;9842:53;:::i;:::-;9832:63;;9787:118;9944:2;9970:53;10015:7;10006:6;9995:9;9991:22;9970:53;:::i;:::-;9960:63;;9915:118;10072:2;10098:53;10143:7;10134:6;10123:9;10119:22;10098:53;:::i;:::-;10088:63;;10043:118;9403:765;;;;;;;:::o;10174:553::-;10351:4;10389:3;10378:9;10374:19;10366:27;;10403:71;10471:1;10460:9;10456:17;10447:6;10403:71;:::i;:::-;10484:72;10552:2;10541:9;10537:18;10528:6;10484:72;:::i;:::-;10566;10634:2;10623:9;10619:18;10610:6;10566:72;:::i;:::-;10648;10716:2;10705:9;10701:18;10692:6;10648:72;:::i;:::-;10174:553;;;;;;;:::o;10733:474::-;10801:6;10809;10858:2;10846:9;10837:7;10833:23;10829:32;10826:119;;;10864:79;;:::i;:::-;10826:119;10984:1;11009:53;11054:7;11045:6;11034:9;11030:22;11009:53;:::i;:::-;10999:63;;10955:117;11111:2;11137:53;11182:7;11173:6;11162:9;11158:22;11137:53;:::i;:::-;11127:63;;11082:118;10733:474;;;;;:::o;11213:180::-;11261:77;11258:1;11251:88;11358:4;11355:1;11348:15;11382:4;11379:1;11372:15;11399:320;11443:6;11480:1;11474:4;11470:12;11460:22;;11527:1;11521:4;11517:12;11548:18;11538:81;;11604:4;11596:6;11592:17;11582:27;;11538:81;11666:2;11658:6;11655:14;11635:18;11632:38;11629:84;;11685:18;;:::i;:::-;11629:84;11450:269;11399:320;;;:::o;11725:180::-;11773:77;11770:1;11763:88;11870:4;11867:1;11860:15;11894:4;11891:1;11884:15;11911:191;11951:3;11970:20;11988:1;11970:20;:::i;:::-;11965:25;;12004:20;12022:1;12004:20;:::i;:::-;11999:25;;12047:1;12044;12040:9;12033:16;;12068:3;12065:1;12062:10;12059:36;;;12075:18;;:::i;:::-;12059:36;11911:191;;;;:::o;12108:143::-;12165:5;12196:6;12190:13;12181:22;;12212:33;12239:5;12212:33;:::i;:::-;12108:143;;;;:::o;12257:351::-;12327:6;12376:2;12364:9;12355:7;12351:23;12347:32;12344:119;;;12382:79;;:::i;:::-;12344:119;12502:1;12527:64;12583:7;12574:6;12563:9;12559:22;12527:64;:::i;:::-;12517:74;;12473:128;12257:351;;;;:::o;12614:134::-;12672:9;12705:37;12736:5;12705:37;:::i;:::-;12692:50;;12614:134;;;:::o;12754:147::-;12849:45;12888:5;12849:45;:::i;:::-;12844:3;12837:58;12754:147;;:::o;12907:348::-;13036:4;13074:2;13063:9;13059:18;13051:26;;13087:79;13163:1;13152:9;13148:17;13139:6;13087:79;:::i;:::-;13176:72;13244:2;13233:9;13229:18;13220:6;13176:72;:::i;:::-;12907:348;;;;;:::o;13261:137::-;13315:5;13346:6;13340:13;13331:22;;13362:30;13386:5;13362:30;:::i;:::-;13261:137;;;;:::o;13404:345::-;13471:6;13520:2;13508:9;13499:7;13495:23;13491:32;13488:119;;;13526:79;;:::i;:::-;13488:119;13646:1;13671:61;13724:7;13715:6;13704:9;13700:22;13671:61;:::i;:::-;13661:71;;13617:125;13404:345;;;;:::o;13755:180::-;13803:77;13800:1;13793:88;13900:4;13897:1;13890:15;13924:4;13921:1;13914:15;13941:180;13989:77;13986:1;13979:88;14086:4;14083:1;14076:15;14110:4;14107:1;14100:15;14127:143;14184:5;14215:6;14209:13;14200:22;;14231:33;14258:5;14231:33;:::i;:::-;14127:143;;;;:::o;14276:351::-;14346:6;14395:2;14383:9;14374:7;14370:23;14366:32;14363:119;;;14401:79;;:::i;:::-;14363:119;14521:1;14546:64;14602:7;14593:6;14582:9;14578:22;14546:64;:::i;:::-;14536:74;;14492:128;14276:351;;;;:::o;14633:85::-;14678:7;14707:5;14696:16;;14633:85;;;:::o;14724:158::-;14782:9;14815:61;14833:42;14842:32;14868:5;14842:32;:::i;:::-;14833:42;:::i;:::-;14815:61;:::i;:::-;14802:74;;14724:158;;;:::o;14888:147::-;14983:45;15022:5;14983:45;:::i;:::-;14978:3;14971:58;14888:147;;:::o;15041:114::-;15108:6;15142:5;15136:12;15126:22;;15041:114;;;:::o;15161:184::-;15260:11;15294:6;15289:3;15282:19;15334:4;15329:3;15325:14;15310:29;;15161:184;;;;:::o;15351:132::-;15418:4;15441:3;15433:11;;15471:4;15466:3;15462:14;15454:22;;15351:132;;;:::o;15489:108::-;15566:24;15584:5;15566:24;:::i;:::-;15561:3;15554:37;15489:108;;:::o;15603:179::-;15672:10;15693:46;15735:3;15727:6;15693:46;:::i;:::-;15771:4;15766:3;15762:14;15748:28;;15603:179;;;;:::o;15788:113::-;15858:4;15890;15885:3;15881:14;15873:22;;15788:113;;;:::o;15937:732::-;16056:3;16085:54;16133:5;16085:54;:::i;:::-;16155:86;16234:6;16229:3;16155:86;:::i;:::-;16148:93;;16265:56;16315:5;16265:56;:::i;:::-;16344:7;16375:1;16360:284;16385:6;16382:1;16379:13;16360:284;;;16461:6;16455:13;16488:63;16547:3;16532:13;16488:63;:::i;:::-;16481:70;;16574:60;16627:6;16574:60;:::i;:::-;16564:70;;16420:224;16407:1;16404;16400:9;16395:14;;16360:284;;;16364:14;16660:3;16653:10;;16061:608;;;15937:732;;;;:::o;16675:831::-;16938:4;16976:3;16965:9;16961:19;16953:27;;16990:71;17058:1;17047:9;17043:17;17034:6;16990:71;:::i;:::-;17071:80;17147:2;17136:9;17132:18;17123:6;17071:80;:::i;:::-;17198:9;17192:4;17188:20;17183:2;17172:9;17168:18;17161:48;17226:108;17329:4;17320:6;17226:108;:::i;:::-;17218:116;;17344:72;17412:2;17401:9;17397:18;17388:6;17344:72;:::i;:::-;17426:73;17494:3;17483:9;17479:19;17470:6;17426:73;:::i;:::-;16675:831;;;;;;;;:::o;17512:148::-;17614:11;17651:3;17636:18;;17512:148;;;;:::o;17666:162::-;17806:14;17802:1;17794:6;17790:14;17783:38;17666:162;:::o;17834:402::-;17994:3;18015:85;18097:2;18092:3;18015:85;:::i;:::-;18008:92;;18109:93;18198:3;18109:93;:::i;:::-;18227:2;18222:3;18218:12;18211:19;;17834:402;;;:::o;18242:381::-;18427:3;18449:148;18593:3;18449:148;:::i;:::-;18442:155;;18614:3;18607:10;;18242:381;;;:::o;18629:160::-;18769:12;18765:1;18757:6;18753:14;18746:36;18629:160;:::o;18795:402::-;18955:3;18976:85;19058:2;19053:3;18976:85;:::i;:::-;18969:92;;19070:93;19159:3;19070:93;:::i;:::-;19188:2;19183:3;19179:12;19172:19;;18795:402;;;:::o;19203:381::-;19388:3;19410:148;19554:3;19410:148;:::i;:::-;19403:155;;19575:3;19568:10;;19203:381;;;:::o;19590:163::-;19730:15;19726:1;19718:6;19714:14;19707:39;19590:163;:::o;19759:402::-;19919:3;19940:85;20022:2;20017:3;19940:85;:::i;:::-;19933:92;;20034:93;20123:3;20034:93;:::i;:::-;20152:2;20147:3;20143:12;20136:19;;19759:402;;;:::o;20167:381::-;20352:3;20374:148;20518:3;20374:148;:::i;:::-;20367:155;;20539:3;20532:10;;20167:381;;;:::o;20554:161::-;20694:13;20690:1;20682:6;20678:14;20671:37;20554:161;:::o;20721:402::-;20881:3;20902:85;20984:2;20979:3;20902:85;:::i;:::-;20895:92;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20721:402;;;:::o;21129:381::-;21314:3;21336:148;21480:3;21336:148;:::i;:::-;21329:155;;21501:3;21494:10;;21129:381;;;:::o;21516:224::-;21656:34;21652:1;21644:6;21640:14;21633:58;21725:7;21720:2;21712:6;21708:15;21701:32;21516:224;:::o;21746:366::-;21888:3;21909:67;21973:2;21968:3;21909:67;:::i;:::-;21902:74;;21985:93;22074:3;21985:93;:::i;:::-;22103:2;22098:3;22094:12;22087:19;;21746:366;;;:::o;22118:419::-;22284:4;22322:2;22311:9;22307:18;22299:26;;22371:9;22365:4;22361:20;22357:1;22346:9;22342:17;22335:47;22399:131;22525:4;22399:131;:::i;:::-;22391:139;;22118:419;;;:::o;22543:617::-;22752:4;22790:3;22779:9;22775:19;22767:27;;22804:79;22880:1;22869:9;22865:17;22856:6;22804:79;:::i;:::-;22893:80;22969:2;22958:9;22954:18;22945:6;22893:80;:::i;:::-;22983;23059:2;23048:9;23044:18;23035:6;22983:80;:::i;:::-;23073;23149:2;23138:9;23134:18;23125:6;23073:80;:::i;:::-;22543:617;;;;;;;:::o;23166:225::-;23306:34;23302:1;23294:6;23290:14;23283:58;23375:8;23370:2;23362:6;23358:15;23351:33;23166:225;:::o;23397:366::-;23539:3;23560:67;23624:2;23619:3;23560:67;:::i;:::-;23553:74;;23636:93;23725:3;23636:93;:::i;:::-;23754:2;23749:3;23745:12;23738:19;;23397:366;;;:::o;23769:419::-;23935:4;23973:2;23962:9;23958:18;23950:26;;24022:9;24016:4;24012:20;24008:1;23997:9;23993:17;23986:47;24050:131;24176:4;24050:131;:::i;:::-;24042:139;;23769:419;;;:::o;24194:180::-;24242:77;24239:1;24232:88;24339:4;24336:1;24329:15;24363:4;24360:1;24353:15;24380:185;24420:1;24437:20;24455:1;24437:20;:::i;:::-;24432:25;;24471:20;24489:1;24471:20;:::i;:::-;24466:25;;24510:1;24500:35;;24515:18;;:::i;:::-;24500:35;24557:1;24554;24550:9;24545:14;;24380:185;;;;:::o;24571:223::-;24711:34;24707:1;24699:6;24695:14;24688:58;24780:6;24775:2;24767:6;24763:15;24756:31;24571:223;:::o;24800:366::-;24942:3;24963:67;25027:2;25022:3;24963:67;:::i;:::-;24956:74;;25039:93;25128:3;25039:93;:::i;:::-;25157:2;25152:3;25148:12;25141:19;;24800:366;;;:::o;25172:419::-;25338:4;25376:2;25365:9;25361:18;25353:26;;25425:9;25419:4;25415:20;25411:1;25400:9;25396:17;25389:47;25453:131;25579:4;25453:131;:::i;:::-;25445:139;;25172:419;;;:::o;25597:221::-;25737:34;25733:1;25725:6;25721:14;25714:58;25806:4;25801:2;25793:6;25789:15;25782:29;25597:221;:::o;25824:366::-;25966:3;25987:67;26051:2;26046:3;25987:67;:::i;:::-;25980:74;;26063:93;26152:3;26063:93;:::i;:::-;26181:2;26176:3;26172:12;26165:19;;25824:366;;;:::o;26196:419::-;26362:4;26400:2;26389:9;26385:18;26377:26;;26449:9;26443:4;26439:20;26435:1;26424:9;26420:17;26413:47;26477:131;26603:4;26477:131;:::i;:::-;26469:139;;26196:419;;;:::o;26621:179::-;26761:31;26757:1;26749:6;26745:14;26738:55;26621:179;:::o;26806:366::-;26948:3;26969:67;27033:2;27028:3;26969:67;:::i;:::-;26962:74;;27045:93;27134:3;27045:93;:::i;:::-;27163:2;27158:3;27154:12;27147:19;;26806:366;;;:::o;27178:419::-;27344:4;27382:2;27371:9;27367:18;27359:26;;27431:9;27425:4;27421:20;27417:1;27406:9;27402:17;27395:47;27459:131;27585:4;27459:131;:::i;:::-;27451:139;;27178:419;;;:::o;27603:224::-;27743:34;27739:1;27731:6;27727:14;27720:58;27812:7;27807:2;27799:6;27795:15;27788:32;27603:224;:::o;27833:366::-;27975:3;27996:67;28060:2;28055:3;27996:67;:::i;:::-;27989:74;;28072:93;28161:3;28072:93;:::i;:::-;28190:2;28185:3;28181:12;28174:19;;27833:366;;;:::o;28205:419::-;28371:4;28409:2;28398:9;28394:18;28386:26;;28458:9;28452:4;28448:20;28444:1;28433:9;28429:17;28422:47;28486:131;28612:4;28486:131;:::i;:::-;28478:139;;28205:419;;;:::o;28630:222::-;28770:34;28766:1;28758:6;28754:14;28747:58;28839:5;28834:2;28826:6;28822:15;28815:30;28630:222;:::o;28858:366::-;29000:3;29021:67;29085:2;29080:3;29021:67;:::i;:::-;29014:74;;29097:93;29186:3;29097:93;:::i;:::-;29215:2;29210:3;29206:12;29199:19;;28858:366;;;:::o;29230:419::-;29396:4;29434:2;29423:9;29419:18;29411:26;;29483:9;29477:4;29473:20;29469:1;29458:9;29454:17;29447:47;29511:131;29637:4;29511:131;:::i;:::-;29503:139;;29230:419;;;:::o;29655:225::-;29795:34;29791:1;29783:6;29779:14;29772:58;29864:8;29859:2;29851:6;29847:15;29840:33;29655:225;:::o;29886:366::-;30028:3;30049:67;30113:2;30108:3;30049:67;:::i;:::-;30042:74;;30125:93;30214:3;30125:93;:::i;:::-;30243:2;30238:3;30234:12;30227:19;;29886:366;;;:::o;30258:419::-;30424:4;30462:2;30451:9;30447:18;30439:26;;30511:9;30505:4;30501:20;30497:1;30486:9;30482:17;30475:47;30539:131;30665:4;30539:131;:::i;:::-;30531:139;;30258:419;;;:::o;30683:79::-;30722:7;30751:5;30740:16;;30683:79;;;:::o;30768:157::-;30873:45;30893:24;30911:5;30893:24;:::i;:::-;30873:45;:::i;:::-;30868:3;30861:58;30768:157;;:::o;30931:94::-;30964:8;31012:5;31008:2;31004:14;30983:35;;30931:94;;;:::o;31031:::-;31070:7;31099:20;31113:5;31099:20;:::i;:::-;31088:31;;31031:94;;;:::o;31131:100::-;31170:7;31199:26;31219:5;31199:26;:::i;:::-;31188:37;;31131:100;;;:::o;31237:157::-;31342:45;31362:24;31380:5;31362:24;:::i;:::-;31342:45;:::i;:::-;31337:3;31330:58;31237:157;;:::o;31400:397::-;31540:3;31555:75;31626:3;31617:6;31555:75;:::i;:::-;31655:2;31650:3;31646:12;31639:19;;31668:75;31739:3;31730:6;31668:75;:::i;:::-;31768:2;31763:3;31759:12;31752:19;;31788:3;31781:10;;31400:397;;;;;:::o;31803:176::-;31835:1;31852:20;31870:1;31852:20;:::i;:::-;31847:25;;31886:20;31904:1;31886:20;:::i;:::-;31881:25;;31925:1;31915:35;;31930:18;;:::i;:::-;31915:35;31971:1;31968;31964:9;31959:14;;31803:176;;;;:::o;31985:410::-;32025:7;32048:20;32066:1;32048:20;:::i;:::-;32043:25;;32082:20;32100:1;32082:20;:::i;:::-;32077:25;;32137:1;32134;32130:9;32159:30;32177:11;32159:30;:::i;:::-;32148:41;;32338:1;32329:7;32325:15;32322:1;32319:22;32299:1;32292:9;32272:83;32249:139;;32368:18;;:::i;:::-;32249:139;32033:362;31985:410;;;;:::o;32401:220::-;32541:34;32537:1;32529:6;32525:14;32518:58;32610:3;32605:2;32597:6;32593:15;32586:28;32401:220;:::o;32627:366::-;32769:3;32790:67;32854:2;32849:3;32790:67;:::i;:::-;32783:74;;32866:93;32955:3;32866:93;:::i;:::-;32984:2;32979:3;32975:12;32968:19;;32627:366;;;:::o;32999:419::-;33165:4;33203:2;33192:9;33188:18;33180:26;;33252:9;33246:4;33242:20;33238:1;33227:9;33223:17;33216:47;33280:131;33406:4;33280:131;:::i;:::-;33272:139;;32999:419;;;:::o;33424:221::-;33564:34;33560:1;33552:6;33548:14;33541:58;33633:4;33628:2;33620:6;33616:15;33609:29;33424:221;:::o;33651:366::-;33793:3;33814:67;33878:2;33873:3;33814:67;:::i;:::-;33807:74;;33890:93;33979:3;33890:93;:::i;:::-;34008:2;34003:3;33999:12;33992:19;;33651:366;;;:::o;34023:419::-;34189:4;34227:2;34216:9;34212:18;34204:26;;34276:9;34270:4;34266:20;34262:1;34251:9;34247:17;34240:47;34304:131;34430:4;34304:131;:::i;:::-;34296:139;;34023:419;;;:::o;34448:182::-;34588:34;34584:1;34576:6;34572:14;34565:58;34448:182;:::o;34636:366::-;34778:3;34799:67;34863:2;34858:3;34799:67;:::i;:::-;34792:74;;34875:93;34964:3;34875:93;:::i;:::-;34993:2;34988:3;34984:12;34977:19;;34636:366;;;:::o;35008:419::-;35174:4;35212:2;35201:9;35197:18;35189:26;;35261:9;35255:4;35251:20;35247:1;35236:9;35232:17;35225:47;35289:131;35415:4;35289:131;:::i;:::-;35281:139;;35008:419;;;:::o;35433:180::-;35573:32;35569:1;35561:6;35557:14;35550:56;35433:180;:::o;35619:366::-;35761:3;35782:67;35846:2;35841:3;35782:67;:::i;:::-;35775:74;;35858:93;35947:3;35858:93;:::i;:::-;35976:2;35971:3;35967:12;35960:19;;35619:366;;;:::o;35991:419::-;36157:4;36195:2;36184:9;36180:18;36172:26;;36244:9;36238:4;36234:20;36230:1;36219:9;36215:17;36208:47;36272:131;36398:4;36272:131;:::i;:::-;36264:139;;35991:419;;;:::o;36416:181::-;36556:33;36552:1;36544:6;36540:14;36533:57;36416:181;:::o;36603:366::-;36745:3;36766:67;36830:2;36825:3;36766:67;:::i;:::-;36759:74;;36842:93;36931:3;36842:93;:::i;:::-;36960:2;36955:3;36951:12;36944:19;;36603:366;;;:::o;36975:419::-;37141:4;37179:2;37168:9;37164:18;37156:26;;37228:9;37222:4;37218:20;37214:1;37203:9;37199:17;37192:47;37256:131;37382:4;37256:131;:::i;:::-;37248:139;;36975:419;;;:::o;37400:194::-;37440:4;37460:20;37478:1;37460:20;:::i;:::-;37455:25;;37494:20;37512:1;37494:20;:::i;:::-;37489:25;;37538:1;37535;37531:9;37523:17;;37562:1;37556:4;37553:11;37550:37;;;37567:18;;:::i;:::-;37550:37;37400:194;;;;:::o

Swarm Source

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