ETH Price: $3,417.58 (+1.31%)

Token

R1CIN (R1N)
 

Overview

Max Total Supply

1,000,000,000 R1N

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,573,691.173571592150154752 R1N

Value
$0.00
0x84b030d96f9464055a3eec6041acf678056ee9c0
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:
R1CIN

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-04
*/

/**
  
  R1CIN - LP BURNED - RENOUNCED

 */

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

/**
 * @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;
    }
}

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev 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);

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// 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 generally not needed starting with Solidity 0.8, since 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. 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;
        }
    }
}

contract R1CIN is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public sellTotalFees;
    uint256 public constant sellLiquidityFee = 0;
    uint256 public constant sellDevFee = 0;

    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor () ERC20("R1CIN", "R1N") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * 1e18; // 1 billion total supply

        maxTransactionAmount = (totalSupply * 3) / 100; // 3% from total supply maxTransactionAmountTxn
        maxWallet = (totalSupply * 3) / 100; // 3% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 2) / 10000; // 0.02% swap wallet

        sellTotalFees = sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xe3Df494e13f46AF722163a9e8699FEa9ed5EbB56); // set as dev wallet
    

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);
        

        _mint(msg.sender, totalSupply);
       
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function startTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to]) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellDevFee) / sellTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        (success, ) = address(marketingWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f523143494e0000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52314e000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b1d565b5080600490805190602001906200011b92919062000b1d565b5050506200013e62000132620005dd60201b60201c565b620005e560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a816001620006ab60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e857600080fd5b505afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000223919062000be4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028657600080fd5b505afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000be4565b6040518363ffffffff1660e01b8152600401620002e092919062000cc7565b602060405180830381600087803b158015620002fb57600080fd5b505af115801562000310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000336919062000be4565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ab60201b60201c565b620003e0600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079560201b60201c565b60006b033b2e3c9fd0803ce80000009050606460038262000402919062000e18565b6200040e919062000de0565b600881905550606460038262000425919062000e18565b62000431919062000de0565b600a8190555061271060028262000449919062000e18565b62000455919062000de0565b6009819055506000806200046a919062000d83565b600e8190555073e3df494e13f46af722163a9e8699fea9ed5ebb56600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004e7620004d96200083660201b60201c565b60016200086060201b60201c565b620004fa3060016200086060201b60201c565b6200050f61dead60016200086060201b60201c565b62000544600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086060201b60201c565b62000566620005586200083660201b60201c565b6001620006ab60201b60201c565b62000579306001620006ab60201b60201c565b6200058e61dead6001620006ab60201b60201c565b620005c3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ab60201b60201c565b620005d533826200099a60201b60201c565b505062000fa0565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006bb620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006e16200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007319062000d11565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000870620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008966200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e69062000d11565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098e919062000cf4565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a049062000d33565b60405180910390fd5b62000a216000838362000b1360201b60201c565b806002600082825462000a35919062000d83565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8c919062000d83565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af3919062000d55565b60405180910390a362000b0f6000838362000b1860201b60201c565b5050565b505050565b505050565b82805462000b2b9062000ec3565b90600052602060002090601f01602090048101928262000b4f576000855562000b9b565b82601f1062000b6a57805160ff191683800117855562000b9b565b8280016001018555821562000b9b579182015b8281111562000b9a57825182559160200191906001019062000b7d565b5b50905062000baa919062000bae565b5090565b5b8082111562000bc957600081600090555060010162000baf565b5090565b60008151905062000bde8162000f86565b92915050565b60006020828403121562000bf757600080fd5b600062000c078482850162000bcd565b91505092915050565b62000c1b8162000e79565b82525050565b62000c2c8162000e8d565b82525050565b600062000c4160208362000d72565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c83601f8362000d72565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000cc18162000eb9565b82525050565b600060408201905062000cde600083018562000c10565b62000ced602083018462000c10565b9392505050565b600060208201905062000d0b600083018462000c21565b92915050565b6000602082019050818103600083015262000d2c8162000c32565b9050919050565b6000602082019050818103600083015262000d4e8162000c74565b9050919050565b600060208201905062000d6c600083018462000cb6565b92915050565b600082825260208201905092915050565b600062000d908262000eb9565b915062000d9d8362000eb9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dd55762000dd462000ef9565b5b828201905092915050565b600062000ded8262000eb9565b915062000dfa8362000eb9565b92508262000e0d5762000e0c62000f28565b5b828204905092915050565b600062000e258262000eb9565b915062000e328362000eb9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e6e5762000e6d62000ef9565b5b828202905092915050565b600062000e868262000e99565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000edc57607f821691505b6020821081141562000ef35762000ef262000f57565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000f918162000e79565b811462000f9d57600080fd5b50565b60805160601c613e3b62000fe960003960008181610a5701528181611c5d01528181612b5901528181612c6f01528181612c9601528181612d320152612d590152613e3b6000f3fe60806040526004361061023f5760003560e01c80637571336a1161012e578063bbc0c742116100ab578063e2f456051161006f578063e2f45605146108b0578063e884f260146108db578063f2fde38b14610906578063f63743421461092f578063f8b45b051461095a57610246565b8063bbc0c742146107c9578063c0246668146107f4578063c876d0b91461081d578063c8c8ebe414610848578063dd62ed3e1461087357610246565b80639a7a23d6116100f25780639a7a23d6146106be578063a0d82dc5146106e7578063a457c2d714610712578063a9059cbb1461074f578063b62496f51461078c57610246565b80637571336a146105eb57806375f0a874146106145780638da5cb5b1461063f578063924de9b71461066a57806395d89b411461069357610246565b8063313ce567116101bc5780636a486a8e116101805780636a486a8e146105165780636ddd17131461054157806370a082311461056c578063715018a6146105a9578063751039fc146105c057610246565b8063313ce5671461041b578063395093511461044657806349bd5a5e146104835780634a62bb65146104ae5780634fbee193146104d957610246565b80631a8145bb116102035780631a8145bb146103465780631f3fed8f1461037157806323b872dd1461039c57806327c8f835146103d9578063293230b81461040457610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610985565b60405161026d91906137f4565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612f99565b610a17565b6040516102aa91906137be565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612e80565b610a35565b6040516102e791906137be565b60405180910390f35b3480156102fc57600080fd5b50610305610a55565b60405161031291906137d9565b60405180910390f35b34801561032757600080fd5b50610330610a79565b60405161033d91906139f6565b60405180910390f35b34801561035257600080fd5b5061035b610a83565b60405161036891906139f6565b60405180910390f35b34801561037d57600080fd5b50610386610a89565b60405161039391906139f6565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190612f0e565b610a8f565b6040516103d091906137be565b60405180910390f35b3480156103e557600080fd5b506103ee610b87565b6040516103fb9190613742565b60405180910390f35b34801561041057600080fd5b50610419610b8d565b005b34801561042757600080fd5b50610430610c41565b60405161043d9190613aa2565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190612f99565b610c4a565b60405161047a91906137be565b60405180910390f35b34801561048f57600080fd5b50610498610cf6565b6040516104a59190613742565b60405180910390f35b3480156104ba57600080fd5b506104c3610d1c565b6040516104d091906137be565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612e80565b610d2f565b60405161050d91906137be565b60405180910390f35b34801561052257600080fd5b5061052b610d85565b60405161053891906139f6565b60405180910390f35b34801561054d57600080fd5b50610556610d8b565b60405161056391906137be565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612e80565b610d9e565b6040516105a091906139f6565b60405180910390f35b3480156105b557600080fd5b506105be610de6565b005b3480156105cc57600080fd5b506105d5610e6e565b6040516105e291906137be565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612f5d565b610f0e565b005b34801561062057600080fd5b50610629610fe5565b6040516106369190613742565b60405180910390f35b34801561064b57600080fd5b5061065461100b565b6040516106619190613742565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c9190612fd5565b611035565b005b34801561069f57600080fd5b506106a86110ce565b6040516106b591906137f4565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190612f5d565b611160565b005b3480156106f357600080fd5b506106fc61127b565b60405161070991906139f6565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190612f99565b611280565b60405161074691906137be565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190612f99565b61136b565b60405161078391906137be565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612e80565b611389565b6040516107c091906137be565b60405180910390f35b3480156107d557600080fd5b506107de6113a9565b6040516107eb91906137be565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190612f5d565b6113bc565b005b34801561082957600080fd5b506108326114e1565b60405161083f91906137be565b60405180910390f35b34801561085457600080fd5b5061085d6114f4565b60405161086a91906139f6565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190612ed2565b6114fa565b6040516108a791906139f6565b60405180910390f35b3480156108bc57600080fd5b506108c5611581565b6040516108d291906139f6565b60405180910390f35b3480156108e757600080fd5b506108f0611587565b6040516108fd91906137be565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190612e80565b611627565b005b34801561093b57600080fd5b5061094461171f565b60405161095191906139f6565b60405180910390f35b34801561096657600080fd5b5061096f611724565b60405161097c91906139f6565b60405180910390f35b60606003805461099490613cf0565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090613cf0565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b5050505050905090565b6000610a2b610a2461172a565b8484611732565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b60105481565b6000610a9c8484846118fd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ae761172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613936565b60405180910390fd5b610b7b85610b7361172a565b858403611732565b60019150509392505050565b61dead81565b610b9561172a565b73ffffffffffffffffffffffffffffffffffffffff16610bb361100b565b73ffffffffffffffffffffffffffffffffffffffff1614610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090613956565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b60006012905090565b6000610cec610c5761172a565b848460016000610c6561172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce79190613b1d565b611732565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dee61172a565b73ffffffffffffffffffffffffffffffffffffffff16610e0c61100b565b73ffffffffffffffffffffffffffffffffffffffff1614610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990613956565b60405180910390fd5b610e6c600061242d565b565b6000610e7861172a565b73ffffffffffffffffffffffffffffffffffffffff16610e9661100b565b73ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390613956565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b610f1661172a565b73ffffffffffffffffffffffffffffffffffffffff16610f3461100b565b73ffffffffffffffffffffffffffffffffffffffff1614610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613956565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61103d61172a565b73ffffffffffffffffffffffffffffffffffffffff1661105b61100b565b73ffffffffffffffffffffffffffffffffffffffff16146110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890613956565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546110dd90613cf0565b80601f016020809104026020016040519081016040528092919081815260200182805461110990613cf0565b80156111565780601f1061112b57610100808354040283529160200191611156565b820191906000526020600020905b81548152906001019060200180831161113957829003601f168201915b5050505050905090565b61116861172a565b73ffffffffffffffffffffffffffffffffffffffff1661118661100b565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390613956565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490613896565b60405180910390fd5b61127782826124f3565b5050565b600081565b6000806001600061128f61172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906139d6565b60405180910390fd5b61136061135761172a565b85858403611732565b600191505092915050565b600061137f61137861172a565b84846118fd565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6113c461172a565b73ffffffffffffffffffffffffffffffffffffffff166113e261100b565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613956565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114d591906137be565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061159161172a565b73ffffffffffffffffffffffffffffffffffffffff166115af61100b565b73ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613956565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61162f61172a565b73ffffffffffffffffffffffffffffffffffffffff1661164d61100b565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613856565b60405180910390fd5b61171c8161242d565b50565b600081565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990613996565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613876565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118f091906139f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613816565b60405180910390fd5b60008114156119f7576119f283836000612594565b612428565b600b60009054906101000a900460ff16156120bc57611a1461100b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a825750611a5261100b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611abb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611af5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0e5750600660149054906101000a900460ff16155b156120bb57600b60019054906101000a900460ff16611c0857601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bc85750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90613836565b60405180910390fd5b5b600d60009054906101000a900460ff1615611dd257611c2561100b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611cac57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d065750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611dd15743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613916565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e755750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f1c57600854811115611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906138f6565b60405180910390fd5b600a54611ecb83610d9e565b82611ed69190613b1d565b1115611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906139b6565b60405180910390fd5b6120ba565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fbf5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561200e57600854811115612009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612000906138d6565b60405180910390fd5b6120b9565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120b857600a5461206b83610d9e565b826120769190613b1d565b11156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae906139b6565b60405180910390fd5b5b5b5b5b5b60006120c730610d9e565b9050600060095482101590508080156120ec5750600b60029054906101000a900460ff165b80156121055750600660149054906101000a900460ff16155b801561215b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121b15750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122075750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561224b576001600660146101000a81548160ff02191690831515021790555061222f612815565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123015750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561230b57600090505b6000811561241857601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123f45761238d606461237f600e5488612a2290919063ffffffff16565b612a3890919063ffffffff16565b9050600e5460008261239f9190613ba4565b6123a99190613b73565b600f60008282546123ba9190613b1d565b92505081905550600e546000826123d19190613ba4565b6123db9190613b73565b601060008282546123ec9190613b1d565b925050819055505b600081111561240957612408873083612594565b5b80856124159190613bfe565b94505b612423878787612594565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb90613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90613816565b60405180910390fd5b61267f838383612a4e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906138b6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127989190613b1d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127fc91906139f6565b60405180910390a361280f848484612a53565b50505050565b600061282030610d9e565b90506000601054600f546128349190613b1d565b90506000808314806128465750600082145b1561285357505050612a20565b60146009546128629190613ba4565b83111561287b5760146009546128789190613ba4565b92505b6000600283600f548661288e9190613ba4565b6128989190613b73565b6128a29190613b73565b905060006128b98286612a5890919063ffffffff16565b905060004790506128c982612a6e565b60006128de8247612a5890919063ffffffff16565b90506000612909876128fb60105485612a2290919063ffffffff16565b612a3890919063ffffffff16565b9050600081836129199190613bfe565b90506000600f819055506000601081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516129719061372d565b60006040518083038185875af1925050503d80600081146129ae576040519150601f19603f3d011682016040523d82523d6000602084013e6129b3565b606091505b5050809750506000861180156129c95750600081115b15612a16576129d88682612d2c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582600f54604051612a0d93929190613a6b565b60405180910390a15b5050505050505050505b565b60008183612a309190613ba4565b905092915050565b60008183612a469190613b73565b905092915050565b505050565b505050565b60008183612a669190613bfe565b905092915050565b6000600267ffffffffffffffff811115612ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612adf5781602001602082028036833780820191505090505b5090503081600081518110612b1d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bbd57600080fd5b505afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf59190612ea9565b81600181518110612c2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c94307f000000000000000000000000000000000000000000000000000000000000000084611732565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cf6959493929190613a11565b600060405180830381600087803b158015612d1057600080fd5b505af1158015612d24573d6000803e3d6000fd5b505050505050565b612d57307f000000000000000000000000000000000000000000000000000000000000000084611732565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612dbe9695949392919061375d565b6060604051808303818588803b158015612dd757600080fd5b505af1158015612deb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e109190612ffe565b5050505050565b600081359050612e2681613dc0565b92915050565b600081519050612e3b81613dc0565b92915050565b600081359050612e5081613dd7565b92915050565b600081359050612e6581613dee565b92915050565b600081519050612e7a81613dee565b92915050565b600060208284031215612e9257600080fd5b6000612ea084828501612e17565b91505092915050565b600060208284031215612ebb57600080fd5b6000612ec984828501612e2c565b91505092915050565b60008060408385031215612ee557600080fd5b6000612ef385828601612e17565b9250506020612f0485828601612e17565b9150509250929050565b600080600060608486031215612f2357600080fd5b6000612f3186828701612e17565b9350506020612f4286828701612e17565b9250506040612f5386828701612e56565b9150509250925092565b60008060408385031215612f7057600080fd5b6000612f7e85828601612e17565b9250506020612f8f85828601612e41565b9150509250929050565b60008060408385031215612fac57600080fd5b6000612fba85828601612e17565b9250506020612fcb85828601612e56565b9150509250929050565b600060208284031215612fe757600080fd5b6000612ff584828501612e41565b91505092915050565b60008060006060848603121561301357600080fd5b600061302186828701612e6b565b935050602061303286828701612e6b565b925050604061304386828701612e6b565b9150509250925092565b60006130598383613065565b60208301905092915050565b61306e81613c32565b82525050565b61307d81613c32565b82525050565b600061308e82613acd565b6130988185613af0565b93506130a383613abd565b8060005b838110156130d45781516130bb888261304d565b97506130c683613ae3565b9250506001810190506130a7565b5085935050505092915050565b6130ea81613c44565b82525050565b6130f981613c87565b82525050565b61310881613cab565b82525050565b600061311982613ad8565b6131238185613b0c565b9350613133818560208601613cbd565b61313c81613daf565b840191505092915050565b6000613154602383613b0c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131ba601683613b0c565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006131fa602683613b0c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613260602283613b0c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c6603983613b0c565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061332c602683613b0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613392603683613b0c565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b60006133f8603583613b0c565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061345e604983613b0c565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b60006134ea602883613b0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613550602083613b0c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613590602583613b0c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f6600083613b01565b9150600082019050919050565b6000613610602483613b0c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613676601383613b0c565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006136b6602583613b0c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61371881613c70565b82525050565b61372781613c7a565b82525050565b6000613738826135e9565b9150819050919050565b60006020820190506137576000830184613074565b92915050565b600060c0820190506137726000830189613074565b61377f602083018861370f565b61378c60408301876130ff565b61379960608301866130ff565b6137a66080830185613074565b6137b360a083018461370f565b979650505050505050565b60006020820190506137d360008301846130e1565b92915050565b60006020820190506137ee60008301846130f0565b92915050565b6000602082019050818103600083015261380e818461310e565b905092915050565b6000602082019050818103600083015261382f81613147565b9050919050565b6000602082019050818103600083015261384f816131ad565b9050919050565b6000602082019050818103600083015261386f816131ed565b9050919050565b6000602082019050818103600083015261388f81613253565b9050919050565b600060208201905081810360008301526138af816132b9565b9050919050565b600060208201905081810360008301526138cf8161331f565b9050919050565b600060208201905081810360008301526138ef81613385565b9050919050565b6000602082019050818103600083015261390f816133eb565b9050919050565b6000602082019050818103600083015261392f81613451565b9050919050565b6000602082019050818103600083015261394f816134dd565b9050919050565b6000602082019050818103600083015261396f81613543565b9050919050565b6000602082019050818103600083015261398f81613583565b9050919050565b600060208201905081810360008301526139af81613603565b9050919050565b600060208201905081810360008301526139cf81613669565b9050919050565b600060208201905081810360008301526139ef816136a9565b9050919050565b6000602082019050613a0b600083018461370f565b92915050565b600060a082019050613a26600083018861370f565b613a3360208301876130ff565b8181036040830152613a458186613083565b9050613a546060830185613074565b613a61608083018461370f565b9695505050505050565b6000606082019050613a80600083018661370f565b613a8d602083018561370f565b613a9a604083018461370f565b949350505050565b6000602082019050613ab7600083018461371e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613b2882613c70565b9150613b3383613c70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b6857613b67613d22565b5b828201905092915050565b6000613b7e82613c70565b9150613b8983613c70565b925082613b9957613b98613d51565b5b828204905092915050565b6000613baf82613c70565b9150613bba83613c70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bf357613bf2613d22565b5b828202905092915050565b6000613c0982613c70565b9150613c1483613c70565b925082821015613c2757613c26613d22565b5b828203905092915050565b6000613c3d82613c50565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613c9282613c99565b9050919050565b6000613ca482613c50565b9050919050565b6000613cb682613c70565b9050919050565b60005b83811015613cdb578082015181840152602081019050613cc0565b83811115613cea576000848401525b50505050565b60006002820490506001821680613d0857607f821691505b60208210811415613d1c57613d1b613d80565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613dc981613c32565b8114613dd457600080fd5b50565b613de081613c44565b8114613deb57600080fd5b50565b613df781613c70565b8114613e0257600080fd5b5056fea2646970667358221220f9269e8303952115b1ce1d549261ccf45ee03ffcacbd2af6b33b0c5fe7ac1ebd64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80637571336a1161012e578063bbc0c742116100ab578063e2f456051161006f578063e2f45605146108b0578063e884f260146108db578063f2fde38b14610906578063f63743421461092f578063f8b45b051461095a57610246565b8063bbc0c742146107c9578063c0246668146107f4578063c876d0b91461081d578063c8c8ebe414610848578063dd62ed3e1461087357610246565b80639a7a23d6116100f25780639a7a23d6146106be578063a0d82dc5146106e7578063a457c2d714610712578063a9059cbb1461074f578063b62496f51461078c57610246565b80637571336a146105eb57806375f0a874146106145780638da5cb5b1461063f578063924de9b71461066a57806395d89b411461069357610246565b8063313ce567116101bc5780636a486a8e116101805780636a486a8e146105165780636ddd17131461054157806370a082311461056c578063715018a6146105a9578063751039fc146105c057610246565b8063313ce5671461041b578063395093511461044657806349bd5a5e146104835780634a62bb65146104ae5780634fbee193146104d957610246565b80631a8145bb116102035780631a8145bb146103465780631f3fed8f1461037157806323b872dd1461039c57806327c8f835146103d9578063293230b81461040457610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610985565b60405161026d91906137f4565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612f99565b610a17565b6040516102aa91906137be565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612e80565b610a35565b6040516102e791906137be565b60405180910390f35b3480156102fc57600080fd5b50610305610a55565b60405161031291906137d9565b60405180910390f35b34801561032757600080fd5b50610330610a79565b60405161033d91906139f6565b60405180910390f35b34801561035257600080fd5b5061035b610a83565b60405161036891906139f6565b60405180910390f35b34801561037d57600080fd5b50610386610a89565b60405161039391906139f6565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190612f0e565b610a8f565b6040516103d091906137be565b60405180910390f35b3480156103e557600080fd5b506103ee610b87565b6040516103fb9190613742565b60405180910390f35b34801561041057600080fd5b50610419610b8d565b005b34801561042757600080fd5b50610430610c41565b60405161043d9190613aa2565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190612f99565b610c4a565b60405161047a91906137be565b60405180910390f35b34801561048f57600080fd5b50610498610cf6565b6040516104a59190613742565b60405180910390f35b3480156104ba57600080fd5b506104c3610d1c565b6040516104d091906137be565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612e80565b610d2f565b60405161050d91906137be565b60405180910390f35b34801561052257600080fd5b5061052b610d85565b60405161053891906139f6565b60405180910390f35b34801561054d57600080fd5b50610556610d8b565b60405161056391906137be565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612e80565b610d9e565b6040516105a091906139f6565b60405180910390f35b3480156105b557600080fd5b506105be610de6565b005b3480156105cc57600080fd5b506105d5610e6e565b6040516105e291906137be565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612f5d565b610f0e565b005b34801561062057600080fd5b50610629610fe5565b6040516106369190613742565b60405180910390f35b34801561064b57600080fd5b5061065461100b565b6040516106619190613742565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c9190612fd5565b611035565b005b34801561069f57600080fd5b506106a86110ce565b6040516106b591906137f4565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190612f5d565b611160565b005b3480156106f357600080fd5b506106fc61127b565b60405161070991906139f6565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190612f99565b611280565b60405161074691906137be565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190612f99565b61136b565b60405161078391906137be565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612e80565b611389565b6040516107c091906137be565b60405180910390f35b3480156107d557600080fd5b506107de6113a9565b6040516107eb91906137be565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190612f5d565b6113bc565b005b34801561082957600080fd5b506108326114e1565b60405161083f91906137be565b60405180910390f35b34801561085457600080fd5b5061085d6114f4565b60405161086a91906139f6565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190612ed2565b6114fa565b6040516108a791906139f6565b60405180910390f35b3480156108bc57600080fd5b506108c5611581565b6040516108d291906139f6565b60405180910390f35b3480156108e757600080fd5b506108f0611587565b6040516108fd91906137be565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190612e80565b611627565b005b34801561093b57600080fd5b5061094461171f565b60405161095191906139f6565b60405180910390f35b34801561096657600080fd5b5061096f611724565b60405161097c91906139f6565b60405180910390f35b60606003805461099490613cf0565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090613cf0565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b5050505050905090565b6000610a2b610a2461172a565b8484611732565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b60105481565b6000610a9c8484846118fd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ae761172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613936565b60405180910390fd5b610b7b85610b7361172a565b858403611732565b60019150509392505050565b61dead81565b610b9561172a565b73ffffffffffffffffffffffffffffffffffffffff16610bb361100b565b73ffffffffffffffffffffffffffffffffffffffff1614610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090613956565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b60006012905090565b6000610cec610c5761172a565b848460016000610c6561172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce79190613b1d565b611732565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dee61172a565b73ffffffffffffffffffffffffffffffffffffffff16610e0c61100b565b73ffffffffffffffffffffffffffffffffffffffff1614610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990613956565b60405180910390fd5b610e6c600061242d565b565b6000610e7861172a565b73ffffffffffffffffffffffffffffffffffffffff16610e9661100b565b73ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390613956565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b610f1661172a565b73ffffffffffffffffffffffffffffffffffffffff16610f3461100b565b73ffffffffffffffffffffffffffffffffffffffff1614610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613956565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61103d61172a565b73ffffffffffffffffffffffffffffffffffffffff1661105b61100b565b73ffffffffffffffffffffffffffffffffffffffff16146110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890613956565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546110dd90613cf0565b80601f016020809104026020016040519081016040528092919081815260200182805461110990613cf0565b80156111565780601f1061112b57610100808354040283529160200191611156565b820191906000526020600020905b81548152906001019060200180831161113957829003601f168201915b5050505050905090565b61116861172a565b73ffffffffffffffffffffffffffffffffffffffff1661118661100b565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390613956565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490613896565b60405180910390fd5b61127782826124f3565b5050565b600081565b6000806001600061128f61172a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906139d6565b60405180910390fd5b61136061135761172a565b85858403611732565b600191505092915050565b600061137f61137861172a565b84846118fd565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6113c461172a565b73ffffffffffffffffffffffffffffffffffffffff166113e261100b565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613956565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114d591906137be565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061159161172a565b73ffffffffffffffffffffffffffffffffffffffff166115af61100b565b73ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613956565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61162f61172a565b73ffffffffffffffffffffffffffffffffffffffff1661164d61100b565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613856565b60405180910390fd5b61171c8161242d565b50565b600081565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990613996565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613876565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118f091906139f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613816565b60405180910390fd5b60008114156119f7576119f283836000612594565b612428565b600b60009054906101000a900460ff16156120bc57611a1461100b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a825750611a5261100b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611abb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611af5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b0e5750600660149054906101000a900460ff16155b156120bb57600b60019054906101000a900460ff16611c0857601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bc85750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90613836565b60405180910390fd5b5b600d60009054906101000a900460ff1615611dd257611c2561100b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611cac57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d065750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611dd15743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613916565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e755750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f1c57600854811115611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906138f6565b60405180910390fd5b600a54611ecb83610d9e565b82611ed69190613b1d565b1115611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906139b6565b60405180910390fd5b6120ba565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fbf5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561200e57600854811115612009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612000906138d6565b60405180910390fd5b6120b9565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120b857600a5461206b83610d9e565b826120769190613b1d565b11156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae906139b6565b60405180910390fd5b5b5b5b5b5b60006120c730610d9e565b9050600060095482101590508080156120ec5750600b60029054906101000a900460ff165b80156121055750600660149054906101000a900460ff16155b801561215b5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121b15750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122075750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561224b576001600660146101000a81548160ff02191690831515021790555061222f612815565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123015750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561230b57600090505b6000811561241857601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123f45761238d606461237f600e5488612a2290919063ffffffff16565b612a3890919063ffffffff16565b9050600e5460008261239f9190613ba4565b6123a99190613b73565b600f60008282546123ba9190613b1d565b92505081905550600e546000826123d19190613ba4565b6123db9190613b73565b601060008282546123ec9190613b1d565b925050819055505b600081111561240957612408873083612594565b5b80856124159190613bfe565b94505b612423878787612594565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb90613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90613816565b60405180910390fd5b61267f838383612a4e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906138b6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127989190613b1d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127fc91906139f6565b60405180910390a361280f848484612a53565b50505050565b600061282030610d9e565b90506000601054600f546128349190613b1d565b90506000808314806128465750600082145b1561285357505050612a20565b60146009546128629190613ba4565b83111561287b5760146009546128789190613ba4565b92505b6000600283600f548661288e9190613ba4565b6128989190613b73565b6128a29190613b73565b905060006128b98286612a5890919063ffffffff16565b905060004790506128c982612a6e565b60006128de8247612a5890919063ffffffff16565b90506000612909876128fb60105485612a2290919063ffffffff16565b612a3890919063ffffffff16565b9050600081836129199190613bfe565b90506000600f819055506000601081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516129719061372d565b60006040518083038185875af1925050503d80600081146129ae576040519150601f19603f3d011682016040523d82523d6000602084013e6129b3565b606091505b5050809750506000861180156129c95750600081115b15612a16576129d88682612d2c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582600f54604051612a0d93929190613a6b565b60405180910390a15b5050505050505050505b565b60008183612a309190613ba4565b905092915050565b60008183612a469190613b73565b905092915050565b505050565b505050565b60008183612a669190613bfe565b905092915050565b6000600267ffffffffffffffff811115612ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612adf5781602001602082028036833780820191505090505b5090503081600081518110612b1d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bbd57600080fd5b505afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf59190612ea9565b81600181518110612c2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c94307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611732565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cf6959493929190613a11565b600060405180830381600087803b158015612d1057600080fd5b505af1158015612d24573d6000803e3d6000fd5b505050505050565b612d57307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611732565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401612dbe9695949392919061375d565b6060604051808303818588803b158015612dd757600080fd5b505af1158015612deb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e109190612ffe565b5050505050565b600081359050612e2681613dc0565b92915050565b600081519050612e3b81613dc0565b92915050565b600081359050612e5081613dd7565b92915050565b600081359050612e6581613dee565b92915050565b600081519050612e7a81613dee565b92915050565b600060208284031215612e9257600080fd5b6000612ea084828501612e17565b91505092915050565b600060208284031215612ebb57600080fd5b6000612ec984828501612e2c565b91505092915050565b60008060408385031215612ee557600080fd5b6000612ef385828601612e17565b9250506020612f0485828601612e17565b9150509250929050565b600080600060608486031215612f2357600080fd5b6000612f3186828701612e17565b9350506020612f4286828701612e17565b9250506040612f5386828701612e56565b9150509250925092565b60008060408385031215612f7057600080fd5b6000612f7e85828601612e17565b9250506020612f8f85828601612e41565b9150509250929050565b60008060408385031215612fac57600080fd5b6000612fba85828601612e17565b9250506020612fcb85828601612e56565b9150509250929050565b600060208284031215612fe757600080fd5b6000612ff584828501612e41565b91505092915050565b60008060006060848603121561301357600080fd5b600061302186828701612e6b565b935050602061303286828701612e6b565b925050604061304386828701612e6b565b9150509250925092565b60006130598383613065565b60208301905092915050565b61306e81613c32565b82525050565b61307d81613c32565b82525050565b600061308e82613acd565b6130988185613af0565b93506130a383613abd565b8060005b838110156130d45781516130bb888261304d565b97506130c683613ae3565b9250506001810190506130a7565b5085935050505092915050565b6130ea81613c44565b82525050565b6130f981613c87565b82525050565b61310881613cab565b82525050565b600061311982613ad8565b6131238185613b0c565b9350613133818560208601613cbd565b61313c81613daf565b840191505092915050565b6000613154602383613b0c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131ba601683613b0c565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006131fa602683613b0c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613260602283613b0c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c6603983613b0c565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061332c602683613b0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613392603683613b0c565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b60006133f8603583613b0c565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061345e604983613b0c565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b60006134ea602883613b0c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613550602083613b0c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613590602583613b0c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f6600083613b01565b9150600082019050919050565b6000613610602483613b0c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613676601383613b0c565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006136b6602583613b0c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61371881613c70565b82525050565b61372781613c7a565b82525050565b6000613738826135e9565b9150819050919050565b60006020820190506137576000830184613074565b92915050565b600060c0820190506137726000830189613074565b61377f602083018861370f565b61378c60408301876130ff565b61379960608301866130ff565b6137a66080830185613074565b6137b360a083018461370f565b979650505050505050565b60006020820190506137d360008301846130e1565b92915050565b60006020820190506137ee60008301846130f0565b92915050565b6000602082019050818103600083015261380e818461310e565b905092915050565b6000602082019050818103600083015261382f81613147565b9050919050565b6000602082019050818103600083015261384f816131ad565b9050919050565b6000602082019050818103600083015261386f816131ed565b9050919050565b6000602082019050818103600083015261388f81613253565b9050919050565b600060208201905081810360008301526138af816132b9565b9050919050565b600060208201905081810360008301526138cf8161331f565b9050919050565b600060208201905081810360008301526138ef81613385565b9050919050565b6000602082019050818103600083015261390f816133eb565b9050919050565b6000602082019050818103600083015261392f81613451565b9050919050565b6000602082019050818103600083015261394f816134dd565b9050919050565b6000602082019050818103600083015261396f81613543565b9050919050565b6000602082019050818103600083015261398f81613583565b9050919050565b600060208201905081810360008301526139af81613603565b9050919050565b600060208201905081810360008301526139cf81613669565b9050919050565b600060208201905081810360008301526139ef816136a9565b9050919050565b6000602082019050613a0b600083018461370f565b92915050565b600060a082019050613a26600083018861370f565b613a3360208301876130ff565b8181036040830152613a458186613083565b9050613a546060830185613074565b613a61608083018461370f565b9695505050505050565b6000606082019050613a80600083018661370f565b613a8d602083018561370f565b613a9a604083018461370f565b949350505050565b6000602082019050613ab7600083018461371e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613b2882613c70565b9150613b3383613c70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b6857613b67613d22565b5b828201905092915050565b6000613b7e82613c70565b9150613b8983613c70565b925082613b9957613b98613d51565b5b828204905092915050565b6000613baf82613c70565b9150613bba83613c70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bf357613bf2613d22565b5b828202905092915050565b6000613c0982613c70565b9150613c1483613c70565b925082821015613c2757613c26613d22565b5b828203905092915050565b6000613c3d82613c50565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613c9282613c99565b9050919050565b6000613ca482613c50565b9050919050565b6000613cb682613c70565b9050919050565b60005b83811015613cdb578082015181840152602081019050613cc0565b83811115613cea576000848401525b50505050565b60006002820490506001821680613d0857607f821691505b60208210811415613d1c57613d1b613d80565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613dc981613c32565b8114613dd457600080fd5b50565b613de081613c44565b8114613deb57600080fd5b50565b613df781613c70565b8114613e0257600080fd5b5056fea2646970667358221220f9269e8303952115b1ce1d549261ccf45ee03ffcacbd2af6b33b0c5fe7ac1ebd64736f6c63430008000033

Deployed Bytecode Sourcemap

26963:12041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11867:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28084:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27038:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10679:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27862:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27902;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12559:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27131:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30512:111;;;;;;;;;;;;;:::i;:::-;;10521:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13497:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27096:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27383:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32069:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27729:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27463:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10850:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3355:103;;;;;;;;;;;;;:::i;:::-;;30675:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31000:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27223:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2704:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31263:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9778:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31561:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27815:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14297:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11240:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28305:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27423:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31371:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27681:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27268:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11519:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27310:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30857:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3613:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27764:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27350:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9559:100;9613:13;9646:5;9639:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:100;:::o;11867:210::-;11986:4;12008:39;12017:12;:10;:12::i;:::-;12031:7;12040:6;12008:8;:39::i;:::-;12065:4;12058:11;;11867:210;;;;:::o;28084:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27038:51::-;;;:::o;10679:108::-;10740:7;10767:12;;10760:19;;10679:108;:::o;27862:33::-;;;;:::o;27902:::-;;;;:::o;12559:529::-;12699:4;12716:36;12726:6;12734:9;12745:6;12716:9;:36::i;:::-;12765:24;12792:11;:19;12804:6;12792:19;;;;;;;;;;;;;;;:33;12812:12;:10;:12::i;:::-;12792:33;;;;;;;;;;;;;;;;12765:60;;12878:6;12858:16;:26;;12836:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12988:57;12997:6;13005:12;:10;:12::i;:::-;13038:6;13019:16;:25;12988:8;:57::i;:::-;13076:4;13069:11;;;12559:529;;;;;:::o;27131:53::-;27177:6;27131:53;:::o;30512:111::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30582:4:::1;30566:13;;:20;;;;;;;;;;;;;;;;;;30611:4;30597:11;;:18;;;;;;;;;;;;;;;;;;30512:111::o:0;10521:93::-;10579:5;10604:2;10597:9;;10521:93;:::o;13497:297::-;13612:4;13634:130;13657:12;:10;:12::i;:::-;13684:7;13743:10;13706:11;:25;13718:12;:10;:12::i;:::-;13706:25;;;;;;;;;;;;;;;:34;13732:7;13706:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13634:8;:130::i;:::-;13782:4;13775:11;;13497:297;;;;:::o;27096:28::-;;;;;;;;;;;;;:::o;27383:33::-;;;;;;;;;;;;;:::o;32069:126::-;32135:4;32159:19;:28;32179:7;32159:28;;;;;;;;;;;;;;;;;;;;;;;;;32152:35;;32069:126;;;:::o;27729:28::-;;;;:::o;27463:31::-;;;;;;;;;;;;;:::o;10850:177::-;10969:7;11001:9;:18;11011:7;11001:18;;;;;;;;;;;;;;;;10994:25;;10850:177;;;:::o;3355:103::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3420:30:::1;3447:1;3420:18;:30::i;:::-;3355:103::o:0;30675:121::-;30727:4;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30761:5:::1;30744:14;;:22;;;;;;;;;;;;;;;;;;30784:4;30777:11;;30675:121:::0;:::o;31000:167::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31155:4:::1;31113:31;:39;31145:6;31113:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31000:167:::0;;:::o;27223:30::-;;;;;;;;;;;;;:::o;2704:87::-;2750:7;2777:6;;;;;;;;;;;2770:13;;2704:87;:::o;31263:100::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31348:7:::1;31334:11;;:21;;;;;;;;;;;;;;;;;;31263:100:::0;:::o;9778:104::-;9834:13;9867:7;9860:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9778:104;:::o;31561:304::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31705:13:::1;;;;;;;;;;;31697:21;;:4;:21;;;;31675:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31816:41;31845:4;31851:5;31816:28;:41::i;:::-;31561:304:::0;;:::o;27815:38::-;27852:1;27815:38;:::o;14297:482::-;14417:4;14439:24;14466:11;:25;14478:12;:10;:12::i;:::-;14466:25;;;;;;;;;;;;;;;:34;14492:7;14466:34;;;;;;;;;;;;;;;;14439:61;;14553:15;14533:16;:35;;14511:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14669:67;14678:12;:10;:12::i;:::-;14692:7;14720:15;14701:16;:34;14669:8;:67::i;:::-;14767:4;14760:11;;;14297:482;;;;:::o;11240:216::-;11362:4;11384:42;11394:12;:10;:12::i;:::-;11408:9;11419:6;11384:9;:42::i;:::-;11444:4;11437:11;;11240:216;;;;:::o;28305:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27423:33::-;;;;;;;;;;;;;:::o;31371:182::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31487:8:::1;31456:19;:28;31476:7;31456:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31527:7;31511:34;;;31536:8;31511:34;;;;;;:::i;:::-;;;;;;;;31371:182:::0;;:::o;27681:39::-;;;;;;;;;;;;;:::o;27268:35::-;;;;:::o;11519:201::-;11653:7;11685:11;:18;11697:5;11685:18;;;;;;;;;;;;;;;:27;11704:7;11685:27;;;;;;;;;;;;;;;;11678:34;;11519:201;;;;:::o;27310:33::-;;;;:::o;30857:135::-;30917:4;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30957:5:::1;30934:20;;:28;;;;;;;;;;;;;;;;;;30980:4;30973:11;;30857:135:::0;:::o;3613:238::-;2935:12;:10;:12::i;:::-;2924:23;;:7;:5;:7::i;:::-;:23;;;2916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3736:1:::1;3716:22;;:8;:22;;;;3694:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3815:28;3834:8;3815:18;:28::i;:::-;3613:238:::0;:::o;27764:44::-;27807:1;27764:44;:::o;27350:24::-;;;;:::o;1546:98::-;1599:7;1626:10;1619:17;;1546:98;:::o;18087:380::-;18240:1;18223:19;;:5;:19;;;;18215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18321:1;18302:21;;:7;:21;;;;18294:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18405:6;18375:11;:18;18387:5;18375:18;;;;;;;;;;;;;;;:27;18394:7;18375:27;;;;;;;;;;;;;;;:36;;;;18443:7;18427:32;;18436:5;18427:32;;;18452:6;18427:32;;;;;;:::i;:::-;;;;;;;;18087:380;;;:::o;32203:4218::-;32351:1;32335:18;;:4;:18;;;;32327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32428:1;32414:16;;:2;:16;;;;32406:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32497:1;32487:6;:11;32483:93;;;32515:28;32531:4;32537:2;32541:1;32515:15;:28::i;:::-;32558:7;;32483:93;32592:14;;;;;;;;;;;32588:2487;;;32653:7;:5;:7::i;:::-;32645:15;;:4;:15;;;;:49;;;;;32687:7;:5;:7::i;:::-;32681:13;;:2;:13;;;;32645:49;:86;;;;;32729:1;32715:16;;:2;:16;;;;32645:86;:128;;;;;32766:6;32752:21;;:2;:21;;;;32645:128;:158;;;;;32795:8;;;;;;;;;;;32794:9;32645:158;32623:2441;;;32843:13;;;;;;;;;;;32838:223;;32915:19;:25;32935:4;32915:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32944:19;:23;32964:2;32944:23;;;;;;;;;;;;;;;;;;;;;;;;;32915:52;32881:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32838:223;33217:20;;;;;;;;;;;33213:641;;;33298:7;:5;:7::i;:::-;33292:13;;:2;:13;;;;:72;;;;;33348:15;33334:30;;:2;:30;;;;33292:72;:129;;;;;33407:13;;;;;;;;;;;33393:28;;:2;:28;;;;33292:129;33262:573;;;33585:12;33510:28;:39;33539:9;33510:39;;;;;;;;;;;;;;;;:87;33472:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;33799:12;33757:28;:39;33786:9;33757:39;;;;;;;;;;;;;;;:54;;;;33262:573;33213:641;33928:25;:31;33954:4;33928:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;33985:31;:35;34017:2;33985:35;;;;;;;;;;;;;;;;;;;;;;;;;33984:36;33928:92;33902:1147;;;34107:20;;34097:6;:30;;34063:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34315:9;;34298:13;34308:2;34298:9;:13::i;:::-;34289:6;:22;;;;:::i;:::-;:35;;34255:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33902:1147;;;34493:25;:29;34519:2;34493:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34548:31;:37;34580:4;34548:37;;;;;;;;;;;;;;;;;;;;;;;;;34547:38;34493:92;34467:582;;;34672:20;;34662:6;:30;;34628:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34467:582;;;34829:31;:35;34861:2;34829:35;;;;;;;;;;;;;;;;;;;;;;;;;34824:225;;34949:9;;34932:13;34942:2;34932:9;:13::i;:::-;34923:6;:22;;;;:::i;:::-;:35;;34889:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34824:225;34467:582;33902:1147;32623:2441;32588:2487;35087:28;35118:24;35136:4;35118:9;:24::i;:::-;35087:55;;35155:12;35194:18;;35170:20;:42;;35155:57;;35243:7;:35;;;;;35267:11;;;;;;;;;;;35243:35;:61;;;;;35296:8;;;;;;;;;;;35295:9;35243:61;:110;;;;;35322:25;:31;35348:4;35322:31;;;;;;;;;;;;;;;;;;;;;;;;;35321:32;35243:110;:153;;;;;35371:19;:25;35391:4;35371:25;;;;;;;;;;;;;;;;;;;;;;;;;35370:26;35243:153;:194;;;;;35414:19;:23;35434:2;35414:23;;;;;;;;;;;;;;;;;;;;;;;;;35413:24;35243:194;35225:326;;;35475:4;35464:8;;:15;;;;;;;;;;;;;;;;;;35496:10;:8;:10::i;:::-;35534:5;35523:8;;:16;;;;;;;;;;;;;;;;;;35225:326;35563:12;35579:8;;;;;;;;;;;35578:9;35563:24;;35689:19;:25;35709:4;35689:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35718:19;:23;35738:2;35718:23;;;;;;;;;;;;;;;;;;;;;;;;;35689:52;35685:100;;;35768:5;35758:15;;35685:100;35797:12;35902:7;35898:470;;;35954:25;:29;35980:2;35954:29;;;;;;;;;;;;;;;;;;;;;;;;;35950:269;;;36011:34;36041:3;36011:25;36022:13;;36011:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36004:41;;36114:13;;27807:1;36087:4;:23;;;;:::i;:::-;36086:41;;;;:::i;:::-;36064:18;;:63;;;;;;;:::i;:::-;;;;;;;;36190:13;;27852:1;36169:4;:17;;;;:::i;:::-;36168:35;;;;:::i;:::-;36146:18;;:57;;;;;;;:::i;:::-;;;;;;;;35950:269;36246:1;36239:4;:8;36235:91;;;36268:42;36284:4;36298;36305;36268:15;:42::i;:::-;36235:91;36352:4;36342:14;;;;;:::i;:::-;;;35898:470;36380:33;36396:4;36402:2;36406:6;36380:15;:33::i;:::-;32203:4218;;;;;;;;:::o;4011:191::-;4085:16;4104:6;;;;;;;;;;;4085:25;;4130:8;4121:6;;:17;;;;;;;;;;;;;;;;;;4185:8;4154:40;;4175:8;4154:40;;;;;;;;;;;;4011:191;;:::o;31873:188::-;31990:5;31956:25;:31;31982:4;31956:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32047:5;32013:40;;32041:4;32013:40;;;;;;;;;;;;31873:188;;:::o;15269:770::-;15427:1;15409:20;;:6;:20;;;;15401:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15511:1;15490:23;;:9;:23;;;;15482:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15566:47;15587:6;15595:9;15606:6;15566:20;:47::i;:::-;15626:21;15650:9;:17;15660:6;15650:17;;;;;;;;;;;;;;;;15626:41;;15717:6;15700:13;:23;;15678:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15861:6;15845:13;:22;15825:9;:17;15835:6;15825:17;;;;;;;;;;;;;;;:42;;;;15913:6;15889:9;:20;15899:9;15889:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15954:9;15937:35;;15946:6;15937:35;;;15965:6;15937:35;;;;;;:::i;:::-;;;;;;;;15985:46;16005:6;16013:9;16024:6;15985:19;:46::i;:::-;15269:770;;;;:::o;37551:1450::-;37590:23;37616:24;37634:4;37616:9;:24::i;:::-;37590:50;;37651:25;37700:18;;37679;;:39;;;;:::i;:::-;37651:67;;37729:12;37777:1;37758:15;:20;:46;;;;37803:1;37782:17;:22;37758:46;37754:85;;;37821:7;;;;;37754:85;37894:2;37873:18;;:23;;;;:::i;:::-;37855:15;:41;37851:115;;;37952:2;37931:18;;:23;;;;:::i;:::-;37913:41;;37851:115;38027:23;38140:1;38107:17;38072:18;;38054:15;:36;;;;:::i;:::-;38053:71;;;;:::i;:::-;:88;;;;:::i;:::-;38027:114;;38152:26;38181:36;38201:15;38181;:19;;:36;;;;:::i;:::-;38152:65;;38230:25;38258:21;38230:49;;38292:36;38309:18;38292:16;:36::i;:::-;38341:18;38362:44;38388:17;38362:21;:25;;:44;;;;:::i;:::-;38341:65;;38419:17;38439:57;38478:17;38439:34;38454:18;;38439:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;38419:77;;38509:23;38548:9;38535:10;:22;;;;:::i;:::-;38509:48;;38591:1;38570:18;:22;;;;38624:1;38603:18;:22;;;;38660:15;;;;;;;;;;;38652:29;;38689:9;38652:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38638:65;;;;;38738:1;38720:15;:19;:42;;;;;38761:1;38743:15;:19;38720:42;38716:278;;;38779:46;38792:15;38809;38779:12;:46::i;:::-;38845:137;38878:18;38915:15;38949:18;;38845:137;;;;;;;;:::i;:::-;;;;;;;;38716:278;37551:1450;;;;;;;;;;:::o;23536:98::-;23594:7;23625:1;23621;:5;;;;:::i;:::-;23614:12;;23536:98;;;;:::o;23935:::-;23993:7;24024:1;24020;:5;;;;:::i;:::-;24013:12;;23935:98;;;;:::o;19067:125::-;;;;:::o;19796:124::-;;;;:::o;23179:98::-;23237:7;23268:1;23264;:5;;;;:::i;:::-;23257:12;;23179:98;;;;:::o;36429:589::-;36555:21;36593:1;36579:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36555:40;;36624:4;36606;36611:1;36606:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;36650:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36640:4;36645:1;36640:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;36685:62;36702:4;36717:15;36735:11;36685:8;:62::i;:::-;36786:15;:66;;;36867:11;36893:1;36937:4;36964;36984:15;36786:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36429:589;;:::o;37026:517::-;37174:62;37191:4;37206:15;37224:11;37174:8;:62::i;:::-;37279:15;:31;;;37318:9;37351:4;37371:11;37397:1;37440;27177:6;37509:15;37279:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37026:517;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;;;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;;;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:596::-;;;;3498:2;3486:9;3477:7;3473:23;3469:32;3466:2;;;3514:1;3511;3504:12;3466:2;3557:1;3582:64;3638:7;3629:6;3618:9;3614:22;3582:64;:::i;:::-;3572:74;;3528:128;3695:2;3721:64;3777:7;3768:6;3757:9;3753:22;3721:64;:::i;:::-;3711:74;;3666:129;3834:2;3860:64;3916:7;3907:6;3896:9;3892:22;3860:64;:::i;:::-;3850:74;;3805:129;3456:485;;;;;:::o;3947:179::-;;4037:46;4079:3;4071:6;4037:46;:::i;:::-;4115:4;4110:3;4106:14;4092:28;;4027:99;;;;:::o;4132:108::-;4209:24;4227:5;4209:24;:::i;:::-;4204:3;4197:37;4187:53;;:::o;4246:118::-;4333:24;4351:5;4333:24;:::i;:::-;4328:3;4321:37;4311:53;;:::o;4400:732::-;;4548:54;4596:5;4548:54;:::i;:::-;4618:86;4697:6;4692:3;4618:86;:::i;:::-;4611:93;;4728:56;4778:5;4728:56;:::i;:::-;4807:7;4838:1;4823:284;4848:6;4845:1;4842:13;4823:284;;;4924:6;4918:13;4951:63;5010:3;4995:13;4951:63;:::i;:::-;4944:70;;5037:60;5090:6;5037:60;:::i;:::-;5027:70;;4883:224;4870:1;4867;4863:9;4858:14;;4823:284;;;4827:14;5123:3;5116:10;;4524:608;;;;;;;:::o;5138:109::-;5219:21;5234:5;5219:21;:::i;:::-;5214:3;5207:34;5197:50;;:::o;5253:181::-;5365:62;5421:5;5365:62;:::i;:::-;5360:3;5353:75;5343:91;;:::o;5440:147::-;5535:45;5574:5;5535:45;:::i;:::-;5530:3;5523:58;5513:74;;:::o;5593:364::-;;5709:39;5742:5;5709:39;:::i;:::-;5764:71;5828:6;5823:3;5764:71;:::i;:::-;5757:78;;5844:52;5889:6;5884:3;5877:4;5870:5;5866:16;5844:52;:::i;:::-;5921:29;5943:6;5921:29;:::i;:::-;5916:3;5912:39;5905:46;;5685:272;;;;;:::o;5963:367::-;;6126:67;6190:2;6185:3;6126:67;:::i;:::-;6119:74;;6223:34;6219:1;6214:3;6210:11;6203:55;6289:5;6284:2;6279:3;6275:12;6268:27;6321:2;6316:3;6312:12;6305:19;;6109:221;;;:::o;6336:320::-;;6499:67;6563:2;6558:3;6499:67;:::i;:::-;6492:74;;6596:24;6592:1;6587:3;6583:11;6576:45;6647:2;6642:3;6638:12;6631:19;;6482:174;;;:::o;6662:370::-;;6825:67;6889:2;6884:3;6825:67;:::i;:::-;6818:74;;6922:34;6918:1;6913:3;6909:11;6902:55;6988:8;6983:2;6978:3;6974:12;6967:30;7023:2;7018:3;7014:12;7007:19;;6808:224;;;:::o;7038:366::-;;7201:67;7265:2;7260:3;7201:67;:::i;:::-;7194:74;;7298:34;7294:1;7289:3;7285:11;7278:55;7364:4;7359:2;7354:3;7350:12;7343:26;7395:2;7390:3;7386:12;7379:19;;7184:220;;;:::o;7410:389::-;;7573:67;7637:2;7632:3;7573:67;:::i;:::-;7566:74;;7670:34;7666:1;7661:3;7657:11;7650:55;7736:27;7731:2;7726:3;7722:12;7715:49;7790:2;7785:3;7781:12;7774:19;;7556:243;;;:::o;7805:370::-;;7968:67;8032:2;8027:3;7968:67;:::i;:::-;7961:74;;8065:34;8061:1;8056:3;8052:11;8045:55;8131:8;8126:2;8121:3;8117:12;8110:30;8166:2;8161:3;8157:12;8150:19;;7951:224;;;:::o;8181:386::-;;8344:67;8408:2;8403:3;8344:67;:::i;:::-;8337:74;;8441:34;8437:1;8432:3;8428:11;8421:55;8507:24;8502:2;8497:3;8493:12;8486:46;8558:2;8553:3;8549:12;8542:19;;8327:240;;;:::o;8573:385::-;;8736:67;8800:2;8795:3;8736:67;:::i;:::-;8729:74;;8833:34;8829:1;8824:3;8820:11;8813:55;8899:23;8894:2;8889:3;8885:12;8878:45;8949:2;8944:3;8940:12;8933:19;;8719:239;;;:::o;8964:439::-;;9127:67;9191:2;9186:3;9127:67;:::i;:::-;9120:74;;9224:34;9220:1;9215:3;9211:11;9204:55;9290:34;9285:2;9280:3;9276:12;9269:56;9356:11;9351:2;9346:3;9342:12;9335:33;9394:2;9389:3;9385:12;9378:19;;9110:293;;;:::o;9409:372::-;;9572:67;9636:2;9631:3;9572:67;:::i;:::-;9565:74;;9669:34;9665:1;9660:3;9656:11;9649:55;9735:10;9730:2;9725:3;9721:12;9714:32;9772:2;9767:3;9763:12;9756:19;;9555:226;;;:::o;9787:330::-;;9950:67;10014:2;10009:3;9950:67;:::i;:::-;9943:74;;10047:34;10043:1;10038:3;10034:11;10027:55;10108:2;10103:3;10099:12;10092:19;;9933:184;;;:::o;10123:369::-;;10286:67;10350:2;10345:3;10286:67;:::i;:::-;10279:74;;10383:34;10379:1;10374:3;10370:11;10363:55;10449:7;10444:2;10439:3;10435:12;10428:29;10483:2;10478:3;10474:12;10467:19;;10269:223;;;:::o;10498:297::-;;10678:83;10759:1;10754:3;10678:83;:::i;:::-;10671:90;;10787:1;10782:3;10778:11;10771:18;;10661:134;;;:::o;10801:368::-;;10964:67;11028:2;11023:3;10964:67;:::i;:::-;10957:74;;11061:34;11057:1;11052:3;11048:11;11041:55;11127:6;11122:2;11117:3;11113:12;11106:28;11160:2;11155:3;11151:12;11144:19;;10947:222;;;:::o;11175:317::-;;11338:67;11402:2;11397:3;11338:67;:::i;:::-;11331:74;;11435:21;11431:1;11426:3;11422:11;11415:42;11483:2;11478:3;11474:12;11467:19;;11321:171;;;:::o;11498:369::-;;11661:67;11725:2;11720:3;11661:67;:::i;:::-;11654:74;;11758:34;11754:1;11749:3;11745:11;11738:55;11824:7;11819:2;11814:3;11810:12;11803:29;11858:2;11853:3;11849:12;11842:19;;11644:223;;;:::o;11873:118::-;11960:24;11978:5;11960:24;:::i;:::-;11955:3;11948:37;11938:53;;:::o;11997:112::-;12080:22;12096:5;12080:22;:::i;:::-;12075:3;12068:35;12058:51;;:::o;12115:379::-;;12321:147;12464:3;12321:147;:::i;:::-;12314:154;;12485:3;12478:10;;12303:191;;;:::o;12500:222::-;;12631:2;12620:9;12616:18;12608:26;;12644:71;12712:1;12701:9;12697:17;12688:6;12644:71;:::i;:::-;12598:124;;;;:::o;12728:807::-;;13015:3;13004:9;13000:19;12992:27;;13029:71;13097:1;13086:9;13082:17;13073:6;13029:71;:::i;:::-;13110:72;13178:2;13167:9;13163:18;13154:6;13110:72;:::i;:::-;13192:80;13268:2;13257:9;13253:18;13244:6;13192:80;:::i;:::-;13282;13358:2;13347:9;13343:18;13334:6;13282:80;:::i;:::-;13372:73;13440:3;13429:9;13425:19;13416:6;13372:73;:::i;:::-;13455;13523:3;13512:9;13508:19;13499:6;13455:73;:::i;:::-;12982:553;;;;;;;;;:::o;13541:210::-;;13666:2;13655:9;13651:18;13643:26;;13679:65;13741:1;13730:9;13726:17;13717:6;13679:65;:::i;:::-;13633:118;;;;:::o;13757:272::-;;13913:2;13902:9;13898:18;13890:26;;13926:96;14019:1;14008:9;14004:17;13995:6;13926:96;:::i;:::-;13880:149;;;;:::o;14035:313::-;;14186:2;14175:9;14171:18;14163:26;;14235:9;14229:4;14225:20;14221:1;14210:9;14206:17;14199:47;14263:78;14336:4;14327:6;14263:78;:::i;:::-;14255:86;;14153:195;;;;:::o;14354:419::-;;14558:2;14547:9;14543:18;14535:26;;14607:9;14601:4;14597:20;14593:1;14582:9;14578:17;14571:47;14635:131;14761:4;14635:131;:::i;:::-;14627:139;;14525:248;;;:::o;14779:419::-;;14983:2;14972:9;14968:18;14960:26;;15032:9;15026:4;15022:20;15018:1;15007:9;15003:17;14996:47;15060:131;15186:4;15060:131;:::i;:::-;15052:139;;14950:248;;;:::o;15204:419::-;;15408:2;15397:9;15393:18;15385:26;;15457:9;15451:4;15447:20;15443:1;15432:9;15428:17;15421:47;15485:131;15611:4;15485:131;:::i;:::-;15477:139;;15375:248;;;:::o;15629:419::-;;15833:2;15822:9;15818:18;15810:26;;15882:9;15876:4;15872:20;15868:1;15857:9;15853:17;15846:47;15910:131;16036:4;15910:131;:::i;:::-;15902:139;;15800:248;;;:::o;16054:419::-;;16258:2;16247:9;16243:18;16235:26;;16307:9;16301:4;16297:20;16293:1;16282:9;16278:17;16271:47;16335:131;16461:4;16335:131;:::i;:::-;16327:139;;16225:248;;;:::o;16479:419::-;;16683:2;16672:9;16668:18;16660:26;;16732:9;16726:4;16722:20;16718:1;16707:9;16703:17;16696:47;16760:131;16886:4;16760:131;:::i;:::-;16752:139;;16650:248;;;:::o;16904:419::-;;17108:2;17097:9;17093:18;17085:26;;17157:9;17151:4;17147:20;17143:1;17132:9;17128:17;17121:47;17185:131;17311:4;17185:131;:::i;:::-;17177:139;;17075:248;;;:::o;17329:419::-;;17533:2;17522:9;17518:18;17510:26;;17582:9;17576:4;17572:20;17568:1;17557:9;17553:17;17546:47;17610:131;17736:4;17610:131;:::i;:::-;17602:139;;17500:248;;;:::o;17754:419::-;;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17925:248;;;:::o;18179:419::-;;18383:2;18372:9;18368:18;18360:26;;18432:9;18426:4;18422:20;18418:1;18407:9;18403:17;18396:47;18460:131;18586:4;18460:131;:::i;:::-;18452:139;;18350:248;;;:::o;18604:419::-;;18808:2;18797:9;18793:18;18785:26;;18857:9;18851:4;18847:20;18843:1;18832:9;18828:17;18821:47;18885:131;19011:4;18885:131;:::i;:::-;18877:139;;18775:248;;;:::o;19029:419::-;;19233:2;19222:9;19218:18;19210:26;;19282:9;19276:4;19272:20;19268:1;19257:9;19253:17;19246:47;19310:131;19436:4;19310:131;:::i;:::-;19302:139;;19200:248;;;:::o;19454:419::-;;19658:2;19647:9;19643:18;19635:26;;19707:9;19701:4;19697:20;19693:1;19682:9;19678:17;19671:47;19735:131;19861:4;19735:131;:::i;:::-;19727:139;;19625:248;;;:::o;19879:419::-;;20083:2;20072:9;20068:18;20060:26;;20132:9;20126:4;20122:20;20118:1;20107:9;20103:17;20096:47;20160:131;20286:4;20160:131;:::i;:::-;20152:139;;20050:248;;;:::o;20304:419::-;;20508:2;20497:9;20493:18;20485:26;;20557:9;20551:4;20547:20;20543:1;20532:9;20528:17;20521:47;20585:131;20711:4;20585:131;:::i;:::-;20577:139;;20475:248;;;:::o;20729:222::-;;20860:2;20849:9;20845:18;20837:26;;20873:71;20941:1;20930:9;20926:17;20917:6;20873:71;:::i;:::-;20827:124;;;;:::o;20957:831::-;;21258:3;21247:9;21243:19;21235:27;;21272:71;21340:1;21329:9;21325:17;21316:6;21272:71;:::i;:::-;21353:80;21429:2;21418:9;21414:18;21405:6;21353:80;:::i;:::-;21480:9;21474:4;21470:20;21465:2;21454:9;21450:18;21443:48;21508:108;21611:4;21602:6;21508:108;:::i;:::-;21500:116;;21626:72;21694:2;21683:9;21679:18;21670:6;21626:72;:::i;:::-;21708:73;21776:3;21765:9;21761:19;21752:6;21708:73;:::i;:::-;21225:563;;;;;;;;:::o;21794:442::-;;21981:2;21970:9;21966:18;21958:26;;21994:71;22062:1;22051:9;22047:17;22038:6;21994:71;:::i;:::-;22075:72;22143:2;22132:9;22128:18;22119:6;22075:72;:::i;:::-;22157;22225:2;22214:9;22210:18;22201:6;22157:72;:::i;:::-;21948:288;;;;;;:::o;22242:214::-;;22369:2;22358:9;22354:18;22346:26;;22382:67;22446:1;22435:9;22431:17;22422:6;22382:67;:::i;:::-;22336:120;;;;:::o;22462:132::-;;22552:3;22544:11;;22582:4;22577:3;22573:14;22565:22;;22534:60;;;:::o;22600:114::-;;22701:5;22695:12;22685:22;;22674:40;;;:::o;22720:99::-;;22806:5;22800:12;22790:22;;22779:40;;;:::o;22825:113::-;;22927:4;22922:3;22918:14;22910:22;;22900:38;;;:::o;22944:184::-;;23077:6;23072:3;23065:19;23117:4;23112:3;23108:14;23093:29;;23055:73;;;;:::o;23134:147::-;;23272:3;23257:18;;23247:34;;;;:::o;23287:169::-;;23405:6;23400:3;23393:19;23445:4;23440:3;23436:14;23421:29;;23383:73;;;;:::o;23462:305::-;;23521:20;23539:1;23521:20;:::i;:::-;23516:25;;23555:20;23573:1;23555:20;:::i;:::-;23550:25;;23709:1;23641:66;23637:74;23634:1;23631:81;23628:2;;;23715:18;;:::i;:::-;23628:2;23759:1;23756;23752:9;23745:16;;23506:261;;;;:::o;23773:185::-;;23830:20;23848:1;23830:20;:::i;:::-;23825:25;;23864:20;23882:1;23864:20;:::i;:::-;23859:25;;23903:1;23893:2;;23908:18;;:::i;:::-;23893:2;23950:1;23947;23943:9;23938:14;;23815:143;;;;:::o;23964:348::-;;24027:20;24045:1;24027:20;:::i;:::-;24022:25;;24061:20;24079:1;24061:20;:::i;:::-;24056:25;;24249:1;24181:66;24177:74;24174:1;24171:81;24166:1;24159:9;24152:17;24148:105;24145:2;;;24256:18;;:::i;:::-;24145:2;24304:1;24301;24297:9;24286:20;;24012:300;;;;:::o;24318:191::-;;24378:20;24396:1;24378:20;:::i;:::-;24373:25;;24412:20;24430:1;24412:20;:::i;:::-;24407:25;;24451:1;24448;24445:8;24442:2;;;24456:18;;:::i;:::-;24442:2;24501:1;24498;24494:9;24486:17;;24363:146;;;;:::o;24515:96::-;;24581:24;24599:5;24581:24;:::i;:::-;24570:35;;24560:51;;;:::o;24617:90::-;;24694:5;24687:13;24680:21;24669:32;;24659:48;;;:::o;24713:126::-;;24790:42;24783:5;24779:54;24768:65;;24758:81;;;:::o;24845:77::-;;24911:5;24900:16;;24890:32;;;:::o;24928:86::-;;25003:4;24996:5;24992:16;24981:27;;24971:43;;;:::o;25020:176::-;;25128:62;25184:5;25128:62;:::i;:::-;25115:75;;25105:91;;;:::o;25202:138::-;;25310:24;25328:5;25310:24;:::i;:::-;25297:37;;25287:53;;;:::o;25346:121::-;;25437:24;25455:5;25437:24;:::i;:::-;25424:37;;25414:53;;;:::o;25473:307::-;25541:1;25551:113;25565:6;25562:1;25559:13;25551:113;;;25650:1;25645:3;25641:11;25635:18;25631:1;25626:3;25622:11;25615:39;25587:2;25584:1;25580:10;25575:15;;25551:113;;;25682:6;25679:1;25676:13;25673:2;;;25762:1;25753:6;25748:3;25744:16;25737:27;25673:2;25522:258;;;;:::o;25786:320::-;;25867:1;25861:4;25857:12;25847:22;;25914:1;25908:4;25904:12;25935:18;25925:2;;25991:4;25983:6;25979:17;25969:27;;25925:2;26053;26045:6;26042:14;26022:18;26019:38;26016:2;;;26072:18;;:::i;:::-;26016:2;25837:269;;;;:::o;26112:180::-;26160:77;26157:1;26150:88;26257:4;26254:1;26247:15;26281:4;26278:1;26271:15;26298:180;26346:77;26343:1;26336:88;26443:4;26440:1;26433:15;26467:4;26464:1;26457:15;26484:180;26532:77;26529:1;26522:88;26629:4;26626:1;26619:15;26653:4;26650:1;26643:15;26670:102;;26762:2;26758:7;26753:2;26746:5;26742:14;26738:28;26728:38;;26718:54;;;:::o;26778:122::-;26851:24;26869:5;26851:24;:::i;:::-;26844:5;26841:35;26831:2;;26890:1;26887;26880:12;26831:2;26821:79;:::o;26906:116::-;26976:21;26991:5;26976:21;:::i;:::-;26969:5;26966:32;26956:2;;27012:1;27009;27002:12;26956:2;26946:76;:::o;27028:122::-;27101:24;27119:5;27101:24;:::i;:::-;27094:5;27091:35;27081:2;;27140:1;27137;27130:12;27081:2;27071:79;:::o

Swarm Source

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