ETH Price: $2,133.37 (-15.05%)
Gas: 8.39 Gwei

Token

Ethereum Rune Protocol (RUNE)
 

Overview

Max Total Supply

1,000 RUNE

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3.655440834557384499 RUNE

Value
$0.00
0xdc7a3d4B40A5Ef61860D0eA1849FFb639731Eb86
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:
RUNE

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-25
*/

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

//@dev 1000 unique Milady with unique Attributes

// Sources flattened with hardhat v2.7.0 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



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


// File contracts/PepeToken.sol



pragma solidity ^0.8.0;


contract RUNE is Ownable, ERC20 {
    bool public limited = true;
    uint supply = 1000000000000000000000;
    uint256 public maxHoldingAmount = 3333330000000000000;
    uint256 public minHoldingAmount = 0;
    address public uniswapV2Pair;
    mapping(address => bool) public blacklists;

    constructor() ERC20("Ethereum Rune Protocol", "RUNE") {
        _mint(msg.sender, supply);
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function start(address _uniswapV2Pair) external onlyOwner{
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setLimitsOff() external onlyOwner{
        limited = false;
    }

    function setMaxManually(uint256 _maxHoldingAmount) external onlyOwner {
    
        maxHoldingAmount = _maxHoldingAmount;
       
    }

   

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) override internal virtual {
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        if (uniswapV2Pair == address(0)) {
            require(from == owner() || to == owner(), "trading is not started");
            return;
        }

        if (limited && from == uniswapV2Pair) {
            require(super.balanceOf(to) + amount <= maxHoldingAmount && super.balanceOf(to) + amount >= minHoldingAmount, "Forbid");
        }
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

      mapping(uint index => address holder) _holders;
    mapping(address holder => uint index) _holder_index;
    uint public holders_count;

    function get_holders_list(
        uint index,
        uint count
    ) external view returns (uint page_count, address[] memory accounts) {
        if (index >= holders_count) return (0, new address[](0));

        uint end = index + count;
        if (end > holders_count) {
            end = holders_count;
        }
        page_count = end - index;

        accounts = new address[](page_count);
        uint i;
        for (i = index; i < page_count; ++i) {
            accounts[i] = _holders[index + i];
        }
    }

    function add_holder(address value) internal {
        uint index = holders_count++;
        _holders[index] = value;
        _holder_index[value] = index;
    }

    function remove_holder(address value) internal {
        if (holders_count == 0) return;

        uint removingIndex = _holder_index[value];
        if (removingIndex != holders_count - 1) {
            address lastHolder = _holders[holders_count - 1];
            _holders[removingIndex] = lastHolder;
            _holder_index[lastHolder] = removingIndex;
        }

        --holders_count;
        delete _holder_index[value];
        delete _holders[holders_count];
    }

     uint constant MAX_GENS_START = 1000;
    uint public constant GEN_MIN = 1;
    uint public constant gen_max = MAX_GENS_START;
    uint public gen = MAX_GENS_START;
    uint public constant max_breed = 1000;
    mapping(address owner => uint) public counts;
    uint public breed_total_count;
    uint breed_id;


 



    function _transfer_breed_from_to_by_index(
        address account,
        uint index,
        address to
    ) private {
        string memory breed = "";
        
    }

    function transfer_breed_from_to_by_index(uint index, address to) external {
        require(index < counts[msg.sender], "incorrect index");
        _transfer_breed_from_to_by_index(msg.sender, index, to);
    }

    function gen_mode(uint value) private returns (uint) {
        value = (value * gen) / gen_max;
        if (value == 0) value = 1;
        if (gen > GEN_MIN) --gen;
        return value;
    }

    function buy(
        address to,
        uint256 amount
    ) internal    {
        uint last_balance = balanceOf(to);
        uint balance = last_balance + amount;
        uint count = balance /
            (10 ** decimals()) -
            last_balance /
            (10 ** decimals());
        uint i;
        for (i = 0; i < count; ++i) {
            string memory breed = "Breed(++breed_id, gen_mode(max_breed))";
            
        }
      
    }

    function sell(
        address from,
        uint256 amount
    ) internal {
        uint last_balance = balanceOf(from);
        uint balance = last_balance - amount;
        uint count = last_balance /
            (10 ** decimals()) -
            balance /
            (10 ** decimals());
        uint i;
        uint owner_count = counts[from];
        for (i = 0; i < count; ++i) {
            if (gen < gen_max) ++gen;
            if (owner_count > 0)
                (from, --owner_count);
        }
        
    }

    function transfer_internal(
        address from,
        address to,
        uint256 amount
    ) internal  {
        uint last_balance_from = balanceOf(from);
        uint balance_from = last_balance_from - amount;
        uint last_balance_to = balanceOf(to);
        uint balance_to = last_balance_to + amount;
      
        uint count_from = last_balance_from /
            (10 ** decimals()) -
            balance_from /
            (10 ** decimals());
        uint count_to = balance_to /
            (10 ** decimals()) -
            last_balance_to /
            (10 ** decimals());
        // calculate transfer count
        uint transfer_count = count_from;

        if (transfer_count > count_to) transfer_count = count_to;
        // transfer
        uint i;
        uint owner_count = counts[from];
        for (i = 0; i < transfer_count; ++i) {
            if (owner_count == 0) break;
            uint from_index = --owner_count;
       
        
        }
        uint transfered = i;

        // remove from
        for (i = transfer_count; i < count_from; ++i) {
            uint from_index = --owner_count;
            
        }

        // generate to
        for (i = transfered; i < count_to; ++i) {
          
          
        }

    }


    function get_svg_acc_index(
        address account,
        uint index
    ) external view returns (string memory) {
        
    }

    function get_account_breeds(
        address account,
        uint index,
        uint count
    ) external view returns (uint page_count, string[] memory accounts) {
        uint account_count = counts[account];
   
        uint end = index + count;
        if (end > account_count) {
            end = account_count;
        }
        page_count = end - index;

    
        uint i;
        for (i = 0; i < page_count; ++i) {
    
        }
    }

    function get_account_items(
        address account,
        uint index,
        uint count
    ) external view returns (uint page_count, string[] memory accounts) {
        uint account_count = counts[account];
   

        uint end = index + count;
        if (end > account_count) {
            end = account_count;
        }
        page_count = end - index;

      
        uint i;
        for (i = 0; i < page_count; ++i) {
     
        }
    }

    function get_account_svgs(
        address account,
        uint index,
        uint count
    ) external view returns (uint page_count, string[] memory accounts) {
        uint account_count = counts[account];
        if (index >= account_count) return (0, new string[](0));

        uint end = index + count;
        if (end > account_count) {
            end = account_count;
            page_count = index - end;
        }

        accounts = new string[](page_count);
        uint i;
        uint n = 0;
        for (i = index; i < end; ++i) {
     
        }
    }

    uint background_color;
    uint body;
    uint body_color;
    uint facial_hair;
    uint facial_hair_color;
    uint shirt_1;
    uint shirt_1_color;
    uint shirt_2;
    uint shirt_2_color;
    uint shirt_3;
    uint shirt_3_color;
    uint nose;
    uint nose_color;
    uint mouth;
    uint mouth_color;
    uint eyes_base_color;
    uint eyes;
    uint eyes_color;
    uint hair;
    uint hair_color;
    uint hat;
    uint hat_color;
    uint accessories;
    uint accessories_color;
    uint mask;
    uint mask_color;
    

    function setBackgroundColor(uint _background_color) external onlyOwner{
        background_color = _background_color;
    }

    function setBody(uint _body) external onlyOwner{
        body = _body;
    }

    function setBodyColor(uint _body_color) external onlyOwner {
        body_color = _body_color;
    }

    function setFacialHair(uint _facial_hair) external onlyOwner {
        facial_hair = _facial_hair;
    }

    function setFacialHairColor(uint _facial_hair_color) external onlyOwner{
        facial_hair_color = _facial_hair_color;
    }

    function setShirt1(uint _shirt_1) external onlyOwner{
        shirt_1 = _shirt_1;
    }

    function setShirt1Color(uint _shirt_1_color) external onlyOwner{
        shirt_1_color = _shirt_1_color;
    }


    function setShirtColor2(uint _shirt_2_color) external onlyOwner{
        shirt_2_color = _shirt_2_color;
    }

    function setShirt3(uint _shirt_3) external onlyOwner{
        shirt_3 = _shirt_3;
    }

    function setShirtColor3(uint _shirt_3_color) external onlyOwner{
        shirt_3_color = _shirt_3_color;
    }

    function setNose(uint _nose) external onlyOwner{
        nose = _nose;
    }

    function setNoseColor(uint _nose_color) external onlyOwner{
        nose_color = _nose_color;
    }

    function setMouth(uint _mouth) external onlyOwner{
        mouth = _mouth;
    }

    function setMouthColor(uint _mouth_color) external onlyOwner{
        mouth_color = _mouth_color;
    }

    function setBaseColor(uint _eyes_base_color) external onlyOwner{
        eyes_base_color = _eyes_base_color;
    }

    function setEyes(uint _eyes) external onlyOwner {
        eyes = _eyes;
    }

    function setEyeColor(uint _eyes_color) external onlyOwner{
        eyes_color = _eyes_color;
    }

    function setHair(uint _hair) external onlyOwner{
        hair = _hair;
    }

    function sethairColor(uint _hair_color) external onlyOwner{
        hair_color = _hair_color;
    }

    function setHat(uint _hat) external onlyOwner{
        hat = _hat;
    }

    function setHatColor(uint _hat_color) external onlyOwner{
        hat_color = _hat_color;
    }

    function setAcessoires(uint _accessories) external onlyOwner{
        accessories = _accessories;
    }

    function setAccessoiresColor(uint _accessories_color) external {
        accessories_color = _accessories_color;
    }

    function setMask(uint _mask) external onlyOwner{
        mask = _mask;
    }

    function setMaskColor(uint _mask_color) external onlyOwner{
        mask_color = _mask_color;
    }



}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GEN_MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breed_total_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"counts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen_max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"get_account_breeds","outputs":[{"internalType":"uint256","name":"page_count","type":"uint256"},{"internalType":"string[]","name":"accounts","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"get_account_items","outputs":[{"internalType":"uint256","name":"page_count","type":"uint256"},{"internalType":"string[]","name":"accounts","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"get_account_svgs","outputs":[{"internalType":"uint256","name":"page_count","type":"uint256"},{"internalType":"string[]","name":"accounts","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"get_holders_list","outputs":[{"internalType":"uint256","name":"page_count","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"get_svg_acc_index","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_breed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_accessories_color","type":"uint256"}],"name":"setAccessoiresColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_accessories","type":"uint256"}],"name":"setAcessoires","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_background_color","type":"uint256"}],"name":"setBackgroundColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eyes_base_color","type":"uint256"}],"name":"setBaseColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_body","type":"uint256"}],"name":"setBody","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_body_color","type":"uint256"}],"name":"setBodyColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eyes_color","type":"uint256"}],"name":"setEyeColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eyes","type":"uint256"}],"name":"setEyes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_facial_hair","type":"uint256"}],"name":"setFacialHair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_facial_hair_color","type":"uint256"}],"name":"setFacialHairColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hair","type":"uint256"}],"name":"setHair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hat","type":"uint256"}],"name":"setHat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hat_color","type":"uint256"}],"name":"setHatColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLimitsOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mask","type":"uint256"}],"name":"setMask","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mask_color","type":"uint256"}],"name":"setMaskColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxHoldingAmount","type":"uint256"}],"name":"setMaxManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mouth","type":"uint256"}],"name":"setMouth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mouth_color","type":"uint256"}],"name":"setMouthColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nose","type":"uint256"}],"name":"setNose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nose_color","type":"uint256"}],"name":"setNoseColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shirt_1","type":"uint256"}],"name":"setShirt1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shirt_1_color","type":"uint256"}],"name":"setShirt1Color","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shirt_3","type":"uint256"}],"name":"setShirt3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shirt_2_color","type":"uint256"}],"name":"setShirtColor2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shirt_3_color","type":"uint256"}],"name":"setShirtColor3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hair_color","type":"uint256"}],"name":"sethairColor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"transfer_breed_from_to_by_index","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052600160065f6101000a81548160ff021916908315150217905550683635c9adc5dea00000600755672e425df9692720006008555f6009556103e8600f553480156200004d575f80fd5b506040518060400160405280601681526020017f457468657265756d2052756e652050726f746f636f6c000000000000000000008152506040518060400160405280600481526020017f52554e4500000000000000000000000000000000000000000000000000000000815250620000da620000ce6200011a60201b60201c565b6200012160201b60201c565b8160049081620000eb919062000931565b508060059081620000fd919062000931565b5050506200011433600754620001e260201b60201c565b62000c70565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000253576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024a9062000a73565b60405180910390fd5b620002665f83836200035360201b60201c565b8060035f82825462000279919062000ac0565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620002ce919062000ac0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000334919062000b0b565b60405180910390a36200034f5f83836200065b60201b60201c565b5050565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015620003f25750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b62000434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042b9062000b74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200055557620004996200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200050d5750620004de6200066060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6200054f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005469062000be2565b60405180910390fd5b62000656565b60065f9054906101000a900460ff168015620005bd5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15620006555760085481620005d8846200068760201b60201c565b620005e4919062000ac0565b111580156200061257506009548162000603846200068760201b60201c565b6200060f919062000ac0565b10155b62000654576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064b9062000c50565b60405180910390fd5b5b5b505050565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200074957607f821691505b6020821081036200075f576200075e62000704565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620007c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000786565b620007cf868362000786565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000819620008136200080d84620007e7565b620007f0565b620007e7565b9050919050565b5f819050919050565b6200083483620007f9565b6200084c620008438262000820565b84845462000792565b825550505050565b5f90565b6200086262000854565b6200086f81848462000829565b505050565b5b8181101562000896576200088a5f8262000858565b60018101905062000875565b5050565b601f821115620008e557620008af8162000765565b620008ba8462000777565b81016020851015620008ca578190505b620008e2620008d98562000777565b83018262000874565b50505b505050565b5f82821c905092915050565b5f620009075f1984600802620008ea565b1980831691505092915050565b5f620009218383620008f6565b9150826002028217905092915050565b6200093c82620006cd565b67ffffffffffffffff811115620009585762000957620006d7565b5b62000964825462000731565b620009718282856200089a565b5f60209050601f831160018114620009a7575f841562000992578287015190505b6200099e858262000914565b86555062000a0d565b601f198416620009b78662000765565b5f5b82811015620009e057848901518255600182019150602085019450602081019050620009b9565b8683101562000a005784890151620009fc601f891682620008f6565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a5b601f8362000a15565b915062000a688262000a25565b602082019050919050565b5f6020820190508181035f83015262000a8c8162000a4d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000acc82620007e7565b915062000ad983620007e7565b925082820190508082111562000af45762000af362000a93565b5b92915050565b62000b0581620007e7565b82525050565b5f60208201905062000b205f83018462000afa565b92915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f62000b5c600b8362000a15565b915062000b698262000b26565b602082019050919050565b5f6020820190508181035f83015262000b8d8162000b4e565b9050919050565b7f74726164696e67206973206e6f742073746172746564000000000000000000005f82015250565b5f62000bca60168362000a15565b915062000bd78262000b94565b602082019050919050565b5f6020820190508181035f83015262000bfb8162000bbc565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f62000c3860068362000a15565b915062000c458262000c02565b602082019050919050565b5f6020820190508181035f83015262000c698162000c2a565b9050919050565b613f8b8062000c7e5f395ff3fe608060405234801561000f575f80fd5b50600436106103b8575f3560e01c806383ba06ae116101f2578063af504def11610118578063d5a42606116100ab578063dde415fa1161007a578063dde415fa14610b28578063de757cf614610b46578063f2fde38b14610b62578063fcccebce14610b7e576103b8565b8063d5a4260614610a8f578063d98dc35614610ac0578063dd0b281e14610adc578063dd62ed3e14610af8576103b8565b8063b9ce16f8116100e7578063b9ce16f814610a1f578063c29af77214610a3b578063c500523c14610a57578063c6299c2914610a73576103b8565b8063af504def14610997578063b42dfa0d146109b5578063b4377a3e146109d3578063b4f243a4146109ef576103b8565b80638fdada4a1161019057806398bafaa31161015f57806398bafaa3146108ea5780639c8e06941461091b578063a457c2d714610937578063a9059cbb14610967576103b8565b80638fdada4a1461087657806394b4e9bc1461089457806395d89b41146108b0578063978551f7146108ce576103b8565b806389f9a1d3116101cc57806389f9a1d3146108025780638a642385146108205780638b1d69431461083c5780638da5cb5b14610858576103b8565b806383ba06ae146107ac578063860a32ec146107c85780638947ec54146107e6576103b8565b80633860a393116102e257806349bd5a5e1161027557806373397eaf1161024457806373397eaf14610727578063750e8d101461074357806381dea96c146107745780638251510514610790576103b8565b806349bd5a5e146106b3578063664c587d146106d157806370a08231146106ed578063715018a61461071d576103b8565b806342966c68116102b157806342966c681461064357806343d68b061461065f57806345de4e5f1461067b5780634984209014610697576103b8565b80633860a393146105aa57806339509351146105db578063404e51291461060b578063412a61ad14610627576103b8565b806316c021291161035a57806323b872dd1161032957806323b872dd146105345780632d12d34b14610564578063313ce5671461058257806334b0c804146105a0576103b8565b806316c02129146104ac57806318160ddd146104dc5780631ab99e12146104fa5780631f09fade14610518576103b8565b8063095ea7b311610396578063095ea7b3146104285780630bf31a391461045857806311f3ac181461047457806314c42d7314610490576103b8565b8063018a3741146103bc5780630568e65e146103da57806306fdde031461040a575b5f80fd5b6103c4610b9a565b6040516103d19190613031565b60405180910390f35b6103f460048036038101906103ef91906130a8565b610ba0565b6040516104019190613031565b60405180910390f35b610412610bb5565b60405161041f919061315d565b60405180910390f35b610442600480360381019061043d91906131a7565b610c45565b60405161044f91906131ff565b60405180910390f35b610472600480360381019061046d9190613218565b610c62565b005b61048e60048036038101906104899190613218565b610ce8565b005b6104aa60048036038101906104a59190613218565b610d6e565b005b6104c660048036038101906104c191906130a8565b610df4565b6040516104d391906131ff565b60405180910390f35b6104e4610e11565b6040516104f19190613031565b60405180910390f35b610502610e1a565b60405161050f9190613031565b60405180910390f35b610532600480360381019061052d9190613218565b610e20565b005b61054e60048036038101906105499190613243565b610ea6565b60405161055b91906131ff565b60405180910390f35b61056c610f98565b6040516105799190613031565b60405180910390f35b61058a610f9d565b60405161059791906132ae565b60405180910390f35b6105a8610fa5565b005b6105c460048036038101906105bf91906132c7565b61103c565b6040516105d29291906133bc565b60405180910390f35b6105f560048036038101906105f091906131a7565b6111be565b60405161060291906131ff565b60405180910390f35b61062560048036038101906106209190613414565b611265565b005b610641600480360381019061063c9190613218565b611339565b005b61065d60048036038101906106589190613218565b6113bf565b005b61067960048036038101906106749190613218565b6113cc565b005b61069560048036038101906106909190613218565b611452565b005b6106b160048036038101906106ac9190613218565b6114d8565b005b6106bb61155e565b6040516106c89190613461565b60405180910390f35b6106eb60048036038101906106e69190613218565b611583565b005b610707600480360381019061070291906130a8565b611609565b6040516107149190613031565b60405180910390f35b61072561164f565b005b610741600480360381019061073c9190613218565b6116d6565b005b61075d6004803603810190610758919061347a565b61175c565b60405161076b9291906135cd565b60405180910390f35b61078e60048036038101906107899190613218565b6117e9565b005b6107aa60048036038101906107a59190613218565b6117f3565b005b6107c660048036038101906107c19190613218565b611879565b005b6107d06118ff565b6040516107dd91906131ff565b60405180910390f35b61080060048036038101906107fb9190613218565b611911565b005b61080a611997565b6040516108179190613031565b60405180910390f35b61083a60048036038101906108359190613218565b61199d565b005b61085660048036038101906108519190613218565b611a23565b005b610860611aa9565b60405161086d9190613461565b60405180910390f35b61087e611ad0565b60405161088b9190613031565b60405180910390f35b6108ae60048036038101906108a99190613218565b611ad6565b005b6108b8611b5c565b6040516108c5919061315d565b60405180910390f35b6108e860048036038101906108e39190613218565b611bec565b005b61090460048036038101906108ff919061347a565b611c72565b6040516109129291906135cd565b60405180910390f35b61093560048036038101906109309190613218565b611cff565b005b610951600480360381019061094c91906131a7565b611d85565b60405161095e91906131ff565b60405180910390f35b610981600480360381019061097c91906131a7565b611e6b565b60405161098e91906131ff565b60405180910390f35b61099f611e88565b6040516109ac9190613031565b60405180910390f35b6109bd611e8e565b6040516109ca9190613031565b60405180910390f35b6109ed60048036038101906109e891906135fb565b611e94565b005b610a096004803603810190610a0491906131a7565b611f22565b604051610a16919061315d565b60405180910390f35b610a396004803603810190610a349190613218565b611f2a565b005b610a556004803603810190610a509190613218565b611fb0565b005b610a716004803603810190610a6c9190613218565b612036565b005b610a8d6004803603810190610a889190613218565b6120bc565b005b610aa96004803603810190610aa4919061347a565b612142565b604051610ab79291906135cd565b60405180910390f35b610ada6004803603810190610ad59190613218565b612288565b005b610af66004803603810190610af191906130a8565b61230e565b005b610b126004803603810190610b0d9190613639565b6123cd565b604051610b1f9190613031565b60405180910390f35b610b3061244f565b604051610b3d9190613031565b60405180910390f35b610b606004803603810190610b5b9190613218565b612455565b005b610b7c6004803603810190610b7791906130a8565b6124db565b005b610b986004803603810190610b939190613218565b6125d1565b005b600e5481565b6010602052805f5260405f205f915090505481565b606060048054610bc4906136a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf0906136a4565b8015610c3b5780601f10610c1257610100808354040283529160200191610c3b565b820191905f5260205f20905b815481529060010190602001808311610c1e57829003601f168201915b5050505050905090565b5f610c58610c51612657565b848461265e565b6001905092915050565b610c6a612657565b73ffffffffffffffffffffffffffffffffffffffff16610c88611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061371e565b60405180910390fd5b8060298190555050565b610cf0612657565b73ffffffffffffffffffffffffffffffffffffffff16610d0e611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b9061371e565b60405180910390fd5b80601f8190555050565b610d76612657565b73ffffffffffffffffffffffffffffffffffffffff16610d94611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061371e565b60405180910390fd5b8060218190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b60095481565b610e28612657565b73ffffffffffffffffffffffffffffffffffffffff16610e46611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061371e565b60405180910390fd5b8060268190555050565b5f610eb2848484612821565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ef9612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906137ac565b60405180910390fd5b610f8c85610f84612657565b85840361265e565b60019150509392505050565b600181565b5f6012905090565b610fad612657565b73ffffffffffffffffffffffffffffffffffffffff16610fcb611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189061371e565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b5f6060600e54841061109b575f8067ffffffffffffffff811115611063576110626137ca565b5b6040519080825280602002602001820160405280156110915781602001602082028036833780820191505090505b50915091506111b7565b5f83856110a89190613824565b9050600e548111156110ba57600e5490505b84816110c69190613857565b92508267ffffffffffffffff8111156110e2576110e16137ca565b5b6040519080825280602002602001820160405280156111105781602001602082028036833780820191505090505b5091505f8590505b838110156111b457600c5f828861112f9190613824565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061116f5761116e61388a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001019050611118565b50505b9250929050565b5f61125b6111ca612657565b848460025f6111d7612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112569190613824565b61265e565b6001905092915050565b61126d612657565b73ffffffffffffffffffffffffffffffffffffffff1661128b611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061371e565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611341612657565b73ffffffffffffffffffffffffffffffffffffffff1661135f611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061371e565b60405180910390fd5b8060148190555050565b6113c93382612a99565b50565b6113d4612657565b73ffffffffffffffffffffffffffffffffffffffff166113f2611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f9061371e565b60405180910390fd5b80601b8190555050565b61145a612657565b73ffffffffffffffffffffffffffffffffffffffff16611478611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c59061371e565b60405180910390fd5b8060238190555050565b6114e0612657565b73ffffffffffffffffffffffffffffffffffffffff166114fe611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061371e565b60405180910390fd5b8060208190555050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612657565b73ffffffffffffffffffffffffffffffffffffffff166115a9611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061371e565b60405180910390fd5b80602b8190555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611657612657565b73ffffffffffffffffffffffffffffffffffffffff16611675611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c29061371e565b60405180910390fd5b6116d45f612c67565b565b6116de612657565b73ffffffffffffffffffffffffffffffffffffffff166116fc611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117499061371e565b60405180910390fd5b8060278190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f84866117ad9190613824565b9050818111156117bb578190505b85816117c79190613857565b93505f5b848110156117de578060010190506117cb565b505050935093915050565b80602a8190555050565b6117fb612657565b73ffffffffffffffffffffffffffffffffffffffff16611819611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461186f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118669061371e565b60405180910390fd5b8060088190555050565b611881612657565b73ffffffffffffffffffffffffffffffffffffffff1661189f611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061371e565b60405180910390fd5b8060188190555050565b60065f9054906101000a900460ff1681565b611919612657565b73ffffffffffffffffffffffffffffffffffffffff16611937611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119849061371e565b60405180910390fd5b80601e8190555050565b60085481565b6119a5612657565b73ffffffffffffffffffffffffffffffffffffffff166119c3611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a109061371e565b60405180910390fd5b8060158190555050565b611a2b612657565b73ffffffffffffffffffffffffffffffffffffffff16611a49611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a969061371e565b60405180910390fd5b80601c8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103e881565b611ade612657565b73ffffffffffffffffffffffffffffffffffffffff16611afc611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b499061371e565b60405180910390fd5b80601d8190555050565b606060058054611b6b906136a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611b97906136a4565b8015611be25780601f10611bb957610100808354040283529160200191611be2565b820191905f5260205f20905b815481529060010190602001808311611bc557829003601f168201915b5050505050905090565b611bf4612657565b73ffffffffffffffffffffffffffffffffffffffff16611c12611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f9061371e565b60405180910390fd5b8060228190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8486611cc39190613824565b905081811115611cd1578190505b8581611cdd9190613857565b93505f5b84811015611cf457806001019050611ce1565b505050935093915050565b611d07612657565b73ffffffffffffffffffffffffffffffffffffffff16611d25611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729061371e565b60405180910390fd5b8060178190555050565b5f8060025f611d92612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613927565b60405180910390fd5b611e60611e57612657565b8585840361265e565b600191505092915050565b5f611e7e611e77612657565b8484612821565b6001905092915050565b60115481565b600f5481565b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548210611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061398f565b60405180910390fd5b611f1e338383612d28565b5050565b606092915050565b611f32612657565b73ffffffffffffffffffffffffffffffffffffffff16611f50611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d9061371e565b60405180910390fd5b8060138190555050565b611fb8612657565b73ffffffffffffffffffffffffffffffffffffffff16611fd6611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120239061371e565b60405180910390fd5b8060198190555050565b61203e612657565b73ffffffffffffffffffffffffffffffffffffffff1661205c611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a99061371e565b60405180910390fd5b8060168190555050565b6120c4612657565b73ffffffffffffffffffffffffffffffffffffffff166120e2611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f9061371e565b60405180910390fd5b8060248190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508085106121e6575f8067ffffffffffffffff8111156121a8576121a76137ca565b5b6040519080825280602002602001820160405280156121db57816020015b60608152602001906001900390816121c65790505b509250925050612280565b5f84866121f39190613824565b90508181111561220f57819050808661220c9190613857565b93505b8367ffffffffffffffff811115612229576122286137ca565b5b60405190808252806020026020018201604052801561225c57816020015b60608152602001906001900390816122475790505b5092505f805f90508791505b8282101561227b57816001019150612268565b505050505b935093915050565b612290612657565b73ffffffffffffffffffffffffffffffffffffffff166122ae611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb9061371e565b60405180910390fd5b80602c8190555050565b612316612657565b73ffffffffffffffffffffffffffffffffffffffff16612334611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123819061371e565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6103e881565b61245d612657565b73ffffffffffffffffffffffffffffffffffffffff1661247b611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061371e565b60405180910390fd5b8060288190555050565b6124e3612657565b73ffffffffffffffffffffffffffffffffffffffff16612501611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061371e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90613a1d565b60405180910390fd5b6125ce81612c67565b50565b6125d9612657565b73ffffffffffffffffffffffffffffffffffffffff166125f7611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126449061371e565b60405180910390fd5b8060258190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390613aab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190613b39565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128149190613031565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361288f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288690613bc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f490613c55565b60405180910390fd5b612908838383612d40565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390613ce3565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612a1c9190613824565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a809190613031565b60405180910390a3612a93848484613014565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afe90613d71565b60405180910390fd5b612b12825f83612d40565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90613dff565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f828254612beb9190613857565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c4f9190613031565b60405180910390a3612c62835f84613014565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60405180602001604052805f815250905050505050565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612dde5750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490613e67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612f2857612e79611aa9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ee45750612eb5611aa9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90613ecf565b60405180910390fd5b61300f565b60065f9054906101000a900460ff168015612f8f5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561300e5760085481612fa184611609565b612fab9190613824565b11158015612fce575060095481612fc184611609565b612fcb9190613824565b10155b61300d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300490613f37565b60405180910390fd5b5b5b505050565b505050565b5f819050919050565b61302b81613019565b82525050565b5f6020820190506130445f830184613022565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6130778261304e565b9050919050565b6130878161306d565b8114613091575f80fd5b50565b5f813590506130a28161307e565b92915050565b5f602082840312156130bd576130bc61304a565b5b5f6130ca84828501613094565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561310a5780820151818401526020810190506130ef565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61312f826130d3565b61313981856130dd565b93506131498185602086016130ed565b61315281613115565b840191505092915050565b5f6020820190508181035f8301526131758184613125565b905092915050565b61318681613019565b8114613190575f80fd5b50565b5f813590506131a18161317d565b92915050565b5f80604083850312156131bd576131bc61304a565b5b5f6131ca85828601613094565b92505060206131db85828601613193565b9150509250929050565b5f8115159050919050565b6131f9816131e5565b82525050565b5f6020820190506132125f8301846131f0565b92915050565b5f6020828403121561322d5761322c61304a565b5b5f61323a84828501613193565b91505092915050565b5f805f6060848603121561325a5761325961304a565b5b5f61326786828701613094565b935050602061327886828701613094565b925050604061328986828701613193565b9150509250925092565b5f60ff82169050919050565b6132a881613293565b82525050565b5f6020820190506132c15f83018461329f565b92915050565b5f80604083850312156132dd576132dc61304a565b5b5f6132ea85828601613193565b92505060206132fb85828601613193565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6133378161306d565b82525050565b5f613348838361332e565b60208301905092915050565b5f602082019050919050565b5f61336a82613305565b613374818561330f565b935061337f8361331f565b805f5b838110156133af578151613396888261333d565b97506133a183613354565b925050600181019050613382565b5085935050505092915050565b5f6040820190506133cf5f830185613022565b81810360208301526133e18184613360565b90509392505050565b6133f3816131e5565b81146133fd575f80fd5b50565b5f8135905061340e816133ea565b92915050565b5f806040838503121561342a5761342961304a565b5b5f61343785828601613094565b925050602061344885828601613400565b9150509250929050565b61345b8161306d565b82525050565b5f6020820190506134745f830184613452565b92915050565b5f805f606084860312156134915761349061304a565b5b5f61349e86828701613094565b93505060206134af86828701613193565b92505060406134c086828701613193565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61350d826130d3565b61351781856134f3565b93506135278185602086016130ed565b61353081613115565b840191505092915050565b5f6135468383613503565b905092915050565b5f602082019050919050565b5f613564826134ca565b61356e81856134d4565b935083602082028501613580856134e4565b805f5b858110156135bb578484038952815161359c858261353b565b94506135a78361354e565b925060208a01995050600181019050613583565b50829750879550505050505092915050565b5f6040820190506135e05f830185613022565b81810360208301526135f2818461355a565b90509392505050565b5f80604083850312156136115761361061304a565b5b5f61361e85828601613193565b925050602061362f85828601613094565b9150509250929050565b5f806040838503121561364f5761364e61304a565b5b5f61365c85828601613094565b925050602061366d85828601613094565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136bb57607f821691505b6020821081036136ce576136cd613677565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137086020836130dd565b9150613713826136d4565b602082019050919050565b5f6020820190508181035f830152613735816136fc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6137966028836130dd565b91506137a18261373c565b604082019050919050565b5f6020820190508181035f8301526137c38161378a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61382e82613019565b915061383983613019565b9250828201905080821115613851576138506137f7565b5b92915050565b5f61386182613019565b915061386c83613019565b9250828203905081811115613884576138836137f7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6139116025836130dd565b915061391c826138b7565b604082019050919050565b5f6020820190508181035f83015261393e81613905565b9050919050565b7f696e636f727265637420696e64657800000000000000000000000000000000005f82015250565b5f613979600f836130dd565b915061398482613945565b602082019050919050565b5f6020820190508181035f8301526139a68161396d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a076026836130dd565b9150613a12826139ad565b604082019050919050565b5f6020820190508181035f830152613a34816139fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a956024836130dd565b9150613aa082613a3b565b604082019050919050565b5f6020820190508181035f830152613ac281613a89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b236022836130dd565b9150613b2e82613ac9565b604082019050919050565b5f6020820190508181035f830152613b5081613b17565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bb16025836130dd565b9150613bbc82613b57565b604082019050919050565b5f6020820190508181035f830152613bde81613ba5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c3f6023836130dd565b9150613c4a82613be5565b604082019050919050565b5f6020820190508181035f830152613c6c81613c33565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613ccd6026836130dd565b9150613cd882613c73565b604082019050919050565b5f6020820190508181035f830152613cfa81613cc1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d5b6021836130dd565b9150613d6682613d01565b604082019050919050565b5f6020820190508181035f830152613d8881613d4f565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613de96022836130dd565b9150613df482613d8f565b604082019050919050565b5f6020820190508181035f830152613e1681613ddd565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f613e51600b836130dd565b9150613e5c82613e1d565b602082019050919050565b5f6020820190508181035f830152613e7e81613e45565b9050919050565b7f74726164696e67206973206e6f742073746172746564000000000000000000005f82015250565b5f613eb96016836130dd565b9150613ec482613e85565b602082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f613f216006836130dd565b9150613f2c82613eed565b602082019050919050565b5f6020820190508181035f830152613f4e81613f15565b905091905056fea26469706673582212205e18f8c960e86fbfab8ea3fc4d2a8d10e863158a40a615f46a6a3b0772efef4064736f6c63430008170033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106103b8575f3560e01c806383ba06ae116101f2578063af504def11610118578063d5a42606116100ab578063dde415fa1161007a578063dde415fa14610b28578063de757cf614610b46578063f2fde38b14610b62578063fcccebce14610b7e576103b8565b8063d5a4260614610a8f578063d98dc35614610ac0578063dd0b281e14610adc578063dd62ed3e14610af8576103b8565b8063b9ce16f8116100e7578063b9ce16f814610a1f578063c29af77214610a3b578063c500523c14610a57578063c6299c2914610a73576103b8565b8063af504def14610997578063b42dfa0d146109b5578063b4377a3e146109d3578063b4f243a4146109ef576103b8565b80638fdada4a1161019057806398bafaa31161015f57806398bafaa3146108ea5780639c8e06941461091b578063a457c2d714610937578063a9059cbb14610967576103b8565b80638fdada4a1461087657806394b4e9bc1461089457806395d89b41146108b0578063978551f7146108ce576103b8565b806389f9a1d3116101cc57806389f9a1d3146108025780638a642385146108205780638b1d69431461083c5780638da5cb5b14610858576103b8565b806383ba06ae146107ac578063860a32ec146107c85780638947ec54146107e6576103b8565b80633860a393116102e257806349bd5a5e1161027557806373397eaf1161024457806373397eaf14610727578063750e8d101461074357806381dea96c146107745780638251510514610790576103b8565b806349bd5a5e146106b3578063664c587d146106d157806370a08231146106ed578063715018a61461071d576103b8565b806342966c68116102b157806342966c681461064357806343d68b061461065f57806345de4e5f1461067b5780634984209014610697576103b8565b80633860a393146105aa57806339509351146105db578063404e51291461060b578063412a61ad14610627576103b8565b806316c021291161035a57806323b872dd1161032957806323b872dd146105345780632d12d34b14610564578063313ce5671461058257806334b0c804146105a0576103b8565b806316c02129146104ac57806318160ddd146104dc5780631ab99e12146104fa5780631f09fade14610518576103b8565b8063095ea7b311610396578063095ea7b3146104285780630bf31a391461045857806311f3ac181461047457806314c42d7314610490576103b8565b8063018a3741146103bc5780630568e65e146103da57806306fdde031461040a575b5f80fd5b6103c4610b9a565b6040516103d19190613031565b60405180910390f35b6103f460048036038101906103ef91906130a8565b610ba0565b6040516104019190613031565b60405180910390f35b610412610bb5565b60405161041f919061315d565b60405180910390f35b610442600480360381019061043d91906131a7565b610c45565b60405161044f91906131ff565b60405180910390f35b610472600480360381019061046d9190613218565b610c62565b005b61048e60048036038101906104899190613218565b610ce8565b005b6104aa60048036038101906104a59190613218565b610d6e565b005b6104c660048036038101906104c191906130a8565b610df4565b6040516104d391906131ff565b60405180910390f35b6104e4610e11565b6040516104f19190613031565b60405180910390f35b610502610e1a565b60405161050f9190613031565b60405180910390f35b610532600480360381019061052d9190613218565b610e20565b005b61054e60048036038101906105499190613243565b610ea6565b60405161055b91906131ff565b60405180910390f35b61056c610f98565b6040516105799190613031565b60405180910390f35b61058a610f9d565b60405161059791906132ae565b60405180910390f35b6105a8610fa5565b005b6105c460048036038101906105bf91906132c7565b61103c565b6040516105d29291906133bc565b60405180910390f35b6105f560048036038101906105f091906131a7565b6111be565b60405161060291906131ff565b60405180910390f35b61062560048036038101906106209190613414565b611265565b005b610641600480360381019061063c9190613218565b611339565b005b61065d60048036038101906106589190613218565b6113bf565b005b61067960048036038101906106749190613218565b6113cc565b005b61069560048036038101906106909190613218565b611452565b005b6106b160048036038101906106ac9190613218565b6114d8565b005b6106bb61155e565b6040516106c89190613461565b60405180910390f35b6106eb60048036038101906106e69190613218565b611583565b005b610707600480360381019061070291906130a8565b611609565b6040516107149190613031565b60405180910390f35b61072561164f565b005b610741600480360381019061073c9190613218565b6116d6565b005b61075d6004803603810190610758919061347a565b61175c565b60405161076b9291906135cd565b60405180910390f35b61078e60048036038101906107899190613218565b6117e9565b005b6107aa60048036038101906107a59190613218565b6117f3565b005b6107c660048036038101906107c19190613218565b611879565b005b6107d06118ff565b6040516107dd91906131ff565b60405180910390f35b61080060048036038101906107fb9190613218565b611911565b005b61080a611997565b6040516108179190613031565b60405180910390f35b61083a60048036038101906108359190613218565b61199d565b005b61085660048036038101906108519190613218565b611a23565b005b610860611aa9565b60405161086d9190613461565b60405180910390f35b61087e611ad0565b60405161088b9190613031565b60405180910390f35b6108ae60048036038101906108a99190613218565b611ad6565b005b6108b8611b5c565b6040516108c5919061315d565b60405180910390f35b6108e860048036038101906108e39190613218565b611bec565b005b61090460048036038101906108ff919061347a565b611c72565b6040516109129291906135cd565b60405180910390f35b61093560048036038101906109309190613218565b611cff565b005b610951600480360381019061094c91906131a7565b611d85565b60405161095e91906131ff565b60405180910390f35b610981600480360381019061097c91906131a7565b611e6b565b60405161098e91906131ff565b60405180910390f35b61099f611e88565b6040516109ac9190613031565b60405180910390f35b6109bd611e8e565b6040516109ca9190613031565b60405180910390f35b6109ed60048036038101906109e891906135fb565b611e94565b005b610a096004803603810190610a0491906131a7565b611f22565b604051610a16919061315d565b60405180910390f35b610a396004803603810190610a349190613218565b611f2a565b005b610a556004803603810190610a509190613218565b611fb0565b005b610a716004803603810190610a6c9190613218565b612036565b005b610a8d6004803603810190610a889190613218565b6120bc565b005b610aa96004803603810190610aa4919061347a565b612142565b604051610ab79291906135cd565b60405180910390f35b610ada6004803603810190610ad59190613218565b612288565b005b610af66004803603810190610af191906130a8565b61230e565b005b610b126004803603810190610b0d9190613639565b6123cd565b604051610b1f9190613031565b60405180910390f35b610b3061244f565b604051610b3d9190613031565b60405180910390f35b610b606004803603810190610b5b9190613218565b612455565b005b610b7c6004803603810190610b7791906130a8565b6124db565b005b610b986004803603810190610b939190613218565b6125d1565b005b600e5481565b6010602052805f5260405f205f915090505481565b606060048054610bc4906136a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf0906136a4565b8015610c3b5780601f10610c1257610100808354040283529160200191610c3b565b820191905f5260205f20905b815481529060010190602001808311610c1e57829003601f168201915b5050505050905090565b5f610c58610c51612657565b848461265e565b6001905092915050565b610c6a612657565b73ffffffffffffffffffffffffffffffffffffffff16610c88611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061371e565b60405180910390fd5b8060298190555050565b610cf0612657565b73ffffffffffffffffffffffffffffffffffffffff16610d0e611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b9061371e565b60405180910390fd5b80601f8190555050565b610d76612657565b73ffffffffffffffffffffffffffffffffffffffff16610d94611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061371e565b60405180910390fd5b8060218190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b60095481565b610e28612657565b73ffffffffffffffffffffffffffffffffffffffff16610e46611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061371e565b60405180910390fd5b8060268190555050565b5f610eb2848484612821565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ef9612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906137ac565b60405180910390fd5b610f8c85610f84612657565b85840361265e565b60019150509392505050565b600181565b5f6012905090565b610fad612657565b73ffffffffffffffffffffffffffffffffffffffff16610fcb611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110189061371e565b60405180910390fd5b5f60065f6101000a81548160ff021916908315150217905550565b5f6060600e54841061109b575f8067ffffffffffffffff811115611063576110626137ca565b5b6040519080825280602002602001820160405280156110915781602001602082028036833780820191505090505b50915091506111b7565b5f83856110a89190613824565b9050600e548111156110ba57600e5490505b84816110c69190613857565b92508267ffffffffffffffff8111156110e2576110e16137ca565b5b6040519080825280602002602001820160405280156111105781602001602082028036833780820191505090505b5091505f8590505b838110156111b457600c5f828861112f9190613824565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683828151811061116f5761116e61388a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001019050611118565b50505b9250929050565b5f61125b6111ca612657565b848460025f6111d7612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112569190613824565b61265e565b6001905092915050565b61126d612657565b73ffffffffffffffffffffffffffffffffffffffff1661128b611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d89061371e565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611341612657565b73ffffffffffffffffffffffffffffffffffffffff1661135f611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061371e565b60405180910390fd5b8060148190555050565b6113c93382612a99565b50565b6113d4612657565b73ffffffffffffffffffffffffffffffffffffffff166113f2611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f9061371e565b60405180910390fd5b80601b8190555050565b61145a612657565b73ffffffffffffffffffffffffffffffffffffffff16611478611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c59061371e565b60405180910390fd5b8060238190555050565b6114e0612657565b73ffffffffffffffffffffffffffffffffffffffff166114fe611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061371e565b60405180910390fd5b8060208190555050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612657565b73ffffffffffffffffffffffffffffffffffffffff166115a9611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061371e565b60405180910390fd5b80602b8190555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611657612657565b73ffffffffffffffffffffffffffffffffffffffff16611675611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c29061371e565b60405180910390fd5b6116d45f612c67565b565b6116de612657565b73ffffffffffffffffffffffffffffffffffffffff166116fc611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117499061371e565b60405180910390fd5b8060278190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f84866117ad9190613824565b9050818111156117bb578190505b85816117c79190613857565b93505f5b848110156117de578060010190506117cb565b505050935093915050565b80602a8190555050565b6117fb612657565b73ffffffffffffffffffffffffffffffffffffffff16611819611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461186f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118669061371e565b60405180910390fd5b8060088190555050565b611881612657565b73ffffffffffffffffffffffffffffffffffffffff1661189f611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061371e565b60405180910390fd5b8060188190555050565b60065f9054906101000a900460ff1681565b611919612657565b73ffffffffffffffffffffffffffffffffffffffff16611937611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119849061371e565b60405180910390fd5b80601e8190555050565b60085481565b6119a5612657565b73ffffffffffffffffffffffffffffffffffffffff166119c3611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a109061371e565b60405180910390fd5b8060158190555050565b611a2b612657565b73ffffffffffffffffffffffffffffffffffffffff16611a49611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a969061371e565b60405180910390fd5b80601c8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103e881565b611ade612657565b73ffffffffffffffffffffffffffffffffffffffff16611afc611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b499061371e565b60405180910390fd5b80601d8190555050565b606060058054611b6b906136a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611b97906136a4565b8015611be25780601f10611bb957610100808354040283529160200191611be2565b820191905f5260205f20905b815481529060010190602001808311611bc557829003601f168201915b5050505050905090565b611bf4612657565b73ffffffffffffffffffffffffffffffffffffffff16611c12611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f9061371e565b60405180910390fd5b8060228190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8486611cc39190613824565b905081811115611cd1578190505b8581611cdd9190613857565b93505f5b84811015611cf457806001019050611ce1565b505050935093915050565b611d07612657565b73ffffffffffffffffffffffffffffffffffffffff16611d25611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729061371e565b60405180910390fd5b8060178190555050565b5f8060025f611d92612657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390613927565b60405180910390fd5b611e60611e57612657565b8585840361265e565b600191505092915050565b5f611e7e611e77612657565b8484612821565b6001905092915050565b60115481565b600f5481565b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548210611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061398f565b60405180910390fd5b611f1e338383612d28565b5050565b606092915050565b611f32612657565b73ffffffffffffffffffffffffffffffffffffffff16611f50611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d9061371e565b60405180910390fd5b8060138190555050565b611fb8612657565b73ffffffffffffffffffffffffffffffffffffffff16611fd6611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120239061371e565b60405180910390fd5b8060198190555050565b61203e612657565b73ffffffffffffffffffffffffffffffffffffffff1661205c611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a99061371e565b60405180910390fd5b8060168190555050565b6120c4612657565b73ffffffffffffffffffffffffffffffffffffffff166120e2611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f9061371e565b60405180910390fd5b8060248190555050565b5f60605f60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508085106121e6575f8067ffffffffffffffff8111156121a8576121a76137ca565b5b6040519080825280602002602001820160405280156121db57816020015b60608152602001906001900390816121c65790505b509250925050612280565b5f84866121f39190613824565b90508181111561220f57819050808661220c9190613857565b93505b8367ffffffffffffffff811115612229576122286137ca565b5b60405190808252806020026020018201604052801561225c57816020015b60608152602001906001900390816122475790505b5092505f805f90508791505b8282101561227b57816001019150612268565b505050505b935093915050565b612290612657565b73ffffffffffffffffffffffffffffffffffffffff166122ae611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb9061371e565b60405180910390fd5b80602c8190555050565b612316612657565b73ffffffffffffffffffffffffffffffffffffffff16612334611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123819061371e565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6103e881565b61245d612657565b73ffffffffffffffffffffffffffffffffffffffff1661247b611aa9565b73ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061371e565b60405180910390fd5b8060288190555050565b6124e3612657565b73ffffffffffffffffffffffffffffffffffffffff16612501611aa9565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061371e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90613a1d565b60405180910390fd5b6125ce81612c67565b50565b6125d9612657565b73ffffffffffffffffffffffffffffffffffffffff166125f7611aa9565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126449061371e565b60405180910390fd5b8060258190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390613aab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190613b39565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128149190613031565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361288f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288690613bc7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f490613c55565b60405180910390fd5b612908838383612d40565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390613ce3565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612a1c9190613824565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a809190613031565b60405180910390a3612a93848484613014565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afe90613d71565b60405180910390fd5b612b12825f83612d40565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90613dff565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f828254612beb9190613857565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c4f9190613031565b60405180910390a3612c62835f84613014565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60405180602001604052805f815250905050505050565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612dde5750600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490613e67565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612f2857612e79611aa9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ee45750612eb5611aa9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90613ecf565b60405180910390fd5b61300f565b60065f9054906101000a900460ff168015612f8f5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561300e5760085481612fa184611609565b612fab9190613824565b11158015612fce575060095481612fc184611609565b612fcb9190613824565b10155b61300d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300490613f37565b60405180910390fd5b5b5b505050565b505050565b5f819050919050565b61302b81613019565b82525050565b5f6020820190506130445f830184613022565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6130778261304e565b9050919050565b6130878161306d565b8114613091575f80fd5b50565b5f813590506130a28161307e565b92915050565b5f602082840312156130bd576130bc61304a565b5b5f6130ca84828501613094565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561310a5780820151818401526020810190506130ef565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61312f826130d3565b61313981856130dd565b93506131498185602086016130ed565b61315281613115565b840191505092915050565b5f6020820190508181035f8301526131758184613125565b905092915050565b61318681613019565b8114613190575f80fd5b50565b5f813590506131a18161317d565b92915050565b5f80604083850312156131bd576131bc61304a565b5b5f6131ca85828601613094565b92505060206131db85828601613193565b9150509250929050565b5f8115159050919050565b6131f9816131e5565b82525050565b5f6020820190506132125f8301846131f0565b92915050565b5f6020828403121561322d5761322c61304a565b5b5f61323a84828501613193565b91505092915050565b5f805f6060848603121561325a5761325961304a565b5b5f61326786828701613094565b935050602061327886828701613094565b925050604061328986828701613193565b9150509250925092565b5f60ff82169050919050565b6132a881613293565b82525050565b5f6020820190506132c15f83018461329f565b92915050565b5f80604083850312156132dd576132dc61304a565b5b5f6132ea85828601613193565b92505060206132fb85828601613193565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6133378161306d565b82525050565b5f613348838361332e565b60208301905092915050565b5f602082019050919050565b5f61336a82613305565b613374818561330f565b935061337f8361331f565b805f5b838110156133af578151613396888261333d565b97506133a183613354565b925050600181019050613382565b5085935050505092915050565b5f6040820190506133cf5f830185613022565b81810360208301526133e18184613360565b90509392505050565b6133f3816131e5565b81146133fd575f80fd5b50565b5f8135905061340e816133ea565b92915050565b5f806040838503121561342a5761342961304a565b5b5f61343785828601613094565b925050602061344885828601613400565b9150509250929050565b61345b8161306d565b82525050565b5f6020820190506134745f830184613452565b92915050565b5f805f606084860312156134915761349061304a565b5b5f61349e86828701613094565b93505060206134af86828701613193565b92505060406134c086828701613193565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61350d826130d3565b61351781856134f3565b93506135278185602086016130ed565b61353081613115565b840191505092915050565b5f6135468383613503565b905092915050565b5f602082019050919050565b5f613564826134ca565b61356e81856134d4565b935083602082028501613580856134e4565b805f5b858110156135bb578484038952815161359c858261353b565b94506135a78361354e565b925060208a01995050600181019050613583565b50829750879550505050505092915050565b5f6040820190506135e05f830185613022565b81810360208301526135f2818461355a565b90509392505050565b5f80604083850312156136115761361061304a565b5b5f61361e85828601613193565b925050602061362f85828601613094565b9150509250929050565b5f806040838503121561364f5761364e61304a565b5b5f61365c85828601613094565b925050602061366d85828601613094565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136bb57607f821691505b6020821081036136ce576136cd613677565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137086020836130dd565b9150613713826136d4565b602082019050919050565b5f6020820190508181035f830152613735816136fc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6137966028836130dd565b91506137a18261373c565b604082019050919050565b5f6020820190508181035f8301526137c38161378a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61382e82613019565b915061383983613019565b9250828201905080821115613851576138506137f7565b5b92915050565b5f61386182613019565b915061386c83613019565b9250828203905081811115613884576138836137f7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6139116025836130dd565b915061391c826138b7565b604082019050919050565b5f6020820190508181035f83015261393e81613905565b9050919050565b7f696e636f727265637420696e64657800000000000000000000000000000000005f82015250565b5f613979600f836130dd565b915061398482613945565b602082019050919050565b5f6020820190508181035f8301526139a68161396d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a076026836130dd565b9150613a12826139ad565b604082019050919050565b5f6020820190508181035f830152613a34816139fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a956024836130dd565b9150613aa082613a3b565b604082019050919050565b5f6020820190508181035f830152613ac281613a89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b236022836130dd565b9150613b2e82613ac9565b604082019050919050565b5f6020820190508181035f830152613b5081613b17565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bb16025836130dd565b9150613bbc82613b57565b604082019050919050565b5f6020820190508181035f830152613bde81613ba5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c3f6023836130dd565b9150613c4a82613be5565b604082019050919050565b5f6020820190508181035f830152613c6c81613c33565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613ccd6026836130dd565b9150613cd882613c73565b604082019050919050565b5f6020820190508181035f830152613cfa81613cc1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d5b6021836130dd565b9150613d6682613d01565b604082019050919050565b5f6020820190508181035f830152613d8881613d4f565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613de96022836130dd565b9150613df482613d8f565b604082019050919050565b5f6020820190508181035f830152613e1681613ddd565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f613e51600b836130dd565b9150613e5c82613e1d565b602082019050919050565b5f6020820190508181035f830152613e7e81613e45565b9050919050565b7f74726164696e67206973206e6f742073746172746564000000000000000000005f82015250565b5f613eb96016836130dd565b9150613ec482613e85565b602082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f466f7262696400000000000000000000000000000000000000000000000000005f82015250565b5f613f216006836130dd565b9150613f2c82613eed565b602082019050919050565b5f6020820190508181035f830152613f4e81613f15565b905091905056fea26469706673582212205e18f8c960e86fbfab8ea3fc4d2a8d10e863158a40a615f46a6a3b0772efef4064736f6c63430008170033

Deployed Bytecode Sourcemap

19466:11158:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21148:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22619:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9435:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11602:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30187:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29174:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29373:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19718:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10555:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19641:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12253:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22445:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10397:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20132:76;;;:::i;:::-;;21182:543;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13154:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19875:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28086:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20946:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28751:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29610:79;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29283:82;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19683:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30428:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10726:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2836:103;;;:::i;:::-;;30000:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26312:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30300:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20216:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28532:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19505:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29088:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19581:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28172:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28871:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22484:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28968:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9654:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29486:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25838:466;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28396:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13872:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11066:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22670:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22536:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22925:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25693:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28629:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28282:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29697:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26790:590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30514:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20018:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11304:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22575:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30082:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3094:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29805:78;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21148:25;;;;:::o;22619:44::-;;;;;;;;;;;;;;;;;:::o;9435:100::-;9489:13;9522:5;9515:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9435:100;:::o;11602:169::-;11685:4;11702:39;11711:12;:10;:12::i;:::-;11725:7;11734:6;11702:8;:39::i;:::-;11759:4;11752:11;;11602:169;;;;:::o;30187:105::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30272:12:::1;30258:11;:26;;;;30187:105:::0;:::o;29174:101::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29256:11:::1;29243:10;:24;;;;29174:101:::0;:::o;29373:105::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29458:12:::1;29444:11;:26;;;;29373:105:::0;:::o;19718:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;10555:108::-;10616:7;10643:12;;10636:19;;10555:108;:::o;19641:35::-;;;;:::o;29891:101::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29973:11:::1;29960:10;:24;;;;29891:101:::0;:::o;12253:492::-;12393:4;12410:36;12420:6;12428:9;12439:6;12410:9;:36::i;:::-;12459:24;12486:11;:19;12498:6;12486:19;;;;;;;;;;;;;;;:33;12506:12;:10;:12::i;:::-;12486:33;;;;;;;;;;;;;;;;12459:60;;12558:6;12538:16;:26;;12530:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12645:57;12654:6;12662:12;:10;:12::i;:::-;12695:6;12676:16;:25;12645:8;:57::i;:::-;12733:4;12726:11;;;12253:492;;;;;:::o;22445:32::-;22476:1;22445:32;:::o;10397:93::-;10455:5;10480:2;10473:9;;10397:93;:::o;20132:76::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20195:5:::1;20185:7;;:15;;;;;;;;;;;;;;;;;;20132:76::o:0;21182:543::-;21280:15;21297:25;21348:13;;21339:5;:22;21335:56;;21371:1;21388;21374:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21363:28;;;;;;21335:56;21404:8;21423:5;21415;:13;;;;:::i;:::-;21404:24;;21449:13;;21443:3;:19;21439:71;;;21485:13;;21479:19;;21439:71;21539:5;21533:3;:11;;;;:::i;:::-;21520:24;;21582:10;21568:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21557:36;;21604:6;21630:5;21626:9;;21621:97;21641:10;21637:1;:14;21621:97;;;21687:8;:19;21704:1;21696:5;:9;;;;:::i;:::-;21687:19;;;;;;;;;;;;;;;;;;;;;21673:8;21682:1;21673:11;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;21653:3;;;;;21621:97;;;21324:401;;21182:543;;;;;;:::o;13154:215::-;13242:4;13259:80;13268:12;:10;:12::i;:::-;13282:7;13328:10;13291:11;:25;13303:12;:10;:12::i;:::-;13291:25;;;;;;;;;;;;;;;:34;13317:7;13291:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13259:8;:80::i;:::-;13357:4;13350:11;;13154:215;;;;:::o;19875:135::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19987:15:::1;19964:10;:20;19975:8;19964:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;19875:135:::0;;:::o;28086:78::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28151:5:::1;28144:4;:12;;;;28086:78:::0;:::o;20946:81::-;20995:24;21001:10;21013:5;20995;:24::i;:::-;20946:81;:::o;28751:112::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28841:14:::1;28825:13;:30;;;;28751:112:::0;:::o;29610:79::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:5:::1;29669:4;:12;;;;29610:79:::0;:::o;29283:82::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29351:6:::1;29343:5;:14;;;;29283:82:::0;:::o;19683:28::-;;;;;;;;;;;;;:::o;30428:78::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30493:5:::1;30486:4;:12;;;;30428:78:::0;:::o;10726:127::-;10800:7;10827:9;:18;10837:7;10827:18;;;;;;;;;;;;;;;;10820:25;;10726:127;;;:::o;2836:103::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2901:30:::1;2928:1;2901:18;:30::i;:::-;2836:103::o:0;30000:74::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30062:4:::1;30056:3;:10;;;;30000:74:::0;:::o;26312:470::-;26437:15;26454:24;26491:18;26512:6;:15;26519:7;26512:15;;;;;;;;;;;;;;;;26491:36;;26545:8;26564:5;26556;:13;;;;:::i;:::-;26545:24;;26590:13;26584:3;:19;26580:71;;;26626:13;26620:19;;26580:71;26680:5;26674:3;:11;;;;:::i;:::-;26661:24;;26706:6;26723:52;26739:10;26735:1;:14;26723:52;;;26751:3;;;;;26723:52;;;26480:302;;;26312:470;;;;;;:::o;30300:120::-;30394:18;30374:17;:38;;;;30300:120;:::o;20216:140::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20322:17:::1;20303:16;:36;;;;20216:140:::0;:::o;28532:89::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28605:8:::1;28595:7;:18;;;;28532:89:::0;:::o;19505:26::-;;;;;;;;;;;;;:::o;29088:78::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29153:5:::1;29146:4;:12;;;;29088:78:::0;:::o;19581:53::-;;;;:::o;28172:102::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:11:::1;28242:10;:24;;;;28172:102:::0;:::o;28871:89::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:8:::1;28934:7;:18;;;;28871:89:::0;:::o;2185:87::-;2231:7;2258:6;;;;;;;;;;;2251:13;;2185:87;:::o;22484:45::-;22434:4;22484:45;:::o;28968:112::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29058:14:::1;29042:13;:30;;;;28968:112:::0;:::o;9654:104::-;9710:13;9743:7;9736:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9654:104;:::o;29486:116::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29578:16:::1;29560:15;:34;;;;29486:116:::0;:::o;25838:466::-;25964:15;25981:24;26018:18;26039:6;:15;26046:7;26039:15;;;;;;;;;;;;;;;;26018:36;;26070:8;26089:5;26081;:13;;;;:::i;:::-;26070:24;;26115:13;26109:3;:19;26105:71;;;26151:13;26145:19;;26105:71;26205:5;26199:3;:11;;;;:::i;:::-;26186:24;;26229:6;26246:51;26262:10;26258:1;:14;26246:51;;;26274:3;;;;;26246:51;;;26007:297;;;25838:466;;;;;;:::o;28396:128::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28498:18:::1;28478:17;:38;;;;28396:128:::0;:::o;13872:413::-;13965:4;13982:24;14009:11;:25;14021:12;:10;:12::i;:::-;14009:25;;;;;;;;;;;;;;;:34;14035:7;14009:34;;;;;;;;;;;;;;;;13982:61;;14082:15;14062:16;:35;;14054:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14175:67;14184:12;:10;:12::i;:::-;14198:7;14226:15;14207:16;:34;14175:8;:67::i;:::-;14273:4;14266:11;;;13872:413;;;;:::o;11066:175::-;11152:4;11169:42;11179:12;:10;:12::i;:::-;11193:9;11204:6;11169:9;:42::i;:::-;11229:4;11222:11;;11066:175;;;;:::o;22670:29::-;;;;:::o;22536:32::-;;;;:::o;22925:213::-;23026:6;:18;23033:10;23026:18;;;;;;;;;;;;;;;;23018:5;:26;23010:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23075:55;23108:10;23120:5;23127:2;23075:32;:55::i;:::-;22925:213;;:::o;25693:137::-;25797:13;25693:137;;;;:::o;27953:125::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28053:17:::1;28034:16;:36;;;;27953:125:::0;:::o;28629:112::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:14:::1;28703:13;:30;;;;28629:112:::0;:::o;28282:106::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28368:12:::1;28354:11;:26;;;;28282:106:::0;:::o;29697:100::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:11:::1;29765:10;:24;;;;29697:100:::0;:::o;26790:590::-;26914:15;26931:24;26968:18;26989:6;:15;26996:7;26989:15;;;;;;;;;;;;;;;;26968:36;;27028:13;27019:5;:22;27015:55;;27051:1;27067;27054:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27043:27;;;;;;;27015:55;27083:8;27102:5;27094;:13;;;;:::i;:::-;27083:24;;27128:13;27122:3;:19;27118:110;;;27164:13;27158:19;;27213:3;27205:5;:11;;;;:::i;:::-;27192:24;;27118:110;27264:10;27251:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27240:35;;27286:6;27303;27312:1;27303:10;;27333:5;27329:9;;27324:49;27344:3;27340:1;:7;27324:49;;;27349:3;;;;;27324:49;;;26957:423;;;;26790:590;;;;;;;:::o;30514:101::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30596:11:::1;30583:10;:24;;;;30514:101:::0;:::o;20018:106::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20102:14:::1;20086:13;;:30;;;;;;;;;;;;;;;;;;20018:106:::0;:::o;11304:151::-;11393:7;11420:11;:18;11432:5;11420:18;;;;;;;;;;;;;;;:27;11439:7;11420:27;;;;;;;;;;;;;;;;11413:34;;11304:151;;;;:::o;22575:37::-;22608:4;22575:37;:::o;30082:97::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30161:10:::1;30149:9;:22;;;;30082:97:::0;:::o;3094:201::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3203:1:::1;3183:22;;:8;:22;;::::0;3175:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3259:28;3278:8;3259:18;:28::i;:::-;3094:201:::0;:::o;29805:78::-;2416:12;:10;:12::i;:::-;2405:23;;:7;:5;:7::i;:::-;:23;;;2397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29870:5:::1;29863:4;:12;;;;29805:78:::0;:::o;903:98::-;956:7;983:10;976:17;;903:98;:::o;17556:380::-;17709:1;17692:19;;:5;:19;;;17684:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17790:1;17771:21;;:7;:21;;;17763:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17874:6;17844:11;:18;17856:5;17844:18;;;;;;;;;;;;;;;:27;17863:7;17844:27;;;;;;;;;;;;;;;:36;;;;17912:7;17896:32;;17905:5;17896:32;;;17921:6;17896:32;;;;;;:::i;:::-;;;;;;;;17556:380;;;:::o;14775:733::-;14933:1;14915:20;;:6;:20;;;14907:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15017:1;14996:23;;:9;:23;;;14988:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15072:47;15093:6;15101:9;15112:6;15072:20;:47::i;:::-;15132:21;15156:9;:17;15166:6;15156:17;;;;;;;;;;;;;;;;15132:41;;15209:6;15192:13;:23;;15184:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15330:6;15314:13;:22;15294:9;:17;15304:6;15294:17;;;;;;;;;;;;;;;:42;;;;15382:6;15358:9;:20;15368:9;15358:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15423:9;15406:35;;15415:6;15406:35;;;15434:6;15406:35;;;;;;:::i;:::-;;;;;;;;15454:46;15474:6;15482:9;15493:6;15454:19;:46::i;:::-;14896:612;14775:733;;;:::o;16527:591::-;16630:1;16611:21;;:7;:21;;;16603:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16683:49;16704:7;16721:1;16725:6;16683:20;:49::i;:::-;16745:22;16770:9;:18;16780:7;16770:18;;;;;;;;;;;;;;;;16745:43;;16825:6;16807:14;:24;;16799:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16944:6;16927:14;:23;16906:9;:18;16916:7;16906:18;;;;;;;;;;;;;;;:44;;;;16988:6;16972:12;;:22;;;;;;;:::i;:::-;;;;;;;;17038:1;17012:37;;17021:7;17012:37;;;17042:6;17012:37;;;;;;:::i;:::-;;;;;;;;17062:48;17082:7;17099:1;17103:6;17062:19;:48::i;:::-;16592:526;16527:591;;:::o;3455:191::-;3529:16;3548:6;;;;;;;;;;;3529:25;;3574:8;3565:6;;:17;;;;;;;;;;;;;;;;;;3629:8;3598:40;;3619:8;3598:40;;;;;;;;;;;;3518:128;3455:191;:::o;22739:178::-;22875:19;:24;;;;;;;;;;;;;;22864:53;22739:178;;;:::o;20371:567::-;20523:10;:14;20534:2;20523:14;;;;;;;;;;;;;;;;;;;;;;;;;20522:15;:36;;;;;20542:10;:16;20553:4;20542:16;;;;;;;;;;;;;;;;;;;;;;;;;20541:17;20522:36;20514:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20616:1;20591:27;;:13;;;;;;;;;;;:27;;;20587:148;;20651:7;:5;:7::i;:::-;20643:15;;:4;:15;;;:32;;;;20668:7;:5;:7::i;:::-;20662:13;;:2;:13;;;20643:32;20635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20717:7;;20587:148;20751:7;;;;;;;;;;;:32;;;;;20770:13;;;;;;;;;;;20762:21;;:4;:21;;;20751:32;20747:184;;;20840:16;;20830:6;20808:19;20824:2;20808:15;:19::i;:::-;:28;;;;:::i;:::-;:48;;:100;;;;;20892:16;;20882:6;20860:19;20876:2;20860:15;:19::i;:::-;:28;;;;:::i;:::-;:48;;20808:100;20800:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;20747:184;20371:567;;;;:::o;19265:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:246::-;1972:1;1982:113;1996:6;1993:1;1990:13;1982:113;;;2081:1;2076:3;2072:11;2066:18;2062:1;2057:3;2053:11;2046:39;2018:2;2015:1;2011:10;2006:15;;1982:113;;;2129:1;2120:6;2115:3;2111:16;2104:27;1953:184;1891:246;;;:::o;2143:102::-;2184:6;2235:2;2231:7;2226:2;2219:5;2215:14;2211:28;2201:38;;2143:102;;;:::o;2251:377::-;2339:3;2367:39;2400:5;2367:39;:::i;:::-;2422:71;2486:6;2481:3;2422:71;:::i;:::-;2415:78;;2502:65;2560:6;2555:3;2548:4;2541:5;2537:16;2502:65;:::i;:::-;2592:29;2614:6;2592:29;:::i;:::-;2587:3;2583:39;2576:46;;2343:285;2251:377;;;;:::o;2634:313::-;2747:4;2785:2;2774:9;2770:18;2762:26;;2834:9;2828:4;2824:20;2820:1;2809:9;2805:17;2798:47;2862:78;2935:4;2926:6;2862:78;:::i;:::-;2854:86;;2634:313;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:474::-;5591:6;5599;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5901:2;5927:53;5972:7;5963:6;5952:9;5948:22;5927:53;:::i;:::-;5917:63;;5872:118;5523:474;;;;;:::o;6003:114::-;6070:6;6104:5;6098:12;6088:22;;6003:114;;;:::o;6123:184::-;6222:11;6256:6;6251:3;6244:19;6296:4;6291:3;6287:14;6272:29;;6123:184;;;;:::o;6313:132::-;6380:4;6403:3;6395:11;;6433:4;6428:3;6424:14;6416:22;;6313:132;;;:::o;6451:108::-;6528:24;6546:5;6528:24;:::i;:::-;6523:3;6516:37;6451:108;;:::o;6565:179::-;6634:10;6655:46;6697:3;6689:6;6655:46;:::i;:::-;6733:4;6728:3;6724:14;6710:28;;6565:179;;;;:::o;6750:113::-;6820:4;6852;6847:3;6843:14;6835:22;;6750:113;;;:::o;6899:732::-;7018:3;7047:54;7095:5;7047:54;:::i;:::-;7117:86;7196:6;7191:3;7117:86;:::i;:::-;7110:93;;7227:56;7277:5;7227:56;:::i;:::-;7306:7;7337:1;7322:284;7347:6;7344:1;7341:13;7322:284;;;7423:6;7417:13;7450:63;7509:3;7494:13;7450:63;:::i;:::-;7443:70;;7536:60;7589:6;7536:60;:::i;:::-;7526:70;;7382:224;7369:1;7366;7362:9;7357:14;;7322:284;;;7326:14;7622:3;7615:10;;7023:608;;;6899:732;;;;:::o;7637:483::-;7808:4;7846:2;7835:9;7831:18;7823:26;;7859:71;7927:1;7916:9;7912:17;7903:6;7859:71;:::i;:::-;7977:9;7971:4;7967:20;7962:2;7951:9;7947:18;7940:48;8005:108;8108:4;8099:6;8005:108;:::i;:::-;7997:116;;7637:483;;;;;:::o;8126:116::-;8196:21;8211:5;8196:21;:::i;:::-;8189:5;8186:32;8176:60;;8232:1;8229;8222:12;8176:60;8126:116;:::o;8248:133::-;8291:5;8329:6;8316:20;8307:29;;8345:30;8369:5;8345:30;:::i;:::-;8248:133;;;;:::o;8387:468::-;8452:6;8460;8509:2;8497:9;8488:7;8484:23;8480:32;8477:119;;;8515:79;;:::i;:::-;8477:119;8635:1;8660:53;8705:7;8696:6;8685:9;8681:22;8660:53;:::i;:::-;8650:63;;8606:117;8762:2;8788:50;8830:7;8821:6;8810:9;8806:22;8788:50;:::i;:::-;8778:60;;8733:115;8387:468;;;;;:::o;8861:118::-;8948:24;8966:5;8948:24;:::i;:::-;8943:3;8936:37;8861:118;;:::o;8985:222::-;9078:4;9116:2;9105:9;9101:18;9093:26;;9129:71;9197:1;9186:9;9182:17;9173:6;9129:71;:::i;:::-;8985:222;;;;:::o;9213:619::-;9290:6;9298;9306;9355:2;9343:9;9334:7;9330:23;9326:32;9323:119;;;9361:79;;:::i;:::-;9323:119;9481:1;9506:53;9551:7;9542:6;9531:9;9527:22;9506:53;:::i;:::-;9496:63;;9452:117;9608:2;9634:53;9679:7;9670:6;9659:9;9655:22;9634:53;:::i;:::-;9624:63;;9579:118;9736:2;9762:53;9807:7;9798:6;9787:9;9783:22;9762:53;:::i;:::-;9752:63;;9707:118;9213:619;;;;;:::o;9838:124::-;9915:6;9949:5;9943:12;9933:22;;9838:124;;;:::o;9968:194::-;10077:11;10111:6;10106:3;10099:19;10151:4;10146:3;10142:14;10127:29;;9968:194;;;;:::o;10168:142::-;10245:4;10268:3;10260:11;;10298:4;10293:3;10289:14;10281:22;;10168:142;;;:::o;10316:159::-;10390:11;10424:6;10419:3;10412:19;10464:4;10459:3;10455:14;10440:29;;10316:159;;;;:::o;10481:357::-;10559:3;10587:39;10620:5;10587:39;:::i;:::-;10642:61;10696:6;10691:3;10642:61;:::i;:::-;10635:68;;10712:65;10770:6;10765:3;10758:4;10751:5;10747:16;10712:65;:::i;:::-;10802:29;10824:6;10802:29;:::i;:::-;10797:3;10793:39;10786:46;;10563:275;10481:357;;;;:::o;10844:196::-;10933:10;10968:66;11030:3;11022:6;10968:66;:::i;:::-;10954:80;;10844:196;;;;:::o;11046:123::-;11126:4;11158;11153:3;11149:14;11141:22;;11046:123;;;:::o;11203:991::-;11342:3;11371:64;11429:5;11371:64;:::i;:::-;11451:96;11540:6;11535:3;11451:96;:::i;:::-;11444:103;;11573:3;11618:4;11610:6;11606:17;11601:3;11597:27;11648:66;11708:5;11648:66;:::i;:::-;11737:7;11768:1;11753:396;11778:6;11775:1;11772:13;11753:396;;;11849:9;11843:4;11839:20;11834:3;11827:33;11900:6;11894:13;11928:84;12007:4;11992:13;11928:84;:::i;:::-;11920:92;;12035:70;12098:6;12035:70;:::i;:::-;12025:80;;12134:4;12129:3;12125:14;12118:21;;11813:336;11800:1;11797;11793:9;11788:14;;11753:396;;;11757:14;12165:4;12158:11;;12185:3;12178:10;;11347:847;;;;;11203:991;;;;:::o;12200:523::-;12391:4;12429:2;12418:9;12414:18;12406:26;;12442:71;12510:1;12499:9;12495:17;12486:6;12442:71;:::i;:::-;12560:9;12554:4;12550:20;12545:2;12534:9;12530:18;12523:48;12588:128;12711:4;12702:6;12588:128;:::i;:::-;12580:136;;12200:523;;;;;:::o;12729:474::-;12797:6;12805;12854:2;12842:9;12833:7;12829:23;12825:32;12822:119;;;12860:79;;:::i;:::-;12822:119;12980:1;13005:53;13050:7;13041:6;13030:9;13026:22;13005:53;:::i;:::-;12995:63;;12951:117;13107:2;13133:53;13178:7;13169:6;13158:9;13154:22;13133:53;:::i;:::-;13123:63;;13078:118;12729:474;;;;;:::o;13209:::-;13277:6;13285;13334:2;13322:9;13313:7;13309:23;13305:32;13302:119;;;13340:79;;:::i;:::-;13302:119;13460:1;13485:53;13530:7;13521:6;13510:9;13506:22;13485:53;:::i;:::-;13475:63;;13431:117;13587:2;13613:53;13658:7;13649:6;13638:9;13634:22;13613:53;:::i;:::-;13603:63;;13558:118;13209:474;;;;;:::o;13689:180::-;13737:77;13734:1;13727:88;13834:4;13831:1;13824:15;13858:4;13855:1;13848:15;13875:320;13919:6;13956:1;13950:4;13946:12;13936:22;;14003:1;13997:4;13993:12;14024:18;14014:81;;14080:4;14072:6;14068:17;14058:27;;14014:81;14142:2;14134:6;14131:14;14111:18;14108:38;14105:84;;14161:18;;:::i;:::-;14105:84;13926:269;13875:320;;;:::o;14201:182::-;14341:34;14337:1;14329:6;14325:14;14318:58;14201:182;:::o;14389:366::-;14531:3;14552:67;14616:2;14611:3;14552:67;:::i;:::-;14545:74;;14628:93;14717:3;14628:93;:::i;:::-;14746:2;14741:3;14737:12;14730:19;;14389:366;;;:::o;14761:419::-;14927:4;14965:2;14954:9;14950:18;14942:26;;15014:9;15008:4;15004:20;15000:1;14989:9;14985:17;14978:47;15042:131;15168:4;15042:131;:::i;:::-;15034:139;;14761:419;;;:::o;15186:227::-;15326:34;15322:1;15314:6;15310:14;15303:58;15395:10;15390:2;15382:6;15378:15;15371:35;15186:227;:::o;15419:366::-;15561:3;15582:67;15646:2;15641:3;15582:67;:::i;:::-;15575:74;;15658:93;15747:3;15658:93;:::i;:::-;15776:2;15771:3;15767:12;15760:19;;15419:366;;;:::o;15791:419::-;15957:4;15995:2;15984:9;15980:18;15972:26;;16044:9;16038:4;16034:20;16030:1;16019:9;16015:17;16008:47;16072:131;16198:4;16072:131;:::i;:::-;16064:139;;15791:419;;;:::o;16216:180::-;16264:77;16261:1;16254:88;16361:4;16358:1;16351:15;16385:4;16382:1;16375:15;16402:180;16450:77;16447:1;16440:88;16547:4;16544:1;16537:15;16571:4;16568:1;16561:15;16588:191;16628:3;16647:20;16665:1;16647:20;:::i;:::-;16642:25;;16681:20;16699:1;16681:20;:::i;:::-;16676:25;;16724:1;16721;16717:9;16710:16;;16745:3;16742:1;16739:10;16736:36;;;16752:18;;:::i;:::-;16736:36;16588:191;;;;:::o;16785:194::-;16825:4;16845:20;16863:1;16845:20;:::i;:::-;16840:25;;16879:20;16897:1;16879:20;:::i;:::-;16874:25;;16923:1;16920;16916:9;16908:17;;16947:1;16941:4;16938:11;16935:37;;;16952:18;;:::i;:::-;16935:37;16785:194;;;;:::o;16985:180::-;17033:77;17030:1;17023:88;17130:4;17127:1;17120:15;17154:4;17151:1;17144:15;17171:224;17311:34;17307:1;17299:6;17295:14;17288:58;17380:7;17375:2;17367:6;17363:15;17356:32;17171:224;:::o;17401:366::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:419::-;17939:4;17977:2;17966:9;17962:18;17954:26;;18026:9;18020:4;18016:20;18012:1;18001:9;17997:17;17990:47;18054:131;18180:4;18054:131;:::i;:::-;18046:139;;17773:419;;;:::o;18198:165::-;18338:17;18334:1;18326:6;18322:14;18315:41;18198:165;:::o;18369:366::-;18511:3;18532:67;18596:2;18591:3;18532:67;:::i;:::-;18525:74;;18608:93;18697:3;18608:93;:::i;:::-;18726:2;18721:3;18717:12;18710:19;;18369:366;;;:::o;18741:419::-;18907:4;18945:2;18934:9;18930:18;18922:26;;18994:9;18988:4;18984:20;18980:1;18969:9;18965:17;18958:47;19022:131;19148:4;19022:131;:::i;:::-;19014:139;;18741:419;;;:::o;19166:225::-;19306:34;19302:1;19294:6;19290:14;19283:58;19375:8;19370:2;19362:6;19358:15;19351:33;19166:225;:::o;19397:366::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19397:366;;;:::o;19769:419::-;19935:4;19973:2;19962:9;19958:18;19950:26;;20022:9;20016:4;20012:20;20008:1;19997:9;19993:17;19986:47;20050:131;20176:4;20050:131;:::i;:::-;20042:139;;19769:419;;;:::o;20194:223::-;20334:34;20330:1;20322:6;20318:14;20311:58;20403:6;20398:2;20390:6;20386:15;20379:31;20194:223;:::o;20423:366::-;20565:3;20586:67;20650:2;20645:3;20586:67;:::i;:::-;20579:74;;20662:93;20751:3;20662:93;:::i;:::-;20780:2;20775:3;20771:12;20764:19;;20423:366;;;:::o;20795:419::-;20961:4;20999:2;20988:9;20984:18;20976:26;;21048:9;21042:4;21038:20;21034:1;21023:9;21019:17;21012:47;21076:131;21202:4;21076:131;:::i;:::-;21068:139;;20795:419;;;:::o;21220:221::-;21360:34;21356:1;21348:6;21344:14;21337:58;21429:4;21424:2;21416:6;21412:15;21405:29;21220:221;:::o;21447:366::-;21589:3;21610:67;21674:2;21669:3;21610:67;:::i;:::-;21603:74;;21686:93;21775:3;21686:93;:::i;:::-;21804:2;21799:3;21795:12;21788:19;;21447:366;;;:::o;21819:419::-;21985:4;22023:2;22012:9;22008:18;22000:26;;22072:9;22066:4;22062:20;22058:1;22047:9;22043:17;22036:47;22100:131;22226:4;22100:131;:::i;:::-;22092:139;;21819:419;;;:::o;22244:224::-;22384:34;22380:1;22372:6;22368:14;22361:58;22453:7;22448:2;22440:6;22436:15;22429:32;22244:224;:::o;22474:366::-;22616:3;22637:67;22701:2;22696:3;22637:67;:::i;:::-;22630:74;;22713:93;22802:3;22713:93;:::i;:::-;22831:2;22826:3;22822:12;22815:19;;22474:366;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;22846:419;;;:::o;23271:222::-;23411:34;23407:1;23399:6;23395:14;23388:58;23480:5;23475:2;23467:6;23463:15;23456:30;23271:222;:::o;23499:366::-;23641:3;23662:67;23726:2;23721:3;23662:67;:::i;:::-;23655:74;;23738:93;23827:3;23738:93;:::i;:::-;23856:2;23851:3;23847:12;23840:19;;23499:366;;;:::o;23871:419::-;24037:4;24075:2;24064:9;24060:18;24052:26;;24124:9;24118:4;24114:20;24110:1;24099:9;24095:17;24088:47;24152:131;24278:4;24152:131;:::i;:::-;24144:139;;23871:419;;;:::o;24296:225::-;24436:34;24432:1;24424:6;24420:14;24413:58;24505:8;24500:2;24492:6;24488:15;24481:33;24296:225;:::o;24527:366::-;24669:3;24690:67;24754:2;24749:3;24690:67;:::i;:::-;24683:74;;24766:93;24855:3;24766:93;:::i;:::-;24884:2;24879:3;24875:12;24868:19;;24527:366;;;:::o;24899:419::-;25065:4;25103:2;25092:9;25088:18;25080:26;;25152:9;25146:4;25142:20;25138:1;25127:9;25123:17;25116:47;25180:131;25306:4;25180:131;:::i;:::-;25172:139;;24899:419;;;:::o;25324:220::-;25464:34;25460:1;25452:6;25448:14;25441:58;25533:3;25528:2;25520:6;25516:15;25509:28;25324:220;:::o;25550:366::-;25692:3;25713:67;25777:2;25772:3;25713:67;:::i;:::-;25706:74;;25789:93;25878:3;25789:93;:::i;:::-;25907:2;25902:3;25898:12;25891:19;;25550:366;;;:::o;25922:419::-;26088:4;26126:2;26115:9;26111:18;26103:26;;26175:9;26169:4;26165:20;26161:1;26150:9;26146:17;26139:47;26203:131;26329:4;26203:131;:::i;:::-;26195:139;;25922:419;;;:::o;26347:221::-;26487:34;26483:1;26475:6;26471:14;26464:58;26556:4;26551:2;26543:6;26539:15;26532:29;26347:221;:::o;26574:366::-;26716:3;26737:67;26801:2;26796:3;26737:67;:::i;:::-;26730:74;;26813:93;26902:3;26813:93;:::i;:::-;26931:2;26926:3;26922:12;26915:19;;26574:366;;;:::o;26946:419::-;27112:4;27150:2;27139:9;27135:18;27127:26;;27199:9;27193:4;27189:20;27185:1;27174:9;27170:17;27163:47;27227:131;27353:4;27227:131;:::i;:::-;27219:139;;26946:419;;;:::o;27371:161::-;27511:13;27507:1;27499:6;27495:14;27488:37;27371:161;:::o;27538:366::-;27680:3;27701:67;27765:2;27760:3;27701:67;:::i;:::-;27694:74;;27777:93;27866:3;27777:93;:::i;:::-;27895:2;27890:3;27886:12;27879:19;;27538:366;;;:::o;27910:419::-;28076:4;28114:2;28103:9;28099:18;28091:26;;28163:9;28157:4;28153:20;28149:1;28138:9;28134:17;28127:47;28191:131;28317:4;28191:131;:::i;:::-;28183:139;;27910:419;;;:::o;28335:172::-;28475:24;28471:1;28463:6;28459:14;28452:48;28335:172;:::o;28513:366::-;28655:3;28676:67;28740:2;28735:3;28676:67;:::i;:::-;28669:74;;28752:93;28841:3;28752:93;:::i;:::-;28870:2;28865:3;28861:12;28854:19;;28513:366;;;:::o;28885:419::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:156::-;29450:8;29446:1;29438:6;29434:14;29427:32;29310:156;:::o;29472:365::-;29614:3;29635:66;29699:1;29694:3;29635:66;:::i;:::-;29628:73;;29710:93;29799:3;29710:93;:::i;:::-;29828:2;29823:3;29819:12;29812:19;;29472:365;;;:::o;29843:419::-;30009:4;30047:2;30036:9;30032:18;30024:26;;30096:9;30090:4;30086:20;30082:1;30071:9;30067:17;30060:47;30124:131;30250:4;30124:131;:::i;:::-;30116:139;;29843:419;;;:::o

Swarm Source

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