ERC-721
NFT
Overview
Max Total Supply
1,092 CheYuWuXNobody
Holders
496
Market
Volume (24H)
0.0021 ETH
Min Price (24H)
$5.28 @ 0.002100 ETH
Max Price (24H)
$5.28 @ 0.002100 ETH
Other Info
Token Contract
Balance
8 CheYuWuXNobodyLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CheYuWuXNobody
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-10 */ //import "node_modules\@openzeppelin\contracts\utils\Counters.sol"; pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: node_modules\@openzeppelin\contracts\utils\math\SafeMath.sol"; pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: node_modules\@openzeppelin\contracts\utils\Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin\contracts\access\Ownable.sol 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() { _setOwner(_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 { _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); } } // File: node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol 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); } // File: node_modules\@openzeppelin\contracts\token\ERC721\IERC721.sol 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; } // File: node_modules\@openzeppelin\contracts\token\ERC721\IERC721Receiver.sol 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); } // File: node_modules\@openzeppelin\contracts\token\ERC721\extensions\IERC721Metadata.sol 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); } // File: node_modules\@openzeppelin\contracts\utils\Address.sol 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: node_modules\@openzeppelin\contracts\utils\Strings.sol 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); } } // File: node_modules\@openzeppelin\contracts\utils\introspection\ERC165.sol 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; } } // File: @openzeppelin\contracts\token\ERC721\ERC721.sol 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; /** * @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 baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, 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 ""; } /** * @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.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 {} } // File: contracts\CheYuWuXNobody.sol // SPDX-License-Identifier: UNLICENSED // // // __ \ / // / |_ _ --- Y | | |\| _ |_ _ _| \/ // \__| |(/_ | |_| |^||_| >< | |(_)|_)(_)(_| / // // // .----. // / \ // --{}-- \ / // `----' // _--- -[ ]- ---_ // / ¸ ¸ ¸ \ // ¸ ¦| |¦ // 0 ¦| [ X ] ( •}|¦ O º±_ // ¦| ¨¨¨|¦ ”\\ // ~~~~\ =# # # #= / ~~~~ // ~~~~~ --- -- -- ---¯ ~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; contract CheYuWuXNobody is ERC721, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; uint public maxNobody = 1092; uint public maxNobodyPerPurchase = 10; uint256 public price = 109000000000000000; //0.109 bool public isSaleActive = false; bool public isPreSaleActive = false; bool public isClaimActive = true; string public baseURI; Counters.Counter private _tokenIds; address public c1 = 0x7ddD43C63aa73CDE4c5aa6b5De5D9681882D88f8; address public c2 = 0xB60D52448A5C76c87853C011bB4b8EC3114A3277; mapping(address => uint256) claimAllowance; mapping(address => uint256) presaleAllowance; constructor (uint _maxNobody, uint _maxNobodyPerPurchase ) ERC721("CheYuWuXNobody", "CheYuWuXNobody") { maxNobody = _maxNobody; maxNobodyPerPurchase = _maxNobodyPerPurchase; _minttokens(c1, 1); _minttokens(c2, 1); } function totalSupply() public view returns (uint256) { return _tokenIds.current(); } function claimmint(uint256 _count ) public{ require(isClaimActive, "Sale is not active!" ); require(isClaim(msg.sender,_count), "Insufficient reserved tokens for your address"); require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!"); _minttokens(msg.sender, _count); claimAllowance[msg.sender] -= _count; } function presalemint(uint256 _count ) public payable { require(isPreSaleActive, "Sale is not active!" ); require(isWhitelisted(msg.sender,_count), "Insufficient reserved tokens for your address"); require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!"); require(msg.value >= price.mul(_count), "Ether value sent is not correct!"); _minttokens(msg.sender, _count); presaleAllowance[msg.sender] -= _count; } function mint(uint256 _count ) public payable { require(isSaleActive, "Sale is not active!" ); require(_count > 0 && _count <= maxNobodyPerPurchase, 'Max is 10 at a time'); require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!"); require(msg.value >= price.mul(_count), "Ether value sent is not correct!"); _minttokens(msg.sender, _count); } function _minttokens(address _to, uint256 _count ) internal { for (uint256 i = 0; i < _count; i++) { uint256 newItemId = _tokenIds.current(); _tokenIds.increment(); _safeMint(_to, newItemId); } } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } //whitelist function setWhitelistAllowance(address _to, uint256 _allowance) public onlyOwner { presaleAllowance[_to] = _allowance; } function setWhitelistAllowances(address[] memory _to, uint256[] memory _allowance) public onlyOwner { for (uint256 i = 0; i < _to.length; i++) { presaleAllowance[_to[i]] = _allowance[i]; } } function getWhitelistAllowance(address _to) public view returns (uint256) { return presaleAllowance[_to]; } function isWhitelisted(address _account, uint256 _count) public view returns (bool) { return presaleAllowance[_account] >= _count; } //claim function setClaimAllowance(address _to, uint256 _allowance) public onlyOwner { claimAllowance[_to] = _allowance; } function setClaimAllowances(address[] memory _to, uint256[] memory _allowance) public onlyOwner { for (uint256 i = 0; i < _to.length; i++) { claimAllowance[_to[i]] = _allowance[i]; } } function getClaimAllowance(address _to) public view returns (uint256) { return claimAllowance[_to]; } function isClaim(address _account, uint256 _count) public view returns (bool) { return claimAllowance[_account] >= _count; } //owner only function flipSaleState() public onlyOwner { isSaleActive = !isSaleActive; } function flipPreSaleState() public onlyOwner { isPreSaleActive = !isPreSaleActive; } function flipClaimState() public onlyOwner { isClaimActive = !isClaimActive; } function setPrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxsupply(uint256 _newmaxNobody) public onlyOwner { maxNobody = _newmaxNobody; } function reserveTokens(address[] memory _to, uint256 _count) public onlyOwner { require(totalSupply().add(_count) <= maxNobody, "Sorry too many nobody!"); for (uint256 i = 0; i < _to.length; i++) { _minttokens(_to[i],_count); } } function withdraw() public onlyOwner { uint256 balance = address(this).balance; uint256 _f1Amt = balance.mul(50).div(100); uint256 _f2Amt = balance.mul(50).div(100); require(payable(c1).send(_f1Amt)); require(payable(c2).send(_f2Amt)); } function airdrop(address[] memory _to, uint256 _count ) public onlyOwner { for (uint256 i = 0; i < _to.length; i++) { _minttokens(_to[i], _count); } } fallback() external payable { require(msg.value > 0, "Insufficient input balance (0)"); } receive() external payable { require(msg.value > 0, "Insufficient input balance (0)"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_maxNobody","type":"uint256"},{"internalType":"uint256","name":"_maxNobodyPerPurchase","type":"uint256"}],"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"c1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"c2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"claimmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipClaimState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","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":"_to","type":"address"}],"name":"getClaimAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getWhitelistAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"isClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isClaimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNobody","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNobodyPerPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"presalemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_allowance","type":"uint256"}],"name":"setClaimAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_allowance","type":"uint256[]"}],"name":"setClaimAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxNobody","type":"uint256"}],"name":"setMaxsupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_allowance","type":"uint256"}],"name":"setWhitelistAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_allowance","type":"uint256[]"}],"name":"setWhitelistAllowances","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052610444600755600a6008556701833eec288480006009556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550737ddd43c63aa73cde4c5aa6b5de5d9681882d88f8600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b60d52448a5c76c87853c011bb4b8ec3114a3277600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012357600080fd5b50604051620059ec380380620059ec8339818101604052810190620001499190620009a9565b6040518060400160405280600e81526020017f43686559755775584e6f626f64790000000000000000000000000000000000008152506040518060400160405280600e81526020017f43686559755775584e6f626f64790000000000000000000000000000000000008152508160009080519060200190620001cd9291906200089f565b508060019080519060200190620001e69291906200089f565b50505062000209620001fd6200028960201b60201c565b6200029160201b60201c565b81600781905550806008819055506200024c600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200035760201b60201c565b62000281600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200035760201b60201c565b505062000e44565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015620003be5760006200037c600c620003c360201b620027b61760201c565b905062000395600c620003d160201b620027c41760201c565b620003a78482620003e760201b60201c565b508080620003b59062000d53565b9150506200035a565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b620004098282604051806020016040528060008152506200040d60201b60201c565b5050565b6200041f83836200047b60201b60201c565b6200043460008484846200066160201b60201c565b62000476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046d9062000b8d565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e59062000bd1565b60405180910390fd5b620004ff816200081b60201b60201c565b1562000542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005399062000baf565b60405180910390fd5b62000556600083836200088760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005a8919062000c20565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200068f8473ffffffffffffffffffffffffffffffffffffffff166200088c60201b620027da1760201c565b156200080e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006c16200028960201b60201c565b8786866040518563ffffffff1660e01b8152600401620006e5949392919062000b39565b602060405180830381600087803b1580156200070057600080fd5b505af19250505080156200073457506040513d601f19601f820116820180604052508101906200073191906200097d565b60015b620007bd573d806000811462000767576040519150601f19603f3d011682016040523d82523d6000602084013e6200076c565b606091505b50600081511415620007b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ac9062000b8d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000813565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620008ad9062000d1d565b90600052602060002090601f016020900481019282620008d157600085556200091d565b82601f10620008ec57805160ff19168380011785556200091d565b828001600101855582156200091d579182015b828111156200091c578251825591602001919060010190620008ff565b5b5090506200092c919062000930565b5090565b5b808211156200094b57600081600090555060010162000931565b5090565b600081519050620009608162000e10565b92915050565b600081519050620009778162000e2a565b92915050565b6000602082840312156200099057600080fd5b6000620009a0848285016200094f565b91505092915050565b60008060408385031215620009bd57600080fd5b6000620009cd8582860162000966565b9250506020620009e08582860162000966565b9150509250929050565b620009f58162000c7d565b82525050565b600062000a088262000bf3565b62000a14818562000bfe565b935062000a2681856020860162000ce7565b62000a318162000dff565b840191505092915050565b600062000a4b60328362000c0f565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062000ab3601c8362000c0f565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062000af560208362000c0f565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b62000b338162000cdd565b82525050565b600060808201905062000b506000830187620009ea565b62000b5f6020830186620009ea565b62000b6e604083018562000b28565b818103606083015262000b828184620009fb565b905095945050505050565b6000602082019050818103600083015262000ba88162000a3c565b9050919050565b6000602082019050818103600083015262000bca8162000aa4565b9050919050565b6000602082019050818103600083015262000bec8162000ae6565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000c2d8262000cdd565b915062000c3a8362000cdd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c725762000c7162000da1565b5b828201905092915050565b600062000c8a8262000cbd565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000d0757808201518184015260208101905062000cea565b8381111562000d17576000848401525b50505050565b6000600282049050600182168062000d3657607f821691505b6020821081141562000d4d5762000d4c62000dd0565b5b50919050565b600062000d608262000cdd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000d965762000d9562000da1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62000e1b8162000c91565b811462000e2757600080fd5b50565b62000e358162000cdd565b811462000e4157600080fd5b50565b614b988062000e546000396000f3fe6080604052600436106102815760003560e01c80637b2178621161014f578063a22cb465116100c1578063e985e9c51161007a578063e985e9c5146109ef578063f032554914610a2c578063f13d791414610a43578063f27dac4214610a6c578063f2fde38b14610a97578063ff2e666c14610ac0576102cb565b8063a22cb465146108cf578063b88d4fde146108f8578063c204642c14610921578063c598e7f21461094a578063c87b56dd14610975578063e83bf0ed146109b2576102cb565b806391b7f5ed1161011357806391b7f5ed146107e057806395d89b411461080957806399f8cf3a146108345780639d044ed31461085d578063a035b1fe14610888578063a0712d68146108b3576102cb565b80637b217862146106fb5780637fc2780314610724578063830639ac1461074f5780638a5cee001461078c5780638da5cb5b146107b5576102cb565b806348e257cb116101f35780635f57697c116101ac5780635f57697c146105fd5780636352211e146106285780636c0360eb146106655780636d60e6c11461069057806370a08231146106a7578063715018a6146106e4576102cb565b806348e257cb146104ef5780634dab7d241461051a57806353e5c0371461055757806355f804b314610580578063564566a8146105a9578063572d64a5146105d4576102cb565b806318160ddd1161024557806318160ddd1461040757806323b872dd1461043257806334918dfd1461045b5780633ccfd60b146104725780633f16e0de1461048957806342842e0e146104c6576102cb565b806301ffc9a71461031057806306fdde031461034d578063081812fc14610378578063095ea7b3146103b5578063149835a0146103de576102cb565b366102cb57600034116102c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c09061443b565b60405180910390fd5b005b6000341161030e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103059061443b565b60405180910390fd5b005b34801561031c57600080fd5b50610337600480360381019061033291906139f9565b610adc565b604051610344919061437e565b60405180910390f35b34801561035957600080fd5b50610362610bbe565b60405161036f9190614399565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613a8c565b610c50565b6040516103ac9190614317565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906138fd565b610cd5565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613a8c565b610ded565b005b34801561041357600080fd5b5061041c610e73565b604051610429919061467b565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906137f7565b610e84565b005b34801561046757600080fd5b50610470610ee4565b005b34801561047e57600080fd5b50610487610f8c565b005b34801561049557600080fd5b506104b060048036038101906104ab9190613792565b611128565b6040516104bd919061467b565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906137f7565b611171565b005b3480156104fb57600080fd5b50610504611191565b6040516105119190614317565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613792565b6111b7565b60405161054e919061467b565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906138fd565b611200565b005b34801561058c57600080fd5b506105a760048036038101906105a29190613a4b565b6112c4565b005b3480156105b557600080fd5b506105be61135a565b6040516105cb919061437e565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613a8c565b61136d565b005b34801561060957600080fd5b506106126114c6565b60405161061f9190614317565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613a8c565b6114ec565b60405161065c9190614317565b60405180910390f35b34801561067157600080fd5b5061067a61159e565b6040516106879190614399565b60405180910390f35b34801561069c57600080fd5b506106a561162c565b005b3480156106b357600080fd5b506106ce60048036038101906106c99190613792565b6116d4565b6040516106db919061467b565b60405180910390f35b3480156106f057600080fd5b506106f961178c565b005b34801561070757600080fd5b50610722600480360381019061071d9190613939565b611814565b005b34801561073057600080fd5b50610739611978565b604051610746919061437e565b60405180910390f35b34801561075b57600080fd5b50610776600480360381019061077191906138fd565b61198b565b604051610783919061437e565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190613939565b6119d8565b005b3480156107c157600080fd5b506107ca611b3c565b6040516107d79190614317565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613a8c565b611b66565b005b34801561081557600080fd5b5061081e611bec565b60405161082b9190614399565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906139a5565b611c7e565b005b34801561086957600080fd5b50610872611dc6565b60405161087f919061437e565b60405180910390f35b34801561089457600080fd5b5061089d611dd9565b6040516108aa919061467b565b60405180910390f35b6108cd60048036038101906108c89190613a8c565b611ddf565b005b3480156108db57600080fd5b506108f660048036038101906108f191906138c1565b611f41565b005b34801561090457600080fd5b5061091f600480360381019061091a9190613846565b6120c2565b005b34801561092d57600080fd5b50610948600480360381019061094391906139a5565b612124565b005b34801561095657600080fd5b5061095f61220e565b60405161096c919061467b565b60405180910390f35b34801561098157600080fd5b5061099c60048036038101906109979190613a8c565b612214565b6040516109a99190614399565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d491906138fd565b6122bb565b6040516109e6919061437e565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a1191906137bb565b612308565b604051610a23919061437e565b60405180910390f35b348015610a3857600080fd5b50610a4161239c565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a6591906138fd565b612444565b005b348015610a7857600080fd5b50610a81612508565b604051610a8e919061467b565b60405180910390f35b348015610aa357600080fd5b50610abe6004803603810190610ab99190613792565b61250e565b005b610ada6004803603810190610ad59190613a8c565b612606565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb75750610bb6826127ed565b5b9050919050565b606060008054610bcd9061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf99061498d565b8015610c465780601f10610c1b57610100808354040283529160200191610c46565b820191906000526020600020905b815481529060010190602001808311610c2957829003601f168201915b5050505050905090565b6000610c5b82612857565b610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c919061459b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ce0826114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061463b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d706128c3565b73ffffffffffffffffffffffffffffffffffffffff161480610d9f5750610d9e81610d996128c3565b612308565b5b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906144db565b60405180910390fd5b610de883836128cb565b505050565b610df56128c3565b73ffffffffffffffffffffffffffffffffffffffff16610e13611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906145bb565b60405180910390fd5b8060078190555050565b6000610e7f600c6127b6565b905090565b610e95610e8f6128c3565b82612984565b610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb9061465b565b60405180910390fd5b610edf838383612a62565b505050565b610eec6128c3565b73ffffffffffffffffffffffffffffffffffffffff16610f0a611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906145bb565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610f946128c3565b73ffffffffffffffffffffffffffffffffffffffff16610fb2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906145bb565b60405180910390fd5b600047905060006110366064611028603285612cbe90919063ffffffff16565b612cd490919063ffffffff16565b905060006110616064611053603286612cbe90919063ffffffff16565b612cd490919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506110c357600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061112357600080fd5b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118c838383604051806020016040528060008152506120c2565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112086128c3565b73ffffffffffffffffffffffffffffffffffffffff16611226611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906145bb565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6112cc6128c3565b73ffffffffffffffffffffffffffffffffffffffff166112ea611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611337906145bb565b60405180910390fd5b80600b908051906020019061135692919061348a565b5050565b600a60009054906101000a900460ff1681565b600a60029054906101000a900460ff166113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b39061461b565b60405180910390fd5b6113c633826122bb565b611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc9061457b565b60405180910390fd5b60075461142282611414610e73565b612cea90919063ffffffff16565b1115611463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145a9061449b565b60405180910390fd5b61146d3382612d00565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114bc91906148a3565b9250508190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c9061451b565b60405180910390fd5b80915050919050565b600b80546115ab9061498d565b80601f01602080910402602001604051908101604052809291908181526020018280546115d79061498d565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050505081565b6116346128c3565b73ffffffffffffffffffffffffffffffffffffffff16611652611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906145bb565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c906144fb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117946128c3565b73ffffffffffffffffffffffffffffffffffffffff166117b2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906145bb565b60405180910390fd5b6118126000612d46565b565b61181c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661183a611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611887906145bb565b60405180910390fd5b60005b8251811015611973578181815181106118d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516010600085848151811061191a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196b906149bf565b915050611893565b505050565b600a60029054906101000a900460ff1681565b600081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6119e06128c3565b73ffffffffffffffffffffffffffffffffffffffff166119fe611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906145bb565b60405180910390fd5b60005b8251811015611b3757818181518110611a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600f6000858481518110611ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611b2f906149bf565b915050611a57565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6e6128c3565b73ffffffffffffffffffffffffffffffffffffffff16611b8c611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906145bb565b60405180910390fd5b8060098190555050565b606060018054611bfb9061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c279061498d565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b611c866128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ca4611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906145bb565b60405180910390fd5b600754611d1782611d09610e73565b612cea90919063ffffffff16565b1115611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f9061449b565b60405180910390fd5b60005b8251811015611dc157611dae838281518110611da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612d00565b8080611db9906149bf565b915050611d5b565b505050565b600a60019054906101000a900460ff1681565b60095481565b600a60009054906101000a900460ff16611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061461b565b60405180910390fd5b600081118015611e4057506008548111155b611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906143bb565b60405180910390fd5b600754611e9c82611e8e610e73565b612cea90919063ffffffff16565b1115611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed49061449b565b60405180910390fd5b611ef281600954612cbe90919063ffffffff16565b341015611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b9061453b565b60405180910390fd5b611f3e3382612d00565b50565b611f496128c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061447b565b60405180910390fd5b8060056000611fc46128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120716128c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120b6919061437e565b60405180910390a35050565b6120d36120cd6128c3565b83612984565b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121099061465b565b60405180910390fd5b61211e84848484612e0c565b50505050565b61212c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661214a611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906145bb565b60405180910390fd5b60005b8251811015612209576121f68382815181106121e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612d00565b8080612201906149bf565b9150506121a3565b505050565b60085481565b606061221f82612857565b61225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612255906145fb565b60405180910390fd5b6000612268612e68565b9050600081511161228857604051806020016040528060008152506122b3565b8061229284612efa565b6040516020016122a39291906142f3565b6040516020818303038152906040525b915050919050565b600081600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123a46128c3565b73ffffffffffffffffffffffffffffffffffffffff166123c2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906145bb565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b61244c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661246a611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b7906145bb565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60075481565b6125166128c3565b73ffffffffffffffffffffffffffffffffffffffff16612534611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461258a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612581906145bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906143fb565b60405180910390fd5b61260381612d46565b50565b600a60019054906101000a900460ff16612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c9061461b565b60405180910390fd5b61265f338261198b565b61269e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126959061457b565b60405180910390fd5b6007546126bb826126ad610e73565b612cea90919063ffffffff16565b11156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f39061449b565b60405180910390fd5b61271181600954612cbe90919063ffffffff16565b341015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a9061453b565b60405180910390fd5b61275d3382612d00565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ac91906148a3565b9250508190555050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661293e836114ec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061298f82612857565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c5906144bb565b60405180910390fd5b60006129d9836114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a4857508373ffffffffffffffffffffffffffffffffffffffff16612a3084610c50565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a595750612a588185612308565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a82826114ec565b73ffffffffffffffffffffffffffffffffffffffff1614612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3f9061445b565b60405180910390fd5b612b538383836130a7565b612b5e6000826128cb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bae91906148a3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0591906147c2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612ccc9190614849565b905092915050565b60008183612ce29190614818565b905092915050565b60008183612cf891906147c2565b905092915050565b60005b81811015612d41576000612d17600c6127b6565b9050612d23600c6127c4565b612d2d84826130ac565b508080612d39906149bf565b915050612d03565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e17848484612a62565b612e23848484846130ca565b612e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e59906143db565b60405180910390fd5b50505050565b6060600b8054612e779061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea39061498d565b8015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b5050505050905090565b60606000821415612f42576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130a2565b600082905060005b60008214612f74578080612f5d906149bf565b915050600a82612f6d9190614818565b9150612f4a565b60008167ffffffffffffffff811115612fb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fe85781602001600182028036833780820191505090505b5090505b6000851461309b5760018261300191906148a3565b9150600a856130109190614a08565b603061301c91906147c2565b60f81b818381518110613058577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130949190614818565b9450612fec565b8093505050505b919050565b505050565b6130c6828260405180602001604052806000815250613261565b5050565b60006130eb8473ffffffffffffffffffffffffffffffffffffffff166127da565b15613254578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131146128c3565b8786866040518563ffffffff1660e01b81526004016131369493929190614332565b602060405180830381600087803b15801561315057600080fd5b505af192505050801561318157506040513d601f19601f8201168201806040525081019061317e9190613a22565b60015b613204573d80600081146131b1576040519150601f19603f3d011682016040523d82523d6000602084013e6131b6565b606091505b506000815114156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f3906143db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613259565b600190505b949350505050565b61326b83836132bc565b61327860008484846130ca565b6132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae906143db565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133239061455b565b60405180910390fd5b61333581612857565b15613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c9061441b565b60405180910390fd5b613381600083836130a7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d191906147c2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134969061498d565b90600052602060002090601f0160209004810192826134b857600085556134ff565b82601f106134d157805160ff19168380011785556134ff565b828001600101855582156134ff579182015b828111156134fe5782518255916020019190600101906134e3565b5b50905061350c9190613510565b5090565b5b80821115613529576000816000905550600101613511565b5090565b600061354061353b846146c7565b614696565b9050808382526020820190508285602086028201111561355f57600080fd5b60005b8581101561358f57816135758882613681565b845260208401935060208301925050600181019050613562565b5050509392505050565b60006135ac6135a7846146f3565b614696565b905080838252602082019050828560208602820111156135cb57600080fd5b60005b858110156135fb57816135e1888261377d565b8452602084019350602083019250506001810190506135ce565b5050509392505050565b60006136186136138461471f565b614696565b90508281526020810184848401111561363057600080fd5b61363b84828561494b565b509392505050565b60006136566136518461474f565b614696565b90508281526020810184848401111561366e57600080fd5b61367984828561494b565b509392505050565b60008135905061369081614b06565b92915050565b600082601f8301126136a757600080fd5b81356136b784826020860161352d565b91505092915050565b600082601f8301126136d157600080fd5b81356136e1848260208601613599565b91505092915050565b6000813590506136f981614b1d565b92915050565b60008135905061370e81614b34565b92915050565b60008151905061372381614b34565b92915050565b600082601f83011261373a57600080fd5b813561374a848260208601613605565b91505092915050565b600082601f83011261376457600080fd5b8135613774848260208601613643565b91505092915050565b60008135905061378c81614b4b565b92915050565b6000602082840312156137a457600080fd5b60006137b284828501613681565b91505092915050565b600080604083850312156137ce57600080fd5b60006137dc85828601613681565b92505060206137ed85828601613681565b9150509250929050565b60008060006060848603121561380c57600080fd5b600061381a86828701613681565b935050602061382b86828701613681565b925050604061383c8682870161377d565b9150509250925092565b6000806000806080858703121561385c57600080fd5b600061386a87828801613681565b945050602061387b87828801613681565b935050604061388c8782880161377d565b925050606085013567ffffffffffffffff8111156138a957600080fd5b6138b587828801613729565b91505092959194509250565b600080604083850312156138d457600080fd5b60006138e285828601613681565b92505060206138f3858286016136ea565b9150509250929050565b6000806040838503121561391057600080fd5b600061391e85828601613681565b925050602061392f8582860161377d565b9150509250929050565b6000806040838503121561394c57600080fd5b600083013567ffffffffffffffff81111561396657600080fd5b61397285828601613696565b925050602083013567ffffffffffffffff81111561398f57600080fd5b61399b858286016136c0565b9150509250929050565b600080604083850312156139b857600080fd5b600083013567ffffffffffffffff8111156139d257600080fd5b6139de85828601613696565b92505060206139ef8582860161377d565b9150509250929050565b600060208284031215613a0b57600080fd5b6000613a19848285016136ff565b91505092915050565b600060208284031215613a3457600080fd5b6000613a4284828501613714565b91505092915050565b600060208284031215613a5d57600080fd5b600082013567ffffffffffffffff811115613a7757600080fd5b613a8384828501613753565b91505092915050565b600060208284031215613a9e57600080fd5b6000613aac8482850161377d565b91505092915050565b613abe816148d7565b82525050565b613acd816148e9565b82525050565b6000613ade8261477f565b613ae88185614795565b9350613af881856020860161495a565b613b0181614af5565b840191505092915050565b6000613b178261478a565b613b2181856147a6565b9350613b3181856020860161495a565b613b3a81614af5565b840191505092915050565b6000613b508261478a565b613b5a81856147b7565b9350613b6a81856020860161495a565b80840191505092915050565b6000613b836013836147a6565b91507f4d617820697320313020617420612074696d65000000000000000000000000006000830152602082019050919050565b6000613bc36032836147a6565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613c296026836147a6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c8f601c836147a6565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ccf601e836147a6565b91507f496e73756666696369656e7420696e7075742062616c616e63652028302900006000830152602082019050919050565b6000613d0f6024836147a6565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d756019836147a6565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613db56016836147a6565b91507f536f72727920746f6f206d616e79206e6f626f647921000000000000000000006000830152602082019050919050565b6000613df5602c836147a6565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613e5b6038836147a6565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ec1602a836147a6565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f276029836147a6565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8d6020836147a6565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374216000830152602082019050919050565b6000613fcd6020836147a6565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061400d602d836147a6565b91507f496e73756666696369656e7420726573657276656420746f6b656e7320666f7260008301527f20796f75722061646472657373000000000000000000000000000000000000006020830152604082019050919050565b6000614073602c836147a6565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006140d96020836147a6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006141196029836147a6565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061417f602f836147a6565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006141e56013836147a6565b91507f53616c65206973206e6f742061637469766521000000000000000000000000006000830152602082019050919050565b60006142256021836147a6565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061428b6031836147a6565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6142ed81614941565b82525050565b60006142ff8285613b45565b915061430b8284613b45565b91508190509392505050565b600060208201905061432c6000830184613ab5565b92915050565b60006080820190506143476000830187613ab5565b6143546020830186613ab5565b61436160408301856142e4565b81810360608301526143738184613ad3565b905095945050505050565b60006020820190506143936000830184613ac4565b92915050565b600060208201905081810360008301526143b38184613b0c565b905092915050565b600060208201905081810360008301526143d481613b76565b9050919050565b600060208201905081810360008301526143f481613bb6565b9050919050565b6000602082019050818103600083015261441481613c1c565b9050919050565b6000602082019050818103600083015261443481613c82565b9050919050565b6000602082019050818103600083015261445481613cc2565b9050919050565b6000602082019050818103600083015261447481613d02565b9050919050565b6000602082019050818103600083015261449481613d68565b9050919050565b600060208201905081810360008301526144b481613da8565b9050919050565b600060208201905081810360008301526144d481613de8565b9050919050565b600060208201905081810360008301526144f481613e4e565b9050919050565b6000602082019050818103600083015261451481613eb4565b9050919050565b6000602082019050818103600083015261453481613f1a565b9050919050565b6000602082019050818103600083015261455481613f80565b9050919050565b6000602082019050818103600083015261457481613fc0565b9050919050565b6000602082019050818103600083015261459481614000565b9050919050565b600060208201905081810360008301526145b481614066565b9050919050565b600060208201905081810360008301526145d4816140cc565b9050919050565b600060208201905081810360008301526145f48161410c565b9050919050565b6000602082019050818103600083015261461481614172565b9050919050565b60006020820190508181036000830152614634816141d8565b9050919050565b6000602082019050818103600083015261465481614218565b9050919050565b600060208201905081810360008301526146748161427e565b9050919050565b600060208201905061469060008301846142e4565b92915050565b6000604051905081810181811067ffffffffffffffff821117156146bd576146bc614ac6565b5b8060405250919050565b600067ffffffffffffffff8211156146e2576146e1614ac6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561470e5761470d614ac6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561473a57614739614ac6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561476a57614769614ac6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147cd82614941565b91506147d883614941565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561480d5761480c614a39565b5b828201905092915050565b600061482382614941565b915061482e83614941565b92508261483e5761483d614a68565b5b828204905092915050565b600061485482614941565b915061485f83614941565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489857614897614a39565b5b828202905092915050565b60006148ae82614941565b91506148b983614941565b9250828210156148cc576148cb614a39565b5b828203905092915050565b60006148e282614921565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561497857808201518184015260208101905061495d565b83811115614987576000848401525b50505050565b600060028204905060018216806149a557607f821691505b602082108114156149b9576149b8614a97565b5b50919050565b60006149ca82614941565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149fd576149fc614a39565b5b600182019050919050565b6000614a1382614941565b9150614a1e83614941565b925082614a2e57614a2d614a68565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614b0f816148d7565b8114614b1a57600080fd5b50565b614b26816148e9565b8114614b3157600080fd5b50565b614b3d816148f5565b8114614b4857600080fd5b50565b614b5481614941565b8114614b5f57600080fd5b5056fea26469706673582212205e630f7691b819e4dda1cd4afb055ab260a1a574729d15d9f898116b95e262aa64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000444000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x6080604052600436106102815760003560e01c80637b2178621161014f578063a22cb465116100c1578063e985e9c51161007a578063e985e9c5146109ef578063f032554914610a2c578063f13d791414610a43578063f27dac4214610a6c578063f2fde38b14610a97578063ff2e666c14610ac0576102cb565b8063a22cb465146108cf578063b88d4fde146108f8578063c204642c14610921578063c598e7f21461094a578063c87b56dd14610975578063e83bf0ed146109b2576102cb565b806391b7f5ed1161011357806391b7f5ed146107e057806395d89b411461080957806399f8cf3a146108345780639d044ed31461085d578063a035b1fe14610888578063a0712d68146108b3576102cb565b80637b217862146106fb5780637fc2780314610724578063830639ac1461074f5780638a5cee001461078c5780638da5cb5b146107b5576102cb565b806348e257cb116101f35780635f57697c116101ac5780635f57697c146105fd5780636352211e146106285780636c0360eb146106655780636d60e6c11461069057806370a08231146106a7578063715018a6146106e4576102cb565b806348e257cb146104ef5780634dab7d241461051a57806353e5c0371461055757806355f804b314610580578063564566a8146105a9578063572d64a5146105d4576102cb565b806318160ddd1161024557806318160ddd1461040757806323b872dd1461043257806334918dfd1461045b5780633ccfd60b146104725780633f16e0de1461048957806342842e0e146104c6576102cb565b806301ffc9a71461031057806306fdde031461034d578063081812fc14610378578063095ea7b3146103b5578063149835a0146103de576102cb565b366102cb57600034116102c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c09061443b565b60405180910390fd5b005b6000341161030e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103059061443b565b60405180910390fd5b005b34801561031c57600080fd5b50610337600480360381019061033291906139f9565b610adc565b604051610344919061437e565b60405180910390f35b34801561035957600080fd5b50610362610bbe565b60405161036f9190614399565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613a8c565b610c50565b6040516103ac9190614317565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906138fd565b610cd5565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613a8c565b610ded565b005b34801561041357600080fd5b5061041c610e73565b604051610429919061467b565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906137f7565b610e84565b005b34801561046757600080fd5b50610470610ee4565b005b34801561047e57600080fd5b50610487610f8c565b005b34801561049557600080fd5b506104b060048036038101906104ab9190613792565b611128565b6040516104bd919061467b565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e891906137f7565b611171565b005b3480156104fb57600080fd5b50610504611191565b6040516105119190614317565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613792565b6111b7565b60405161054e919061467b565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906138fd565b611200565b005b34801561058c57600080fd5b506105a760048036038101906105a29190613a4b565b6112c4565b005b3480156105b557600080fd5b506105be61135a565b6040516105cb919061437e565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613a8c565b61136d565b005b34801561060957600080fd5b506106126114c6565b60405161061f9190614317565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613a8c565b6114ec565b60405161065c9190614317565b60405180910390f35b34801561067157600080fd5b5061067a61159e565b6040516106879190614399565b60405180910390f35b34801561069c57600080fd5b506106a561162c565b005b3480156106b357600080fd5b506106ce60048036038101906106c99190613792565b6116d4565b6040516106db919061467b565b60405180910390f35b3480156106f057600080fd5b506106f961178c565b005b34801561070757600080fd5b50610722600480360381019061071d9190613939565b611814565b005b34801561073057600080fd5b50610739611978565b604051610746919061437e565b60405180910390f35b34801561075b57600080fd5b50610776600480360381019061077191906138fd565b61198b565b604051610783919061437e565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190613939565b6119d8565b005b3480156107c157600080fd5b506107ca611b3c565b6040516107d79190614317565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613a8c565b611b66565b005b34801561081557600080fd5b5061081e611bec565b60405161082b9190614399565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906139a5565b611c7e565b005b34801561086957600080fd5b50610872611dc6565b60405161087f919061437e565b60405180910390f35b34801561089457600080fd5b5061089d611dd9565b6040516108aa919061467b565b60405180910390f35b6108cd60048036038101906108c89190613a8c565b611ddf565b005b3480156108db57600080fd5b506108f660048036038101906108f191906138c1565b611f41565b005b34801561090457600080fd5b5061091f600480360381019061091a9190613846565b6120c2565b005b34801561092d57600080fd5b50610948600480360381019061094391906139a5565b612124565b005b34801561095657600080fd5b5061095f61220e565b60405161096c919061467b565b60405180910390f35b34801561098157600080fd5b5061099c60048036038101906109979190613a8c565b612214565b6040516109a99190614399565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d491906138fd565b6122bb565b6040516109e6919061437e565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a1191906137bb565b612308565b604051610a23919061437e565b60405180910390f35b348015610a3857600080fd5b50610a4161239c565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a6591906138fd565b612444565b005b348015610a7857600080fd5b50610a81612508565b604051610a8e919061467b565b60405180910390f35b348015610aa357600080fd5b50610abe6004803603810190610ab99190613792565b61250e565b005b610ada6004803603810190610ad59190613a8c565b612606565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb75750610bb6826127ed565b5b9050919050565b606060008054610bcd9061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf99061498d565b8015610c465780601f10610c1b57610100808354040283529160200191610c46565b820191906000526020600020905b815481529060010190602001808311610c2957829003601f168201915b5050505050905090565b6000610c5b82612857565b610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c919061459b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ce0826114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061463b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d706128c3565b73ffffffffffffffffffffffffffffffffffffffff161480610d9f5750610d9e81610d996128c3565b612308565b5b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906144db565b60405180910390fd5b610de883836128cb565b505050565b610df56128c3565b73ffffffffffffffffffffffffffffffffffffffff16610e13611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906145bb565b60405180910390fd5b8060078190555050565b6000610e7f600c6127b6565b905090565b610e95610e8f6128c3565b82612984565b610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb9061465b565b60405180910390fd5b610edf838383612a62565b505050565b610eec6128c3565b73ffffffffffffffffffffffffffffffffffffffff16610f0a611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906145bb565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610f946128c3565b73ffffffffffffffffffffffffffffffffffffffff16610fb2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906145bb565b60405180910390fd5b600047905060006110366064611028603285612cbe90919063ffffffff16565b612cd490919063ffffffff16565b905060006110616064611053603286612cbe90919063ffffffff16565b612cd490919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050506110c357600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061112357600080fd5b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118c838383604051806020016040528060008152506120c2565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112086128c3565b73ffffffffffffffffffffffffffffffffffffffff16611226611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906145bb565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6112cc6128c3565b73ffffffffffffffffffffffffffffffffffffffff166112ea611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611337906145bb565b60405180910390fd5b80600b908051906020019061135692919061348a565b5050565b600a60009054906101000a900460ff1681565b600a60029054906101000a900460ff166113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b39061461b565b60405180910390fd5b6113c633826122bb565b611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc9061457b565b60405180910390fd5b60075461142282611414610e73565b612cea90919063ffffffff16565b1115611463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145a9061449b565b60405180910390fd5b61146d3382612d00565b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114bc91906148a3565b9250508190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c9061451b565b60405180910390fd5b80915050919050565b600b80546115ab9061498d565b80601f01602080910402602001604051908101604052809291908181526020018280546115d79061498d565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050505081565b6116346128c3565b73ffffffffffffffffffffffffffffffffffffffff16611652611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906145bb565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c906144fb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117946128c3565b73ffffffffffffffffffffffffffffffffffffffff166117b2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906145bb565b60405180910390fd5b6118126000612d46565b565b61181c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661183a611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611887906145bb565b60405180910390fd5b60005b8251811015611973578181815181106118d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516010600085848151811061191a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196b906149bf565b915050611893565b505050565b600a60029054906101000a900460ff1681565b600081601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6119e06128c3565b73ffffffffffffffffffffffffffffffffffffffff166119fe611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906145bb565b60405180910390fd5b60005b8251811015611b3757818181518110611a99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600f6000858481518110611ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611b2f906149bf565b915050611a57565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6e6128c3565b73ffffffffffffffffffffffffffffffffffffffff16611b8c611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906145bb565b60405180910390fd5b8060098190555050565b606060018054611bfb9061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c279061498d565b8015611c745780601f10611c4957610100808354040283529160200191611c74565b820191906000526020600020905b815481529060010190602001808311611c5757829003601f168201915b5050505050905090565b611c866128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ca4611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906145bb565b60405180910390fd5b600754611d1782611d09610e73565b612cea90919063ffffffff16565b1115611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f9061449b565b60405180910390fd5b60005b8251811015611dc157611dae838281518110611da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612d00565b8080611db9906149bf565b915050611d5b565b505050565b600a60019054906101000a900460ff1681565b60095481565b600a60009054906101000a900460ff16611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061461b565b60405180910390fd5b600081118015611e4057506008548111155b611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906143bb565b60405180910390fd5b600754611e9c82611e8e610e73565b612cea90919063ffffffff16565b1115611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed49061449b565b60405180910390fd5b611ef281600954612cbe90919063ffffffff16565b341015611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b9061453b565b60405180910390fd5b611f3e3382612d00565b50565b611f496128c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061447b565b60405180910390fd5b8060056000611fc46128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120716128c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120b6919061437e565b60405180910390a35050565b6120d36120cd6128c3565b83612984565b612112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121099061465b565b60405180910390fd5b61211e84848484612e0c565b50505050565b61212c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661214a611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906145bb565b60405180910390fd5b60005b8251811015612209576121f68382815181106121e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183612d00565b8080612201906149bf565b9150506121a3565b505050565b60085481565b606061221f82612857565b61225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612255906145fb565b60405180910390fd5b6000612268612e68565b9050600081511161228857604051806020016040528060008152506122b3565b8061229284612efa565b6040516020016122a39291906142f3565b6040516020818303038152906040525b915050919050565b600081600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123a46128c3565b73ffffffffffffffffffffffffffffffffffffffff166123c2611b3c565b73ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906145bb565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b61244c6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661246a611b3c565b73ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b7906145bb565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60075481565b6125166128c3565b73ffffffffffffffffffffffffffffffffffffffff16612534611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461258a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612581906145bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906143fb565b60405180910390fd5b61260381612d46565b50565b600a60019054906101000a900460ff16612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c9061461b565b60405180910390fd5b61265f338261198b565b61269e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126959061457b565b60405180910390fd5b6007546126bb826126ad610e73565b612cea90919063ffffffff16565b11156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f39061449b565b60405180910390fd5b61271181600954612cbe90919063ffffffff16565b341015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a9061453b565b60405180910390fd5b61275d3382612d00565b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ac91906148a3565b9250508190555050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661293e836114ec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061298f82612857565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c5906144bb565b60405180910390fd5b60006129d9836114ec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a4857508373ffffffffffffffffffffffffffffffffffffffff16612a3084610c50565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a595750612a588185612308565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a82826114ec565b73ffffffffffffffffffffffffffffffffffffffff1614612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3f9061445b565b60405180910390fd5b612b538383836130a7565b612b5e6000826128cb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bae91906148a3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0591906147c2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612ccc9190614849565b905092915050565b60008183612ce29190614818565b905092915050565b60008183612cf891906147c2565b905092915050565b60005b81811015612d41576000612d17600c6127b6565b9050612d23600c6127c4565b612d2d84826130ac565b508080612d39906149bf565b915050612d03565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e17848484612a62565b612e23848484846130ca565b612e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e59906143db565b60405180910390fd5b50505050565b6060600b8054612e779061498d565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea39061498d565b8015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b5050505050905090565b60606000821415612f42576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130a2565b600082905060005b60008214612f74578080612f5d906149bf565b915050600a82612f6d9190614818565b9150612f4a565b60008167ffffffffffffffff811115612fb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612fe85781602001600182028036833780820191505090505b5090505b6000851461309b5760018261300191906148a3565b9150600a856130109190614a08565b603061301c91906147c2565b60f81b818381518110613058577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130949190614818565b9450612fec565b8093505050505b919050565b505050565b6130c6828260405180602001604052806000815250613261565b5050565b60006130eb8473ffffffffffffffffffffffffffffffffffffffff166127da565b15613254578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131146128c3565b8786866040518563ffffffff1660e01b81526004016131369493929190614332565b602060405180830381600087803b15801561315057600080fd5b505af192505050801561318157506040513d601f19601f8201168201806040525081019061317e9190613a22565b60015b613204573d80600081146131b1576040519150601f19603f3d011682016040523d82523d6000602084013e6131b6565b606091505b506000815114156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f3906143db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613259565b600190505b949350505050565b61326b83836132bc565b61327860008484846130ca565b6132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae906143db565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133239061455b565b60405180910390fd5b61333581612857565b15613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336c9061441b565b60405180910390fd5b613381600083836130a7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d191906147c2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134969061498d565b90600052602060002090601f0160209004810192826134b857600085556134ff565b82601f106134d157805160ff19168380011785556134ff565b828001600101855582156134ff579182015b828111156134fe5782518255916020019190600101906134e3565b5b50905061350c9190613510565b5090565b5b80821115613529576000816000905550600101613511565b5090565b600061354061353b846146c7565b614696565b9050808382526020820190508285602086028201111561355f57600080fd5b60005b8581101561358f57816135758882613681565b845260208401935060208301925050600181019050613562565b5050509392505050565b60006135ac6135a7846146f3565b614696565b905080838252602082019050828560208602820111156135cb57600080fd5b60005b858110156135fb57816135e1888261377d565b8452602084019350602083019250506001810190506135ce565b5050509392505050565b60006136186136138461471f565b614696565b90508281526020810184848401111561363057600080fd5b61363b84828561494b565b509392505050565b60006136566136518461474f565b614696565b90508281526020810184848401111561366e57600080fd5b61367984828561494b565b509392505050565b60008135905061369081614b06565b92915050565b600082601f8301126136a757600080fd5b81356136b784826020860161352d565b91505092915050565b600082601f8301126136d157600080fd5b81356136e1848260208601613599565b91505092915050565b6000813590506136f981614b1d565b92915050565b60008135905061370e81614b34565b92915050565b60008151905061372381614b34565b92915050565b600082601f83011261373a57600080fd5b813561374a848260208601613605565b91505092915050565b600082601f83011261376457600080fd5b8135613774848260208601613643565b91505092915050565b60008135905061378c81614b4b565b92915050565b6000602082840312156137a457600080fd5b60006137b284828501613681565b91505092915050565b600080604083850312156137ce57600080fd5b60006137dc85828601613681565b92505060206137ed85828601613681565b9150509250929050565b60008060006060848603121561380c57600080fd5b600061381a86828701613681565b935050602061382b86828701613681565b925050604061383c8682870161377d565b9150509250925092565b6000806000806080858703121561385c57600080fd5b600061386a87828801613681565b945050602061387b87828801613681565b935050604061388c8782880161377d565b925050606085013567ffffffffffffffff8111156138a957600080fd5b6138b587828801613729565b91505092959194509250565b600080604083850312156138d457600080fd5b60006138e285828601613681565b92505060206138f3858286016136ea565b9150509250929050565b6000806040838503121561391057600080fd5b600061391e85828601613681565b925050602061392f8582860161377d565b9150509250929050565b6000806040838503121561394c57600080fd5b600083013567ffffffffffffffff81111561396657600080fd5b61397285828601613696565b925050602083013567ffffffffffffffff81111561398f57600080fd5b61399b858286016136c0565b9150509250929050565b600080604083850312156139b857600080fd5b600083013567ffffffffffffffff8111156139d257600080fd5b6139de85828601613696565b92505060206139ef8582860161377d565b9150509250929050565b600060208284031215613a0b57600080fd5b6000613a19848285016136ff565b91505092915050565b600060208284031215613a3457600080fd5b6000613a4284828501613714565b91505092915050565b600060208284031215613a5d57600080fd5b600082013567ffffffffffffffff811115613a7757600080fd5b613a8384828501613753565b91505092915050565b600060208284031215613a9e57600080fd5b6000613aac8482850161377d565b91505092915050565b613abe816148d7565b82525050565b613acd816148e9565b82525050565b6000613ade8261477f565b613ae88185614795565b9350613af881856020860161495a565b613b0181614af5565b840191505092915050565b6000613b178261478a565b613b2181856147a6565b9350613b3181856020860161495a565b613b3a81614af5565b840191505092915050565b6000613b508261478a565b613b5a81856147b7565b9350613b6a81856020860161495a565b80840191505092915050565b6000613b836013836147a6565b91507f4d617820697320313020617420612074696d65000000000000000000000000006000830152602082019050919050565b6000613bc36032836147a6565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613c296026836147a6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c8f601c836147a6565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613ccf601e836147a6565b91507f496e73756666696369656e7420696e7075742062616c616e63652028302900006000830152602082019050919050565b6000613d0f6024836147a6565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d756019836147a6565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613db56016836147a6565b91507f536f72727920746f6f206d616e79206e6f626f647921000000000000000000006000830152602082019050919050565b6000613df5602c836147a6565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613e5b6038836147a6565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ec1602a836147a6565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f276029836147a6565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f8d6020836147a6565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374216000830152602082019050919050565b6000613fcd6020836147a6565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061400d602d836147a6565b91507f496e73756666696369656e7420726573657276656420746f6b656e7320666f7260008301527f20796f75722061646472657373000000000000000000000000000000000000006020830152604082019050919050565b6000614073602c836147a6565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006140d96020836147a6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006141196029836147a6565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061417f602f836147a6565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006141e56013836147a6565b91507f53616c65206973206e6f742061637469766521000000000000000000000000006000830152602082019050919050565b60006142256021836147a6565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061428b6031836147a6565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6142ed81614941565b82525050565b60006142ff8285613b45565b915061430b8284613b45565b91508190509392505050565b600060208201905061432c6000830184613ab5565b92915050565b60006080820190506143476000830187613ab5565b6143546020830186613ab5565b61436160408301856142e4565b81810360608301526143738184613ad3565b905095945050505050565b60006020820190506143936000830184613ac4565b92915050565b600060208201905081810360008301526143b38184613b0c565b905092915050565b600060208201905081810360008301526143d481613b76565b9050919050565b600060208201905081810360008301526143f481613bb6565b9050919050565b6000602082019050818103600083015261441481613c1c565b9050919050565b6000602082019050818103600083015261443481613c82565b9050919050565b6000602082019050818103600083015261445481613cc2565b9050919050565b6000602082019050818103600083015261447481613d02565b9050919050565b6000602082019050818103600083015261449481613d68565b9050919050565b600060208201905081810360008301526144b481613da8565b9050919050565b600060208201905081810360008301526144d481613de8565b9050919050565b600060208201905081810360008301526144f481613e4e565b9050919050565b6000602082019050818103600083015261451481613eb4565b9050919050565b6000602082019050818103600083015261453481613f1a565b9050919050565b6000602082019050818103600083015261455481613f80565b9050919050565b6000602082019050818103600083015261457481613fc0565b9050919050565b6000602082019050818103600083015261459481614000565b9050919050565b600060208201905081810360008301526145b481614066565b9050919050565b600060208201905081810360008301526145d4816140cc565b9050919050565b600060208201905081810360008301526145f48161410c565b9050919050565b6000602082019050818103600083015261461481614172565b9050919050565b60006020820190508181036000830152614634816141d8565b9050919050565b6000602082019050818103600083015261465481614218565b9050919050565b600060208201905081810360008301526146748161427e565b9050919050565b600060208201905061469060008301846142e4565b92915050565b6000604051905081810181811067ffffffffffffffff821117156146bd576146bc614ac6565b5b8060405250919050565b600067ffffffffffffffff8211156146e2576146e1614ac6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561470e5761470d614ac6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561473a57614739614ac6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561476a57614769614ac6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147cd82614941565b91506147d883614941565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561480d5761480c614a39565b5b828201905092915050565b600061482382614941565b915061482e83614941565b92508261483e5761483d614a68565b5b828204905092915050565b600061485482614941565b915061485f83614941565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489857614897614a39565b5b828202905092915050565b60006148ae82614941565b91506148b983614941565b9250828210156148cc576148cb614a39565b5b828203905092915050565b60006148e282614921565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561497857808201518184015260208101905061495d565b83811115614987576000848401525b50505050565b600060028204905060018216806149a557607f821691505b602082108114156149b9576149b8614a97565b5b50919050565b60006149ca82614941565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149fd576149fc614a39565b5b600182019050919050565b6000614a1382614941565b9150614a1e83614941565b925082614a2e57614a2d614a68565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614b0f816148d7565b8114614b1a57600080fd5b50565b614b26816148e9565b8114614b3157600080fd5b50565b614b3d816148f5565b8114614b4857600080fd5b50565b614b5481614941565b8114614b5f57600080fd5b5056fea26469706673582212205e630f7691b819e4dda1cd4afb055ab260a1a574729d15d9f898116b95e262aa64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000444000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _maxNobody (uint256): 1092
Arg [1] : _maxNobodyPerPurchase (uint256): 10
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000444
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
44303:5421:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49673:1;49661:9;:13;49653:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44303:5421;;49567:1;49555:9;:13;49547:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44303:5421;31417:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32362:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33921:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33444:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48658:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45221:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34811:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48172:85;;;;;;;;;;;;;:::i;:::-;;49033:283;;;;;;;;;;;;;:::i;:::-;;47899:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35221:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44809:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47269:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47551:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48551:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44558:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45321:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44741:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32056:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44672:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48363:88;;;;;;;;;;;;;:::i;:::-;;31786:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:94;;;;;;;;;;;;;:::i;:::-;;47045:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44635:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47392:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47681:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10240:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48457:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32531:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48766:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44595:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44501:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46148:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34214:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35477:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49322:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44459:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32706:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48016:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34580:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48263:94;;;;;;;;;;;;;:::i;:::-;;46909:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44426:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11140:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45684:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31417:305;31519:4;31571:25;31556:40;;;:11;:40;;;;:105;;;;31628:33;31613:48;;;:11;:48;;;;31556:105;:158;;;;31678:36;31702:11;31678:23;:36::i;:::-;31556:158;31536:178;;31417:305;;;:::o;32362:100::-;32416:13;32449:5;32442:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32362:100;:::o;33921:221::-;33997:7;34025:16;34033:7;34025;:16::i;:::-;34017:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34110:15;:24;34126:7;34110:24;;;;;;;;;;;;;;;;;;;;;34103:31;;33921:221;;;:::o;33444:411::-;33525:13;33541:23;33556:7;33541:14;:23::i;:::-;33525:39;;33589:5;33583:11;;:2;:11;;;;33575:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33683:5;33667:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33692:37;33709:5;33716:12;:10;:12::i;:::-;33692:16;:37::i;:::-;33667:62;33645:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33826:21;33835:2;33839:7;33826:8;:21::i;:::-;33444:411;;;:::o;48658:102::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48741:13:::1;48729:9;:25;;;;48658:102:::0;:::o;45221:92::-;45265:7;45288:19;:9;:17;:19::i;:::-;45281:26;;45221:92;:::o;34811:339::-;35006:41;35025:12;:10;:12::i;:::-;35039:7;35006:18;:41::i;:::-;34998:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35114:28;35124:4;35130:2;35134:7;35114:9;:28::i;:::-;34811:339;;;:::o;48172:85::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48239:12:::1;;;;;;;;;;;48238:13;48223:12;;:28;;;;;;;;;;;;;;;;;;48172:85::o:0;49033:283::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49079:15:::1;49097:21;49079:39;;49127:14;49144:24;49164:3;49144:15;49156:2;49144:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;49127:41;;49177:14;49194:24;49214:3;49194:15;49206:2;49194:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;49177:41;;49249:2;;;;;;;;;;;49241:16;;:24;49258:6;49241:24;;;;;;;;;;;;;;;;;;;;;;;49233:33;;;::::0;::::1;;49291:2;;;;;;;;;;;49283:16;;:24;49300:6;49283:24;;;;;;;;;;;;;;;;;;;;;;;49275:33;;;::::0;::::1;;10531:1;;;49033:283::o:0;47899:111::-;47960:7;47985:14;:19;48000:3;47985:19;;;;;;;;;;;;;;;;47978:26;;47899:111;;;:::o;35221:185::-;35359:39;35376:4;35382:2;35386:7;35359:39;;;;;;;;;;;;:16;:39::i;:::-;35221:185;;;:::o;44809:62::-;;;;;;;;;;;;;:::o;47269:117::-;47334:7;47359:16;:21;47376:3;47359:21;;;;;;;;;;;;;;;;47352:28;;47269:117;;;:::o;47551:124::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47659:10:::1;47637:14;:19;47652:3;47637:19;;;;;;;;;;;;;;;:32;;;;47551:124:::0;;:::o;48551:100::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48634:11:::1;48624:7;:21;;;;;;;;;;;;:::i;:::-;;48551:100:::0;:::o;44558:32::-;;;;;;;;;;;;;:::o;45321:355::-;45378:13;;;;;;;;;;;45370:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45431:26;45439:10;45450:6;45431:7;:26::i;:::-;45423:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45551:9;;45522:25;45540:6;45522:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;45514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45596:31;45608:10;45620:6;45596:11;:31::i;:::-;45664:6;45634:14;:26;45649:10;45634:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;45321:355;:::o;44741:62::-;;;;;;;;;;;;;:::o;32056:239::-;32128:7;32148:13;32164:7;:16;32172:7;32164:16;;;;;;;;;;;;;;;;;;;;;32148:32;;32216:1;32199:19;;:5;:19;;;;32191:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32282:5;32275:12;;;32056:239;;;:::o;44672:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48363:88::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48432:13:::1;;;;;;;;;;;48431:14;48415:13;;:30;;;;;;;;;;;;;;;;;;48363:88::o:0;31786:208::-;31858:7;31903:1;31886:19;;:5;:19;;;;31878:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31970:9;:16;31980:5;31970:16;;;;;;;;;;;;;;;;31963:23;;31786:208;;;:::o;10891:94::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10956:21:::1;10974:1;10956:9;:21::i;:::-;10891:94::o:0;47045:218::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47159:9:::1;47154:104;47178:3;:10;47174:1;:14;47154:104;;;47235:10;47246:1;47235:13;;;;;;;;;;;;;;;;;;;;;;47208:16;:24;47225:3;47229:1;47225:6;;;;;;;;;;;;;;;;;;;;;;47208:24;;;;;;;;;;;;;;;:40;;;;47190:3;;;;;:::i;:::-;;;;47154:104;;;;47045:218:::0;;:::o;44635:32::-;;;;;;;;;;;;;:::o;47392:142::-;47470:4;47522:6;47492:16;:26;47509:8;47492:26;;;;;;;;;;;;;;;;:36;;47485:43;;47392:142;;;;:::o;47681:212::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47791:9:::1;47786:102;47810:3;:10;47806:1;:14;47786:102;;;47865:10;47876:1;47865:13;;;;;;;;;;;;;;;;;;;;;;47840:14;:22;47855:3;47859:1;47855:6;;;;;;;;;;;;;;;;;;;;;;47840:22;;;;;;;;;;;;;;;:38;;;;47822:3;;;;;:::i;:::-;;;;47786:102;;;;47681:212:::0;;:::o;10240:87::-;10286:7;10313:6;;;;;;;;;;;10306:13;;10240:87;:::o;48457:86::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48528:9:::1;48520:5;:17;;;;48457:86:::0;:::o;32531:104::-;32587:13;32620:7;32613:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32531:104;:::o;48766:261::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48889:9:::1;;48860:25;48878:6;48860:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;48852:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48939:9;48934:88;48958:3;:10;48954:1;:14;48934:88;;;48987:26;48999:3;49003:1;48999:6;;;;;;;;;;;;;;;;;;;;;;49006;48987:11;:26::i;:::-;48970:3;;;;;:::i;:::-;;;;48934:88;;;;48766:261:::0;;:::o;44595:35::-;;;;;;;;;;;;;:::o;44501:41::-;;;;:::o;46148:389::-;46209:12;;;;;;;;;;;46201:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46270:1;46261:6;:10;:44;;;;;46285:20;;46275:6;:30;;46261:44;46253:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46373:9;;46344:25;46362:6;46344:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;46336:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46437:17;46447:6;46437:5;;:9;;:17;;;;:::i;:::-;46424:9;:30;;46416:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46500:31;46512:10;46524:6;46500:11;:31::i;:::-;46148:389;:::o;34214:295::-;34329:12;:10;:12::i;:::-;34317:24;;:8;:24;;;;34309:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34429:8;34384:18;:32;34403:12;:10;:12::i;:::-;34384:32;;;;;;;;;;;;;;;:42;34417:8;34384:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34482:8;34453:48;;34468:12;:10;:12::i;:::-;34453:48;;;34492:8;34453:48;;;;;;:::i;:::-;;;;;;;;34214:295;;:::o;35477:328::-;35652:41;35671:12;:10;:12::i;:::-;35685:7;35652:18;:41::i;:::-;35644:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35758:39;35772:4;35778:2;35782:7;35791:5;35758:13;:39::i;:::-;35477:328;;;;:::o;49322:182::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49417:9:::1;49412:87;49436:3;:10;49432:1;:14;49412:87;;;49462:27;49474:3;49478:1;49474:6;;;;;;;;;;;;;;;;;;;;;;49482;49462:11;:27::i;:::-;49448:3;;;;;:::i;:::-;;;;49412:87;;;;49322:182:::0;;:::o;44459:37::-;;;;:::o;32706:334::-;32779:13;32813:16;32821:7;32813;:16::i;:::-;32805:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32894:21;32918:10;:8;:10::i;:::-;32894:34;;32970:1;32952:7;32946:21;:25;:86;;;;;;;;;;;;;;;;;32998:7;33007:18;:7;:16;:18::i;:::-;32981:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32946:86;32939:93;;;32706:334;;;:::o;48016:134::-;48088:4;48138:6;48110:14;:24;48125:8;48110:24;;;;;;;;;;;;;;;;:34;;48103:41;;48016:134;;;;:::o;34580:164::-;34677:4;34701:18;:25;34720:5;34701:25;;;;;;;;;;;;;;;:35;34727:8;34701:35;;;;;;;;;;;;;;;;;;;;;;;;;34694:42;;34580:164;;;;:::o;48263:94::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48336:15:::1;;;;;;;;;;;48335:16;48317:15;;:34;;;;;;;;;;;;;;;;;;48263:94::o:0;46909:130::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47023:10:::1;46999:16;:21;47016:3;46999:21;;;;;;;;;;;;;;;:34;;;;46909:130:::0;;:::o;44426:28::-;;;;:::o;11140:192::-;10471:12;:10;:12::i;:::-;10460:23;;:7;:5;:7::i;:::-;:23;;;10452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11249:1:::1;11229:22;;:8;:22;;;;11221:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11305:19;11315:8;11305:9;:19::i;:::-;11140:192:::0;:::o;45684:458::-;45752:15;;;;;;;;;;;45744:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45807:32;45821:10;45832:6;45807:13;:32::i;:::-;45799:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45933:9;;45904:25;45922:6;45904:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;45896:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45997:17;46007:6;45997:5;;:9;;:17;;;;:::i;:::-;45984:9;:30;;45976:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46060:31;46072:10;46084:6;46060:11;:31::i;:::-;46130:6;46098:16;:28;46115:10;46098:28;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;45684:458;:::o;829:114::-;894:7;921;:14;;;914:21;;829:114;;;:::o;951:127::-;1058:1;1040:7;:14;;;:19;;;;;;;;;;;951:127;:::o;19696:387::-;19756:4;19964:12;20031:7;20019:20;20011:28;;20074:1;20067:4;:8;20060:15;;;19696:387;;;:::o;29921:157::-;30006:4;30045:25;30030:40;;;:11;:40;;;;30023:47;;29921:157;;;:::o;37315:127::-;37380:4;37432:1;37404:30;;:7;:16;37412:7;37404:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37397:37;;37315:127;;;:::o;9028:98::-;9081:7;9108:10;9101:17;;9028:98;:::o;41297:174::-;41399:2;41372:15;:24;41388:7;41372:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41455:7;41451:2;41417:46;;41426:23;41441:7;41426:14;:23::i;:::-;41417:46;;;;;;;;;;;;41297:174;;:::o;37609:348::-;37702:4;37727:16;37735:7;37727;:16::i;:::-;37719:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37803:13;37819:23;37834:7;37819:14;:23::i;:::-;37803:39;;37872:5;37861:16;;:7;:16;;;:51;;;;37905:7;37881:31;;:20;37893:7;37881:11;:20::i;:::-;:31;;;37861:51;:87;;;;37916:32;37933:5;37940:7;37916:16;:32::i;:::-;37861:87;37853:96;;;37609:348;;;;:::o;40601:578::-;40760:4;40733:31;;:23;40748:7;40733:14;:23::i;:::-;:31;;;40725:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40843:1;40829:16;;:2;:16;;;;40821:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40899:39;40920:4;40926:2;40930:7;40899:20;:39::i;:::-;41003:29;41020:1;41024:7;41003:8;:29::i;:::-;41064:1;41045:9;:15;41055:4;41045:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41093:1;41076:9;:13;41086:2;41076:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41124:2;41105:7;:16;41113:7;41105:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41163:7;41159:2;41144:27;;41153:4;41144:27;;;;;;;;;;;;40601:578;;;:::o;4965:98::-;5023:7;5054:1;5050;:5;;;;:::i;:::-;5043:12;;4965:98;;;;:::o;5364:::-;5422:7;5453:1;5449;:5;;;;:::i;:::-;5442:12;;5364:98;;;;:::o;4227:::-;4285:7;4316:1;4312;:5;;;;:::i;:::-;4305:12;;4227:98;;;;:::o;46543:235::-;46615:9;46610:163;46634:6;46630:1;:10;46610:163;;;46658:17;46678:19;:9;:17;:19::i;:::-;46658:39;;46708:21;:9;:19;:21::i;:::-;46740:25;46750:3;46755:9;46740;:25::i;:::-;46610:163;46642:3;;;;;:::i;:::-;;;;46610:163;;;;46543:235;;:::o;11340:173::-;11396:16;11415:6;;;;;;;;;;;11396:25;;11441:8;11432:6;;:17;;;;;;;;;;;;;;;;;;11496:8;11465:40;;11486:8;11465:40;;;;;;;;;;;;11340:173;;:::o;36687:315::-;36844:28;36854:4;36860:2;36864:7;36844:9;:28::i;:::-;36891:48;36914:4;36920:2;36924:7;36933:5;36891:22;:48::i;:::-;36883:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36687:315;;;;:::o;46784:104::-;46844:13;46875:7;46868:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46784:104;:::o;27351:723::-;27407:13;27637:1;27628:5;:10;27624:53;;;27655:10;;;;;;;;;;;;;;;;;;;;;27624:53;27687:12;27702:5;27687:20;;27718:14;27743:78;27758:1;27750:4;:9;27743:78;;27776:8;;;;;:::i;:::-;;;;27807:2;27799:10;;;;;:::i;:::-;;;27743:78;;;27831:19;27863:6;27853:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27831:39;;27881:154;27897:1;27888:5;:10;27881:154;;27925:1;27915:11;;;;;:::i;:::-;;;27992:2;27984:5;:10;;;;:::i;:::-;27971:2;:24;;;;:::i;:::-;27958:39;;27941:6;27948;27941:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;28021:2;28012:11;;;;;:::i;:::-;;;27881:154;;;28059:6;28045:21;;;;;27351:723;;;;:::o;43407:126::-;;;;:::o;38299:110::-;38375:26;38385:2;38389:7;38375:26;;;;;;;;;;;;:9;:26::i;:::-;38299:110;;:::o;42036:799::-;42191:4;42212:15;:2;:13;;;:15::i;:::-;42208:620;;;42264:2;42248:36;;;42285:12;:10;:12::i;:::-;42299:4;42305:7;42314:5;42248:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42244:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42507:1;42490:6;:13;:18;42486:272;;;42533:60;;;;;;;;;;:::i;:::-;;;;;;;;42486:272;42708:6;42702:13;42693:6;42689:2;42685:15;42678:38;42244:529;42381:41;;;42371:51;;;:6;:51;;;;42364:58;;;;;42208:620;42812:4;42805:11;;42036:799;;;;;;;:::o;38636:321::-;38766:18;38772:2;38776:7;38766:5;:18::i;:::-;38817:54;38848:1;38852:2;38856:7;38865:5;38817:22;:54::i;:::-;38795:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38636:321;;;:::o;39293:382::-;39387:1;39373:16;;:2;:16;;;;39365:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39446:16;39454:7;39446;:16::i;:::-;39445:17;39437:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39508:45;39537:1;39541:2;39545:7;39508:20;:45::i;:::-;39583:1;39566:9;:13;39576:2;39566:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39614:2;39595:7;:16;39603:7;39595:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39659:7;39655:2;39634:33;;39651:1;39634:33;;;;;;;;;;;;39293:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:552::-;;;;4772:2;4760:9;4751:7;4747:23;4743:32;4740:2;;;4788:1;4785;4778:12;4740:2;4831:1;4856:53;4901:7;4892:6;4881:9;4877:22;4856:53;:::i;:::-;4846:63;;4802:117;4958:2;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4929:118;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;4730:452;;;;;:::o;5188:809::-;;;;;5356:3;5344:9;5335:7;5331:23;5327:33;5324:2;;;5373:1;5370;5363:12;5324:2;5416:1;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5387:117;5543:2;5569:53;5614:7;5605:6;5594:9;5590:22;5569:53;:::i;:::-;5559:63;;5514:118;5671:2;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;:::i;:::-;5687:63;;5642:118;5827:2;5816:9;5812:18;5799:32;5858:18;5850:6;5847:30;5844:2;;;5890:1;5887;5880:12;5844:2;5918:62;5972:7;5963:6;5952:9;5948:22;5918:62;:::i;:::-;5908:72;;5770:220;5314:683;;;;;;;:::o;6003:401::-;;;6125:2;6113:9;6104:7;6100:23;6096:32;6093:2;;;6141:1;6138;6131:12;6093:2;6184:1;6209:53;6254:7;6245:6;6234:9;6230:22;6209:53;:::i;:::-;6199:63;;6155:117;6311:2;6337:50;6379:7;6370:6;6359:9;6355:22;6337:50;:::i;:::-;6327:60;;6282:115;6083:321;;;;;:::o;6410:407::-;;;6535:2;6523:9;6514:7;6510:23;6506:32;6503:2;;;6551:1;6548;6541:12;6503:2;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6493:324;;;;;:::o;6823:693::-;;;6998:2;6986:9;6977:7;6973:23;6969:32;6966:2;;;7014:1;7011;7004:12;6966:2;7085:1;7074:9;7070:17;7057:31;7115:18;7107:6;7104:30;7101:2;;;7147:1;7144;7137:12;7101:2;7175:78;7245:7;7236:6;7225:9;7221:22;7175:78;:::i;:::-;7165:88;;7028:235;7330:2;7319:9;7315:18;7302:32;7361:18;7353:6;7350:30;7347:2;;;7393:1;7390;7383:12;7347:2;7421:78;7491:7;7482:6;7471:9;7467:22;7421:78;:::i;:::-;7411:88;;7273:236;6956:560;;;;;:::o;7522:550::-;;;7672:2;7660:9;7651:7;7647:23;7643:32;7640:2;;;7688:1;7685;7678:12;7640:2;7759:1;7748:9;7744:17;7731:31;7789:18;7781:6;7778:30;7775:2;;;7821:1;7818;7811:12;7775:2;7849:78;7919:7;7910:6;7899:9;7895:22;7849:78;:::i;:::-;7839:88;;7702:235;7976:2;8002:53;8047:7;8038:6;8027:9;8023:22;8002:53;:::i;:::-;7992:63;;7947:118;7630:442;;;;;:::o;8078:260::-;;8185:2;8173:9;8164:7;8160:23;8156:32;8153:2;;;8201:1;8198;8191:12;8153:2;8244:1;8269:52;8313:7;8304:6;8293:9;8289:22;8269:52;:::i;:::-;8259:62;;8215:116;8143:195;;;;:::o;8344:282::-;;8462:2;8450:9;8441:7;8437:23;8433:32;8430:2;;;8478:1;8475;8468:12;8430:2;8521:1;8546:63;8601:7;8592:6;8581:9;8577:22;8546:63;:::i;:::-;8536:73;;8492:127;8420:206;;;;:::o;8632:375::-;;8750:2;8738:9;8729:7;8725:23;8721:32;8718:2;;;8766:1;8763;8756:12;8718:2;8837:1;8826:9;8822:17;8809:31;8867:18;8859:6;8856:30;8853:2;;;8899:1;8896;8889:12;8853:2;8927:63;8982:7;8973:6;8962:9;8958:22;8927:63;:::i;:::-;8917:73;;8780:220;8708:299;;;;:::o;9013:262::-;;9121:2;9109:9;9100:7;9096:23;9092:32;9089:2;;;9137:1;9134;9127:12;9089:2;9180:1;9205:53;9250:7;9241:6;9230:9;9226:22;9205:53;:::i;:::-;9195:63;;9151:117;9079:196;;;;:::o;9281:118::-;9368:24;9386:5;9368:24;:::i;:::-;9363:3;9356:37;9346:53;;:::o;9405:109::-;9486:21;9501:5;9486:21;:::i;:::-;9481:3;9474:34;9464:50;;:::o;9520:360::-;;9634:38;9666:5;9634:38;:::i;:::-;9688:70;9751:6;9746:3;9688:70;:::i;:::-;9681:77;;9767:52;9812:6;9807:3;9800:4;9793:5;9789:16;9767:52;:::i;:::-;9844:29;9866:6;9844:29;:::i;:::-;9839:3;9835:39;9828:46;;9610:270;;;;;:::o;9886:364::-;;10002:39;10035:5;10002:39;:::i;:::-;10057:71;10121:6;10116:3;10057:71;:::i;:::-;10050:78;;10137:52;10182:6;10177:3;10170:4;10163:5;10159:16;10137:52;:::i;:::-;10214:29;10236:6;10214:29;:::i;:::-;10209:3;10205:39;10198:46;;9978:272;;;;;:::o;10256:377::-;;10390:39;10423:5;10390:39;:::i;:::-;10445:89;10527:6;10522:3;10445:89;:::i;:::-;10438:96;;10543:52;10588:6;10583:3;10576:4;10569:5;10565:16;10543:52;:::i;:::-;10620:6;10615:3;10611:16;10604:23;;10366:267;;;;;:::o;10639:317::-;;10802:67;10866:2;10861:3;10802:67;:::i;:::-;10795:74;;10899:21;10895:1;10890:3;10886:11;10879:42;10947:2;10942:3;10938:12;10931:19;;10785:171;;;:::o;10962:382::-;;11125:67;11189:2;11184:3;11125:67;:::i;:::-;11118:74;;11222:34;11218:1;11213:3;11209:11;11202:55;11288:20;11283:2;11278:3;11274:12;11267:42;11335:2;11330:3;11326:12;11319:19;;11108:236;;;:::o;11350:370::-;;11513:67;11577:2;11572:3;11513:67;:::i;:::-;11506:74;;11610:34;11606:1;11601:3;11597:11;11590:55;11676:8;11671:2;11666:3;11662:12;11655:30;11711:2;11706:3;11702:12;11695:19;;11496:224;;;:::o;11726:326::-;;11889:67;11953:2;11948:3;11889:67;:::i;:::-;11882:74;;11986:30;11982:1;11977:3;11973:11;11966:51;12043:2;12038:3;12034:12;12027:19;;11872:180;;;:::o;12058:328::-;;12221:67;12285:2;12280:3;12221:67;:::i;:::-;12214:74;;12318:32;12314:1;12309:3;12305:11;12298:53;12377:2;12372:3;12368:12;12361:19;;12204:182;;;:::o;12392:368::-;;12555:67;12619:2;12614:3;12555:67;:::i;:::-;12548:74;;12652:34;12648:1;12643:3;12639:11;12632:55;12718:6;12713:2;12708:3;12704:12;12697:28;12751:2;12746:3;12742:12;12735:19;;12538:222;;;:::o;12766:323::-;;12929:67;12993:2;12988:3;12929:67;:::i;:::-;12922:74;;13026:27;13022:1;13017:3;13013:11;13006:48;13080:2;13075:3;13071:12;13064:19;;12912:177;;;:::o;13095:320::-;;13258:67;13322:2;13317:3;13258:67;:::i;:::-;13251:74;;13355:24;13351:1;13346:3;13342:11;13335:45;13406:2;13401:3;13397:12;13390:19;;13241:174;;;:::o;13421:376::-;;13584:67;13648:2;13643:3;13584:67;:::i;:::-;13577:74;;13681:34;13677:1;13672:3;13668:11;13661:55;13747:14;13742:2;13737:3;13733:12;13726:36;13788:2;13783:3;13779:12;13772:19;;13567:230;;;:::o;13803:388::-;;13966:67;14030:2;14025:3;13966:67;:::i;:::-;13959:74;;14063:34;14059:1;14054:3;14050:11;14043:55;14129:26;14124:2;14119:3;14115:12;14108:48;14182:2;14177:3;14173:12;14166:19;;13949:242;;;:::o;14197:374::-;;14360:67;14424:2;14419:3;14360:67;:::i;:::-;14353:74;;14457:34;14453:1;14448:3;14444:11;14437:55;14523:12;14518:2;14513:3;14509:12;14502:34;14562:2;14557:3;14553:12;14546:19;;14343:228;;;:::o;14577:373::-;;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14837:34;14833:1;14828:3;14824:11;14817:55;14903:11;14898:2;14893:3;14889:12;14882:33;14941:2;14936:3;14932:12;14925:19;;14723:227;;;:::o;14956:330::-;;15119:67;15183:2;15178:3;15119:67;:::i;:::-;15112:74;;15216:34;15212:1;15207:3;15203:11;15196:55;15277:2;15272:3;15268:12;15261:19;;15102:184;;;:::o;15292:330::-;;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15552:34;15548:1;15543:3;15539:11;15532:55;15613:2;15608:3;15604:12;15597:19;;15438:184;;;:::o;15628:377::-;;15791:67;15855:2;15850:3;15791:67;:::i;:::-;15784:74;;15888:34;15884:1;15879:3;15875:11;15868:55;15954:15;15949:2;15944:3;15940:12;15933:37;15996:2;15991:3;15987:12;15980:19;;15774:231;;;:::o;16011:376::-;;16174:67;16238:2;16233:3;16174:67;:::i;:::-;16167:74;;16271:34;16267:1;16262:3;16258:11;16251:55;16337:14;16332:2;16327:3;16323:12;16316:36;16378:2;16373:3;16369:12;16362:19;;16157:230;;;:::o;16393:330::-;;16556:67;16620:2;16615:3;16556:67;:::i;:::-;16549:74;;16653:34;16649:1;16644:3;16640:11;16633:55;16714:2;16709:3;16705:12;16698:19;;16539:184;;;:::o;16729:373::-;;16892:67;16956:2;16951:3;16892:67;:::i;:::-;16885:74;;16989:34;16985:1;16980:3;16976:11;16969:55;17055:11;17050:2;17045:3;17041:12;17034:33;17093:2;17088:3;17084:12;17077:19;;16875:227;;;:::o;17108:379::-;;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17368:34;17364:1;17359:3;17355:11;17348:55;17434:17;17429:2;17424:3;17420:12;17413:39;17478:2;17473:3;17469:12;17462:19;;17254:233;;;:::o;17493:317::-;;17656:67;17720:2;17715:3;17656:67;:::i;:::-;17649:74;;17753:21;17749:1;17744:3;17740:11;17733:42;17801:2;17796:3;17792:12;17785:19;;17639:171;;;:::o;17816:365::-;;17979:67;18043:2;18038:3;17979:67;:::i;:::-;17972:74;;18076:34;18072:1;18067:3;18063:11;18056:55;18142:3;18137:2;18132:3;18128:12;18121:25;18172:2;18167:3;18163:12;18156:19;;17962:219;;;:::o;18187:381::-;;18350:67;18414:2;18409:3;18350:67;:::i;:::-;18343:74;;18447:34;18443:1;18438:3;18434:11;18427:55;18513:19;18508:2;18503:3;18499:12;18492:41;18559:2;18554:3;18550:12;18543:19;;18333:235;;;:::o;18574:118::-;18661:24;18679:5;18661:24;:::i;:::-;18656:3;18649:37;18639:53;;:::o;18698:435::-;;18900:95;18991:3;18982:6;18900:95;:::i;:::-;18893:102;;19012:95;19103:3;19094:6;19012:95;:::i;:::-;19005:102;;19124:3;19117:10;;18882:251;;;;;:::o;19139:222::-;;19270:2;19259:9;19255:18;19247:26;;19283:71;19351:1;19340:9;19336:17;19327:6;19283:71;:::i;:::-;19237:124;;;;:::o;19367:640::-;;19600:3;19589:9;19585:19;19577:27;;19614:71;19682:1;19671:9;19667:17;19658:6;19614:71;:::i;:::-;19695:72;19763:2;19752:9;19748:18;19739:6;19695:72;:::i;:::-;19777;19845:2;19834:9;19830:18;19821:6;19777:72;:::i;:::-;19896:9;19890:4;19886:20;19881:2;19870:9;19866:18;19859:48;19924:76;19995:4;19986:6;19924:76;:::i;:::-;19916:84;;19567:440;;;;;;;:::o;20013:210::-;;20138:2;20127:9;20123:18;20115:26;;20151:65;20213:1;20202:9;20198:17;20189:6;20151:65;:::i;:::-;20105:118;;;;:::o;20229:313::-;;20380:2;20369:9;20365:18;20357:26;;20429:9;20423:4;20419:20;20415:1;20404:9;20400:17;20393:47;20457:78;20530:4;20521:6;20457:78;:::i;:::-;20449:86;;20347:195;;;;:::o;20548:419::-;;20752:2;20741:9;20737:18;20729:26;;20801:9;20795:4;20791:20;20787:1;20776:9;20772:17;20765:47;20829:131;20955:4;20829:131;:::i;:::-;20821:139;;20719:248;;;:::o;20973:419::-;;21177:2;21166:9;21162:18;21154:26;;21226:9;21220:4;21216:20;21212:1;21201:9;21197:17;21190:47;21254:131;21380:4;21254:131;:::i;:::-;21246:139;;21144:248;;;:::o;21398:419::-;;21602:2;21591:9;21587:18;21579:26;;21651:9;21645:4;21641:20;21637:1;21626:9;21622:17;21615:47;21679:131;21805:4;21679:131;:::i;:::-;21671:139;;21569:248;;;:::o;21823:419::-;;22027:2;22016:9;22012:18;22004:26;;22076:9;22070:4;22066:20;22062:1;22051:9;22047:17;22040:47;22104:131;22230:4;22104:131;:::i;:::-;22096:139;;21994:248;;;:::o;22248:419::-;;22452:2;22441:9;22437:18;22429:26;;22501:9;22495:4;22491:20;22487:1;22476:9;22472:17;22465:47;22529:131;22655:4;22529:131;:::i;:::-;22521:139;;22419:248;;;:::o;22673:419::-;;22877:2;22866:9;22862:18;22854:26;;22926:9;22920:4;22916:20;22912:1;22901:9;22897:17;22890:47;22954:131;23080:4;22954:131;:::i;:::-;22946:139;;22844:248;;;:::o;23098:419::-;;23302:2;23291:9;23287:18;23279:26;;23351:9;23345:4;23341:20;23337:1;23326:9;23322:17;23315:47;23379:131;23505:4;23379:131;:::i;:::-;23371:139;;23269:248;;;:::o;23523:419::-;;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23694:248;;;:::o;23948:419::-;;24152:2;24141:9;24137:18;24129:26;;24201:9;24195:4;24191:20;24187:1;24176:9;24172:17;24165:47;24229:131;24355:4;24229:131;:::i;:::-;24221:139;;24119:248;;;:::o;24373:419::-;;24577:2;24566:9;24562:18;24554:26;;24626:9;24620:4;24616:20;24612:1;24601:9;24597:17;24590:47;24654:131;24780:4;24654:131;:::i;:::-;24646:139;;24544:248;;;:::o;24798:419::-;;25002:2;24991:9;24987:18;24979:26;;25051:9;25045:4;25041:20;25037:1;25026:9;25022:17;25015:47;25079:131;25205:4;25079:131;:::i;:::-;25071:139;;24969:248;;;:::o;25223:419::-;;25427:2;25416:9;25412:18;25404:26;;25476:9;25470:4;25466:20;25462:1;25451:9;25447:17;25440:47;25504:131;25630:4;25504:131;:::i;:::-;25496:139;;25394:248;;;:::o;25648:419::-;;25852:2;25841:9;25837:18;25829:26;;25901:9;25895:4;25891:20;25887:1;25876:9;25872:17;25865:47;25929:131;26055:4;25929:131;:::i;:::-;25921:139;;25819:248;;;:::o;26073:419::-;;26277:2;26266:9;26262:18;26254:26;;26326:9;26320:4;26316:20;26312:1;26301:9;26297:17;26290:47;26354:131;26480:4;26354:131;:::i;:::-;26346:139;;26244:248;;;:::o;26498:419::-;;26702:2;26691:9;26687:18;26679:26;;26751:9;26745:4;26741:20;26737:1;26726:9;26722:17;26715:47;26779:131;26905:4;26779:131;:::i;:::-;26771:139;;26669:248;;;:::o;26923:419::-;;27127:2;27116:9;27112:18;27104:26;;27176:9;27170:4;27166:20;27162:1;27151:9;27147:17;27140:47;27204:131;27330:4;27204:131;:::i;:::-;27196:139;;27094:248;;;:::o;27348:419::-;;27552:2;27541:9;27537:18;27529:26;;27601:9;27595:4;27591:20;27587:1;27576:9;27572:17;27565:47;27629:131;27755:4;27629:131;:::i;:::-;27621:139;;27519:248;;;:::o;27773:419::-;;27977:2;27966:9;27962:18;27954:26;;28026:9;28020:4;28016:20;28012:1;28001:9;27997:17;27990:47;28054:131;28180:4;28054:131;:::i;:::-;28046:139;;27944:248;;;:::o;28198:419::-;;28402:2;28391:9;28387:18;28379:26;;28451:9;28445:4;28441:20;28437:1;28426:9;28422:17;28415:47;28479:131;28605:4;28479:131;:::i;:::-;28471:139;;28369:248;;;:::o;28623:419::-;;28827:2;28816:9;28812:18;28804:26;;28876:9;28870:4;28866:20;28862:1;28851:9;28847:17;28840:47;28904:131;29030:4;28904:131;:::i;:::-;28896:139;;28794:248;;;:::o;29048:419::-;;29252:2;29241:9;29237:18;29229:26;;29301:9;29295:4;29291:20;29287:1;29276:9;29272:17;29265:47;29329:131;29455:4;29329:131;:::i;:::-;29321:139;;29219:248;;;:::o;29473:419::-;;29677:2;29666:9;29662:18;29654:26;;29726:9;29720:4;29716:20;29712:1;29701:9;29697:17;29690:47;29754:131;29880:4;29754:131;:::i;:::-;29746:139;;29644:248;;;:::o;29898:222::-;;30029:2;30018:9;30014:18;30006:26;;30042:71;30110:1;30099:9;30095:17;30086:6;30042:71;:::i;:::-;29996:124;;;;:::o;30126:283::-;;30192:2;30186:9;30176:19;;30234:4;30226:6;30222:17;30341:6;30329:10;30326:22;30305:18;30293:10;30290:34;30287:62;30284:2;;;30352:18;;:::i;:::-;30284:2;30392:10;30388:2;30381:22;30166:243;;;;:::o;30415:311::-;;30582:18;30574:6;30571:30;30568:2;;;30604:18;;:::i;:::-;30568:2;30654:4;30646:6;30642:17;30634:25;;30714:4;30708;30704:15;30696:23;;30497:229;;;:::o;30732:311::-;;30899:18;30891:6;30888:30;30885:2;;;30921:18;;:::i;:::-;30885:2;30971:4;30963:6;30959:17;30951:25;;31031:4;31025;31021:15;31013:23;;30814:229;;;:::o;31049:331::-;;31200:18;31192:6;31189:30;31186:2;;;31222:18;;:::i;:::-;31186:2;31307:4;31303:9;31296:4;31288:6;31284:17;31280:33;31272:41;;31368:4;31362;31358:15;31350:23;;31115:265;;;:::o;31386:332::-;;31538:18;31530:6;31527:30;31524:2;;;31560:18;;:::i;:::-;31524:2;31645:4;31641:9;31634:4;31626:6;31622:17;31618:33;31610:41;;31706:4;31700;31696:15;31688:23;;31453:265;;;:::o;31724:98::-;;31809:5;31803:12;31793:22;;31782:40;;;:::o;31828:99::-;;31914:5;31908:12;31898:22;;31887:40;;;:::o;31933:168::-;;32050:6;32045:3;32038:19;32090:4;32085:3;32081:14;32066:29;;32028:73;;;;:::o;32107:169::-;;32225:6;32220:3;32213:19;32265:4;32260:3;32256:14;32241:29;;32203:73;;;;:::o;32282:148::-;;32421:3;32406:18;;32396:34;;;;:::o;32436:305::-;;32495:20;32513:1;32495:20;:::i;:::-;32490:25;;32529:20;32547:1;32529:20;:::i;:::-;32524:25;;32683:1;32615:66;32611:74;32608:1;32605:81;32602:2;;;32689:18;;:::i;:::-;32602:2;32733:1;32730;32726:9;32719:16;;32480:261;;;;:::o;32747:185::-;;32804:20;32822:1;32804:20;:::i;:::-;32799:25;;32838:20;32856:1;32838:20;:::i;:::-;32833:25;;32877:1;32867:2;;32882:18;;:::i;:::-;32867:2;32924:1;32921;32917:9;32912:14;;32789:143;;;;:::o;32938:348::-;;33001:20;33019:1;33001:20;:::i;:::-;32996:25;;33035:20;33053:1;33035:20;:::i;:::-;33030:25;;33223:1;33155:66;33151:74;33148:1;33145:81;33140:1;33133:9;33126:17;33122:105;33119:2;;;33230:18;;:::i;:::-;33119:2;33278:1;33275;33271:9;33260:20;;32986:300;;;;:::o;33292:191::-;;33352:20;33370:1;33352:20;:::i;:::-;33347:25;;33386:20;33404:1;33386:20;:::i;:::-;33381:25;;33425:1;33422;33419:8;33416:2;;;33430:18;;:::i;:::-;33416:2;33475:1;33472;33468:9;33460:17;;33337:146;;;;:::o;33489:96::-;;33555:24;33573:5;33555:24;:::i;:::-;33544:35;;33534:51;;;:::o;33591:90::-;;33668:5;33661:13;33654:21;33643:32;;33633:48;;;:::o;33687:149::-;;33763:66;33756:5;33752:78;33741:89;;33731:105;;;:::o;33842:126::-;;33919:42;33912:5;33908:54;33897:65;;33887:81;;;:::o;33974:77::-;;34040:5;34029:16;;34019:32;;;:::o;34057:154::-;34141:6;34136:3;34131;34118:30;34203:1;34194:6;34189:3;34185:16;34178:27;34108:103;;;:::o;34217:307::-;34285:1;34295:113;34309:6;34306:1;34303:13;34295:113;;;34394:1;34389:3;34385:11;34379:18;34375:1;34370:3;34366:11;34359:39;34331:2;34328:1;34324:10;34319:15;;34295:113;;;34426:6;34423:1;34420:13;34417:2;;;34506:1;34497:6;34492:3;34488:16;34481:27;34417:2;34266:258;;;;:::o;34530:320::-;;34611:1;34605:4;34601:12;34591:22;;34658:1;34652:4;34648:12;34679:18;34669:2;;34735:4;34727:6;34723:17;34713:27;;34669:2;34797;34789:6;34786:14;34766:18;34763:38;34760:2;;;34816:18;;:::i;:::-;34760:2;34581:269;;;;:::o;34856:233::-;;34918:24;34936:5;34918:24;:::i;:::-;34909:33;;34964:66;34957:5;34954:77;34951:2;;;35034:18;;:::i;:::-;34951:2;35081:1;35074:5;35070:13;35063:20;;34899:190;;;:::o;35095:176::-;;35144:20;35162:1;35144:20;:::i;:::-;35139:25;;35178:20;35196:1;35178:20;:::i;:::-;35173:25;;35217:1;35207:2;;35222:18;;:::i;:::-;35207:2;35263:1;35260;35256:9;35251:14;;35129:142;;;;:::o;35277:180::-;35325:77;35322:1;35315:88;35422:4;35419:1;35412:15;35446:4;35443:1;35436:15;35463:180;35511:77;35508:1;35501:88;35608:4;35605:1;35598:15;35632:4;35629:1;35622:15;35649:180;35697:77;35694:1;35687:88;35794:4;35791:1;35784:15;35818:4;35815:1;35808:15;35835:180;35883:77;35880:1;35873:88;35980:4;35977:1;35970:15;36004:4;36001:1;35994:15;36021:102;;36113:2;36109:7;36104:2;36097:5;36093:14;36089:28;36079:38;;36069:54;;;:::o;36129:122::-;36202:24;36220:5;36202:24;:::i;:::-;36195:5;36192:35;36182:2;;36241:1;36238;36231:12;36182:2;36172:79;:::o;36257:116::-;36327:21;36342:5;36327:21;:::i;:::-;36320:5;36317:32;36307:2;;36363:1;36360;36353:12;36307:2;36297:76;:::o;36379:120::-;36451:23;36468:5;36451:23;:::i;:::-;36444:5;36441:34;36431:2;;36489:1;36486;36479:12;36431:2;36421:78;:::o;36505:122::-;36578:24;36596:5;36578:24;:::i;:::-;36571:5;36568:35;36558:2;;36617:1;36614;36607:12;36558:2;36548:79;:::o
Swarm Source
ipfs://5e630f7691b819e4dda1cd4afb055ab260a1a574729d15d9f898116b95e262aa
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.