Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
700 MVX1
Holders
341
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MVX1Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FlyTops
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-20 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. 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; } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } 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; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; string public _baseURI; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory base = baseURI(); return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function baseURI() internal view virtual returns (string memory) { return _baseURI; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` 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 tokenId ) internal virtual {} } pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract FlyTops is ERC721Enumerable, Ownable { using SafeMath for uint256; using Address for address; using Strings for uint256; uint public constant _TOTALSUPPLY = 999; uint public maxQuantity = 10; uint256 public price = 80000000000000000; // 0.08 ETH bool public isPaused = true; uint public reserve = 55; uint256 public nextTokenId=1; constructor(string memory baseURI) ERC721("Fly-Tops", "MVX1") { setBaseURI(baseURI); } function setBaseURI(string memory baseURI) public onlyOwner { _baseURI = baseURI; } function setPrice(uint256 _newPrice) public onlyOwner() { price = _newPrice; } function setMaxQtPerTx(uint256 _quantity) public onlyOwner { maxQuantity=_quantity; } function mintReserveForOwner(uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; for (uint i = 0; i < quantity; i++) { _safeMint(msg.sender, nextTokenId++); } } function mintReserveForOthers(address walletAddress, uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; for (uint i = 0; i < quantity; i++) { _safeMint(walletAddress, nextTokenId++); } } modifier isSaleOpen{ require(totalSupply() < _TOTALSUPPLY, "Sale end"); _; } function flipPauseStatus() public onlyOwner { isPaused = !isPaused; } function mint(uint chosenAmount) public payable isSaleOpen{ require(isPaused == false, "Sale is not active at the moment"); require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0"); require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity"); require((nextTokenId-1).add(chosenAmount + reserve) <= _TOTALSUPPLY, "Purchase would exceed max supply"); require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect"); for (uint i = 0; i < chosenAmount; i++) { _safeMint(msg.sender, nextTokenId++); } } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 count = balanceOf(_owner); uint256[] memory result = new uint256[](count); for (uint256 index = 0; index < count; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setMaxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600a600c5567011c37937e080000600d556001600e60006101000a81548160ff0219169083151502179055506037600f5560016010553480156200004757600080fd5b5060405162004c0c38038062004c0c83398181016040528101906200006d9190620003d5565b6040518060400160405280600881526020017f466c792d546f70730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d565831000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f1929190620002b3565b5080600190805190602001906200010a929190620002b3565b50505060006200011f620001d660201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001cf81620001de60201b60201c565b50620005c0565b600033905090565b620001ee620001d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002146200028960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200026d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000264906200045c565b60405180910390fd5b806006908051906020019062000285929190620002b3565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002c1906200052c565b90600052602060002090601f016020900481019282620002e5576000855562000331565b82601f106200030057805160ff191683800117855562000331565b8280016001018555821562000331579182015b828111156200033057825182559160200191906001019062000313565b5b50905062000340919062000344565b5090565b5b808211156200035f57600081600090555060010162000345565b5090565b60006200037a6200037484620004b2565b6200047e565b9050828152602081018484840111156200039357600080fd5b620003a0848285620004f6565b509392505050565b600082601f830112620003ba57600080fd5b8151620003cc84826020860162000363565b91505092915050565b600060208284031215620003e857600080fd5b600082015167ffffffffffffffff8111156200040357600080fd5b6200041184828501620003a8565b91505092915050565b600062000429602083620004e5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000602082019050818103600083015262000477816200041a565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620004a857620004a762000591565b5b8060405250919050565b600067ffffffffffffffff821115620004d057620004cf62000591565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b8381101562000516578082015181840152602081019050620004f9565b8381111562000526576000848401525b50505050565b600060028204905060018216806200054557607f821691505b602082108114156200055c576200055b62000562565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61463c80620005d06000396000f3fe6080604052600436106102045760003560e01c8063743976a011610118578063b187bd26116100a0578063db4568e21161006f578063db4568e214610758578063e640cf7d14610783578063e985e9c5146107ae578063f2fde38b146107eb578063fa62884c1461081457610204565b8063b187bd261461069c578063b88d4fde146106c7578063c87b56dd146106f0578063cd3293de1461072d57610204565b806391b7f5ed116100e757806391b7f5ed146105d857806395d89b4114610601578063a035b1fe1461062c578063a0712d6814610657578063a22cb4651461067357610204565b8063743976a01461051a57806375794a3c146105455780638462151c146105705780638da5cb5b146105ad57610204565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b3146104375780635e74b5b4146104605780636352211e1461048957806370a08231146104c6578063715018a61461050357610204565b80633ccfd60b1461039157806342842e0e146103a85780634f6ccce7146103d157806352174cea1461040e57610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd146103025780632f745c591461032b5780633b0aedab1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061325d565b61082b565b60405161023d9190613de1565b60405180910390f35b34801561025257600080fd5b5061025b6108a5565b6040516102689190613dfc565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906132f0565b610937565b6040516102a59190613d58565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613221565b6109bc565b005b3480156102e357600080fd5b506102ec610ad4565b6040516102f9919061413e565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061311b565b610ae1565b005b34801561033757600080fd5b50610352600480360381019061034d9190613221565b610b41565b60405161035f919061413e565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906132f0565b610be6565b005b34801561039d57600080fd5b506103a6610c6c565b005b3480156103b457600080fd5b506103cf60048036038101906103ca919061311b565b610d37565b005b3480156103dd57600080fd5b506103f860048036038101906103f391906132f0565b610d57565b604051610405919061413e565b60405180910390f35b34801561041a57600080fd5b50610435600480360381019061043091906132f0565b610dee565b005b34801561044357600080fd5b5061045e600480360381019061045991906132af565b610f0a565b005b34801561046c57600080fd5b5061048760048036038101906104829190613221565b610fa0565b005b34801561049557600080fd5b506104b060048036038101906104ab91906132f0565b6110bd565b6040516104bd9190613d58565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906130b6565b61116f565b6040516104fa919061413e565b60405180910390f35b34801561050f57600080fd5b50610518611227565b005b34801561052657600080fd5b5061052f61132c565b60405161053c9190613dfc565b60405180910390f35b34801561055157600080fd5b5061055a6113ba565b604051610567919061413e565b60405180910390f35b34801561057c57600080fd5b50610597600480360381019061059291906130b6565b6113c0565b6040516105a49190613dbf565b60405180910390f35b3480156105b957600080fd5b506105c26114ba565b6040516105cf9190613d58565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906132f0565b6114e4565b005b34801561060d57600080fd5b5061061661156a565b6040516106239190613dfc565b60405180910390f35b34801561063857600080fd5b506106416115fc565b60405161064e919061413e565b60405180910390f35b610671600480360381019061066c91906132f0565b611602565b005b34801561067f57600080fd5b5061069a600480360381019061069591906131e5565b611835565b005b3480156106a857600080fd5b506106b16119b6565b6040516106be9190613de1565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061316a565b6119c9565b005b3480156106fc57600080fd5b50610717600480360381019061071291906132f0565b611a2b565b6040516107249190613dfc565b60405180910390f35b34801561073957600080fd5b50610742611ad2565b60405161074f919061413e565b60405180910390f35b34801561076457600080fd5b5061076d611ad8565b60405161077a919061413e565b60405180910390f35b34801561078f57600080fd5b50610798611ade565b6040516107a5919061413e565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906130df565b611ae4565b6040516107e29190613de1565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d91906130b6565b611b78565b005b34801561082057600080fd5b50610829611c70565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089e575061089d82611d18565b5b9050919050565b6060600080546108b490614431565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090614431565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b600061094282611dfa565b610981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109789061403e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c7826110bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906140be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a57611e66565b73ffffffffffffffffffffffffffffffffffffffff161480610a865750610a8581610a80611e66565b611ae4565b5b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90613f3e565b60405180910390fd5b610acf8383611e6e565b505050565b6000600980549050905090565b610af2610aec611e66565b82611f27565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b28906140de565b60405180910390fd5b610b3c838383612005565b505050565b6000610b4c8361116f565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613e3e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bee611e66565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061405e565b60405180910390fd5b80600c8190555050565b610c74611e66565b73ffffffffffffffffffffffffffffffffffffffff16610c926114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf9061405e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d33573d6000803e3d6000fd5b5050565b610d52838383604051806020016040528060008152506119c9565b505050565b6000610d61610ad4565b8210610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d99906140fe565b60405180910390fd5b60098281548110610ddc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610df6611e66565b73ffffffffffffffffffffffffffffffffffffffff16610e146114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061405e565b60405180910390fd5b600f54811115610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613ebe565b60405180910390fd5b80600f6000828254610ec19190614347565b9250508190555060005b81811015610f0657610ef33360106000815480929190610eea90614463565b91905055612261565b8080610efe90614463565b915050610ecb565b5050565b610f12611e66565b73ffffffffffffffffffffffffffffffffffffffff16610f306114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061405e565b60405180910390fd5b8060069080519060200190610f9c929190612eda565b5050565b610fa8611e66565b73ffffffffffffffffffffffffffffffffffffffff16610fc66114ba565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110139061405e565b60405180910390fd5b600f54811115611061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105890613ebe565b60405180910390fd5b80600f60008282546110739190614347565b9250508190555060005b818110156110b8576110a5836010600081548092919061109c90614463565b91905055612261565b80806110b090614463565b91505061107d565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90613f7e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613f5e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122f611e66565b73ffffffffffffffffffffffffffffffffffffffff1661124d6114ba565b73ffffffffffffffffffffffffffffffffffffffff16146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361132a600061227f565b565b6006805461133990614431565b80601f016020809104026020016040519081016040528092919081815260200182805461136590614431565b80156113b25780601f10611387576101008083540402835291602001916113b2565b820191906000526020600020905b81548152906001019060200180831161139557829003601f168201915b505050505081565b60105481565b606060006113cd8361116f565b905060008167ffffffffffffffff811115611411577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561143f5781602001602082028036833780820191505090505b50905060005b828110156114af576114578582610b41565b828281518110611490577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806114a790614463565b915050611445565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ec611e66565b73ffffffffffffffffffffffffffffffffffffffff1661150a6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115579061405e565b60405180910390fd5b80600d8190555050565b60606001805461157990614431565b80601f01602080910402602001604051908101604052809291908181526020018280546115a590614431565b80156115f25780601f106115c7576101008083540402835291602001916115f2565b820191906000526020600020905b8154815290600101906020018083116115d557829003601f168201915b5050505050905090565b600d5481565b6103e761160d610ad4565b1061164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613ffe565b60405180910390fd5b60001515600e60009054906101000a900460ff161515146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a9061411e565b60405180910390fd5b600081116116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613e1e565b60405180910390fd5b600c5481111561172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061401e565b60405180910390fd5b6103e761175c600f548361173f9190614266565b600160105461174e9190614347565b61234590919063ffffffff16565b111561179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613fbe565b60405180910390fd5b346117b382600d5461235b90919063ffffffff16565b146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613f9e565b60405180910390fd5b60005b818110156118315761181e336010600081548092919061181590614463565b91905055612261565b808061182990614463565b9150506117f6565b5050565b61183d611e66565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613efe565b60405180910390fd5b80600560006118b8611e66565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611965611e66565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119aa9190613de1565b60405180910390a35050565b600e60009054906101000a900460ff1681565b6119da6119d4611e66565b83611f27565b611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906140de565b60405180910390fd5b611a2584848484612371565b50505050565b6060611a3682611dfa565b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061409e565b60405180910390fd5b6000611a7f6123cd565b90506000815111611a9f5760405180602001604052806000815250611aca565b80611aa98461245f565b604051602001611aba929190613d34565b6040516020818303038152906040525b915050919050565b600f5481565b6103e781565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b80611e66565b73ffffffffffffffffffffffffffffffffffffffff16611b9e6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b90613e7e565b60405180910390fd5b611c6d8161227f565b50565b611c78611e66565b73ffffffffffffffffffffffffffffffffffffffff16611c966114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce39061405e565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611de357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611df35750611df28261260c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ee1836110bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f3282611dfa565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613f1e565b60405180910390fd5b6000611f7c836110bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611feb57508373ffffffffffffffffffffffffffffffffffffffff16611fd384610937565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ffc5750611ffb8185611ae4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612025826110bd565b73ffffffffffffffffffffffffffffffffffffffff161461207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729061407e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613ede565b60405180910390fd5b6120f6838383612676565b612101600082611e6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121519190614347565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a89190614266565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61227b82826040518060200160405280600081525061278a565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123539190614266565b905092915050565b6000818361236991906142ed565b905092915050565b61237c848484612005565b612388848484846127e5565b6123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90613e5e565b60405180910390fd5b50505050565b6060600680546123dc90614431565b80601f016020809104026020016040519081016040528092919081815260200182805461240890614431565b80156124555780601f1061242a57610100808354040283529160200191612455565b820191906000526020600020905b81548152906001019060200180831161243857829003601f168201915b5050505050905090565b606060008214156124a7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612607565b600082905060005b600082146124d95780806124c290614463565b915050600a826124d291906142bc565b91506124af565b60008167ffffffffffffffff81111561251b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561254d5781602001600182028036833780820191505090505b5090505b60008514612600576001826125669190614347565b9150600a8561257591906144ac565b60306125819190614266565b60f81b8183815181106125bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f991906142bc565b9450612551565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268183838361297c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c4576126bf81612981565b612703565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127025761270183826129ca565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127465761274181612b37565b612785565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612784576127838282612c7a565b5b5b505050565b6127948383612cf9565b6127a160008484846127e5565b6127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d790613e5e565b60405180910390fd5b505050565b60006128068473ffffffffffffffffffffffffffffffffffffffff16612ec7565b1561296f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261282f611e66565b8786866040518563ffffffff1660e01b81526004016128519493929190613d73565b602060405180830381600087803b15801561286b57600080fd5b505af192505050801561289c57506040513d601f19601f820116820180604052508101906128999190613286565b60015b61291f573d80600081146128cc576040519150601f19603f3d011682016040523d82523d6000602084013e6128d1565b606091505b50600081511415612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90613e5e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612974565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d78461116f565b6129e19190614347565b9050600060086000848152602001908152602001600020549050818114612ac6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612b4b9190614347565b90506000600a6000848152602001908152602001600020549050600060098381548110612ba1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612be9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612c5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c858361116f565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090613fde565b60405180910390fd5b612d7281611dfa565b15612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990613e9e565b60405180910390fd5b612dbe60008383612676565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e0e9190614266565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ee690614431565b90600052602060002090601f016020900481019282612f085760008555612f4f565b82601f10612f2157805160ff1916838001178555612f4f565b82800160010185558215612f4f579182015b82811115612f4e578251825591602001919060010190612f33565b5b509050612f5c9190612f60565b5090565b5b80821115612f79576000816000905550600101612f61565b5090565b6000612f90612f8b8461418a565b614159565b905082815260208101848484011115612fa857600080fd5b612fb38482856143ef565b509392505050565b6000612fce612fc9846141ba565b614159565b905082815260208101848484011115612fe657600080fd5b612ff18482856143ef565b509392505050565b600081359050613008816145aa565b92915050565b60008135905061301d816145c1565b92915050565b600081359050613032816145d8565b92915050565b600081519050613047816145d8565b92915050565b600082601f83011261305e57600080fd5b813561306e848260208601612f7d565b91505092915050565b600082601f83011261308857600080fd5b8135613098848260208601612fbb565b91505092915050565b6000813590506130b0816145ef565b92915050565b6000602082840312156130c857600080fd5b60006130d684828501612ff9565b91505092915050565b600080604083850312156130f257600080fd5b600061310085828601612ff9565b925050602061311185828601612ff9565b9150509250929050565b60008060006060848603121561313057600080fd5b600061313e86828701612ff9565b935050602061314f86828701612ff9565b9250506040613160868287016130a1565b9150509250925092565b6000806000806080858703121561318057600080fd5b600061318e87828801612ff9565b945050602061319f87828801612ff9565b93505060406131b0878288016130a1565b925050606085013567ffffffffffffffff8111156131cd57600080fd5b6131d98782880161304d565b91505092959194509250565b600080604083850312156131f857600080fd5b600061320685828601612ff9565b92505060206132178582860161300e565b9150509250929050565b6000806040838503121561323457600080fd5b600061324285828601612ff9565b9250506020613253858286016130a1565b9150509250929050565b60006020828403121561326f57600080fd5b600061327d84828501613023565b91505092915050565b60006020828403121561329857600080fd5b60006132a684828501613038565b91505092915050565b6000602082840312156132c157600080fd5b600082013567ffffffffffffffff8111156132db57600080fd5b6132e784828501613077565b91505092915050565b60006020828403121561330257600080fd5b6000613310848285016130a1565b91505092915050565b60006133258383613d16565b60208301905092915050565b61333a8161437b565b82525050565b600061334b826141fa565b6133558185614228565b9350613360836141ea565b8060005b838110156133915781516133788882613319565b97506133838361421b565b925050600181019050613364565b5085935050505092915050565b6133a78161438d565b82525050565b60006133b882614205565b6133c28185614239565b93506133d28185602086016143fe565b6133db81614599565b840191505092915050565b60006133f182614210565b6133fb818561424a565b935061340b8185602086016143fe565b61341481614599565b840191505092915050565b600061342a82614210565b613434818561425b565b93506134448185602086016143fe565b80840191505092915050565b600061345d60338361424a565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b60006134c3602b8361424a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061352960328361424a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061358f60268361424a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f5601c8361424a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061363560218361424a565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061369b60248361424a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061370160198361424a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613741602c8361424a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006137a760388361424a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061380d602a8361424a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061387360298361424a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006138d9601d8361424a565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b600061391960208361424a565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b600061395960208361424a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061399960088361424a565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139d960218361424a565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a3f602c8361424a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613aa560208361424a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ae560298361424a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b4b602f8361424a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613bb160218361424a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c1760318361424a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613c7d602c8361424a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613ce360208361424a565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613d1f816143e5565b82525050565b613d2e816143e5565b82525050565b6000613d40828561341f565b9150613d4c828461341f565b91508190509392505050565b6000602082019050613d6d6000830184613331565b92915050565b6000608082019050613d886000830187613331565b613d956020830186613331565b613da26040830185613d25565b8181036060830152613db481846133ad565b905095945050505050565b60006020820190508181036000830152613dd98184613340565b905092915050565b6000602082019050613df6600083018461339e565b92915050565b60006020820190508181036000830152613e1681846133e6565b905092915050565b60006020820190508181036000830152613e3781613450565b9050919050565b60006020820190508181036000830152613e57816134b6565b9050919050565b60006020820190508181036000830152613e778161351c565b9050919050565b60006020820190508181036000830152613e9781613582565b9050919050565b60006020820190508181036000830152613eb7816135e8565b9050919050565b60006020820190508181036000830152613ed781613628565b9050919050565b60006020820190508181036000830152613ef78161368e565b9050919050565b60006020820190508181036000830152613f17816136f4565b9050919050565b60006020820190508181036000830152613f3781613734565b9050919050565b60006020820190508181036000830152613f578161379a565b9050919050565b60006020820190508181036000830152613f7781613800565b9050919050565b60006020820190508181036000830152613f9781613866565b9050919050565b60006020820190508181036000830152613fb7816138cc565b9050919050565b60006020820190508181036000830152613fd78161390c565b9050919050565b60006020820190508181036000830152613ff78161394c565b9050919050565b600060208201905081810360008301526140178161398c565b9050919050565b60006020820190508181036000830152614037816139cc565b9050919050565b6000602082019050818103600083015261405781613a32565b9050919050565b6000602082019050818103600083015261407781613a98565b9050919050565b6000602082019050818103600083015261409781613ad8565b9050919050565b600060208201905081810360008301526140b781613b3e565b9050919050565b600060208201905081810360008301526140d781613ba4565b9050919050565b600060208201905081810360008301526140f781613c0a565b9050919050565b6000602082019050818103600083015261411781613c70565b9050919050565b6000602082019050818103600083015261413781613cd6565b9050919050565b60006020820190506141536000830184613d25565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141805761417f61456a565b5b8060405250919050565b600067ffffffffffffffff8211156141a5576141a461456a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156141d5576141d461456a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614271826143e5565b915061427c836143e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142b1576142b06144dd565b5b828201905092915050565b60006142c7826143e5565b91506142d2836143e5565b9250826142e2576142e161450c565b5b828204905092915050565b60006142f8826143e5565b9150614303836143e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433c5761433b6144dd565b5b828202905092915050565b6000614352826143e5565b915061435d836143e5565b9250828210156143705761436f6144dd565b5b828203905092915050565b6000614386826143c5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561441c578082015181840152602081019050614401565b8381111561442b576000848401525b50505050565b6000600282049050600182168061444957607f821691505b6020821081141561445d5761445c61453b565b5b50919050565b600061446e826143e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144a1576144a06144dd565b5b600182019050919050565b60006144b7826143e5565b91506144c2836143e5565b9250826144d2576144d161450c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145b38161437b565b81146145be57600080fd5b50565b6145ca8161438d565b81146145d557600080fd5b50565b6145e181614399565b81146145ec57600080fd5b50565b6145f8816143e5565b811461460357600080fd5b5056fea2646970667358221220e13066524feabc2a199fc55e0ab3f607aba0b7abd01a2fb22d31f3c4ff733b0f64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063743976a011610118578063b187bd26116100a0578063db4568e21161006f578063db4568e214610758578063e640cf7d14610783578063e985e9c5146107ae578063f2fde38b146107eb578063fa62884c1461081457610204565b8063b187bd261461069c578063b88d4fde146106c7578063c87b56dd146106f0578063cd3293de1461072d57610204565b806391b7f5ed116100e757806391b7f5ed146105d857806395d89b4114610601578063a035b1fe1461062c578063a0712d6814610657578063a22cb4651461067357610204565b8063743976a01461051a57806375794a3c146105455780638462151c146105705780638da5cb5b146105ad57610204565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b3146104375780635e74b5b4146104605780636352211e1461048957806370a08231146104c6578063715018a61461050357610204565b80633ccfd60b1461039157806342842e0e146103a85780634f6ccce7146103d157806352174cea1461040e57610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd146103025780632f745c591461032b5780633b0aedab1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061325d565b61082b565b60405161023d9190613de1565b60405180910390f35b34801561025257600080fd5b5061025b6108a5565b6040516102689190613dfc565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906132f0565b610937565b6040516102a59190613d58565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613221565b6109bc565b005b3480156102e357600080fd5b506102ec610ad4565b6040516102f9919061413e565b60405180910390f35b34801561030e57600080fd5b506103296004803603810190610324919061311b565b610ae1565b005b34801561033757600080fd5b50610352600480360381019061034d9190613221565b610b41565b60405161035f919061413e565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906132f0565b610be6565b005b34801561039d57600080fd5b506103a6610c6c565b005b3480156103b457600080fd5b506103cf60048036038101906103ca919061311b565b610d37565b005b3480156103dd57600080fd5b506103f860048036038101906103f391906132f0565b610d57565b604051610405919061413e565b60405180910390f35b34801561041a57600080fd5b50610435600480360381019061043091906132f0565b610dee565b005b34801561044357600080fd5b5061045e600480360381019061045991906132af565b610f0a565b005b34801561046c57600080fd5b5061048760048036038101906104829190613221565b610fa0565b005b34801561049557600080fd5b506104b060048036038101906104ab91906132f0565b6110bd565b6040516104bd9190613d58565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906130b6565b61116f565b6040516104fa919061413e565b60405180910390f35b34801561050f57600080fd5b50610518611227565b005b34801561052657600080fd5b5061052f61132c565b60405161053c9190613dfc565b60405180910390f35b34801561055157600080fd5b5061055a6113ba565b604051610567919061413e565b60405180910390f35b34801561057c57600080fd5b50610597600480360381019061059291906130b6565b6113c0565b6040516105a49190613dbf565b60405180910390f35b3480156105b957600080fd5b506105c26114ba565b6040516105cf9190613d58565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906132f0565b6114e4565b005b34801561060d57600080fd5b5061061661156a565b6040516106239190613dfc565b60405180910390f35b34801561063857600080fd5b506106416115fc565b60405161064e919061413e565b60405180910390f35b610671600480360381019061066c91906132f0565b611602565b005b34801561067f57600080fd5b5061069a600480360381019061069591906131e5565b611835565b005b3480156106a857600080fd5b506106b16119b6565b6040516106be9190613de1565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e9919061316a565b6119c9565b005b3480156106fc57600080fd5b50610717600480360381019061071291906132f0565b611a2b565b6040516107249190613dfc565b60405180910390f35b34801561073957600080fd5b50610742611ad2565b60405161074f919061413e565b60405180910390f35b34801561076457600080fd5b5061076d611ad8565b60405161077a919061413e565b60405180910390f35b34801561078f57600080fd5b50610798611ade565b6040516107a5919061413e565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906130df565b611ae4565b6040516107e29190613de1565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d91906130b6565b611b78565b005b34801561082057600080fd5b50610829611c70565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089e575061089d82611d18565b5b9050919050565b6060600080546108b490614431565b80601f01602080910402602001604051908101604052809291908181526020018280546108e090614431565b801561092d5780601f106109025761010080835404028352916020019161092d565b820191906000526020600020905b81548152906001019060200180831161091057829003601f168201915b5050505050905090565b600061094282611dfa565b610981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109789061403e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c7826110bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906140be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a57611e66565b73ffffffffffffffffffffffffffffffffffffffff161480610a865750610a8581610a80611e66565b611ae4565b5b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90613f3e565b60405180910390fd5b610acf8383611e6e565b505050565b6000600980549050905090565b610af2610aec611e66565b82611f27565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b28906140de565b60405180910390fd5b610b3c838383612005565b505050565b6000610b4c8361116f565b8210610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613e3e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bee611e66565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061405e565b60405180910390fd5b80600c8190555050565b610c74611e66565b73ffffffffffffffffffffffffffffffffffffffff16610c926114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf9061405e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d33573d6000803e3d6000fd5b5050565b610d52838383604051806020016040528060008152506119c9565b505050565b6000610d61610ad4565b8210610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d99906140fe565b60405180910390fd5b60098281548110610ddc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610df6611e66565b73ffffffffffffffffffffffffffffffffffffffff16610e146114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061405e565b60405180910390fd5b600f54811115610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613ebe565b60405180910390fd5b80600f6000828254610ec19190614347565b9250508190555060005b81811015610f0657610ef33360106000815480929190610eea90614463565b91905055612261565b8080610efe90614463565b915050610ecb565b5050565b610f12611e66565b73ffffffffffffffffffffffffffffffffffffffff16610f306114ba565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061405e565b60405180910390fd5b8060069080519060200190610f9c929190612eda565b5050565b610fa8611e66565b73ffffffffffffffffffffffffffffffffffffffff16610fc66114ba565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110139061405e565b60405180910390fd5b600f54811115611061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105890613ebe565b60405180910390fd5b80600f60008282546110739190614347565b9250508190555060005b818110156110b8576110a5836010600081548092919061109c90614463565b91905055612261565b80806110b090614463565b91505061107d565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90613f7e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613f5e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122f611e66565b73ffffffffffffffffffffffffffffffffffffffff1661124d6114ba565b73ffffffffffffffffffffffffffffffffffffffff16146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361132a600061227f565b565b6006805461133990614431565b80601f016020809104026020016040519081016040528092919081815260200182805461136590614431565b80156113b25780601f10611387576101008083540402835291602001916113b2565b820191906000526020600020905b81548152906001019060200180831161139557829003601f168201915b505050505081565b60105481565b606060006113cd8361116f565b905060008167ffffffffffffffff811115611411577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561143f5781602001602082028036833780820191505090505b50905060005b828110156114af576114578582610b41565b828281518110611490577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806114a790614463565b915050611445565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ec611e66565b73ffffffffffffffffffffffffffffffffffffffff1661150a6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115579061405e565b60405180910390fd5b80600d8190555050565b60606001805461157990614431565b80601f01602080910402602001604051908101604052809291908181526020018280546115a590614431565b80156115f25780601f106115c7576101008083540402835291602001916115f2565b820191906000526020600020905b8154815290600101906020018083116115d557829003601f168201915b5050505050905090565b600d5481565b6103e761160d610ad4565b1061164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613ffe565b60405180910390fd5b60001515600e60009054906101000a900460ff161515146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a9061411e565b60405180910390fd5b600081116116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613e1e565b60405180910390fd5b600c5481111561172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061401e565b60405180910390fd5b6103e761175c600f548361173f9190614266565b600160105461174e9190614347565b61234590919063ffffffff16565b111561179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613fbe565b60405180910390fd5b346117b382600d5461235b90919063ffffffff16565b146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613f9e565b60405180910390fd5b60005b818110156118315761181e336010600081548092919061181590614463565b91905055612261565b808061182990614463565b9150506117f6565b5050565b61183d611e66565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613efe565b60405180910390fd5b80600560006118b8611e66565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611965611e66565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119aa9190613de1565b60405180910390a35050565b600e60009054906101000a900460ff1681565b6119da6119d4611e66565b83611f27565b611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906140de565b60405180910390fd5b611a2584848484612371565b50505050565b6060611a3682611dfa565b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061409e565b60405180910390fd5b6000611a7f6123cd565b90506000815111611a9f5760405180602001604052806000815250611aca565b80611aa98461245f565b604051602001611aba929190613d34565b6040516020818303038152906040525b915050919050565b600f5481565b6103e781565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b80611e66565b73ffffffffffffffffffffffffffffffffffffffff16611b9e6114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b90613e7e565b60405180910390fd5b611c6d8161227f565b50565b611c78611e66565b73ffffffffffffffffffffffffffffffffffffffff16611c966114ba565b73ffffffffffffffffffffffffffffffffffffffff1614611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce39061405e565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611de357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611df35750611df28261260c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ee1836110bd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f3282611dfa565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613f1e565b60405180910390fd5b6000611f7c836110bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611feb57508373ffffffffffffffffffffffffffffffffffffffff16611fd384610937565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ffc5750611ffb8185611ae4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612025826110bd565b73ffffffffffffffffffffffffffffffffffffffff161461207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729061407e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613ede565b60405180910390fd5b6120f6838383612676565b612101600082611e6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121519190614347565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a89190614266565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61227b82826040518060200160405280600081525061278a565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123539190614266565b905092915050565b6000818361236991906142ed565b905092915050565b61237c848484612005565b612388848484846127e5565b6123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90613e5e565b60405180910390fd5b50505050565b6060600680546123dc90614431565b80601f016020809104026020016040519081016040528092919081815260200182805461240890614431565b80156124555780601f1061242a57610100808354040283529160200191612455565b820191906000526020600020905b81548152906001019060200180831161243857829003601f168201915b5050505050905090565b606060008214156124a7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612607565b600082905060005b600082146124d95780806124c290614463565b915050600a826124d291906142bc565b91506124af565b60008167ffffffffffffffff81111561251b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561254d5781602001600182028036833780820191505090505b5090505b60008514612600576001826125669190614347565b9150600a8561257591906144ac565b60306125819190614266565b60f81b8183815181106125bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f991906142bc565b9450612551565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268183838361297c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c4576126bf81612981565b612703565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127025761270183826129ca565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127465761274181612b37565b612785565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612784576127838282612c7a565b5b5b505050565b6127948383612cf9565b6127a160008484846127e5565b6127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d790613e5e565b60405180910390fd5b505050565b60006128068473ffffffffffffffffffffffffffffffffffffffff16612ec7565b1561296f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261282f611e66565b8786866040518563ffffffff1660e01b81526004016128519493929190613d73565b602060405180830381600087803b15801561286b57600080fd5b505af192505050801561289c57506040513d601f19601f820116820180604052508101906128999190613286565b60015b61291f573d80600081146128cc576040519150601f19603f3d011682016040523d82523d6000602084013e6128d1565b606091505b50600081511415612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90613e5e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612974565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d78461116f565b6129e19190614347565b9050600060086000848152602001908152602001600020549050818114612ac6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612b4b9190614347565b90506000600a6000848152602001908152602001600020549050600060098381548110612ba1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612be9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612c5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c858361116f565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090613fde565b60405180910390fd5b612d7281611dfa565b15612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990613e9e565b60405180910390fd5b612dbe60008383612676565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e0e9190614266565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ee690614431565b90600052602060002090601f016020900481019282612f085760008555612f4f565b82601f10612f2157805160ff1916838001178555612f4f565b82800160010185558215612f4f579182015b82811115612f4e578251825591602001919060010190612f33565b5b509050612f5c9190612f60565b5090565b5b80821115612f79576000816000905550600101612f61565b5090565b6000612f90612f8b8461418a565b614159565b905082815260208101848484011115612fa857600080fd5b612fb38482856143ef565b509392505050565b6000612fce612fc9846141ba565b614159565b905082815260208101848484011115612fe657600080fd5b612ff18482856143ef565b509392505050565b600081359050613008816145aa565b92915050565b60008135905061301d816145c1565b92915050565b600081359050613032816145d8565b92915050565b600081519050613047816145d8565b92915050565b600082601f83011261305e57600080fd5b813561306e848260208601612f7d565b91505092915050565b600082601f83011261308857600080fd5b8135613098848260208601612fbb565b91505092915050565b6000813590506130b0816145ef565b92915050565b6000602082840312156130c857600080fd5b60006130d684828501612ff9565b91505092915050565b600080604083850312156130f257600080fd5b600061310085828601612ff9565b925050602061311185828601612ff9565b9150509250929050565b60008060006060848603121561313057600080fd5b600061313e86828701612ff9565b935050602061314f86828701612ff9565b9250506040613160868287016130a1565b9150509250925092565b6000806000806080858703121561318057600080fd5b600061318e87828801612ff9565b945050602061319f87828801612ff9565b93505060406131b0878288016130a1565b925050606085013567ffffffffffffffff8111156131cd57600080fd5b6131d98782880161304d565b91505092959194509250565b600080604083850312156131f857600080fd5b600061320685828601612ff9565b92505060206132178582860161300e565b9150509250929050565b6000806040838503121561323457600080fd5b600061324285828601612ff9565b9250506020613253858286016130a1565b9150509250929050565b60006020828403121561326f57600080fd5b600061327d84828501613023565b91505092915050565b60006020828403121561329857600080fd5b60006132a684828501613038565b91505092915050565b6000602082840312156132c157600080fd5b600082013567ffffffffffffffff8111156132db57600080fd5b6132e784828501613077565b91505092915050565b60006020828403121561330257600080fd5b6000613310848285016130a1565b91505092915050565b60006133258383613d16565b60208301905092915050565b61333a8161437b565b82525050565b600061334b826141fa565b6133558185614228565b9350613360836141ea565b8060005b838110156133915781516133788882613319565b97506133838361421b565b925050600181019050613364565b5085935050505092915050565b6133a78161438d565b82525050565b60006133b882614205565b6133c28185614239565b93506133d28185602086016143fe565b6133db81614599565b840191505092915050565b60006133f182614210565b6133fb818561424a565b935061340b8185602086016143fe565b61341481614599565b840191505092915050565b600061342a82614210565b613434818561425b565b93506134448185602086016143fe565b80840191505092915050565b600061345d60338361424a565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b60006134c3602b8361424a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061352960328361424a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061358f60268361424a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135f5601c8361424a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061363560218361424a565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061369b60248361424a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061370160198361424a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613741602c8361424a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006137a760388361424a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061380d602a8361424a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061387360298361424a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006138d9601d8361424a565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b600061391960208361424a565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b600061395960208361424a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061399960088361424a565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139d960218361424a565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a3f602c8361424a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613aa560208361424a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ae560298361424a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b4b602f8361424a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613bb160218361424a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c1760318361424a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613c7d602c8361424a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613ce360208361424a565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613d1f816143e5565b82525050565b613d2e816143e5565b82525050565b6000613d40828561341f565b9150613d4c828461341f565b91508190509392505050565b6000602082019050613d6d6000830184613331565b92915050565b6000608082019050613d886000830187613331565b613d956020830186613331565b613da26040830185613d25565b8181036060830152613db481846133ad565b905095945050505050565b60006020820190508181036000830152613dd98184613340565b905092915050565b6000602082019050613df6600083018461339e565b92915050565b60006020820190508181036000830152613e1681846133e6565b905092915050565b60006020820190508181036000830152613e3781613450565b9050919050565b60006020820190508181036000830152613e57816134b6565b9050919050565b60006020820190508181036000830152613e778161351c565b9050919050565b60006020820190508181036000830152613e9781613582565b9050919050565b60006020820190508181036000830152613eb7816135e8565b9050919050565b60006020820190508181036000830152613ed781613628565b9050919050565b60006020820190508181036000830152613ef78161368e565b9050919050565b60006020820190508181036000830152613f17816136f4565b9050919050565b60006020820190508181036000830152613f3781613734565b9050919050565b60006020820190508181036000830152613f578161379a565b9050919050565b60006020820190508181036000830152613f7781613800565b9050919050565b60006020820190508181036000830152613f9781613866565b9050919050565b60006020820190508181036000830152613fb7816138cc565b9050919050565b60006020820190508181036000830152613fd78161390c565b9050919050565b60006020820190508181036000830152613ff78161394c565b9050919050565b600060208201905081810360008301526140178161398c565b9050919050565b60006020820190508181036000830152614037816139cc565b9050919050565b6000602082019050818103600083015261405781613a32565b9050919050565b6000602082019050818103600083015261407781613a98565b9050919050565b6000602082019050818103600083015261409781613ad8565b9050919050565b600060208201905081810360008301526140b781613b3e565b9050919050565b600060208201905081810360008301526140d781613ba4565b9050919050565b600060208201905081810360008301526140f781613c0a565b9050919050565b6000602082019050818103600083015261411781613c70565b9050919050565b6000602082019050818103600083015261413781613cd6565b9050919050565b60006020820190506141536000830184613d25565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141805761417f61456a565b5b8060405250919050565b600067ffffffffffffffff8211156141a5576141a461456a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156141d5576141d461456a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614271826143e5565b915061427c836143e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142b1576142b06144dd565b5b828201905092915050565b60006142c7826143e5565b91506142d2836143e5565b9250826142e2576142e161450c565b5b828204905092915050565b60006142f8826143e5565b9150614303836143e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433c5761433b6144dd565b5b828202905092915050565b6000614352826143e5565b915061435d836143e5565b9250828210156143705761436f6144dd565b5b828203905092915050565b6000614386826143c5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561441c578082015181840152602081019050614401565b8381111561442b576000848401525b50505050565b6000600282049050600182168061444957607f821691505b6020821081141561445d5761445c61453b565b5b50919050565b600061446e826143e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144a1576144a06144dd565b5b600182019050919050565b60006144b7826143e5565b91506144c2836143e5565b9250826144d2576144d161450c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145b38161437b565b81146145be57600080fd5b50565b6145ca8161438d565b81146145d557600080fd5b50565b6145e181614399565b81146145ec57600080fd5b50565b6145f8816143e5565b811461460357600080fd5b5056fea2646970667358221220e13066524feabc2a199fc55e0ab3f607aba0b7abd01a2fb22d31f3c4ff733b0f64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49175:2765:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43000:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30982:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32536:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43640:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43308:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49881:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51797:140;;;;;;;;;;;;;:::i;:::-;;33836:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43830:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49988:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49678:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50280:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30676:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30406:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28067:150;;;;;;;;;;;;;:::i;:::-;;29704:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49534:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51438:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49783:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31151:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49410:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50797:632;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32829:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49469:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34092:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31326:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49503:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49329:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49375:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50706:83;;;;;;;;;;;;;:::i;:::-;;43000:224;43102:4;43141:35;43126:50;;;:11;:50;;;;:90;;;;43180:36;43204:11;43180:23;:36::i;:::-;43126:90;43119:97;;43000:224;;;:::o;30982:100::-;31036:13;31069:5;31062:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30982:100;:::o;32536:221::-;32612:7;32640:16;32648:7;32640;:16::i;:::-;32632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32725:15;:24;32741:7;32725:24;;;;;;;;;;;;;;;;;;;;;32718:31;;32536:221;;;:::o;32059:411::-;32140:13;32156:23;32171:7;32156:14;:23::i;:::-;32140:39;;32204:5;32198:11;;:2;:11;;;;32190:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:5;32282:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32307:37;32324:5;32331:12;:10;:12::i;:::-;32307:16;:37::i;:::-;32282:62;32260:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32441:21;32450:2;32454:7;32441:8;:21::i;:::-;32059:411;;;:::o;43640:113::-;43701:7;43728:10;:17;;;;43721:24;;43640:113;:::o;33426:339::-;33621:41;33640:12;:10;:12::i;:::-;33654:7;33621:18;:41::i;:::-;33613:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33729:28;33739:4;33745:2;33749:7;33729:9;:28::i;:::-;33426:339;;;:::o;43308:256::-;43405:7;43441:23;43458:5;43441:16;:23::i;:::-;43433:5;:31;43425:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43530:12;:19;43543:5;43530:19;;;;;;;;;;;;;;;:26;43550:5;43530:26;;;;;;;;;;;;43523:33;;43308:256;;;;:::o;49881:99::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49963:9:::1;49951:11;:21;;;;49881:99:::0;:::o;51797:140::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51845:12:::1;51860:21;51845:36;;51900:10;51892:28;;:37;51921:7;51892:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27707:1;51797:140::o:0;33836:185::-;33974:39;33991:4;33997:2;34001:7;33974:39;;;;;;;;;;;;:16;:39::i;:::-;33836:185;;;:::o;43830:233::-;43905:7;43941:30;:28;:30::i;:::-;43933:5;:38;43925:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44038:10;44049:5;44038:17;;;;;;;;;;;;;;;;;;;;;;;;44031:24;;43830:233;;;:::o;49988:284::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50080:7:::1;;50068:8;:19;;50060:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50147:8;50136:7;;:19;;;;;;;:::i;:::-;;;;;;;;50171:6;50166:99;50187:8;50183:1;:12;50166:99;;;50217:36;50227:10;50239:11;;:13;;;;;;;;;:::i;:::-;;;;;50217:9;:36::i;:::-;50197:3;;;;;:::i;:::-;;;;50166:99;;;;49988:284:::0;:::o;49678:97::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49760:7:::1;49749:8;:18;;;;;;;;;;;;:::i;:::-;;49678:97:::0;:::o;50280:311::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50396:7:::1;;50384:8;:19;;50376:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50463:8;50452:7;;:19;;;;;;;:::i;:::-;;;;;;;;50487:6;50482:102;50503:8;50499:1;:12;50482:102;;;50533:39;50543:13;50558:11;;:13;;;;;;;;;:::i;:::-;;;;;50533:9;:39::i;:::-;50513:3;;;;;:::i;:::-;;;;50482:102;;;;50280:311:::0;;:::o;30676:239::-;30748:7;30768:13;30784:7;:16;30792:7;30784:16;;;;;;;;;;;;;;;;;;;;;30768:32;;30836:1;30819:19;;:5;:19;;;;30811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:5;30895:12;;;30676:239;;;:::o;30406:208::-;30478:7;30523:1;30506:19;;:5;:19;;;;30498:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30590:9;:16;30600:5;30590:16;;;;;;;;;;;;;;;;30583:23;;30406:208;;;:::o;28067:150::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28174:1:::1;28137:40;;28158:6;;;;;;;;;;;28137:40;;;;;;;;;;;;28188:21;28206:1;28188:9;:21::i;:::-;28067:150::o:0;29704:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49534:28::-;;;;:::o;51438:351::-;51498:16;51532:13;51548:17;51558:6;51548:9;:17::i;:::-;51532:33;;51576:23;51616:5;51602:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51576:46;;51638:13;51633:125;51665:5;51657;:13;51633:125;;;51712:34;51732:6;51740:5;51712:19;:34::i;:::-;51696:6;51703:5;51696:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;51672:7;;;;;:::i;:::-;;;;51633:125;;;;51775:6;51768:13;;;;51438:351;;;:::o;27416:87::-;27462:7;27489:6;;;;;;;;;;;27482:13;;27416:87;:::o;49783:92::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49858:9:::1;49850:5;:17;;;;49783:92:::0;:::o;31151:104::-;31207:13;31240:7;31233:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31151:104;:::o;49410:40::-;;;;:::o;50797:632::-;49365:3;50639:13;:11;:13::i;:::-;:28;50631:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50886:5:::1;50874:17;;:8;;;;;;;;;;;:17;;;50866:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50962:1;50947:12;:16;50939:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51054:11;;51038:12;:27;;51030:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49365:3;51121:43;51156:7;;51141:12;:22;;;;:::i;:::-;51134:1;51122:11;;:13;;;;:::i;:::-;51121:19;;:43;;;;:::i;:::-;:59;;51113:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;51263:9;51236:23;51246:12;51236:5;;:9;;:23;;;;:::i;:::-;:36;51228:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51324:6;51319:103;51340:12;51336:1;:16;51319:103;;;51374:36;51384:10;51396:11;;:13;;;;;;;;;:::i;:::-;;;;;51374:9;:36::i;:::-;51354:3;;;;;:::i;:::-;;;;51319:103;;;;50797:632:::0;:::o;32829:295::-;32944:12;:10;:12::i;:::-;32932:24;;:8;:24;;;;32924:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33044:8;32999:18;:32;33018:12;:10;:12::i;:::-;32999:32;;;;;;;;;;;;;;;:42;33032:8;32999:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33097:8;33068:48;;33083:12;:10;:12::i;:::-;33068:48;;;33107:8;33068:48;;;;;;:::i;:::-;;;;;;;;32829:295;;:::o;49469:27::-;;;;;;;;;;;;;:::o;34092:328::-;34267:41;34286:12;:10;:12::i;:::-;34300:7;34267:18;:41::i;:::-;34259:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34373:39;34387:4;34393:2;34397:7;34406:5;34373:13;:39::i;:::-;34092:328;;;;:::o;31326:324::-;31399:13;31433:16;31441:7;31433;:16::i;:::-;31425:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:18;31535:9;:7;:9::i;:::-;31514:30;;31583:1;31568:4;31562:18;:22;:80;;;;;;;;;;;;;;;;;31611:4;31617:18;:7;:16;:18::i;:::-;31594:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31562:80;31555:87;;;31326:324;;;:::o;49503:24::-;;;;:::o;49329:39::-;49365:3;49329:39;:::o;49375:28::-;;;;:::o;33195:164::-;33292:4;33316:18;:25;33335:5;33316:25;;;;;;;;;;;;;;;:35;33342:8;33316:35;;;;;;;;;;;;;;;;;;;;;;;;;33309:42;;33195:164;;;;:::o;28372:192::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28481:1:::1;28461:22;;:8;:22;;;;28453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28537:19;28547:8;28537:9;:19::i;:::-;28372:192:::0;:::o;50706:83::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50773:8:::1;;;;;;;;;;;50772:9;50761:8;;:20;;;;;;;;;;;;;;;;;;50706:83::o:0;30037:305::-;30139:4;30191:25;30176:40;;;:11;:40;;;;:105;;;;30248:33;30233:48;;;:11;:48;;;;30176:105;:158;;;;30298:36;30322:11;30298:23;:36::i;:::-;30176:158;30156:178;;30037:305;;;:::o;35930:127::-;35995:4;36047:1;36019:30;;:7;:16;36027:7;36019:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36012:37;;35930:127;;;:::o;26167:98::-;26220:7;26247:10;26240:17;;26167:98;:::o;39912:174::-;40014:2;39987:15;:24;40003:7;39987:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40070:7;40066:2;40032:46;;40041:23;40056:7;40041:14;:23::i;:::-;40032:46;;;;;;;;;;;;39912:174;;:::o;36224:348::-;36317:4;36342:16;36350:7;36342;:16::i;:::-;36334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36418:13;36434:23;36449:7;36434:14;:23::i;:::-;36418:39;;36487:5;36476:16;;:7;:16;;;:51;;;;36520:7;36496:31;;:20;36508:7;36496:11;:20::i;:::-;:31;;;36476:51;:87;;;;36531:32;36548:5;36555:7;36531:16;:32::i;:::-;36476:87;36468:96;;;36224:348;;;;:::o;39216:578::-;39375:4;39348:31;;:23;39363:7;39348:14;:23::i;:::-;:31;;;39340:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39458:1;39444:16;;:2;:16;;;;39436:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39514:39;39535:4;39541:2;39545:7;39514:20;:39::i;:::-;39618:29;39635:1;39639:7;39618:8;:29::i;:::-;39679:1;39660:9;:15;39670:4;39660:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39708:1;39691:9;:13;39701:2;39691:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39739:2;39720:7;:16;39728:7;39720:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39778:7;39774:2;39759:27;;39768:4;39759:27;;;;;;;;;;;;39216:578;;;:::o;36914:110::-;36990:26;37000:2;37004:7;36990:26;;;;;;;;;;;;:9;:26::i;:::-;36914:110;;:::o;28572:173::-;28628:16;28647:6;;;;;;;;;;;28628:25;;28673:8;28664:6;;:17;;;;;;;;;;;;;;;;;;28728:8;28697:40;;28718:8;28697:40;;;;;;;;;;;;28572:173;;:::o;2763:98::-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;3501:::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;35302:315::-;35459:28;35469:4;35475:2;35479:7;35459:9;:28::i;:::-;35506:48;35529:4;35535:2;35539:7;35548:5;35506:22;:48::i;:::-;35498:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35302:315;;;;:::o;31898:99::-;31948:13;31981:8;31974:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31898:99;:::o;7181:723::-;7237:13;7467:1;7458:5;:10;7454:53;;;7485:10;;;;;;;;;;;;;;;;;;;;;7454:53;7517:12;7532:5;7517:20;;7548:14;7573:78;7588:1;7580:4;:9;7573:78;;7606:8;;;;;:::i;:::-;;;;7637:2;7629:10;;;;;:::i;:::-;;;7573:78;;;7661:19;7693:6;7683:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:39;;7711:154;7727:1;7718:5;:10;7711:154;;7755:1;7745:11;;;;;:::i;:::-;;;7822:2;7814:5;:10;;;;:::i;:::-;7801:2;:24;;;;:::i;:::-;7788:39;;7771:6;7778;7771:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7851:2;7842:11;;;;;:::i;:::-;;;7711:154;;;7889:6;7875:21;;;;;7181:723;;;;:::o;19153:157::-;19238:4;19277:25;19262:40;;;:11;:40;;;;19255:47;;19153:157;;;:::o;44676:589::-;44820:45;44847:4;44853:2;44857:7;44820:26;:45::i;:::-;44898:1;44882:18;;:4;:18;;;44878:187;;;44917:40;44949:7;44917:31;:40::i;:::-;44878:187;;;44987:2;44979:10;;:4;:10;;;44975:90;;45006:47;45039:4;45045:7;45006:32;:47::i;:::-;44975:90;44878:187;45093:1;45079:16;;:2;:16;;;45075:183;;;45112:45;45149:7;45112:36;:45::i;:::-;45075:183;;;45185:4;45179:10;;:2;:10;;;45175:83;;45206:40;45234:2;45238:7;45206:27;:40::i;:::-;45175:83;45075:183;44676:589;;;:::o;37251:321::-;37381:18;37387:2;37391:7;37381:5;:18::i;:::-;37432:54;37463:1;37467:2;37471:7;37480:5;37432:22;:54::i;:::-;37410:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37251:321;;;:::o;40651:803::-;40806:4;40827:15;:2;:13;;;:15::i;:::-;40823:624;;;40879:2;40863:36;;;40900:12;:10;:12::i;:::-;40914:4;40920:7;40929:5;40863:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40859:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41126:1;41109:6;:13;:18;41105:272;;;41152:60;;;;;;;;;;:::i;:::-;;;;;;;;41105:272;41327:6;41321:13;41312:6;41308:2;41304:15;41297:38;40859:533;40996:45;;;40986:55;;;:6;:55;;;;40979:62;;;;;40823:624;41431:4;41424:11;;40651:803;;;;;;;:::o;42026:126::-;;;;:::o;45988:164::-;46092:10;:17;;;;46065:15;:24;46081:7;46065:24;;;;;;;;;;;:44;;;;46120:10;46136:7;46120:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45988:164;:::o;46779:988::-;47045:22;47095:1;47070:22;47087:4;47070:16;:22::i;:::-;:26;;;;:::i;:::-;47045:51;;47107:18;47128:17;:26;47146:7;47128:26;;;;;;;;;;;;47107:47;;47275:14;47261:10;:28;47257:328;;47306:19;47328:12;:18;47341:4;47328:18;;;;;;;;;;;;;;;:34;47347:14;47328:34;;;;;;;;;;;;47306:56;;47412:11;47379:12;:18;47392:4;47379:18;;;;;;;;;;;;;;;:30;47398:10;47379:30;;;;;;;;;;;:44;;;;47529:10;47496:17;:30;47514:11;47496:30;;;;;;;;;;;:43;;;;47257:328;;47681:17;:26;47699:7;47681:26;;;;;;;;;;;47674:33;;;47725:12;:18;47738:4;47725:18;;;;;;;;;;;;;;;:34;47744:14;47725:34;;;;;;;;;;;47718:41;;;46779:988;;;;:::o;48062:1079::-;48315:22;48360:1;48340:10;:17;;;;:21;;;;:::i;:::-;48315:46;;48372:18;48393:15;:24;48409:7;48393:24;;;;;;;;;;;;48372:45;;48744:19;48766:10;48777:14;48766:26;;;;;;;;;;;;;;;;;;;;;;;;48744:48;;48830:11;48805:10;48816;48805:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48941:10;48910:15;:28;48926:11;48910:28;;;;;;;;;;;:41;;;;49082:15;:24;49098:7;49082:24;;;;;;;;;;;49075:31;;;49117:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48062:1079;;;;:::o;45566:221::-;45651:14;45668:20;45685:2;45668:16;:20::i;:::-;45651:37;;45726:7;45699:12;:16;45712:2;45699:16;;;;;;;;;;;;;;;:24;45716:6;45699:24;;;;;;;;;;;:34;;;;45773:6;45744:17;:26;45762:7;45744:26;;;;;;;;;;;:35;;;;45566:221;;;:::o;37908:382::-;38002:1;37988:16;;:2;:16;;;;37980:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38061:16;38069:7;38061;:16::i;:::-;38060:17;38052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38123:45;38152:1;38156:2;38160:7;38123:20;:45::i;:::-;38198:1;38181:9;:13;38191:2;38181:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38229:2;38210:7;:16;38218:7;38210:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38274:7;38270:2;38249:33;;38266:1;38249:33;;;;;;;;;;;;37908:382;;:::o;9648:387::-;9708:4;9916:12;9983:7;9971:20;9963:28;;10026:1;10019:4;:8;10012:15;;;9648:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:179::-;;6174:46;6216:3;6208:6;6174:46;:::i;:::-;6252:4;6247:3;6243:14;6229:28;;6164:99;;;;:::o;6269:118::-;6356:24;6374:5;6356:24;:::i;:::-;6351:3;6344:37;6334:53;;:::o;6423:732::-;;6571:54;6619:5;6571:54;:::i;:::-;6641:86;6720:6;6715:3;6641:86;:::i;:::-;6634:93;;6751:56;6801:5;6751:56;:::i;:::-;6830:7;6861:1;6846:284;6871:6;6868:1;6865:13;6846:284;;;6947:6;6941:13;6974:63;7033:3;7018:13;6974:63;:::i;:::-;6967:70;;7060:60;7113:6;7060:60;:::i;:::-;7050:70;;6906:224;6893:1;6890;6886:9;6881:14;;6846:284;;;6850:14;7146:3;7139:10;;6547:608;;;;;;;:::o;7161:109::-;7242:21;7257:5;7242:21;:::i;:::-;7237:3;7230:34;7220:50;;:::o;7276:360::-;;7390:38;7422:5;7390:38;:::i;:::-;7444:70;7507:6;7502:3;7444:70;:::i;:::-;7437:77;;7523:52;7568:6;7563:3;7556:4;7549:5;7545:16;7523:52;:::i;:::-;7600:29;7622:6;7600:29;:::i;:::-;7595:3;7591:39;7584:46;;7366:270;;;;;:::o;7642:364::-;;7758:39;7791:5;7758:39;:::i;:::-;7813:71;7877:6;7872:3;7813:71;:::i;:::-;7806:78;;7893:52;7938:6;7933:3;7926:4;7919:5;7915:16;7893:52;:::i;:::-;7970:29;7992:6;7970:29;:::i;:::-;7965:3;7961:39;7954:46;;7734:272;;;;;:::o;8012:377::-;;8146:39;8179:5;8146:39;:::i;:::-;8201:89;8283:6;8278:3;8201:89;:::i;:::-;8194:96;;8299:52;8344:6;8339:3;8332:4;8325:5;8321:16;8299:52;:::i;:::-;8376:6;8371:3;8367:16;8360:23;;8122:267;;;;;:::o;8395:383::-;;8558:67;8622:2;8617:3;8558:67;:::i;:::-;8551:74;;8655:34;8651:1;8646:3;8642:11;8635:55;8721:21;8716:2;8711:3;8707:12;8700:43;8769:2;8764:3;8760:12;8753:19;;8541:237;;;:::o;8784:375::-;;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9044:34;9040:1;9035:3;9031:11;9024:55;9110:13;9105:2;9100:3;9096:12;9089:35;9150:2;9145:3;9141:12;9134:19;;8930:229;;;:::o;9165:382::-;;9328:67;9392:2;9387:3;9328:67;:::i;:::-;9321:74;;9425:34;9421:1;9416:3;9412:11;9405:55;9491:20;9486:2;9481:3;9477:12;9470:42;9538:2;9533:3;9529:12;9522:19;;9311:236;;;:::o;9553:370::-;;9716:67;9780:2;9775:3;9716:67;:::i;:::-;9709:74;;9813:34;9809:1;9804:3;9800:11;9793:55;9879:8;9874:2;9869:3;9865:12;9858:30;9914:2;9909:3;9905:12;9898:19;;9699:224;;;:::o;9929:326::-;;10092:67;10156:2;10151:3;10092:67;:::i;:::-;10085:74;;10189:30;10185:1;10180:3;10176:11;10169:51;10246:2;10241:3;10237:12;10230:19;;10075:180;;;:::o;10261:365::-;;10424:67;10488:2;10483:3;10424:67;:::i;:::-;10417:74;;10521:34;10517:1;10512:3;10508:11;10501:55;10587:3;10582:2;10577:3;10573:12;10566:25;10617:2;10612:3;10608:12;10601:19;;10407:219;;;:::o;10632:368::-;;10795:67;10859:2;10854:3;10795:67;:::i;:::-;10788:74;;10892:34;10888:1;10883:3;10879:11;10872:55;10958:6;10953:2;10948:3;10944:12;10937:28;10991:2;10986:3;10982:12;10975:19;;10778:222;;;:::o;11006:323::-;;11169:67;11233:2;11228:3;11169:67;:::i;:::-;11162:74;;11266:27;11262:1;11257:3;11253:11;11246:48;11320:2;11315:3;11311:12;11304:19;;11152:177;;;:::o;11335:376::-;;11498:67;11562:2;11557:3;11498:67;:::i;:::-;11491:74;;11595:34;11591:1;11586:3;11582:11;11575:55;11661:14;11656:2;11651:3;11647:12;11640:36;11702:2;11697:3;11693:12;11686:19;;11481:230;;;:::o;11717:388::-;;11880:67;11944:2;11939:3;11880:67;:::i;:::-;11873:74;;11977:34;11973:1;11968:3;11964:11;11957:55;12043:26;12038:2;12033:3;12029:12;12022:48;12096:2;12091:3;12087:12;12080:19;;11863:242;;;:::o;12111:374::-;;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12371:34;12367:1;12362:3;12358:11;12351:55;12437:12;12432:2;12427:3;12423:12;12416:34;12476:2;12471:3;12467:12;12460:19;;12257:228;;;:::o;12491:373::-;;12654:67;12718:2;12713:3;12654:67;:::i;:::-;12647:74;;12751:34;12747:1;12742:3;12738:11;12731:55;12817:11;12812:2;12807:3;12803:12;12796:33;12855:2;12850:3;12846:12;12839:19;;12637:227;;;:::o;12870:327::-;;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13130:31;13126:1;13121:3;13117:11;13110:52;13188:2;13183:3;13179:12;13172:19;;13016:181;;;:::o;13203:330::-;;13366:67;13430:2;13425:3;13366:67;:::i;:::-;13359:74;;13463:34;13459:1;13454:3;13450:11;13443:55;13524:2;13519:3;13515:12;13508:19;;13349:184;;;:::o;13539:330::-;;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13799:34;13795:1;13790:3;13786:11;13779:55;13860:2;13855:3;13851:12;13844:19;;13685:184;;;:::o;13875:305::-;;14038:66;14102:1;14097:3;14038:66;:::i;:::-;14031:73;;14134:10;14130:1;14125:3;14121:11;14114:31;14171:2;14166:3;14162:12;14155:19;;14021:159;;;:::o;14186:365::-;;14349:67;14413:2;14408:3;14349:67;:::i;:::-;14342:74;;14446:34;14442:1;14437:3;14433:11;14426:55;14512:3;14507:2;14502:3;14498:12;14491:25;14542:2;14537:3;14533:12;14526:19;;14332:219;;;:::o;14557:376::-;;14720:67;14784:2;14779:3;14720:67;:::i;:::-;14713:74;;14817:34;14813:1;14808:3;14804:11;14797:55;14883:14;14878:2;14873:3;14869:12;14862:36;14924:2;14919:3;14915:12;14908:19;;14703:230;;;:::o;14939:330::-;;15102:67;15166:2;15161:3;15102:67;:::i;:::-;15095:74;;15199:34;15195:1;15190:3;15186:11;15179:55;15260:2;15255:3;15251:12;15244:19;;15085:184;;;:::o;15275:373::-;;15438:67;15502:2;15497:3;15438:67;:::i;:::-;15431:74;;15535:34;15531:1;15526:3;15522:11;15515:55;15601:11;15596:2;15591:3;15587:12;15580:33;15639:2;15634:3;15630:12;15623:19;;15421:227;;;:::o;15654:379::-;;15817:67;15881:2;15876:3;15817:67;:::i;:::-;15810:74;;15914:34;15910:1;15905:3;15901:11;15894:55;15980:17;15975:2;15970:3;15966:12;15959:39;16024:2;16019:3;16015:12;16008:19;;15800:233;;;:::o;16039:365::-;;16202:67;16266:2;16261:3;16202:67;:::i;:::-;16195:74;;16299:34;16295:1;16290:3;16286:11;16279:55;16365:3;16360:2;16355:3;16351:12;16344:25;16395:2;16390:3;16386:12;16379:19;;16185:219;;;:::o;16410:381::-;;16573:67;16637:2;16632:3;16573:67;:::i;:::-;16566:74;;16670:34;16666:1;16661:3;16657:11;16650:55;16736:19;16731:2;16726:3;16722:12;16715:41;16782:2;16777:3;16773:12;16766:19;;16556:235;;;:::o;16797:376::-;;16960:67;17024:2;17019:3;16960:67;:::i;:::-;16953:74;;17057:34;17053:1;17048:3;17044:11;17037:55;17123:14;17118:2;17113:3;17109:12;17102:36;17164:2;17159:3;17155:12;17148:19;;16943:230;;;:::o;17179:330::-;;17342:67;17406:2;17401:3;17342:67;:::i;:::-;17335:74;;17439:34;17435:1;17430:3;17426:11;17419:55;17500:2;17495:3;17491:12;17484:19;;17325:184;;;:::o;17515:108::-;17592:24;17610:5;17592:24;:::i;:::-;17587:3;17580:37;17570:53;;:::o;17629:118::-;17716:24;17734:5;17716:24;:::i;:::-;17711:3;17704:37;17694:53;;:::o;17753:435::-;;17955:95;18046:3;18037:6;17955:95;:::i;:::-;17948:102;;18067:95;18158:3;18149:6;18067:95;:::i;:::-;18060:102;;18179:3;18172:10;;17937:251;;;;;:::o;18194:222::-;;18325:2;18314:9;18310:18;18302:26;;18338:71;18406:1;18395:9;18391:17;18382:6;18338:71;:::i;:::-;18292:124;;;;:::o;18422:640::-;;18655:3;18644:9;18640:19;18632:27;;18669:71;18737:1;18726:9;18722:17;18713:6;18669:71;:::i;:::-;18750:72;18818:2;18807:9;18803:18;18794:6;18750:72;:::i;:::-;18832;18900:2;18889:9;18885:18;18876:6;18832:72;:::i;:::-;18951:9;18945:4;18941:20;18936:2;18925:9;18921:18;18914:48;18979:76;19050:4;19041:6;18979:76;:::i;:::-;18971:84;;18622:440;;;;;;;:::o;19068:373::-;;19249:2;19238:9;19234:18;19226:26;;19298:9;19292:4;19288:20;19284:1;19273:9;19269:17;19262:47;19326:108;19429:4;19420:6;19326:108;:::i;:::-;19318:116;;19216:225;;;;:::o;19447:210::-;;19572:2;19561:9;19557:18;19549:26;;19585:65;19647:1;19636:9;19632:17;19623:6;19585:65;:::i;:::-;19539:118;;;;:::o;19663:313::-;;19814:2;19803:9;19799:18;19791:26;;19863:9;19857:4;19853:20;19849:1;19838:9;19834:17;19827:47;19891:78;19964:4;19955:6;19891:78;:::i;:::-;19883:86;;19781:195;;;;:::o;19982:419::-;;20186:2;20175:9;20171:18;20163:26;;20235:9;20229:4;20225:20;20221:1;20210:9;20206:17;20199:47;20263:131;20389:4;20263:131;:::i;:::-;20255:139;;20153:248;;;:::o;20407:419::-;;20611:2;20600:9;20596:18;20588:26;;20660:9;20654:4;20650:20;20646:1;20635:9;20631:17;20624:47;20688:131;20814:4;20688:131;:::i;:::-;20680:139;;20578:248;;;:::o;20832:419::-;;21036:2;21025:9;21021:18;21013:26;;21085:9;21079:4;21075:20;21071:1;21060:9;21056:17;21049:47;21113:131;21239:4;21113:131;:::i;:::-;21105:139;;21003:248;;;:::o;21257:419::-;;21461:2;21450:9;21446:18;21438:26;;21510:9;21504:4;21500:20;21496:1;21485:9;21481:17;21474:47;21538:131;21664:4;21538:131;:::i;:::-;21530:139;;21428:248;;;:::o;21682:419::-;;21886:2;21875:9;21871:18;21863:26;;21935:9;21929:4;21925:20;21921:1;21910:9;21906:17;21899:47;21963:131;22089:4;21963:131;:::i;:::-;21955:139;;21853:248;;;:::o;22107:419::-;;22311:2;22300:9;22296:18;22288:26;;22360:9;22354:4;22350:20;22346:1;22335:9;22331:17;22324:47;22388:131;22514:4;22388:131;:::i;:::-;22380:139;;22278:248;;;:::o;22532:419::-;;22736:2;22725:9;22721:18;22713:26;;22785:9;22779:4;22775:20;22771:1;22760:9;22756:17;22749:47;22813:131;22939:4;22813:131;:::i;:::-;22805:139;;22703:248;;;:::o;22957:419::-;;23161:2;23150:9;23146:18;23138:26;;23210:9;23204:4;23200:20;23196:1;23185:9;23181:17;23174:47;23238:131;23364:4;23238:131;:::i;:::-;23230:139;;23128:248;;;:::o;23382:419::-;;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23553:248;;;:::o;23807:419::-;;24011:2;24000:9;23996:18;23988:26;;24060:9;24054:4;24050:20;24046:1;24035:9;24031:17;24024:47;24088:131;24214:4;24088:131;:::i;:::-;24080:139;;23978:248;;;:::o;24232:419::-;;24436:2;24425:9;24421:18;24413:26;;24485:9;24479:4;24475:20;24471:1;24460:9;24456:17;24449:47;24513:131;24639:4;24513:131;:::i;:::-;24505:139;;24403:248;;;:::o;24657:419::-;;24861:2;24850:9;24846:18;24838:26;;24910:9;24904:4;24900:20;24896:1;24885:9;24881:17;24874:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24828:248;;;:::o;25082:419::-;;25286:2;25275:9;25271:18;25263:26;;25335:9;25329:4;25325:20;25321:1;25310:9;25306:17;25299:47;25363:131;25489:4;25363:131;:::i;:::-;25355:139;;25253:248;;;:::o;25507:419::-;;25711:2;25700:9;25696:18;25688:26;;25760:9;25754:4;25750:20;25746:1;25735:9;25731:17;25724:47;25788:131;25914:4;25788:131;:::i;:::-;25780:139;;25678:248;;;:::o;25932:419::-;;26136:2;26125:9;26121:18;26113:26;;26185:9;26179:4;26175:20;26171:1;26160:9;26156:17;26149:47;26213:131;26339:4;26213:131;:::i;:::-;26205:139;;26103:248;;;:::o;26357:419::-;;26561:2;26550:9;26546:18;26538:26;;26610:9;26604:4;26600:20;26596:1;26585:9;26581:17;26574:47;26638:131;26764:4;26638:131;:::i;:::-;26630:139;;26528:248;;;:::o;26782:419::-;;26986:2;26975:9;26971:18;26963:26;;27035:9;27029:4;27025:20;27021:1;27010:9;27006:17;26999:47;27063:131;27189:4;27063:131;:::i;:::-;27055:139;;26953:248;;;:::o;27207:419::-;;27411:2;27400:9;27396:18;27388:26;;27460:9;27454:4;27450:20;27446:1;27435:9;27431:17;27424:47;27488:131;27614:4;27488:131;:::i;:::-;27480:139;;27378:248;;;:::o;27632:419::-;;27836:2;27825:9;27821:18;27813:26;;27885:9;27879:4;27875:20;27871:1;27860:9;27856:17;27849:47;27913:131;28039:4;27913:131;:::i;:::-;27905:139;;27803:248;;;:::o;28057:419::-;;28261:2;28250:9;28246:18;28238:26;;28310:9;28304:4;28300:20;28296:1;28285:9;28281:17;28274:47;28338:131;28464:4;28338:131;:::i;:::-;28330:139;;28228:248;;;:::o;28482:419::-;;28686:2;28675:9;28671:18;28663:26;;28735:9;28729:4;28725:20;28721:1;28710:9;28706:17;28699:47;28763:131;28889:4;28763:131;:::i;:::-;28755:139;;28653:248;;;:::o;28907:419::-;;29111:2;29100:9;29096:18;29088:26;;29160:9;29154:4;29150:20;29146:1;29135:9;29131:17;29124:47;29188:131;29314:4;29188:131;:::i;:::-;29180:139;;29078:248;;;:::o;29332:419::-;;29536:2;29525:9;29521:18;29513:26;;29585:9;29579:4;29575:20;29571:1;29560:9;29556:17;29549:47;29613:131;29739:4;29613:131;:::i;:::-;29605:139;;29503:248;;;:::o;29757:419::-;;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29928:248;;;:::o;30182:419::-;;30386:2;30375:9;30371:18;30363:26;;30435:9;30429:4;30425:20;30421:1;30410:9;30406:17;30399:47;30463:131;30589:4;30463:131;:::i;:::-;30455:139;;30353:248;;;:::o;30607:222::-;;30738:2;30727:9;30723:18;30715:26;;30751:71;30819:1;30808:9;30804:17;30795:6;30751:71;:::i;:::-;30705:124;;;;:::o;30835:283::-;;30901:2;30895:9;30885:19;;30943:4;30935:6;30931:17;31050:6;31038:10;31035:22;31014:18;31002:10;30999:34;30996:62;30993:2;;;31061:18;;:::i;:::-;30993:2;31101:10;31097:2;31090:22;30875:243;;;;:::o;31124:331::-;;31275:18;31267:6;31264:30;31261:2;;;31297:18;;:::i;:::-;31261:2;31382:4;31378:9;31371:4;31363:6;31359:17;31355:33;31347:41;;31443:4;31437;31433:15;31425:23;;31190:265;;;:::o;31461:332::-;;31613:18;31605:6;31602:30;31599:2;;;31635:18;;:::i;:::-;31599:2;31720:4;31716:9;31709:4;31701:6;31697:17;31693:33;31685:41;;31781:4;31775;31771:15;31763:23;;31528:265;;;:::o;31799:132::-;;31889:3;31881:11;;31919:4;31914:3;31910:14;31902:22;;31871:60;;;:::o;31937:114::-;;32038:5;32032:12;32022:22;;32011:40;;;:::o;32057:98::-;;32142:5;32136:12;32126:22;;32115:40;;;:::o;32161:99::-;;32247:5;32241:12;32231:22;;32220:40;;;:::o;32266:113::-;;32368:4;32363:3;32359:14;32351:22;;32341:38;;;:::o;32385:184::-;;32518:6;32513:3;32506:19;32558:4;32553:3;32549:14;32534:29;;32496:73;;;;:::o;32575:168::-;;32692:6;32687:3;32680:19;32732:4;32727:3;32723:14;32708:29;;32670:73;;;;:::o;32749:169::-;;32867:6;32862:3;32855:19;32907:4;32902:3;32898:14;32883:29;;32845:73;;;;:::o;32924:148::-;;33063:3;33048:18;;33038:34;;;;:::o;33078:305::-;;33137:20;33155:1;33137:20;:::i;:::-;33132:25;;33171:20;33189:1;33171:20;:::i;:::-;33166:25;;33325:1;33257:66;33253:74;33250:1;33247:81;33244:2;;;33331:18;;:::i;:::-;33244:2;33375:1;33372;33368:9;33361:16;;33122:261;;;;:::o;33389:185::-;;33446:20;33464:1;33446:20;:::i;:::-;33441:25;;33480:20;33498:1;33480:20;:::i;:::-;33475:25;;33519:1;33509:2;;33524:18;;:::i;:::-;33509:2;33566:1;33563;33559:9;33554:14;;33431:143;;;;:::o;33580:348::-;;33643:20;33661:1;33643:20;:::i;:::-;33638:25;;33677:20;33695:1;33677:20;:::i;:::-;33672:25;;33865:1;33797:66;33793:74;33790:1;33787:81;33782:1;33775:9;33768:17;33764:105;33761:2;;;33872:18;;:::i;:::-;33761:2;33920:1;33917;33913:9;33902:20;;33628:300;;;;:::o;33934:191::-;;33994:20;34012:1;33994:20;:::i;:::-;33989:25;;34028:20;34046:1;34028:20;:::i;:::-;34023:25;;34067:1;34064;34061:8;34058:2;;;34072:18;;:::i;:::-;34058:2;34117:1;34114;34110:9;34102:17;;33979:146;;;;:::o;34131:96::-;;34197:24;34215:5;34197:24;:::i;:::-;34186:35;;34176:51;;;:::o;34233:90::-;;34310:5;34303:13;34296:21;34285:32;;34275:48;;;:::o;34329:149::-;;34405:66;34398:5;34394:78;34383:89;;34373:105;;;:::o;34484:126::-;;34561:42;34554:5;34550:54;34539:65;;34529:81;;;:::o;34616:77::-;;34682:5;34671:16;;34661:32;;;:::o;34699:154::-;34783:6;34778:3;34773;34760:30;34845:1;34836:6;34831:3;34827:16;34820:27;34750:103;;;:::o;34859:307::-;34927:1;34937:113;34951:6;34948:1;34945:13;34937:113;;;35036:1;35031:3;35027:11;35021:18;35017:1;35012:3;35008:11;35001:39;34973:2;34970:1;34966:10;34961:15;;34937:113;;;35068:6;35065:1;35062:13;35059:2;;;35148:1;35139:6;35134:3;35130:16;35123:27;35059:2;34908:258;;;;:::o;35172:320::-;;35253:1;35247:4;35243:12;35233:22;;35300:1;35294:4;35290:12;35321:18;35311:2;;35377:4;35369:6;35365:17;35355:27;;35311:2;35439;35431:6;35428:14;35408:18;35405:38;35402:2;;;35458:18;;:::i;:::-;35402:2;35223:269;;;;:::o;35498:233::-;;35560:24;35578:5;35560:24;:::i;:::-;35551:33;;35606:66;35599:5;35596:77;35593:2;;;35676:18;;:::i;:::-;35593:2;35723:1;35716:5;35712:13;35705:20;;35541:190;;;:::o;35737:176::-;;35786:20;35804:1;35786:20;:::i;:::-;35781:25;;35820:20;35838:1;35820:20;:::i;:::-;35815:25;;35859:1;35849:2;;35864:18;;:::i;:::-;35849:2;35905:1;35902;35898:9;35893:14;;35771:142;;;;:::o;35919:180::-;35967:77;35964:1;35957:88;36064:4;36061:1;36054:15;36088:4;36085:1;36078:15;36105:180;36153:77;36150:1;36143:88;36250:4;36247:1;36240:15;36274:4;36271:1;36264:15;36291:180;36339:77;36336:1;36329:88;36436:4;36433:1;36426:15;36460:4;36457:1;36450:15;36477:180;36525:77;36522:1;36515:88;36622:4;36619:1;36612:15;36646:4;36643:1;36636:15;36663:102;;36755:2;36751:7;36746:2;36739:5;36735:14;36731:28;36721:38;;36711:54;;;:::o;36771:122::-;36844:24;36862:5;36844:24;:::i;:::-;36837:5;36834:35;36824:2;;36883:1;36880;36873:12;36824:2;36814:79;:::o;36899:116::-;36969:21;36984:5;36969:21;:::i;:::-;36962:5;36959:32;36949:2;;37005:1;37002;36995:12;36949:2;36939:76;:::o;37021:120::-;37093:23;37110:5;37093:23;:::i;:::-;37086:5;37083:34;37073:2;;37131:1;37128;37121:12;37073:2;37063:78;:::o;37147:122::-;37220:24;37238:5;37220:24;:::i;:::-;37213:5;37210:35;37200:2;;37259:1;37256;37249:12;37200:2;37190:79;:::o
Swarm Source
ipfs://e13066524feabc2a199fc55e0ab3f607aba0b7abd01a2fb22d31f3c4ff733b0f
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.