ETH Price: $2,355.65 (+0.62%)

Token

BLOCKLORDS (LRDS)
 

Overview

Max Total Supply

100,000,000 LRDS

Holders

5,558 ( 0.162%)

Market

Price

$0.64 @ 0.000273 ETH (+1.80%)

Onchain Market Cap

$64,336,226.60

Circulating Supply Market Cap

$6,292,716.67

Other Info

Token Contract (WITH 18 Decimals)

Balance
35.873 LRDS

Value
$23.08 ( ~0.00979772888489762 Eth) [0.0000%]
0xbcfe6a1a41273430ca799be18289cddfc1de5e44
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A player-driven medieval grand strategy game.

Market

Volume (24H):$3,333,961.46
Market Capitalization:$6,292,716.67
Circulating Supply:9,780,985.00 LRDS
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LRD

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (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/ERC20.sol


// OpenZeppelin Contracts (last updated v4.7.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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev 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/LRD/LRD.sol


pragma solidity 0.8.9;





/**
 *  @title Blocklords
 *  @author Medet Ahmetson ([email protected])
 *  @notice The LRD token
 */
contract LRD is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint256 private constant MILLION = 1000 * 1000 * 10 ** 18;

    bool[13] public originalMints;

    /// @notice Set to false to stop mint/burn of token. Set to true to allow minting.
    bool public bridgeAllowed = false;

    uint public limitSupply = 0;

    /// @notice the list of bridge addresses allowed to mint tokens.
    mapping(address => bool) public bridges;

    // Mint and Burn
    modifier onlyBridge {
        require(bridgeAllowed && bridges[msg.sender], "not a bridge or original contract");
        _;
    }

    modifier original {
        require(!bridgeAllowed, "bridge is not allowed");
        _;
    }

    modifier onlyMultisig(address multisig) {
        require(multisig.isContract(), "not multisig");
        _;
    }

    event IncreaseLimitSupply(uint256 limitSupply);
    event AddBridge(address indexed bridge);
    event RemoveBridge(address indexed bridge);

    /// @param _bridgeAllowed is FALSE in the token at the original token.
    constructor(bool _bridgeAllowed) ERC20("BLOCKLORDS", "LRDS") {
        bridgeAllowed = _bridgeAllowed;
    }

    function mintSeedRound(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[0], "minted");
    
        originalMints[0] = true;

        _mint(multisig, 9 * MILLION);  // 9%
    }

    function mintStrategicRound(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[1], "minted");
        originalMints[1] = true;
        _mint(multisig, 6 * MILLION);  // 6%
    }

    function mintPrivateRound(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[2], "minted");
        originalMints[2] = true;
        _mint(multisig, 6 * MILLION);  // 6%
    }

    function mintGrowthRound(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[3], "minted");
        originalMints[3] = true;
        _mint(multisig, 7 * MILLION);  // 7%
    }

    function mintCommunityConquest(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[4], "minted");
        originalMints[4] = true;
        _mint(multisig, 3 * MILLION);  // 3%
    }

    function mintGameLaunchDrop(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[5], "minted");
        originalMints[5] = true;
        _mint(multisig, 1 * MILLION);  // 1%
    }

    function mintSeasonBounty(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[6], "minted");
        originalMints[6] = true;
        _mint(multisig, 5 * MILLION);  // 5%
    }

    function mintRulersBounty(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[7], "minted");
        originalMints[7] = true;
        _mint(multisig, 10 * MILLION);  // 10%
    }

    function mintEmpireRewards(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[8], "minted");
        originalMints[8] = true;
        _mint(multisig, 10 * MILLION);  // 10%
    }

    function mintDynastyIncentives(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[9], "minted");
        originalMints[9] = true;
        _mint(multisig, 10 * MILLION);  // 10%
    }

    function mintLiquidity(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[10], "minted");
        originalMints[10] = true;
        _mint(multisig, 15 * MILLION);  // 15%
    }

    function mintFoundationReserve(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[11], "minted");
        originalMints[11] = true;
        _mint(multisig, 10 * MILLION);  // 10%
    }

    function mintAdvisors(address multisig) external onlyMultisig(multisig) original onlyOwner {
        require(!originalMints[12], "minted");
        originalMints[12] = true;
        _mint(multisig, 8 * MILLION);  // 8%
    }

    function increaseLimitSupply(uint256 amount) external onlyOwner {
        require(limitSupply + amount <= 100 * 1000 * 1000 * 10 ** 18, "Exceeds the max cap");
        
        limitSupply += amount;

        emit IncreaseLimitSupply(limitSupply);
    }

    function addBridge(address _bridge) external onlyOwner {
        require(bridgeAllowed, "no bridging");
        require(_bridge != address(0), "invalid address");
        require(!bridges[_bridge], "bridge already added");

        bridges[_bridge] = true;

        emit AddBridge(_bridge);
   }

    function removeBridge(address _bridge) external onlyOwner {
        require(bridgeAllowed, "no bridging");
        require(_bridge != address(0), "invalid address");
        require(bridges[_bridge], "bridge already removed");

        delete bridges[_bridge];

        emit RemoveBridge(_bridge);
   }

   /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the `MINTER_ROLE`.
     */
    function mint(address to, uint256 amount) external onlyBridge {
        require(totalSupply().add(amount) <= limitSupply, "exceeded mint limit");
        _mint(to, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public onlyBridge {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "burn amount exceeds allowance");

        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bool","name":"_bridgeAllowed","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"AddBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limitSupply","type":"uint256"}],"name":"IncreaseLimitSupply","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":"bridge","type":"address"}],"name":"RemoveBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"addBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bridges","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseLimitSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintAdvisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintCommunityConquest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintDynastyIncentives","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintEmpireRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintFoundationReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintGameLaunchDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintGrowthRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintPrivateRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintRulersBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintSeasonBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintSeedRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"mintStrategicRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"originalMints","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"removeBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760006101000a81548160ff02191690831515021790555060006008553480156200003157600080fd5b50604051620042ab380380620042ab8339818101604052810190620000579190620002f8565b6040518060400160405280600a81526020017f424c4f434b4c4f524453000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c524453000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000db92919062000206565b508060049080519060200190620000f492919062000206565b505050620001176200010b6200013860201b60201c565b6200014060201b60201c565b80600760006101000a81548160ff021916908315150217905550506200038f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002149062000359565b90600052602060002090601f01602090048101928262000238576000855562000284565b82601f106200025357805160ff191683800117855562000284565b8280016001018555821562000284579182015b828111156200028357825182559160200191906001019062000266565b5b50905062000293919062000297565b5090565b5b80821115620002b257600081600090555060010162000298565b5090565b600080fd5b60008115159050919050565b620002d281620002bb565b8114620002de57600080fd5b50565b600081519050620002f281620002c7565b92915050565b600060208284031215620003115762000310620002b6565b5b60006200032184828501620002e1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037257607f821691505b602082108114156200038957620003886200032a565b5b50919050565b613f0c806200039f6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063723f7af611610125578063b81aa757116100ad578063d2387a7c1161007c578063d2387a7c14610621578063dd62ed3e1461063d578063ebc878701461066d578063f2fde38b14610689578063f47cc268146106a55761021c565b8063b81aa7571461059b578063c8596dc7146105b9578063cb87966a146105d5578063ced67f0c146105f15761021c565b80639712fdf8116100f45780639712fdf8146104d35780639dd4d4ec146104ef578063a1516d1d1461051f578063a457c2d71461053b578063a9059cbb1461056b5761021c565b8063723f7af61461045f57806379cc67901461047b5780638da5cb5b1461049757806395d89b41146104b55761021c565b80632f31cb9a116101a857806340c10f191161017757806340c10f19146103d157806344430429146103ed578063632d47761461040957806370a0823114610425578063715018a6146104555761021c565b80632f31cb9a1461034b578063313ce56714610367578063364e315f1461038557806339509351146103a15761021c565b806318160ddd116101ef57806318160ddd146102a757806323b872dd146102c55780632c0603d5146102f55780632da6b1b0146103115780632ddcb21f1461032d5761021c565b806304df017d1461022157806306fdde031461023d578063095ea7b31461025b5780630bedc9241461028b575b600080fd5b61023b60048036038101906102369190612f24565b6106c1565b005b6102456108a9565b6040516102529190612fea565b60405180910390f35b61027560048036038101906102709190613042565b61093b565b604051610282919061309d565b60405180910390f35b6102a560048036038101906102a091906130b8565b61095e565b005b6102af610a16565b6040516102bc91906130f4565b60405180910390f35b6102df60048036038101906102da919061310f565b610a20565b6040516102ec919061309d565b60405180910390f35b61030f600480360381019061030a9190612f24565b610a4f565b005b61032b60048036038101906103269190612f24565b610bcb565b005b610335610d47565b60405161034291906130f4565b60405180910390f35b61036560048036038101906103609190612f24565b610d4d565b005b61036f610ec9565b60405161037c919061317e565b60405180910390f35b61039f600480360381019061039a9190612f24565b610ed2565b005b6103bb60048036038101906103b69190613042565b61104e565b6040516103c8919061309d565b60405180910390f35b6103eb60048036038101906103e69190613042565b611085565b005b61040760048036038101906104029190612f24565b611195565b005b610423600480360381019061041e9190612f24565b611311565b005b61043f600480360381019061043a9190612f24565b61148d565b60405161044c91906130f4565b60405180910390f35b61045d6114d5565b005b61047960048036038101906104749190612f24565b6114e9565b005b61049560048036038101906104909190613042565b611665565b005b61049f61178d565b6040516104ac91906131a8565b60405180910390f35b6104bd6117b7565b6040516104ca9190612fea565b60405180910390f35b6104ed60048036038101906104e89190612f24565b611849565b005b610509600480360381019061050491906130b8565b611a3b565b604051610516919061309d565b60405180910390f35b61053960048036038101906105349190612f24565b611a65565b005b61055560048036038101906105509190613042565b611be1565b604051610562919061309d565b60405180910390f35b61058560048036038101906105809190613042565b611c58565b604051610592919061309d565b60405180910390f35b6105a3611c7b565b6040516105b0919061309d565b60405180910390f35b6105d360048036038101906105ce9190612f24565b611c8e565b005b6105ef60048036038101906105ea9190612f24565b611e0a565b005b61060b60048036038101906106069190612f24565b611f84565b604051610618919061309d565b60405180910390f35b61063b60048036038101906106369190612f24565b611fa4565b005b610657600480360381019061065291906131c3565b612120565b60405161066491906130f4565b60405180910390f35b61068760048036038101906106829190612f24565b6121a7565b005b6106a3600480360381019061069e9190612f24565b612323565b005b6106bf60048036038101906106ba9190612f24565b6123a7565b005b6106c9612523565b600760009054906101000a900460ff16610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f9061324f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077f906132bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b90613327565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558073ffffffffffffffffffffffffffffffffffffffff167f5a4a11544e990107dd21eb0cfb2bc681795302f00d74be6879b854c18e6f2cca60405160405180910390a250565b6060600380546108b890613376565b80601f01602080910402602001604051908101604052809291908181526020018280546108e490613376565b80156109315780601f1061090657610100808354040283529160200191610931565b820191906000526020600020905b81548152906001019060200180831161091457829003601f168201915b5050505050905090565b6000806109466125a1565b90506109538185856125a9565b600191505092915050565b610966612523565b6a52b7d2dcc80cd2e40000008160085461098091906133d7565b11156109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890613479565b60405180910390fd5b80600860008282546109d391906133d7565b925050819055507f5b5d91d8bb0ab417b295f1e72802b9c16984e2da95c94ca0c7c6c81fe180cb71600854604051610a0b91906130f4565b60405180910390a150565b6000600254905090565b600080610a2b6125a1565b9050610a38858285612774565b610a43858585612800565b60019150509392505050565b80610a6f8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa5906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613551565b60405180910390fd5b610b06612523565b6006600b600d8110610b1b57610b1a613571565b5b602091828204019190069054906101000a900460ff1615610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906135ec565b60405180910390fd5b60016006600b600d8110610b8857610b87613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610bc78269d3c21bcecceda1000000600a610bc2919061360c565b612aa4565b5050565b80610beb8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613551565b60405180910390fd5b610c82612523565b60066007600d8110610c9757610c96613571565b5b602091828204019190069054906101000a900460ff1615610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce4906135ec565b60405180910390fd5b600160066007600d8110610d0457610d03613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610d438269d3c21bcecceda1000000600a610d3e919061360c565b612aa4565b5050565b60085481565b80610d6d8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613551565b60405180910390fd5b610e04612523565b60066004600d8110610e1957610e18613571565b5b602091828204019190069054906101000a900460ff1615610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906135ec565b60405180910390fd5b600160066004600d8110610e8657610e85613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610ec58269d3c21bcecceda10000006003610ec0919061360c565b612aa4565b5050565b60006012905090565b80610ef28173ffffffffffffffffffffffffffffffffffffffff16612a81565b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613551565b60405180910390fd5b610f89612523565b60066005600d8110610f9e57610f9d613571565b5b602091828204019190069054906101000a900460ff1615610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906135ec565b60405180910390fd5b600160066005600d811061100b5761100a613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061104a8269d3c21bcecceda10000006001611045919061360c565b612aa4565b5050565b6000806110596125a1565b905061107a81858561106b8589612120565b61107591906133d7565b6125a9565b600191505092915050565b600760009054906101000a900460ff1680156110ea5750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611120906136d8565b60405180910390fd5b60085461114682611138610a16565b612c0490919063ffffffff16565b1115611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90613744565b60405180910390fd5b6111918282612aa4565b5050565b806111b58173ffffffffffffffffffffffffffffffffffffffff16612a81565b6111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613551565b60405180910390fd5b61124c612523565b60066000600d811061126157611260613571565b5b602091828204019190069054906101000a900460ff16156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906135ec565b60405180910390fd5b600160066000600d81106112ce576112cd613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061130d8269d3c21bcecceda10000006009611308919061360c565b612aa4565b5050565b806113318173ffffffffffffffffffffffffffffffffffffffff16612a81565b611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906134e5565b60405180910390fd5b600760009054906101000a900460ff16156113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790613551565b60405180910390fd5b6113c8612523565b60066003600d81106113dd576113dc613571565b5b602091828204019190069054906101000a900460ff1615611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906135ec565b60405180910390fd5b600160066003600d811061144a57611449613571565b5b602091828204019190066101000a81548160ff0219169083151502179055506114898269d3c21bcecceda10000006007611484919061360c565b612aa4565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114dd612523565b6114e76000612c1a565b565b806115098173ffffffffffffffffffffffffffffffffffffffff16612a81565b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613551565b60405180910390fd5b6115a0612523565b6006600c600d81106115b5576115b4613571565b5b602091828204019190069054906101000a900460ff161561160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611602906135ec565b60405180910390fd5b60016006600c600d811061162257611621613571565b5b602091828204019190066101000a81548160ff0219169083151502179055506116618269d3c21bcecceda1000000600861165c919061360c565b612aa4565b5050565b600760009054906101000a900460ff1680156116ca5750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611700906136d8565b60405180910390fd5b600061171c836117176125a1565b612120565b905081811015611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906137b0565b60405180910390fd5b61177e8361176d6125a1565b848461177991906137d0565b6125a9565b6117888383612ce0565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117c690613376565b80601f01602080910402602001604051908101604052809291908181526020018280546117f290613376565b801561183f5780601f106118145761010080835404028352916020019161183f565b820191906000526020600020905b81548152906001019060200180831161182257829003601f168201915b5050505050905090565b611851612523565b600760009054906101000a900460ff166118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061324f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906132bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613850565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe22143109a0b97b4ff9e4b5131738f39f6e03a2959fffc3e799cbc8e0cbb9bc760405160405180910390a250565b600681600d8110611a4b57600080fd5b60209182820401919006915054906101000a900460ff1681565b80611a858173ffffffffffffffffffffffffffffffffffffffff16612a81565b611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613551565b60405180910390fd5b611b1c612523565b60066008600d8110611b3157611b30613571565b5b602091828204019190069054906101000a900460ff1615611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e906135ec565b60405180910390fd5b600160066008600d8110611b9e57611b9d613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611bdd8269d3c21bcecceda1000000600a611bd8919061360c565b612aa4565b5050565b600080611bec6125a1565b90506000611bfa8286612120565b905083811015611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906138e2565b60405180910390fd5b611c4c82868684036125a9565b60019250505092915050565b600080611c636125a1565b9050611c70818585612800565b600191505092915050565b600760009054906101000a900460ff1681565b80611cae8173ffffffffffffffffffffffffffffffffffffffff16612a81565b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce4906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490613551565b60405180910390fd5b611d45612523565b60066009600d8110611d5a57611d59613571565b5b602091828204019190069054906101000a900460ff1615611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da7906135ec565b60405180910390fd5b600160066009600d8110611dc757611dc6613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611e068269d3c21bcecceda1000000600a611e01919061360c565b612aa4565b5050565b80611e2a8173ffffffffffffffffffffffffffffffffffffffff16612a81565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090613551565b60405180910390fd5b611ec1612523565b600680600d8110611ed557611ed4613571565b5b602091828204019190069054906101000a900460ff1615611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906135ec565b60405180910390fd5b6001600680600d8110611f4157611f40613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611f808269d3c21bcecceda10000006005611f7b919061360c565b612aa4565b5050565b60096020528060005260406000206000915054906101000a900460ff1681565b80611fc48173ffffffffffffffffffffffffffffffffffffffff16612a81565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613551565b60405180910390fd5b61205b612523565b6006600a600d81106120705761206f613571565b5b602091828204019190069054906101000a900460ff16156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd906135ec565b60405180910390fd5b60016006600a600d81106120dd576120dc613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061211c8269d3c21bcecceda1000000600f612117919061360c565b612aa4565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b806121c78173ffffffffffffffffffffffffffffffffffffffff16612a81565b612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613551565b60405180910390fd5b61225e612523565b60066001600d811061227357612272613571565b5b602091828204019190069054906101000a900460ff16156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c0906135ec565b60405180910390fd5b600160066001600d81106122e0576122df613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061231f8269d3c21bcecceda1000000600661231a919061360c565b612aa4565b5050565b61232b612523565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290613974565b60405180910390fd5b6123a481612c1a565b50565b806123c78173ffffffffffffffffffffffffffffffffffffffff16612a81565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90613551565b60405180910390fd5b61245e612523565b60066002600d811061247357612472613571565b5b602091828204019190069054906101000a900460ff16156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906135ec565b60405180910390fd5b600160066002600d81106124e0576124df613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061251f8269d3c21bcecceda1000000600661251a919061360c565b612aa4565b5050565b61252b6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661254961178d565b73ffffffffffffffffffffffffffffffffffffffff161461259f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612596906139e0565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090613a72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613b04565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161276791906130f4565b60405180910390a3505050565b60006127808484612120565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127fa57818110156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390613b70565b60405180910390fd5b6127f984848484036125a9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790613c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613c94565b60405180910390fd5b6128eb838383612eb7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890613d26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0491906133d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6891906130f4565b60405180910390a3612a7b848484612ebc565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90613d92565b60405180910390fd5b612b2060008383612eb7565b8060026000828254612b3291906133d7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b8791906133d7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bec91906130f4565b60405180910390a3612c0060008383612ebc565b5050565b60008183612c1291906133d7565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790613e24565b60405180910390fd5b612d5c82600083612eb7565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd990613eb6565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612e3991906137d0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e9e91906130f4565b60405180910390a3612eb283600084612ebc565b505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ef182612ec6565b9050919050565b612f0181612ee6565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b600060208284031215612f3a57612f39612ec1565b5b6000612f4884828501612f0f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f8b578082015181840152602081019050612f70565b83811115612f9a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fbc82612f51565b612fc68185612f5c565b9350612fd6818560208601612f6d565b612fdf81612fa0565b840191505092915050565b600060208201905081810360008301526130048184612fb1565b905092915050565b6000819050919050565b61301f8161300c565b811461302a57600080fd5b50565b60008135905061303c81613016565b92915050565b6000806040838503121561305957613058612ec1565b5b600061306785828601612f0f565b92505060206130788582860161302d565b9150509250929050565b60008115159050919050565b61309781613082565b82525050565b60006020820190506130b2600083018461308e565b92915050565b6000602082840312156130ce576130cd612ec1565b5b60006130dc8482850161302d565b91505092915050565b6130ee8161300c565b82525050565b600060208201905061310960008301846130e5565b92915050565b60008060006060848603121561312857613127612ec1565b5b600061313686828701612f0f565b935050602061314786828701612f0f565b92505060406131588682870161302d565b9150509250925092565b600060ff82169050919050565b61317881613162565b82525050565b6000602082019050613193600083018461316f565b92915050565b6131a281612ee6565b82525050565b60006020820190506131bd6000830184613199565b92915050565b600080604083850312156131da576131d9612ec1565b5b60006131e885828601612f0f565b92505060206131f985828601612f0f565b9150509250929050565b7f6e6f206272696467696e67000000000000000000000000000000000000000000600082015250565b6000613239600b83612f5c565b915061324482613203565b602082019050919050565b600060208201905081810360008301526132688161322c565b9050919050565b7f696e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006132a5600f83612f5c565b91506132b08261326f565b602082019050919050565b600060208201905081810360008301526132d481613298565b9050919050565b7f62726964676520616c72656164792072656d6f76656400000000000000000000600082015250565b6000613311601683612f5c565b915061331c826132db565b602082019050919050565b6000602082019050818103600083015261334081613304565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338e57607f821691505b602082108114156133a2576133a1613347565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133e28261300c565b91506133ed8361300c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613422576134216133a8565b5b828201905092915050565b7f4578636565647320746865206d61782063617000000000000000000000000000600082015250565b6000613463601383612f5c565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b7f6e6f74206d756c74697369670000000000000000000000000000000000000000600082015250565b60006134cf600c83612f5c565b91506134da82613499565b602082019050919050565b600060208201905081810360008301526134fe816134c2565b9050919050565b7f627269646765206973206e6f7420616c6c6f7765640000000000000000000000600082015250565b600061353b601583612f5c565b915061354682613505565b602082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6d696e7465640000000000000000000000000000000000000000000000000000600082015250565b60006135d6600683612f5c565b91506135e1826135a0565b602082019050919050565b60006020820190508181036000830152613605816135c9565b9050919050565b60006136178261300c565b91506136228361300c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365b5761365a6133a8565b5b828202905092915050565b7f6e6f74206120627269646765206f72206f726967696e616c20636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c2602183612f5c565b91506136cd82613666565b604082019050919050565b600060208201905081810360008301526136f1816136b5565b9050919050565b7f6578636565646564206d696e74206c696d697400000000000000000000000000600082015250565b600061372e601383612f5c565b9150613739826136f8565b602082019050919050565b6000602082019050818103600083015261375d81613721565b9050919050565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b600061379a601d83612f5c565b91506137a582613764565b602082019050919050565b600060208201905081810360008301526137c98161378d565b9050919050565b60006137db8261300c565b91506137e68361300c565b9250828210156137f9576137f86133a8565b5b828203905092915050565b7f62726964676520616c7265616479206164646564000000000000000000000000600082015250565b600061383a601483612f5c565b915061384582613804565b602082019050919050565b600060208201905081810360008301526138698161382d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138cc602583612f5c565b91506138d782613870565b604082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061395e602683612f5c565b915061396982613902565b604082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ca602083612f5c565b91506139d582613994565b602082019050919050565b600060208201905081810360008301526139f9816139bd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a5c602483612f5c565b9150613a6782613a00565b604082019050919050565b60006020820190508181036000830152613a8b81613a4f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aee602283612f5c565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b5a601d83612f5c565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bec602583612f5c565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7e602383612f5c565b9150613c8982613c22565b604082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d10602683612f5c565b9150613d1b82613cb4565b604082019050919050565b60006020820190508181036000830152613d3f81613d03565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613d7c601f83612f5c565b9150613d8782613d46565b602082019050919050565b60006020820190508181036000830152613dab81613d6f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0e602183612f5c565b9150613e1982613db2565b604082019050919050565b60006020820190508181036000830152613e3d81613e01565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ea0602283612f5c565b9150613eab82613e44565b604082019050919050565b60006020820190508181036000830152613ecf81613e93565b905091905056fea26469706673582212206a47fb32e55f6d036bcf62ec2fde9ece48a0cc47ac12de00185d58761948b5a364736f6c634300080900330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c8063723f7af611610125578063b81aa757116100ad578063d2387a7c1161007c578063d2387a7c14610621578063dd62ed3e1461063d578063ebc878701461066d578063f2fde38b14610689578063f47cc268146106a55761021c565b8063b81aa7571461059b578063c8596dc7146105b9578063cb87966a146105d5578063ced67f0c146105f15761021c565b80639712fdf8116100f45780639712fdf8146104d35780639dd4d4ec146104ef578063a1516d1d1461051f578063a457c2d71461053b578063a9059cbb1461056b5761021c565b8063723f7af61461045f57806379cc67901461047b5780638da5cb5b1461049757806395d89b41146104b55761021c565b80632f31cb9a116101a857806340c10f191161017757806340c10f19146103d157806344430429146103ed578063632d47761461040957806370a0823114610425578063715018a6146104555761021c565b80632f31cb9a1461034b578063313ce56714610367578063364e315f1461038557806339509351146103a15761021c565b806318160ddd116101ef57806318160ddd146102a757806323b872dd146102c55780632c0603d5146102f55780632da6b1b0146103115780632ddcb21f1461032d5761021c565b806304df017d1461022157806306fdde031461023d578063095ea7b31461025b5780630bedc9241461028b575b600080fd5b61023b60048036038101906102369190612f24565b6106c1565b005b6102456108a9565b6040516102529190612fea565b60405180910390f35b61027560048036038101906102709190613042565b61093b565b604051610282919061309d565b60405180910390f35b6102a560048036038101906102a091906130b8565b61095e565b005b6102af610a16565b6040516102bc91906130f4565b60405180910390f35b6102df60048036038101906102da919061310f565b610a20565b6040516102ec919061309d565b60405180910390f35b61030f600480360381019061030a9190612f24565b610a4f565b005b61032b60048036038101906103269190612f24565b610bcb565b005b610335610d47565b60405161034291906130f4565b60405180910390f35b61036560048036038101906103609190612f24565b610d4d565b005b61036f610ec9565b60405161037c919061317e565b60405180910390f35b61039f600480360381019061039a9190612f24565b610ed2565b005b6103bb60048036038101906103b69190613042565b61104e565b6040516103c8919061309d565b60405180910390f35b6103eb60048036038101906103e69190613042565b611085565b005b61040760048036038101906104029190612f24565b611195565b005b610423600480360381019061041e9190612f24565b611311565b005b61043f600480360381019061043a9190612f24565b61148d565b60405161044c91906130f4565b60405180910390f35b61045d6114d5565b005b61047960048036038101906104749190612f24565b6114e9565b005b61049560048036038101906104909190613042565b611665565b005b61049f61178d565b6040516104ac91906131a8565b60405180910390f35b6104bd6117b7565b6040516104ca9190612fea565b60405180910390f35b6104ed60048036038101906104e89190612f24565b611849565b005b610509600480360381019061050491906130b8565b611a3b565b604051610516919061309d565b60405180910390f35b61053960048036038101906105349190612f24565b611a65565b005b61055560048036038101906105509190613042565b611be1565b604051610562919061309d565b60405180910390f35b61058560048036038101906105809190613042565b611c58565b604051610592919061309d565b60405180910390f35b6105a3611c7b565b6040516105b0919061309d565b60405180910390f35b6105d360048036038101906105ce9190612f24565b611c8e565b005b6105ef60048036038101906105ea9190612f24565b611e0a565b005b61060b60048036038101906106069190612f24565b611f84565b604051610618919061309d565b60405180910390f35b61063b60048036038101906106369190612f24565b611fa4565b005b610657600480360381019061065291906131c3565b612120565b60405161066491906130f4565b60405180910390f35b61068760048036038101906106829190612f24565b6121a7565b005b6106a3600480360381019061069e9190612f24565b612323565b005b6106bf60048036038101906106ba9190612f24565b6123a7565b005b6106c9612523565b600760009054906101000a900460ff16610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f9061324f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077f906132bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b90613327565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558073ffffffffffffffffffffffffffffffffffffffff167f5a4a11544e990107dd21eb0cfb2bc681795302f00d74be6879b854c18e6f2cca60405160405180910390a250565b6060600380546108b890613376565b80601f01602080910402602001604051908101604052809291908181526020018280546108e490613376565b80156109315780601f1061090657610100808354040283529160200191610931565b820191906000526020600020905b81548152906001019060200180831161091457829003601f168201915b5050505050905090565b6000806109466125a1565b90506109538185856125a9565b600191505092915050565b610966612523565b6a52b7d2dcc80cd2e40000008160085461098091906133d7565b11156109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890613479565b60405180910390fd5b80600860008282546109d391906133d7565b925050819055507f5b5d91d8bb0ab417b295f1e72802b9c16984e2da95c94ca0c7c6c81fe180cb71600854604051610a0b91906130f4565b60405180910390a150565b6000600254905090565b600080610a2b6125a1565b9050610a38858285612774565b610a43858585612800565b60019150509392505050565b80610a6f8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa5906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613551565b60405180910390fd5b610b06612523565b6006600b600d8110610b1b57610b1a613571565b5b602091828204019190069054906101000a900460ff1615610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906135ec565b60405180910390fd5b60016006600b600d8110610b8857610b87613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610bc78269d3c21bcecceda1000000600a610bc2919061360c565b612aa4565b5050565b80610beb8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613551565b60405180910390fd5b610c82612523565b60066007600d8110610c9757610c96613571565b5b602091828204019190069054906101000a900460ff1615610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce4906135ec565b60405180910390fd5b600160066007600d8110610d0457610d03613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610d438269d3c21bcecceda1000000600a610d3e919061360c565b612aa4565b5050565b60085481565b80610d6d8173ffffffffffffffffffffffffffffffffffffffff16612a81565b610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613551565b60405180910390fd5b610e04612523565b60066004600d8110610e1957610e18613571565b5b602091828204019190069054906101000a900460ff1615610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e66906135ec565b60405180910390fd5b600160066004600d8110610e8657610e85613571565b5b602091828204019190066101000a81548160ff021916908315150217905550610ec58269d3c21bcecceda10000006003610ec0919061360c565b612aa4565b5050565b60006012905090565b80610ef28173ffffffffffffffffffffffffffffffffffffffff16612a81565b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906134e5565b60405180910390fd5b600760009054906101000a900460ff1615610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613551565b60405180910390fd5b610f89612523565b60066005600d8110610f9e57610f9d613571565b5b602091828204019190069054906101000a900460ff1615610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906135ec565b60405180910390fd5b600160066005600d811061100b5761100a613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061104a8269d3c21bcecceda10000006001611045919061360c565b612aa4565b5050565b6000806110596125a1565b905061107a81858561106b8589612120565b61107591906133d7565b6125a9565b600191505092915050565b600760009054906101000a900460ff1680156110ea5750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611120906136d8565b60405180910390fd5b60085461114682611138610a16565b612c0490919063ffffffff16565b1115611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90613744565b60405180910390fd5b6111918282612aa4565b5050565b806111b58173ffffffffffffffffffffffffffffffffffffffff16612a81565b6111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613551565b60405180910390fd5b61124c612523565b60066000600d811061126157611260613571565b5b602091828204019190069054906101000a900460ff16156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906135ec565b60405180910390fd5b600160066000600d81106112ce576112cd613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061130d8269d3c21bcecceda10000006009611308919061360c565b612aa4565b5050565b806113318173ffffffffffffffffffffffffffffffffffffffff16612a81565b611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906134e5565b60405180910390fd5b600760009054906101000a900460ff16156113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790613551565b60405180910390fd5b6113c8612523565b60066003600d81106113dd576113dc613571565b5b602091828204019190069054906101000a900460ff1615611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906135ec565b60405180910390fd5b600160066003600d811061144a57611449613571565b5b602091828204019190066101000a81548160ff0219169083151502179055506114898269d3c21bcecceda10000006007611484919061360c565b612aa4565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114dd612523565b6114e76000612c1a565b565b806115098173ffffffffffffffffffffffffffffffffffffffff16612a81565b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613551565b60405180910390fd5b6115a0612523565b6006600c600d81106115b5576115b4613571565b5b602091828204019190069054906101000a900460ff161561160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611602906135ec565b60405180910390fd5b60016006600c600d811061162257611621613571565b5b602091828204019190066101000a81548160ff0219169083151502179055506116618269d3c21bcecceda1000000600861165c919061360c565b612aa4565b5050565b600760009054906101000a900460ff1680156116ca5750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611700906136d8565b60405180910390fd5b600061171c836117176125a1565b612120565b905081811015611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906137b0565b60405180910390fd5b61177e8361176d6125a1565b848461177991906137d0565b6125a9565b6117888383612ce0565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117c690613376565b80601f01602080910402602001604051908101604052809291908181526020018280546117f290613376565b801561183f5780601f106118145761010080835404028352916020019161183f565b820191906000526020600020905b81548152906001019060200180831161182257829003601f168201915b5050505050905090565b611851612523565b600760009054906101000a900460ff166118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061324f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906132bb565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613850565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe22143109a0b97b4ff9e4b5131738f39f6e03a2959fffc3e799cbc8e0cbb9bc760405160405180910390a250565b600681600d8110611a4b57600080fd5b60209182820401919006915054906101000a900460ff1681565b80611a858173ffffffffffffffffffffffffffffffffffffffff16612a81565b611ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abb906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613551565b60405180910390fd5b611b1c612523565b60066008600d8110611b3157611b30613571565b5b602091828204019190069054906101000a900460ff1615611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e906135ec565b60405180910390fd5b600160066008600d8110611b9e57611b9d613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611bdd8269d3c21bcecceda1000000600a611bd8919061360c565b612aa4565b5050565b600080611bec6125a1565b90506000611bfa8286612120565b905083811015611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906138e2565b60405180910390fd5b611c4c82868684036125a9565b60019250505092915050565b600080611c636125a1565b9050611c70818585612800565b600191505092915050565b600760009054906101000a900460ff1681565b80611cae8173ffffffffffffffffffffffffffffffffffffffff16612a81565b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce4906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490613551565b60405180910390fd5b611d45612523565b60066009600d8110611d5a57611d59613571565b5b602091828204019190069054906101000a900460ff1615611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da7906135ec565b60405180910390fd5b600160066009600d8110611dc757611dc6613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611e068269d3c21bcecceda1000000600a611e01919061360c565b612aa4565b5050565b80611e2a8173ffffffffffffffffffffffffffffffffffffffff16612a81565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906134e5565b60405180910390fd5b600760009054906101000a900460ff1615611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090613551565b60405180910390fd5b611ec1612523565b600680600d8110611ed557611ed4613571565b5b602091828204019190069054906101000a900460ff1615611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906135ec565b60405180910390fd5b6001600680600d8110611f4157611f40613571565b5b602091828204019190066101000a81548160ff021916908315150217905550611f808269d3c21bcecceda10000006005611f7b919061360c565b612aa4565b5050565b60096020528060005260406000206000915054906101000a900460ff1681565b80611fc48173ffffffffffffffffffffffffffffffffffffffff16612a81565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613551565b60405180910390fd5b61205b612523565b6006600a600d81106120705761206f613571565b5b602091828204019190069054906101000a900460ff16156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd906135ec565b60405180910390fd5b60016006600a600d81106120dd576120dc613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061211c8269d3c21bcecceda1000000600f612117919061360c565b612aa4565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b806121c78173ffffffffffffffffffffffffffffffffffffffff16612a81565b612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613551565b60405180910390fd5b61225e612523565b60066001600d811061227357612272613571565b5b602091828204019190069054906101000a900460ff16156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c0906135ec565b60405180910390fd5b600160066001600d81106122e0576122df613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061231f8269d3c21bcecceda1000000600661231a919061360c565b612aa4565b5050565b61232b612523565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290613974565b60405180910390fd5b6123a481612c1a565b50565b806123c78173ffffffffffffffffffffffffffffffffffffffff16612a81565b612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906134e5565b60405180910390fd5b600760009054906101000a900460ff1615612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d90613551565b60405180910390fd5b61245e612523565b60066002600d811061247357612472613571565b5b602091828204019190069054906101000a900460ff16156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906135ec565b60405180910390fd5b600160066002600d81106124e0576124df613571565b5b602091828204019190066101000a81548160ff02191690831515021790555061251f8269d3c21bcecceda1000000600661251a919061360c565b612aa4565b5050565b61252b6125a1565b73ffffffffffffffffffffffffffffffffffffffff1661254961178d565b73ffffffffffffffffffffffffffffffffffffffff161461259f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612596906139e0565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090613a72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090613b04565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161276791906130f4565b60405180910390a3505050565b60006127808484612120565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127fa57818110156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390613b70565b60405180910390fd5b6127f984848484036125a9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790613c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613c94565b60405180910390fd5b6128eb838383612eb7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890613d26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0491906133d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6891906130f4565b60405180910390a3612a7b848484612ebc565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90613d92565b60405180910390fd5b612b2060008383612eb7565b8060026000828254612b3291906133d7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b8791906133d7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bec91906130f4565b60405180910390a3612c0060008383612ebc565b5050565b60008183612c1291906133d7565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790613e24565b60405180910390fd5b612d5c82600083612eb7565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd990613eb6565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612e3991906137d0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e9e91906130f4565b60405180910390a3612eb283600084612ebc565b505050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ef182612ec6565b9050919050565b612f0181612ee6565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b600060208284031215612f3a57612f39612ec1565b5b6000612f4884828501612f0f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f8b578082015181840152602081019050612f70565b83811115612f9a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fbc82612f51565b612fc68185612f5c565b9350612fd6818560208601612f6d565b612fdf81612fa0565b840191505092915050565b600060208201905081810360008301526130048184612fb1565b905092915050565b6000819050919050565b61301f8161300c565b811461302a57600080fd5b50565b60008135905061303c81613016565b92915050565b6000806040838503121561305957613058612ec1565b5b600061306785828601612f0f565b92505060206130788582860161302d565b9150509250929050565b60008115159050919050565b61309781613082565b82525050565b60006020820190506130b2600083018461308e565b92915050565b6000602082840312156130ce576130cd612ec1565b5b60006130dc8482850161302d565b91505092915050565b6130ee8161300c565b82525050565b600060208201905061310960008301846130e5565b92915050565b60008060006060848603121561312857613127612ec1565b5b600061313686828701612f0f565b935050602061314786828701612f0f565b92505060406131588682870161302d565b9150509250925092565b600060ff82169050919050565b61317881613162565b82525050565b6000602082019050613193600083018461316f565b92915050565b6131a281612ee6565b82525050565b60006020820190506131bd6000830184613199565b92915050565b600080604083850312156131da576131d9612ec1565b5b60006131e885828601612f0f565b92505060206131f985828601612f0f565b9150509250929050565b7f6e6f206272696467696e67000000000000000000000000000000000000000000600082015250565b6000613239600b83612f5c565b915061324482613203565b602082019050919050565b600060208201905081810360008301526132688161322c565b9050919050565b7f696e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006132a5600f83612f5c565b91506132b08261326f565b602082019050919050565b600060208201905081810360008301526132d481613298565b9050919050565b7f62726964676520616c72656164792072656d6f76656400000000000000000000600082015250565b6000613311601683612f5c565b915061331c826132db565b602082019050919050565b6000602082019050818103600083015261334081613304565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338e57607f821691505b602082108114156133a2576133a1613347565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133e28261300c565b91506133ed8361300c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613422576134216133a8565b5b828201905092915050565b7f4578636565647320746865206d61782063617000000000000000000000000000600082015250565b6000613463601383612f5c565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b7f6e6f74206d756c74697369670000000000000000000000000000000000000000600082015250565b60006134cf600c83612f5c565b91506134da82613499565b602082019050919050565b600060208201905081810360008301526134fe816134c2565b9050919050565b7f627269646765206973206e6f7420616c6c6f7765640000000000000000000000600082015250565b600061353b601583612f5c565b915061354682613505565b602082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6d696e7465640000000000000000000000000000000000000000000000000000600082015250565b60006135d6600683612f5c565b91506135e1826135a0565b602082019050919050565b60006020820190508181036000830152613605816135c9565b9050919050565b60006136178261300c565b91506136228361300c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365b5761365a6133a8565b5b828202905092915050565b7f6e6f74206120627269646765206f72206f726967696e616c20636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c2602183612f5c565b91506136cd82613666565b604082019050919050565b600060208201905081810360008301526136f1816136b5565b9050919050565b7f6578636565646564206d696e74206c696d697400000000000000000000000000600082015250565b600061372e601383612f5c565b9150613739826136f8565b602082019050919050565b6000602082019050818103600083015261375d81613721565b9050919050565b7f6275726e20616d6f756e74206578636565647320616c6c6f77616e6365000000600082015250565b600061379a601d83612f5c565b91506137a582613764565b602082019050919050565b600060208201905081810360008301526137c98161378d565b9050919050565b60006137db8261300c565b91506137e68361300c565b9250828210156137f9576137f86133a8565b5b828203905092915050565b7f62726964676520616c7265616479206164646564000000000000000000000000600082015250565b600061383a601483612f5c565b915061384582613804565b602082019050919050565b600060208201905081810360008301526138698161382d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138cc602583612f5c565b91506138d782613870565b604082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061395e602683612f5c565b915061396982613902565b604082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ca602083612f5c565b91506139d582613994565b602082019050919050565b600060208201905081810360008301526139f9816139bd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a5c602483612f5c565b9150613a6782613a00565b604082019050919050565b60006020820190508181036000830152613a8b81613a4f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aee602283612f5c565b9150613af982613a92565b604082019050919050565b60006020820190508181036000830152613b1d81613ae1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b5a601d83612f5c565b9150613b6582613b24565b602082019050919050565b60006020820190508181036000830152613b8981613b4d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bec602583612f5c565b9150613bf782613b90565b604082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7e602383612f5c565b9150613c8982613c22565b604082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d10602683612f5c565b9150613d1b82613cb4565b604082019050919050565b60006020820190508181036000830152613d3f81613d03565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613d7c601f83612f5c565b9150613d8782613d46565b602082019050919050565b60006020820190508181036000830152613dab81613d6f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0e602183612f5c565b9150613e1982613db2565b604082019050919050565b60006020820190508181036000830152613e3d81613e01565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ea0602283612f5c565b9150613eab82613e44565b604082019050919050565b60006020820190508181036000830152613ecf81613e93565b905091905056fea26469706673582212206a47fb32e55f6d036bcf62ec2fde9ece48a0cc47ac12de00185d58761948b5a364736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _bridgeAllowed (bool): False

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

35913:6277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40848:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24947:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40270:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26067:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28079:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39787:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38822:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36252:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38101:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25909:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38344:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28783:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41357:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37143:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37864:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26238:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18370:103;;;:::i;:::-;;40034:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41857:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17722:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40537:303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36084:29;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39062:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29524:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26571:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36210:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39303:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38584:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36358:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39548:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26827:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37386:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18628:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37626:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40848:310;17608:13;:11;:13::i;:::-;40925::::1;;;;;;;;;;;40917:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40992:1;40973:21;;:7;:21;;;;40965:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41033:7;:16;41041:7;41033:16;;;;;;;;;;;;;;;;;;;;;;;;;41025:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41096:7;:16;41104:7;41096:16;;;;;;;;;;;;;;;;41089:23;;;;;;;;;;;41143:7;41130:21;;;;;;;;;;;;40848:310:::0;:::o;24947:100::-;25001:13;25034:5;25027:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24947:100;:::o;27298:201::-;27381:4;27398:13;27414:12;:10;:12::i;:::-;27398:28;;27437:32;27446:5;27453:7;27462:6;27437:8;:32::i;:::-;27487:4;27480:11;;;27298:201;;;;:::o;40270:259::-;17608:13;:11;:13::i;:::-;40377:28:::1;40367:6;40353:11;;:20;;;;:::i;:::-;:52;;40345:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;40465:6;40450:11;;:21;;;;;;;:::i;:::-;;;;;;;;40489:32;40509:11;;40489:32;;;;;;:::i;:::-;;;;;;;;40270:259:::0;:::o;26067:108::-;26128:7;26155:12;;26148:19;;26067:108;:::o;28079:295::-;28210:4;28227:15;28245:12;:10;:12::i;:::-;28227:30;;28268:38;28284:4;28290:7;28299:6;28268:15;:38::i;:::-;28317:27;28327:4;28333:2;28337:6;28317:9;:27::i;:::-;28362:4;28355:11;;;28079:295;;;;;:::o;39787:239::-;39858:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;39907::::3;39921:2;39907:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39906:18;39898:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39966:4;39946:13;39960:2;39946:17;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;39981:29;39987:8;36053:22;39997:2;:12;;;;:::i;:::-;39981:5;:29::i;:::-;39787:239:::0;;:::o;38822:232::-;38888:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;38937::::3;38951:1;38937:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38936:17;38928:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38994:4;38975:13;38989:1;38975:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39009:29;39015:8;36053:22;39025:2;:12;;;;:::i;:::-;39009:5;:29::i;:::-;38822:232:::0;;:::o;36252:27::-;;;;:::o;38101:235::-;38172:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;38221::::3;38235:1;38221:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38220:17;38212:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38278:4;38259:13;38273:1;38259:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38293:28;38299:8;36053:22;38309:1;:11;;;;:::i;:::-;38293:5;:28::i;:::-;38101:235:::0;;:::o;25909:93::-;25967:5;25992:2;25985:9;;25909:93;:::o;38344:232::-;38412:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;38461::::3;38475:1;38461:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38460:17;38452:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38518:4;38499:13;38513:1;38499:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38533:28;38539:8;36053:22;38549:1;:11;;;;:::i;:::-;38533:5;:28::i;:::-;38344:232:::0;;:::o;28783:238::-;28871:4;28888:13;28904:12;:10;:12::i;:::-;28888:28;;28927:64;28936:5;28943:7;28980:10;28952:25;28962:5;28969:7;28952:9;:25::i;:::-;:38;;;;:::i;:::-;28927:8;:64::i;:::-;29009:4;29002:11;;;28783:238;;;;:::o;41357:181::-;36467:13;;;;;;;;;;;:36;;;;;36484:7;:19;36492:10;36484:19;;;;;;;;;;;;;;;;;;;;;;;;;36467:36;36459:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41467:11:::1;;41438:25;41456:6;41438:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;41430:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41513:17;41519:2;41523:6;41513:5;:17::i;:::-;41357:181:::0;;:::o;37143:235::-;37206:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;37255::::3;37269:1;37255:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37254:17;37246:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37318:4;37299:13;37313:1;37299:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37335:28;37341:8;36053:22;37351:1;:11;;;;:::i;:::-;37335:5;:28::i;:::-;37143:235:::0;;:::o;37864:229::-;37929:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;37978::::3;37992:1;37978:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37977:17;37969:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38035:4;38016:13;38030:1;38016:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38050:28;38056:8;36053:22;38066:1;:11;;;;:::i;:::-;38050:5;:28::i;:::-;37864:229:::0;;:::o;26238:127::-;26312:7;26339:9;:18;26349:7;26339:18;;;;;;;;;;;;;;;;26332:25;;26238:127;;;:::o;18370:103::-;17608:13;:11;:13::i;:::-;18435:30:::1;18462:1;18435:18;:30::i;:::-;18370:103::o:0;40034:228::-;40096:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;40145::::3;40159:2;40145:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;40144:18;40136:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40204:4;40184:13;40198:2;40184:17;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;40219:28;40225:8;36053:22;40235:1;:11;;;;:::i;:::-;40219:5;:28::i;:::-;40034:228:::0;;:::o;41857:330::-;36467:13;;;;;;;;;;;:36;;;;;36484:7;:19;36492:10;36484:19;;;;;;;;;;;;;;;;;;;;;;;;;36467:36;36459:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41937:24:::1;41964:32;41974:7;41983:12;:10;:12::i;:::-;41964:9;:32::i;:::-;41937:59;;42035:6;42015:16;:26;;42007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42088:58;42097:7;42106:12;:10;:12::i;:::-;42139:6;42120:16;:25;;;;:::i;:::-;42088:8;:58::i;:::-;42157:22;42163:7;42172:6;42157:5;:22::i;:::-;41926:261;41857:330:::0;;:::o;17722:87::-;17768:7;17795:6;;;;;;;;;;;17788:13;;17722:87;:::o;25166:104::-;25222:13;25255:7;25248:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25166:104;:::o;40537:303::-;17608:13;:11;:13::i;:::-;40611::::1;;;;;;;;;;;40603:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40678:1;40659:21;;:7;:21;;;;40651:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40720:7;:16;40728:7;40720:16;;;;;;;;;;;;;;;;;;;;;;;;;40719:17;40711:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40793:4;40774:7;:16;40782:7;40774:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;40825:7;40815:18;;;;;;;;;;;;40537:303:::0;:::o;36084:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39062:233::-;39129:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;39178::::3;39192:1;39178:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39177:17;39169:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39235:4;39216:13;39230:1;39216:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39250:29;39256:8;36053:22;39266:2;:12;;;;:::i;:::-;39250:5;:29::i;:::-;39062:233:::0;;:::o;29524:436::-;29617:4;29634:13;29650:12;:10;:12::i;:::-;29634:28;;29673:24;29700:25;29710:5;29717:7;29700:9;:25::i;:::-;29673:52;;29764:15;29744:16;:35;;29736:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29857:60;29866:5;29873:7;29901:15;29882:16;:34;29857:8;:60::i;:::-;29948:4;29941:11;;;;29524:436;;;;:::o;26571:193::-;26650:4;26667:13;26683:12;:10;:12::i;:::-;26667:28;;26706;26716:5;26723:2;26727:6;26706:9;:28::i;:::-;26752:4;26745:11;;;26571:193;;;;:::o;36210:33::-;;;;;;;;;;;;;:::o;39303:237::-;39374:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;39423::::3;39437:1;39423:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39422:17;39414:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39480:4;39461:13;39475:1;39461:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39495:29;39501:8;36053:22;39511:2;:12;;;;:::i;:::-;39495:5;:29::i;:::-;39303:237:::0;;:::o;38584:230::-;38650:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;38699::::3;38713:1:::0;38699:16:::3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38698:17;38690:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38756:4;38737:13;38751:1:::0;38737:16:::3;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38771:28;38777:8;36053:22;38787:1;:11;;;;:::i;:::-;38771:5;:28::i;:::-;38584:230:::0;;:::o;36358:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;39548:231::-;39611:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;39660::::3;39674:2;39660:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39659:18;39651:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39719:4;39699:13;39713:2;39699:17;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;39734:29;39740:8;36053:22;39750:2;:12;;;;:::i;:::-;39734:5;:29::i;:::-;39548:231:::0;;:::o;26827:151::-;26916:7;26943:11;:18;26955:5;26943:18;;;;;;;;;;;;;;;:27;26962:7;26943:27;;;;;;;;;;;;;;;;26936:34;;26827:151;;;;:::o;37386:232::-;37454:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;37503::::3;37517:1;37503:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37502:17;37494:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37560:4;37541:13;37555:1;37541:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37575:28;37581:8;36053:22;37591:1;:11;;;;:::i;:::-;37575:5;:28::i;:::-;37386:232:::0;;:::o;18628:201::-;17608:13;:11;:13::i;:::-;18737:1:::1;18717:22;;:8;:22;;;;18709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18793:28;18812:8;18793:18;:28::i;:::-;18628:201:::0;:::o;37626:230::-;37692:8;36733:21;:8;:19;;;:21::i;:::-;36725:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:13:::1;;;;;;;;;;;36606:14;36598:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:13:::2;:11;:13::i;:::-;37741::::3;37755:1;37741:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37740:17;37732:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:4;37779:13;37793:1;37779:16;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37813:28;37819:8;36053:22;37829:1;:11;;;;:::i;:::-;37813:5;:28::i;:::-;37626:230:::0;;:::o;17887:132::-;17962:12;:10;:12::i;:::-;17951:23;;:7;:5;:7::i;:::-;:23;;;17943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17887:132::o;16273:98::-;16326:7;16353:10;16346:17;;16273:98;:::o;33149:380::-;33302:1;33285:19;;:5;:19;;;;33277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33383:1;33364:21;;:7;:21;;;;33356:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33467:6;33437:11;:18;33449:5;33437:18;;;;;;;;;;;;;;;:27;33456:7;33437:27;;;;;;;;;;;;;;;:36;;;;33505:7;33489:32;;33498:5;33489:32;;;33514:6;33489:32;;;;;;:::i;:::-;;;;;;;;33149:380;;;:::o;33820:453::-;33955:24;33982:25;33992:5;33999:7;33982:9;:25::i;:::-;33955:52;;34042:17;34022:16;:37;34018:248;;34104:6;34084:16;:26;;34076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34188:51;34197:5;34204:7;34232:6;34213:16;:25;34188:8;:51::i;:::-;34018:248;33944:329;33820:453;;;:::o;30430:671::-;30577:1;30561:18;;:4;:18;;;;30553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30654:1;30640:16;;:2;:16;;;;30632:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30709:38;30730:4;30736:2;30740:6;30709:20;:38::i;:::-;30760:19;30782:9;:15;30792:4;30782:15;;;;;;;;;;;;;;;;30760:37;;30831:6;30816:11;:21;;30808:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30948:6;30934:11;:20;30916:9;:15;30926:4;30916:15;;;;;;;;;;;;;;;:38;;;;30993:6;30976:9;:13;30986:2;30976:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;31032:2;31017:26;;31026:4;31017:26;;;31036:6;31017:26;;;;;;:::i;:::-;;;;;;;;31056:37;31076:4;31082:2;31086:6;31056:19;:37::i;:::-;30542:559;30430:671;;;:::o;1233:326::-;1293:4;1550:1;1528:7;:19;;;:23;1521:30;;1233:326;;;:::o;31388:399::-;31491:1;31472:21;;:7;:21;;;;31464:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31542:49;31571:1;31575:7;31584:6;31542:20;:49::i;:::-;31620:6;31604:12;;:22;;;;;;;:::i;:::-;;;;;;;;31659:6;31637:9;:18;31647:7;31637:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;31702:7;31681:37;;31698:1;31681:37;;;31711:6;31681:37;;;;;;:::i;:::-;;;;;;;;31731:48;31759:1;31763:7;31772:6;31731:19;:48::i;:::-;31388:399;;:::o;11429:98::-;11487:7;11518:1;11514;:5;;;;:::i;:::-;11507:12;;11429:98;;;;:::o;18989:191::-;19063:16;19082:6;;;;;;;;;;;19063:25;;19108:8;19099:6;;:17;;;;;;;;;;;;;;;;;;19163:8;19132:40;;19153:8;19132:40;;;;;;;;;;;;19052:128;18989:191;:::o;32120:591::-;32223:1;32204:21;;:7;:21;;;;32196:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32276:49;32297:7;32314:1;32318:6;32276:20;:49::i;:::-;32338:22;32363:9;:18;32373:7;32363:18;;;;;;;;;;;;;;;;32338:43;;32418:6;32400:14;:24;;32392:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32537:6;32520:14;:23;32499:9;:18;32509:7;32499:18;;;;;;;;;;;;;;;:44;;;;32581:6;32565:12;;:22;;;;;;;:::i;:::-;;;;;;;;32631:1;32605:37;;32614:7;32605:37;;;32635:6;32605:37;;;;;;:::i;:::-;;;;;;;;32655:48;32675:7;32692:1;32696:6;32655:19;:48::i;:::-;32185:526;32120:591;;:::o;34873:125::-;;;;:::o;35602:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:329::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:118::-;4251:24;4269:5;4251:24;:::i;:::-;4246:3;4239:37;4164:118;;:::o;4288:222::-;4381:4;4419:2;4408:9;4404:18;4396:26;;4432:71;4500:1;4489:9;4485:17;4476:6;4432:71;:::i;:::-;4288:222;;;;:::o;4516:619::-;4593:6;4601;4609;4658:2;4646:9;4637:7;4633:23;4629:32;4626:119;;;4664:79;;:::i;:::-;4626:119;4784:1;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4755:117;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;5039:2;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5010:118;4516:619;;;;;:::o;5141:86::-;5176:7;5216:4;5209:5;5205:16;5194:27;;5141:86;;;:::o;5233:112::-;5316:22;5332:5;5316:22;:::i;:::-;5311:3;5304:35;5233:112;;:::o;5351:214::-;5440:4;5478:2;5467:9;5463:18;5455:26;;5491:67;5555:1;5544:9;5540:17;5531:6;5491:67;:::i;:::-;5351:214;;;;:::o;5571:118::-;5658:24;5676:5;5658:24;:::i;:::-;5653:3;5646:37;5571:118;;:::o;5695:222::-;5788:4;5826:2;5815:9;5811:18;5803:26;;5839:71;5907:1;5896:9;5892:17;5883:6;5839:71;:::i;:::-;5695:222;;;;:::o;5923:474::-;5991:6;5999;6048:2;6036:9;6027:7;6023:23;6019:32;6016:119;;;6054:79;;:::i;:::-;6016:119;6174:1;6199:53;6244:7;6235:6;6224:9;6220:22;6199:53;:::i;:::-;6189:63;;6145:117;6301:2;6327:53;6372:7;6363:6;6352:9;6348:22;6327:53;:::i;:::-;6317:63;;6272:118;5923:474;;;;;:::o;6403:161::-;6543:13;6539:1;6531:6;6527:14;6520:37;6403:161;:::o;6570:366::-;6712:3;6733:67;6797:2;6792:3;6733:67;:::i;:::-;6726:74;;6809:93;6898:3;6809:93;:::i;:::-;6927:2;6922:3;6918:12;6911:19;;6570:366;;;:::o;6942:419::-;7108:4;7146:2;7135:9;7131:18;7123:26;;7195:9;7189:4;7185:20;7181:1;7170:9;7166:17;7159:47;7223:131;7349:4;7223:131;:::i;:::-;7215:139;;6942:419;;;:::o;7367:165::-;7507:17;7503:1;7495:6;7491:14;7484:41;7367:165;:::o;7538:366::-;7680:3;7701:67;7765:2;7760:3;7701:67;:::i;:::-;7694:74;;7777:93;7866:3;7777:93;:::i;:::-;7895:2;7890:3;7886:12;7879:19;;7538:366;;;:::o;7910:419::-;8076:4;8114:2;8103:9;8099:18;8091:26;;8163:9;8157:4;8153:20;8149:1;8138:9;8134:17;8127:47;8191:131;8317:4;8191:131;:::i;:::-;8183:139;;7910:419;;;:::o;8335:172::-;8475:24;8471:1;8463:6;8459:14;8452:48;8335:172;:::o;8513:366::-;8655:3;8676:67;8740:2;8735:3;8676:67;:::i;:::-;8669:74;;8752:93;8841:3;8752:93;:::i;:::-;8870:2;8865:3;8861:12;8854:19;;8513:366;;;:::o;8885:419::-;9051:4;9089:2;9078:9;9074:18;9066:26;;9138:9;9132:4;9128:20;9124:1;9113:9;9109:17;9102:47;9166:131;9292:4;9166:131;:::i;:::-;9158:139;;8885:419;;;:::o;9310:180::-;9358:77;9355:1;9348:88;9455:4;9452:1;9445:15;9479:4;9476:1;9469:15;9496:320;9540:6;9577:1;9571:4;9567:12;9557:22;;9624:1;9618:4;9614:12;9645:18;9635:81;;9701:4;9693:6;9689:17;9679:27;;9635:81;9763:2;9755:6;9752:14;9732:18;9729:38;9726:84;;;9782:18;;:::i;:::-;9726:84;9547:269;9496:320;;;:::o;9822:180::-;9870:77;9867:1;9860:88;9967:4;9964:1;9957:15;9991:4;9988:1;9981:15;10008:305;10048:3;10067:20;10085:1;10067:20;:::i;:::-;10062:25;;10101:20;10119:1;10101:20;:::i;:::-;10096:25;;10255:1;10187:66;10183:74;10180:1;10177:81;10174:107;;;10261:18;;:::i;:::-;10174:107;10305:1;10302;10298:9;10291:16;;10008:305;;;;:::o;10319:169::-;10459:21;10455:1;10447:6;10443:14;10436:45;10319:169;:::o;10494:366::-;10636:3;10657:67;10721:2;10716:3;10657:67;:::i;:::-;10650:74;;10733:93;10822:3;10733:93;:::i;:::-;10851:2;10846:3;10842:12;10835:19;;10494:366;;;:::o;10866:419::-;11032:4;11070:2;11059:9;11055:18;11047:26;;11119:9;11113:4;11109:20;11105:1;11094:9;11090:17;11083:47;11147:131;11273:4;11147:131;:::i;:::-;11139:139;;10866:419;;;:::o;11291:162::-;11431:14;11427:1;11419:6;11415:14;11408:38;11291:162;:::o;11459:366::-;11601:3;11622:67;11686:2;11681:3;11622:67;:::i;:::-;11615:74;;11698:93;11787:3;11698:93;:::i;:::-;11816:2;11811:3;11807:12;11800:19;;11459:366;;;:::o;11831:419::-;11997:4;12035:2;12024:9;12020:18;12012:26;;12084:9;12078:4;12074:20;12070:1;12059:9;12055:17;12048:47;12112:131;12238:4;12112:131;:::i;:::-;12104:139;;11831:419;;;:::o;12256:171::-;12396:23;12392:1;12384:6;12380:14;12373:47;12256:171;:::o;12433:366::-;12575:3;12596:67;12660:2;12655:3;12596:67;:::i;:::-;12589:74;;12672:93;12761:3;12672:93;:::i;:::-;12790:2;12785:3;12781:12;12774:19;;12433:366;;;:::o;12805:419::-;12971:4;13009:2;12998:9;12994:18;12986:26;;13058:9;13052:4;13048:20;13044:1;13033:9;13029:17;13022:47;13086:131;13212:4;13086:131;:::i;:::-;13078:139;;12805:419;;;:::o;13230:180::-;13278:77;13275:1;13268:88;13375:4;13372:1;13365:15;13399:4;13396:1;13389:15;13416:156;13556:8;13552:1;13544:6;13540:14;13533:32;13416:156;:::o;13578:365::-;13720:3;13741:66;13805:1;13800:3;13741:66;:::i;:::-;13734:73;;13816:93;13905:3;13816:93;:::i;:::-;13934:2;13929:3;13925:12;13918:19;;13578:365;;;:::o;13949:419::-;14115:4;14153:2;14142:9;14138:18;14130:26;;14202:9;14196:4;14192:20;14188:1;14177:9;14173:17;14166:47;14230:131;14356:4;14230:131;:::i;:::-;14222:139;;13949:419;;;:::o;14374:348::-;14414:7;14437:20;14455:1;14437:20;:::i;:::-;14432:25;;14471:20;14489:1;14471:20;:::i;:::-;14466:25;;14659:1;14591:66;14587:74;14584:1;14581:81;14576:1;14569:9;14562:17;14558:105;14555:131;;;14666:18;;:::i;:::-;14555:131;14714:1;14711;14707:9;14696:20;;14374:348;;;;:::o;14728:220::-;14868:34;14864:1;14856:6;14852:14;14845:58;14937:3;14932:2;14924:6;14920:15;14913:28;14728:220;:::o;14954:366::-;15096:3;15117:67;15181:2;15176:3;15117:67;:::i;:::-;15110:74;;15193:93;15282:3;15193:93;:::i;:::-;15311:2;15306:3;15302:12;15295:19;;14954:366;;;:::o;15326:419::-;15492:4;15530:2;15519:9;15515:18;15507:26;;15579:9;15573:4;15569:20;15565:1;15554:9;15550:17;15543:47;15607:131;15733:4;15607:131;:::i;:::-;15599:139;;15326:419;;;:::o;15751:169::-;15891:21;15887:1;15879:6;15875:14;15868:45;15751:169;:::o;15926:366::-;16068:3;16089:67;16153:2;16148:3;16089:67;:::i;:::-;16082:74;;16165:93;16254:3;16165:93;:::i;:::-;16283:2;16278:3;16274:12;16267:19;;15926:366;;;:::o;16298:419::-;16464:4;16502:2;16491:9;16487:18;16479:26;;16551:9;16545:4;16541:20;16537:1;16526:9;16522:17;16515:47;16579:131;16705:4;16579:131;:::i;:::-;16571:139;;16298:419;;;:::o;16723:179::-;16863:31;16859:1;16851:6;16847:14;16840:55;16723:179;:::o;16908:366::-;17050:3;17071:67;17135:2;17130:3;17071:67;:::i;:::-;17064:74;;17147:93;17236:3;17147:93;:::i;:::-;17265:2;17260:3;17256:12;17249:19;;16908:366;;;:::o;17280:419::-;17446:4;17484:2;17473:9;17469:18;17461:26;;17533:9;17527:4;17523:20;17519:1;17508:9;17504:17;17497:47;17561:131;17687:4;17561:131;:::i;:::-;17553:139;;17280:419;;;:::o;17705:191::-;17745:4;17765:20;17783:1;17765:20;:::i;:::-;17760:25;;17799:20;17817:1;17799:20;:::i;:::-;17794:25;;17838:1;17835;17832:8;17829:34;;;17843:18;;:::i;:::-;17829:34;17888:1;17885;17881:9;17873:17;;17705:191;;;;:::o;17902:170::-;18042:22;18038:1;18030:6;18026:14;18019:46;17902:170;:::o;18078:366::-;18220:3;18241:67;18305:2;18300:3;18241:67;:::i;:::-;18234:74;;18317:93;18406:3;18317:93;:::i;:::-;18435:2;18430:3;18426:12;18419:19;;18078:366;;;:::o;18450:419::-;18616:4;18654:2;18643:9;18639:18;18631:26;;18703:9;18697:4;18693:20;18689:1;18678:9;18674:17;18667:47;18731:131;18857:4;18731:131;:::i;:::-;18723:139;;18450:419;;;:::o;18875:224::-;19015:34;19011:1;19003:6;18999:14;18992:58;19084:7;19079:2;19071:6;19067:15;19060:32;18875:224;:::o;19105:366::-;19247:3;19268:67;19332:2;19327:3;19268:67;:::i;:::-;19261:74;;19344:93;19433:3;19344:93;:::i;:::-;19462:2;19457:3;19453:12;19446:19;;19105:366;;;:::o;19477:419::-;19643:4;19681:2;19670:9;19666:18;19658:26;;19730:9;19724:4;19720:20;19716:1;19705:9;19701:17;19694:47;19758:131;19884:4;19758:131;:::i;:::-;19750:139;;19477:419;;;:::o;19902:225::-;20042:34;20038:1;20030:6;20026:14;20019:58;20111:8;20106:2;20098:6;20094:15;20087:33;19902:225;:::o;20133:366::-;20275:3;20296:67;20360:2;20355:3;20296:67;:::i;:::-;20289:74;;20372:93;20461:3;20372:93;:::i;:::-;20490:2;20485:3;20481:12;20474:19;;20133:366;;;:::o;20505:419::-;20671:4;20709:2;20698:9;20694:18;20686:26;;20758:9;20752:4;20748:20;20744:1;20733:9;20729:17;20722:47;20786:131;20912:4;20786:131;:::i;:::-;20778:139;;20505:419;;;:::o;20930:182::-;21070:34;21066:1;21058:6;21054:14;21047:58;20930:182;:::o;21118:366::-;21260:3;21281:67;21345:2;21340:3;21281:67;:::i;:::-;21274:74;;21357:93;21446:3;21357:93;:::i;:::-;21475:2;21470:3;21466:12;21459:19;;21118:366;;;:::o;21490:419::-;21656:4;21694:2;21683:9;21679:18;21671:26;;21743:9;21737:4;21733:20;21729:1;21718:9;21714:17;21707:47;21771:131;21897:4;21771:131;:::i;:::-;21763:139;;21490:419;;;:::o;21915:223::-;22055:34;22051:1;22043:6;22039:14;22032:58;22124:6;22119:2;22111:6;22107:15;22100:31;21915:223;:::o;22144:366::-;22286:3;22307:67;22371:2;22366:3;22307:67;:::i;:::-;22300:74;;22383:93;22472:3;22383:93;:::i;:::-;22501:2;22496:3;22492:12;22485:19;;22144:366;;;:::o;22516:419::-;22682:4;22720:2;22709:9;22705:18;22697:26;;22769:9;22763:4;22759:20;22755:1;22744:9;22740:17;22733:47;22797:131;22923:4;22797:131;:::i;:::-;22789:139;;22516:419;;;:::o;22941:221::-;23081:34;23077:1;23069:6;23065:14;23058:58;23150:4;23145:2;23137:6;23133:15;23126:29;22941:221;:::o;23168:366::-;23310:3;23331:67;23395:2;23390:3;23331:67;:::i;:::-;23324:74;;23407:93;23496:3;23407:93;:::i;:::-;23525:2;23520:3;23516:12;23509:19;;23168:366;;;:::o;23540:419::-;23706:4;23744:2;23733:9;23729:18;23721:26;;23793:9;23787:4;23783:20;23779:1;23768:9;23764:17;23757:47;23821:131;23947:4;23821:131;:::i;:::-;23813:139;;23540:419;;;:::o;23965:179::-;24105:31;24101:1;24093:6;24089:14;24082:55;23965:179;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:224::-;25087:34;25083:1;25075:6;25071:14;25064:58;25156:7;25151:2;25143:6;25139:15;25132:32;24947:224;:::o;25177:366::-;25319:3;25340:67;25404:2;25399:3;25340:67;:::i;:::-;25333:74;;25416:93;25505:3;25416:93;:::i;:::-;25534:2;25529:3;25525:12;25518:19;;25177:366;;;:::o;25549:419::-;25715:4;25753:2;25742:9;25738:18;25730:26;;25802:9;25796:4;25792:20;25788:1;25777:9;25773:17;25766:47;25830:131;25956:4;25830:131;:::i;:::-;25822:139;;25549:419;;;:::o;25974:222::-;26114:34;26110:1;26102:6;26098:14;26091:58;26183:5;26178:2;26170:6;26166:15;26159:30;25974:222;:::o;26202:366::-;26344:3;26365:67;26429:2;26424:3;26365:67;:::i;:::-;26358:74;;26441:93;26530:3;26441:93;:::i;:::-;26559:2;26554:3;26550:12;26543:19;;26202:366;;;:::o;26574:419::-;26740:4;26778:2;26767:9;26763:18;26755:26;;26827:9;26821:4;26817:20;26813:1;26802:9;26798:17;26791:47;26855:131;26981:4;26855:131;:::i;:::-;26847:139;;26574:419;;;:::o;26999:225::-;27139:34;27135:1;27127:6;27123:14;27116:58;27208:8;27203:2;27195:6;27191:15;27184:33;26999:225;:::o;27230:366::-;27372:3;27393:67;27457:2;27452:3;27393:67;:::i;:::-;27386:74;;27469:93;27558:3;27469:93;:::i;:::-;27587:2;27582:3;27578:12;27571:19;;27230:366;;;:::o;27602:419::-;27768:4;27806:2;27795:9;27791:18;27783:26;;27855:9;27849:4;27845:20;27841:1;27830:9;27826:17;27819:47;27883:131;28009:4;27883:131;:::i;:::-;27875:139;;27602:419;;;:::o;28027:181::-;28167:33;28163:1;28155:6;28151:14;28144:57;28027:181;:::o;28214:366::-;28356:3;28377:67;28441:2;28436:3;28377:67;:::i;:::-;28370:74;;28453:93;28542:3;28453:93;:::i;:::-;28571:2;28566:3;28562:12;28555:19;;28214:366;;;:::o;28586:419::-;28752:4;28790:2;28779:9;28775:18;28767:26;;28839:9;28833:4;28829:20;28825:1;28814:9;28810:17;28803:47;28867:131;28993:4;28867:131;:::i;:::-;28859:139;;28586:419;;;:::o;29011:220::-;29151:34;29147:1;29139:6;29135:14;29128:58;29220:3;29215:2;29207:6;29203:15;29196:28;29011:220;:::o;29237:366::-;29379:3;29400:67;29464:2;29459:3;29400:67;:::i;:::-;29393:74;;29476:93;29565:3;29476:93;:::i;:::-;29594:2;29589:3;29585:12;29578:19;;29237:366;;;:::o;29609:419::-;29775:4;29813:2;29802:9;29798:18;29790:26;;29862:9;29856:4;29852:20;29848:1;29837:9;29833:17;29826:47;29890:131;30016:4;29890:131;:::i;:::-;29882:139;;29609:419;;;:::o;30034:221::-;30174:34;30170:1;30162:6;30158:14;30151:58;30243:4;30238:2;30230:6;30226:15;30219:29;30034:221;:::o;30261:366::-;30403:3;30424:67;30488:2;30483:3;30424:67;:::i;:::-;30417:74;;30500:93;30589:3;30500:93;:::i;:::-;30618:2;30613:3;30609:12;30602:19;;30261:366;;;:::o;30633:419::-;30799:4;30837:2;30826:9;30822:18;30814:26;;30886:9;30880:4;30876:20;30872:1;30861:9;30857:17;30850:47;30914:131;31040:4;30914:131;:::i;:::-;30906:139;;30633:419;;;:::o

Swarm Source

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