ERC-721
Overview
Max Total Supply
1,024 SODA
Holders
555
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 SODALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SodaPassNFT
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-18 */ /** *Submitted for verification at Etherscan.io on 2021-10-16 */ 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: @openzeppelin/contracts/access/Ownable.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; } } 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: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; // File: @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: @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/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: @openzeppelin/contracts/utils/Context.sol // File: @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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @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: @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: @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); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; // 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } //SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.3; contract SodaPassNFT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint16 public constant maxSupply = 5100; string private _baseTokenURI; uint256 public _startDate = 1634850000000; uint256 public _whitelistStartDate = 1634677200000; mapping (address => bool) private _whitelisted; constructor() ERC721("Soda Pass", "SODA") { for (uint8 i = 0; i < 100; i++) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId); } } function setStartDate(uint256 startDate) public onlyOwner { _startDate = startDate; } function setWhitelistStartDate(uint256 whitelistStartDate) public onlyOwner { _whitelistStartDate = whitelistStartDate; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function setBaseURI(string memory _newbaseTokenURI) public onlyOwner { _baseTokenURI = _newbaseTokenURI; } function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } // Get minting limit (for a single transaction) based on current token supply function getCurrentMintLimit() public view returns (uint8) { return block.timestamp >= _startDate ? 20 : 4; } // Get ether price based on current token supply function getCurrentPrice() public pure returns (uint64) { return 100_000_000_000_000_000; } function addUserToWhitelist(address wallet) public onlyOwner { _whitelisted[wallet] = true; } function removeUserFromWhitelist(address wallet) public onlyOwner { _whitelisted[wallet] = false; } // Mint new token(s) function mint(uint8 _quantityToMint) public payable { require(_startDate <= block.timestamp || (block.timestamp >= _whitelistStartDate && _whitelisted[msg.sender] == true), block.timestamp <= _whitelistStartDate ? "Sale is not open" : "Not whitelisted"); require(_quantityToMint >= 1, "Must mint at least 1"); require(block.timestamp >= _whitelistStartDate && block.timestamp <= _startDate ? (_quantityToMint + balanceOf(msg.sender) <= 4) : true, "Whitelisted mints are limited to 4 per wallet"); require( _quantityToMint <= getCurrentMintLimit(), "Maximum current buy limit for individual transaction exceeded" ); require( (_quantityToMint + totalSupply()) <= maxSupply, "Exceeds maximum supply" ); require( msg.value == (getCurrentPrice() * _quantityToMint), "Ether submitted does not match current price" ); for (uint8 i = 0; i < _quantityToMint; i++) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId); } } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } // Withdraw ether from contract function withdraw() public onlyOwner { require(address(this).balance > 0, "Balance must be positive"); uint256 _balance = address(this).balance; address _coldWallet = 0x9781F65af8324b40Ee9Ca421ea963642Bc8a8C2b; payable(_coldWallet).transfer((_balance * 9)/10); address _devWallet = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0; payable(_devWallet).transfer((_balance * 1)/10); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelistStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addUserToWhitelist","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantityToMint","type":"uint8"}],"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":"address","name":"wallet","type":"address"}],"name":"removeUserFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"_newbaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"whitelistStartDate","type":"uint256"}],"name":"setWhitelistStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405265017ca4a74c80600e5565017c9a5a9480600f553480156200002557600080fd5b506040518060400160405280600981526020017f536f6461205061737300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534f4441000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000aa92919062000a5a565b508060019080519060200190620000c392919062000a5a565b505050620000e6620000da6200015860201b60201c565b6200016060201b60201c565b60005b60648160ff16101562000151576200010d600c6200022660201b62001a1c1760201c565b600062000126600c6200023c60201b62001a321760201c565b90506200013a33826200024a60201b60201c565b508080620001489062000cdb565b915050620000e9565b5062000e09565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b49062000bc3565b60405180910390fd5b620002ce816200043060201b60201c565b1562000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000b7f565b60405180910390fd5b62000325600083836200049c60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000377919062000bf6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620004b4838383620004b960201b62001a401760201c565b505050565b620004d18383836200060060201b62001b541760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200051e5762000518816200060560201b60201c565b62000566565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000565576200056483826200064e60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005b357620005ad81620007cb60201b60201c565b620005fb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620005fa57620005f982826200091360201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000668846200099f60201b620011c91760201c565b62000674919062000c53565b90506000600760008481526020019081526020016000205490508181146200075a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620007e1919062000c53565b905060006009600084815260200190815260200160002054905060006008838154811062000838577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000881577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480620008f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006200092b836200099f60201b620011c91760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0a9062000ba1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000a689062000ca5565b90600052602060002090601f01602090048101928262000a8c576000855562000ad8565b82601f1062000aa757805160ff191683800117855562000ad8565b8280016001018555821562000ad8579182015b8281111562000ad757825182559160200191906001019062000aba565b5b50905062000ae7919062000aeb565b5090565b5b8082111562000b0657600081600090555060010162000aec565b5090565b600062000b19601c8362000be5565b915062000b268262000d68565b602082019050919050565b600062000b40602a8362000be5565b915062000b4d8262000d91565b604082019050919050565b600062000b6760208362000be5565b915062000b748262000de0565b602082019050919050565b6000602082019050818103600083015262000b9a8162000b0a565b9050919050565b6000602082019050818103600083015262000bbc8162000b31565b9050919050565b6000602082019050818103600083015262000bde8162000b58565b9050919050565b600082825260208201905092915050565b600062000c038262000c8e565b915062000c108362000c8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c485762000c4762000d0a565b5b828201905092915050565b600062000c608262000c8e565b915062000c6d8362000c8e565b92508282101562000c835762000c8262000d0a565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000cbe57607f821691505b6020821081141562000cd55762000cd462000d39565b5b50919050565b600062000ce88262000c98565b915060ff82141562000cff5762000cfe62000d0a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6147498062000e196000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063e985e9c511610064578063e985e9c51461069b578063eb91d37e146106d8578063f2fde38b14610703578063f9902bb11461072c576101d8565b8063b88d4fde146105e1578063c2656aff1461060a578063c87b56dd14610633578063d5abeb0114610670576101d8565b80638da5cb5b116100d15780638da5cb5b1461053757806395d89b4114610562578063a22cb4651461058d578063ac8daba0146105b6576101d8565b806370a0823114610491578063715018a6146104ce578063747b8050146104e557806382d95df51461050e576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103d257806355f804b31461040f5780636352211e146104385780636ecd230614610475576101d8565b80632f745c591461032a578063339181d9146103675780633ccfd60b1461039257806342842e0e146103a9576101d8565b8063095ea7b3116101b6578063095ea7b314610282578063125408bb146102ab57806318160ddd146102d657806323b872dd14610301576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613178565b610755565b6040516102119190613750565b60405180910390f35b34801561022657600080fd5b5061022f610767565b60405161023c919061376b565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061320b565b6107f9565b60405161027991906136e9565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a4919061313c565b61087e565b005b3480156102b757600080fd5b506102c0610996565b6040516102cd9190613ac8565b60405180910390f35b3480156102e257600080fd5b506102eb61099c565b6040516102f89190613ac8565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613036565b6109a9565b005b34801561033657600080fd5b50610351600480360381019061034c919061313c565b610a09565b60405161035e9190613ac8565b60405180910390f35b34801561037357600080fd5b5061037c610aae565b6040516103899190613afe565b60405180910390f35b34801561039e57600080fd5b506103a7610ac9565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613036565b610c82565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061320b565b610ca2565b6040516104069190613ac8565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906131ca565b610d39565b005b34801561044457600080fd5b5061045f600480360381019061045a919061320b565b610dcf565b60405161046c91906136e9565b60405180910390f35b61048f600480360381019061048a9190613234565b610e81565b005b34801561049d57600080fd5b506104b860048036038101906104b39190612fd1565b6111c9565b6040516104c59190613ac8565b60405180910390f35b3480156104da57600080fd5b506104e3611281565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612fd1565b611309565b005b34801561051a57600080fd5b506105356004803603810190610530919061320b565b6113e0565b005b34801561054357600080fd5b5061054c611466565b60405161055991906136e9565b60405180910390f35b34801561056e57600080fd5b50610577611490565b604051610584919061376b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613100565b611522565b005b3480156105c257600080fd5b506105cb6116a3565b6040516105d89190613ac8565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613085565b6116a9565b005b34801561061657600080fd5b50610631600480360381019061062c919061320b565b61170b565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061320b565b611791565b604051610667919061376b565b60405180910390f35b34801561067c57600080fd5b506106856117a3565b6040516106929190613aad565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190612ffa565b6117a9565b6040516106cf9190613750565b60405180910390f35b3480156106e457600080fd5b506106ed61183d565b6040516106fa9190613ae3565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612fd1565b61184d565b005b34801561073857600080fd5b50610753600480360381019061074e9190612fd1565b611945565b005b600061076082611b59565b9050919050565b60606000805461077690613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546107a290613e1f565b80156107ef5780601f106107c4576101008083540402835291602001916107ef565b820191906000526020600020905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b600061080482611bd3565b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a9061398d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088982610dcf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613a0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610919611c3f565b73ffffffffffffffffffffffffffffffffffffffff161480610948575061094781610942611c3f565b6117a9565b5b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906138ed565b60405180910390fd5b6109918383611c47565b505050565b600f5481565b6000600880549050905090565b6109ba6109b4611c3f565b82611d00565b6109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090613a6d565b60405180910390fd5b610a04838383611dde565b505050565b6000610a14836111c9565b8210610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c9061378d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600e54421015610ac1576004610ac4565b60145b905090565b610ad1611c3f565b73ffffffffffffffffffffffffffffffffffffffff16610aef611466565b73ffffffffffffffffffffffffffffffffffffffff1614610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c906139ad565b60405180910390fd5b60004711610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f9061384d565b60405180910390fd5b60004790506000739781f65af8324b40ee9ca421ea963642bc8a8c2b90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600985610bcf9190613c6a565b610bd99190613c39565b9081150290604051600060405180830381858888f19350505050158015610c04573d6000803e3d6000fd5b506000733097617cba85a26adc214a1f87b680be4b275cd090508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600186610c479190613c6a565b610c519190613c39565b9081150290604051600060405180830381858888f19350505050158015610c7c573d6000803e3d6000fd5b50505050565b610c9d838383604051806020016040528060008152506116a9565b505050565b6000610cac61099c565b8210610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613a8d565b60405180910390fd5b60088281548110610d27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d41611c3f565b73ffffffffffffffffffffffffffffffffffffffff16610d5f611466565b73ffffffffffffffffffffffffffffffffffffffff1614610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906139ad565b60405180910390fd5b80600d9080519060200190610dcb929190612de0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f9061392d565b60405180910390fd5b80915050919050565b42600e54111580610ef05750600f544210158015610eef575060011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b5b600f54421115610f35576040518060400160405280600f81526020017f4e6f742077686974656c69737465640000000000000000000000000000000000815250610f6c565b6040518060400160405280601081526020017f53616c65206973206e6f74206f70656e000000000000000000000000000000008152505b90610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa4919061376b565b60405180910390fd5b5060018160ff161015610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613a4d565b60405180910390fd5b600f5442101580156110095750600e544211155b611014576001611030565b600461101f336111c9565b8260ff1661102d9190613be3565b11155b61106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110669061382d565b60405180910390fd5b611077610aae565b60ff168160ff1611156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b69061386d565b60405180910390fd5b6113ec61ffff166110ce61099c565b8260ff166110dc9190613be3565b111561111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613a2d565b60405180910390fd5b8060ff1661112961183d565b6111339190613cc4565b67ffffffffffffffff16341461117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906137ad565b60405180910390fd5b60005b8160ff168160ff1610156111c557611199600c611a1c565b60006111a5600c611a32565b90506111b1338261203a565b5080806111bd90613ecb565b915050611181565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112319061390d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611289611c3f565b73ffffffffffffffffffffffffffffffffffffffff166112a7611466565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906139ad565b60405180910390fd5b6113076000612208565b565b611311611c3f565b73ffffffffffffffffffffffffffffffffffffffff1661132f611466565b73ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906139ad565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113e8611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611406611466565b73ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611453906139ad565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461149f90613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb90613e1f565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b5050505050905090565b61152a611c3f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f906138ad565b60405180910390fd5b80600560006115a5611c3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611652611c3f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116979190613750565b60405180910390a35050565b600e5481565b6116ba6116b4611c3f565b83611d00565b6116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613a6d565b60405180910390fd5b611705848484846122ce565b50505050565b611713611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611731611466565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e906139ad565b60405180910390fd5b80600f8190555050565b606061179c8261232a565b9050919050565b6113ec81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600067016345785d8a0000905090565b611855611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611873611466565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906139ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906137ed565b60405180910390fd5b61194281612208565b50565b61194d611c3f565b73ffffffffffffffffffffffffffffffffffffffff1661196b611466565b73ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b8906139ad565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611a4b838383611b54565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a8e57611a898161247c565b611acd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611acc57611acb83826124c5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1057611b0b81612632565b611b4f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b4e57611b4d8282612775565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bcc5750611bcb826127f4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cba83610dcf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d0b82611bd3565b611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d41906138cd565b60405180910390fd5b6000611d5583610dcf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc457508373ffffffffffffffffffffffffffffffffffffffff16611dac846107f9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dd55750611dd481856117a9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dfe82610dcf565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b906139cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb9061388d565b60405180910390fd5b611ecf8383836128d6565b611eda600082611c47565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2a9190613d06565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f819190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061394d565b60405180910390fd5b6120b381611bd3565b156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea9061380d565b60405180910390fd5b6120ff600083836128d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214f9190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122d9848484611dde565b6122e5848484846128e6565b612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906137cd565b60405180910390fd5b50505050565b606061233582611bd3565b612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9061396d565b60405180910390fd5b6000600a6000848152602001908152602001600020805461239490613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546123c090613e1f565b801561240d5780601f106123e25761010080835404028352916020019161240d565b820191906000526020600020905b8154815290600101906020018083116123f057829003601f168201915b50505050509050600061241e612a7d565b9050600081511415612434578192505050612477565b6000825111156124695780826040516020016124519291906136c5565b60405160208183030381529060405292505050612477565b61247284612b0f565b925050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016124d2846111c9565b6124dc9190613d06565b90506000600760008481526020019081526020016000205490508181146125c1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126469190613d06565b905060006009600084815260200190815260200160002054905060006008838154811061269c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106126e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612780836111c9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128bf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128cf57506128ce82612bb6565b5b9050919050565b6128e1838383611a40565b505050565b60006129078473ffffffffffffffffffffffffffffffffffffffff16612c20565b15612a70578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612930611c3f565b8786866040518563ffffffff1660e01b81526004016129529493929190613704565b602060405180830381600087803b15801561296c57600080fd5b505af192505050801561299d57506040513d601f19601f8201168201806040525081019061299a91906131a1565b60015b612a20573d80600081146129cd576040519150601f19603f3d011682016040523d82523d6000602084013e6129d2565b606091505b50600081511415612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f906137cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a75565b600190505b949350505050565b6060600d8054612a8c90613e1f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab890613e1f565b8015612b055780601f10612ada57610100808354040283529160200191612b05565b820191906000526020600020905b815481529060010190602001808311612ae857829003601f168201915b5050505050905090565b6060612b1a82611bd3565b612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b50906139ed565b60405180910390fd5b6000612b63612a7d565b90506000815111612b835760405180602001604052806000815250612bae565b80612b8d84612c33565b604051602001612b9e9291906136c5565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b60606000821415612c7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ddb565b600082905060005b60008214612cad578080612c9690613e82565b915050600a82612ca69190613c39565b9150612c83565b60008167ffffffffffffffff811115612cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d215781602001600182028036833780820191505090505b5090505b60008514612dd457600182612d3a9190613d06565b9150600a85612d499190613ef5565b6030612d559190613be3565b60f81b818381518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dcd9190613c39565b9450612d25565b8093505050505b919050565b828054612dec90613e1f565b90600052602060002090601f016020900481019282612e0e5760008555612e55565b82601f10612e2757805160ff1916838001178555612e55565b82800160010185558215612e55579182015b82811115612e54578251825591602001919060010190612e39565b5b509050612e629190612e66565b5090565b5b80821115612e7f576000816000905550600101612e67565b5090565b6000612e96612e9184613b3e565b613b19565b905082815260208101848484011115612eae57600080fd5b612eb9848285613ddd565b509392505050565b6000612ed4612ecf84613b6f565b613b19565b905082815260208101848484011115612eec57600080fd5b612ef7848285613ddd565b509392505050565b600081359050612f0e816146a0565b92915050565b600081359050612f23816146b7565b92915050565b600081359050612f38816146ce565b92915050565b600081519050612f4d816146ce565b92915050565b600082601f830112612f6457600080fd5b8135612f74848260208601612e83565b91505092915050565b600082601f830112612f8e57600080fd5b8135612f9e848260208601612ec1565b91505092915050565b600081359050612fb6816146e5565b92915050565b600081359050612fcb816146fc565b92915050565b600060208284031215612fe357600080fd5b6000612ff184828501612eff565b91505092915050565b6000806040838503121561300d57600080fd5b600061301b85828601612eff565b925050602061302c85828601612eff565b9150509250929050565b60008060006060848603121561304b57600080fd5b600061305986828701612eff565b935050602061306a86828701612eff565b925050604061307b86828701612fa7565b9150509250925092565b6000806000806080858703121561309b57600080fd5b60006130a987828801612eff565b94505060206130ba87828801612eff565b93505060406130cb87828801612fa7565b925050606085013567ffffffffffffffff8111156130e857600080fd5b6130f487828801612f53565b91505092959194509250565b6000806040838503121561311357600080fd5b600061312185828601612eff565b925050602061313285828601612f14565b9150509250929050565b6000806040838503121561314f57600080fd5b600061315d85828601612eff565b925050602061316e85828601612fa7565b9150509250929050565b60006020828403121561318a57600080fd5b600061319884828501612f29565b91505092915050565b6000602082840312156131b357600080fd5b60006131c184828501612f3e565b91505092915050565b6000602082840312156131dc57600080fd5b600082013567ffffffffffffffff8111156131f657600080fd5b61320284828501612f7d565b91505092915050565b60006020828403121561321d57600080fd5b600061322b84828501612fa7565b91505092915050565b60006020828403121561324657600080fd5b600061325484828501612fbc565b91505092915050565b61326681613d3a565b82525050565b61327581613d4c565b82525050565b600061328682613ba0565b6132908185613bb6565b93506132a0818560208601613dec565b6132a981613fe2565b840191505092915050565b60006132bf82613bab565b6132c98185613bc7565b93506132d9818560208601613dec565b6132e281613fe2565b840191505092915050565b60006132f882613bab565b6133028185613bd8565b9350613312818560208601613dec565b80840191505092915050565b600061332b602b83613bc7565b915061333682613ff3565b604082019050919050565b600061334e602c83613bc7565b915061335982614042565b604082019050919050565b6000613371603283613bc7565b915061337c82614091565b604082019050919050565b6000613394602683613bc7565b915061339f826140e0565b604082019050919050565b60006133b7601c83613bc7565b91506133c28261412f565b602082019050919050565b60006133da602d83613bc7565b91506133e582614158565b604082019050919050565b60006133fd601883613bc7565b9150613408826141a7565b602082019050919050565b6000613420603d83613bc7565b915061342b826141d0565b604082019050919050565b6000613443602483613bc7565b915061344e8261421f565b604082019050919050565b6000613466601983613bc7565b91506134718261426e565b602082019050919050565b6000613489602c83613bc7565b915061349482614297565b604082019050919050565b60006134ac603883613bc7565b91506134b7826142e6565b604082019050919050565b60006134cf602a83613bc7565b91506134da82614335565b604082019050919050565b60006134f2602983613bc7565b91506134fd82614384565b604082019050919050565b6000613515602083613bc7565b9150613520826143d3565b602082019050919050565b6000613538603183613bc7565b9150613543826143fc565b604082019050919050565b600061355b602c83613bc7565b91506135668261444b565b604082019050919050565b600061357e602083613bc7565b91506135898261449a565b602082019050919050565b60006135a1602983613bc7565b91506135ac826144c3565b604082019050919050565b60006135c4602f83613bc7565b91506135cf82614512565b604082019050919050565b60006135e7602183613bc7565b91506135f282614561565b604082019050919050565b600061360a601683613bc7565b9150613615826145b0565b602082019050919050565b600061362d601483613bc7565b9150613638826145d9565b602082019050919050565b6000613650603183613bc7565b915061365b82614602565b604082019050919050565b6000613673602c83613bc7565b915061367e82614651565b604082019050919050565b61369281613d84565b82525050565b6136a181613db2565b82525050565b6136b081613dbc565b82525050565b6136bf81613dd0565b82525050565b60006136d182856132ed565b91506136dd82846132ed565b91508190509392505050565b60006020820190506136fe600083018461325d565b92915050565b6000608082019050613719600083018761325d565b613726602083018661325d565b6137336040830185613698565b8181036060830152613745818461327b565b905095945050505050565b6000602082019050613765600083018461326c565b92915050565b6000602082019050818103600083015261378581846132b4565b905092915050565b600060208201905081810360008301526137a68161331e565b9050919050565b600060208201905081810360008301526137c681613341565b9050919050565b600060208201905081810360008301526137e681613364565b9050919050565b6000602082019050818103600083015261380681613387565b9050919050565b60006020820190508181036000830152613826816133aa565b9050919050565b60006020820190508181036000830152613846816133cd565b9050919050565b60006020820190508181036000830152613866816133f0565b9050919050565b6000602082019050818103600083015261388681613413565b9050919050565b600060208201905081810360008301526138a681613436565b9050919050565b600060208201905081810360008301526138c681613459565b9050919050565b600060208201905081810360008301526138e68161347c565b9050919050565b600060208201905081810360008301526139068161349f565b9050919050565b60006020820190508181036000830152613926816134c2565b9050919050565b60006020820190508181036000830152613946816134e5565b9050919050565b6000602082019050818103600083015261396681613508565b9050919050565b600060208201905081810360008301526139868161352b565b9050919050565b600060208201905081810360008301526139a68161354e565b9050919050565b600060208201905081810360008301526139c681613571565b9050919050565b600060208201905081810360008301526139e681613594565b9050919050565b60006020820190508181036000830152613a06816135b7565b9050919050565b60006020820190508181036000830152613a26816135da565b9050919050565b60006020820190508181036000830152613a46816135fd565b9050919050565b60006020820190508181036000830152613a6681613620565b9050919050565b60006020820190508181036000830152613a8681613643565b9050919050565b60006020820190508181036000830152613aa681613666565b9050919050565b6000602082019050613ac26000830184613689565b92915050565b6000602082019050613add6000830184613698565b92915050565b6000602082019050613af860008301846136a7565b92915050565b6000602082019050613b1360008301846136b6565b92915050565b6000613b23613b34565b9050613b2f8282613e51565b919050565b6000604051905090565b600067ffffffffffffffff821115613b5957613b58613fb3565b5b613b6282613fe2565b9050602081019050919050565b600067ffffffffffffffff821115613b8a57613b89613fb3565b5b613b9382613fe2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bee82613db2565b9150613bf983613db2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c2e57613c2d613f26565b5b828201905092915050565b6000613c4482613db2565b9150613c4f83613db2565b925082613c5f57613c5e613f55565b5b828204905092915050565b6000613c7582613db2565b9150613c8083613db2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cb957613cb8613f26565b5b828202905092915050565b6000613ccf82613dbc565b9150613cda83613dbc565b92508167ffffffffffffffff0483118215151615613cfb57613cfa613f26565b5b828202905092915050565b6000613d1182613db2565b9150613d1c83613db2565b925082821015613d2f57613d2e613f26565b5b828203905092915050565b6000613d4582613d92565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613e0a578082015181840152602081019050613def565b83811115613e19576000848401525b50505050565b60006002820490506001821680613e3757607f821691505b60208210811415613e4b57613e4a613f84565b5b50919050565b613e5a82613fe2565b810181811067ffffffffffffffff82111715613e7957613e78613fb3565b5b80604052505050565b6000613e8d82613db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec057613ebf613f26565b5b600182019050919050565b6000613ed682613dd0565b915060ff821415613eea57613ee9613f26565b5b600182019050919050565b6000613f0082613db2565b9150613f0b83613db2565b925082613f1b57613f1a613f55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c6973746564206d696e747320617265206c696d6974656420746f60008201527f2034207065722077616c6c657400000000000000000000000000000000000000602082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6146a981613d3a565b81146146b457600080fd5b50565b6146c081613d4c565b81146146cb57600080fd5b50565b6146d781613d58565b81146146e257600080fd5b50565b6146ee81613db2565b81146146f957600080fd5b50565b61470581613dd0565b811461471057600080fd5b5056fea2646970667358221220c8d7b977567e27c7691407a443b648f179e7d996a7ff5c318fa88feeb1763c4164736f6c63430008030033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063e985e9c511610064578063e985e9c51461069b578063eb91d37e146106d8578063f2fde38b14610703578063f9902bb11461072c576101d8565b8063b88d4fde146105e1578063c2656aff1461060a578063c87b56dd14610633578063d5abeb0114610670576101d8565b80638da5cb5b116100d15780638da5cb5b1461053757806395d89b4114610562578063a22cb4651461058d578063ac8daba0146105b6576101d8565b806370a0823114610491578063715018a6146104ce578063747b8050146104e557806382d95df51461050e576101d8565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146103d257806355f804b31461040f5780636352211e146104385780636ecd230614610475576101d8565b80632f745c591461032a578063339181d9146103675780633ccfd60b1461039257806342842e0e146103a9576101d8565b8063095ea7b3116101b6578063095ea7b314610282578063125408bb146102ab57806318160ddd146102d657806323b872dd14610301576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613178565b610755565b6040516102119190613750565b60405180910390f35b34801561022657600080fd5b5061022f610767565b60405161023c919061376b565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061320b565b6107f9565b60405161027991906136e9565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a4919061313c565b61087e565b005b3480156102b757600080fd5b506102c0610996565b6040516102cd9190613ac8565b60405180910390f35b3480156102e257600080fd5b506102eb61099c565b6040516102f89190613ac8565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613036565b6109a9565b005b34801561033657600080fd5b50610351600480360381019061034c919061313c565b610a09565b60405161035e9190613ac8565b60405180910390f35b34801561037357600080fd5b5061037c610aae565b6040516103899190613afe565b60405180910390f35b34801561039e57600080fd5b506103a7610ac9565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613036565b610c82565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061320b565b610ca2565b6040516104069190613ac8565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906131ca565b610d39565b005b34801561044457600080fd5b5061045f600480360381019061045a919061320b565b610dcf565b60405161046c91906136e9565b60405180910390f35b61048f600480360381019061048a9190613234565b610e81565b005b34801561049d57600080fd5b506104b860048036038101906104b39190612fd1565b6111c9565b6040516104c59190613ac8565b60405180910390f35b3480156104da57600080fd5b506104e3611281565b005b3480156104f157600080fd5b5061050c60048036038101906105079190612fd1565b611309565b005b34801561051a57600080fd5b506105356004803603810190610530919061320b565b6113e0565b005b34801561054357600080fd5b5061054c611466565b60405161055991906136e9565b60405180910390f35b34801561056e57600080fd5b50610577611490565b604051610584919061376b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613100565b611522565b005b3480156105c257600080fd5b506105cb6116a3565b6040516105d89190613ac8565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613085565b6116a9565b005b34801561061657600080fd5b50610631600480360381019061062c919061320b565b61170b565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061320b565b611791565b604051610667919061376b565b60405180910390f35b34801561067c57600080fd5b506106856117a3565b6040516106929190613aad565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190612ffa565b6117a9565b6040516106cf9190613750565b60405180910390f35b3480156106e457600080fd5b506106ed61183d565b6040516106fa9190613ae3565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612fd1565b61184d565b005b34801561073857600080fd5b50610753600480360381019061074e9190612fd1565b611945565b005b600061076082611b59565b9050919050565b60606000805461077690613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546107a290613e1f565b80156107ef5780601f106107c4576101008083540402835291602001916107ef565b820191906000526020600020905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b600061080482611bd3565b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a9061398d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088982610dcf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613a0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610919611c3f565b73ffffffffffffffffffffffffffffffffffffffff161480610948575061094781610942611c3f565b6117a9565b5b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906138ed565b60405180910390fd5b6109918383611c47565b505050565b600f5481565b6000600880549050905090565b6109ba6109b4611c3f565b82611d00565b6109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090613a6d565b60405180910390fd5b610a04838383611dde565b505050565b6000610a14836111c9565b8210610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c9061378d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600e54421015610ac1576004610ac4565b60145b905090565b610ad1611c3f565b73ffffffffffffffffffffffffffffffffffffffff16610aef611466565b73ffffffffffffffffffffffffffffffffffffffff1614610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c906139ad565b60405180910390fd5b60004711610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f9061384d565b60405180910390fd5b60004790506000739781f65af8324b40ee9ca421ea963642bc8a8c2b90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600985610bcf9190613c6a565b610bd99190613c39565b9081150290604051600060405180830381858888f19350505050158015610c04573d6000803e3d6000fd5b506000733097617cba85a26adc214a1f87b680be4b275cd090508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600186610c479190613c6a565b610c519190613c39565b9081150290604051600060405180830381858888f19350505050158015610c7c573d6000803e3d6000fd5b50505050565b610c9d838383604051806020016040528060008152506116a9565b505050565b6000610cac61099c565b8210610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613a8d565b60405180910390fd5b60088281548110610d27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d41611c3f565b73ffffffffffffffffffffffffffffffffffffffff16610d5f611466565b73ffffffffffffffffffffffffffffffffffffffff1614610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906139ad565b60405180910390fd5b80600d9080519060200190610dcb929190612de0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f9061392d565b60405180910390fd5b80915050919050565b42600e54111580610ef05750600f544210158015610eef575060011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b5b600f54421115610f35576040518060400160405280600f81526020017f4e6f742077686974656c69737465640000000000000000000000000000000000815250610f6c565b6040518060400160405280601081526020017f53616c65206973206e6f74206f70656e000000000000000000000000000000008152505b90610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa4919061376b565b60405180910390fd5b5060018160ff161015610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613a4d565b60405180910390fd5b600f5442101580156110095750600e544211155b611014576001611030565b600461101f336111c9565b8260ff1661102d9190613be3565b11155b61106f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110669061382d565b60405180910390fd5b611077610aae565b60ff168160ff1611156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b69061386d565b60405180910390fd5b6113ec61ffff166110ce61099c565b8260ff166110dc9190613be3565b111561111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613a2d565b60405180910390fd5b8060ff1661112961183d565b6111339190613cc4565b67ffffffffffffffff16341461117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906137ad565b60405180910390fd5b60005b8160ff168160ff1610156111c557611199600c611a1c565b60006111a5600c611a32565b90506111b1338261203a565b5080806111bd90613ecb565b915050611181565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112319061390d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611289611c3f565b73ffffffffffffffffffffffffffffffffffffffff166112a7611466565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f4906139ad565b60405180910390fd5b6113076000612208565b565b611311611c3f565b73ffffffffffffffffffffffffffffffffffffffff1661132f611466565b73ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906139ad565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113e8611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611406611466565b73ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611453906139ad565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461149f90613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546114cb90613e1f565b80156115185780601f106114ed57610100808354040283529160200191611518565b820191906000526020600020905b8154815290600101906020018083116114fb57829003601f168201915b5050505050905090565b61152a611c3f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f906138ad565b60405180910390fd5b80600560006115a5611c3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611652611c3f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116979190613750565b60405180910390a35050565b600e5481565b6116ba6116b4611c3f565b83611d00565b6116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613a6d565b60405180910390fd5b611705848484846122ce565b50505050565b611713611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611731611466565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e906139ad565b60405180910390fd5b80600f8190555050565b606061179c8261232a565b9050919050565b6113ec81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600067016345785d8a0000905090565b611855611c3f565b73ffffffffffffffffffffffffffffffffffffffff16611873611466565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906139ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906137ed565b60405180910390fd5b61194281612208565b50565b61194d611c3f565b73ffffffffffffffffffffffffffffffffffffffff1661196b611466565b73ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b8906139ad565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611a4b838383611b54565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a8e57611a898161247c565b611acd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611acc57611acb83826124c5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1057611b0b81612632565b611b4f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b4e57611b4d8282612775565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bcc5750611bcb826127f4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cba83610dcf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d0b82611bd3565b611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d41906138cd565b60405180910390fd5b6000611d5583610dcf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc457508373ffffffffffffffffffffffffffffffffffffffff16611dac846107f9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dd55750611dd481856117a9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dfe82610dcf565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b906139cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb9061388d565b60405180910390fd5b611ecf8383836128d6565b611eda600082611c47565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2a9190613d06565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f819190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061394d565b60405180910390fd5b6120b381611bd3565b156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea9061380d565b60405180910390fd5b6120ff600083836128d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214f9190613be3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122d9848484611dde565b6122e5848484846128e6565b612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906137cd565b60405180910390fd5b50505050565b606061233582611bd3565b612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9061396d565b60405180910390fd5b6000600a6000848152602001908152602001600020805461239490613e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546123c090613e1f565b801561240d5780601f106123e25761010080835404028352916020019161240d565b820191906000526020600020905b8154815290600101906020018083116123f057829003601f168201915b50505050509050600061241e612a7d565b9050600081511415612434578192505050612477565b6000825111156124695780826040516020016124519291906136c5565b60405160208183030381529060405292505050612477565b61247284612b0f565b925050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016124d2846111c9565b6124dc9190613d06565b90506000600760008481526020019081526020016000205490508181146125c1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126469190613d06565b905060006009600084815260200190815260200160002054905060006008838154811061269c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106126e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612759577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612780836111c9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128bf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128cf57506128ce82612bb6565b5b9050919050565b6128e1838383611a40565b505050565b60006129078473ffffffffffffffffffffffffffffffffffffffff16612c20565b15612a70578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612930611c3f565b8786866040518563ffffffff1660e01b81526004016129529493929190613704565b602060405180830381600087803b15801561296c57600080fd5b505af192505050801561299d57506040513d601f19601f8201168201806040525081019061299a91906131a1565b60015b612a20573d80600081146129cd576040519150601f19603f3d011682016040523d82523d6000602084013e6129d2565b606091505b50600081511415612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f906137cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a75565b600190505b949350505050565b6060600d8054612a8c90613e1f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab890613e1f565b8015612b055780601f10612ada57610100808354040283529160200191612b05565b820191906000526020600020905b815481529060010190602001808311612ae857829003601f168201915b5050505050905090565b6060612b1a82611bd3565b612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b50906139ed565b60405180910390fd5b6000612b63612a7d565b90506000815111612b835760405180602001604052806000815250612bae565b80612b8d84612c33565b604051602001612b9e9291906136c5565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b60606000821415612c7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ddb565b600082905060005b60008214612cad578080612c9690613e82565b915050600a82612ca69190613c39565b9150612c83565b60008167ffffffffffffffff811115612cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d215781602001600182028036833780820191505090505b5090505b60008514612dd457600182612d3a9190613d06565b9150600a85612d499190613ef5565b6030612d559190613be3565b60f81b818381518110612d91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dcd9190613c39565b9450612d25565b8093505050505b919050565b828054612dec90613e1f565b90600052602060002090601f016020900481019282612e0e5760008555612e55565b82601f10612e2757805160ff1916838001178555612e55565b82800160010185558215612e55579182015b82811115612e54578251825591602001919060010190612e39565b5b509050612e629190612e66565b5090565b5b80821115612e7f576000816000905550600101612e67565b5090565b6000612e96612e9184613b3e565b613b19565b905082815260208101848484011115612eae57600080fd5b612eb9848285613ddd565b509392505050565b6000612ed4612ecf84613b6f565b613b19565b905082815260208101848484011115612eec57600080fd5b612ef7848285613ddd565b509392505050565b600081359050612f0e816146a0565b92915050565b600081359050612f23816146b7565b92915050565b600081359050612f38816146ce565b92915050565b600081519050612f4d816146ce565b92915050565b600082601f830112612f6457600080fd5b8135612f74848260208601612e83565b91505092915050565b600082601f830112612f8e57600080fd5b8135612f9e848260208601612ec1565b91505092915050565b600081359050612fb6816146e5565b92915050565b600081359050612fcb816146fc565b92915050565b600060208284031215612fe357600080fd5b6000612ff184828501612eff565b91505092915050565b6000806040838503121561300d57600080fd5b600061301b85828601612eff565b925050602061302c85828601612eff565b9150509250929050565b60008060006060848603121561304b57600080fd5b600061305986828701612eff565b935050602061306a86828701612eff565b925050604061307b86828701612fa7565b9150509250925092565b6000806000806080858703121561309b57600080fd5b60006130a987828801612eff565b94505060206130ba87828801612eff565b93505060406130cb87828801612fa7565b925050606085013567ffffffffffffffff8111156130e857600080fd5b6130f487828801612f53565b91505092959194509250565b6000806040838503121561311357600080fd5b600061312185828601612eff565b925050602061313285828601612f14565b9150509250929050565b6000806040838503121561314f57600080fd5b600061315d85828601612eff565b925050602061316e85828601612fa7565b9150509250929050565b60006020828403121561318a57600080fd5b600061319884828501612f29565b91505092915050565b6000602082840312156131b357600080fd5b60006131c184828501612f3e565b91505092915050565b6000602082840312156131dc57600080fd5b600082013567ffffffffffffffff8111156131f657600080fd5b61320284828501612f7d565b91505092915050565b60006020828403121561321d57600080fd5b600061322b84828501612fa7565b91505092915050565b60006020828403121561324657600080fd5b600061325484828501612fbc565b91505092915050565b61326681613d3a565b82525050565b61327581613d4c565b82525050565b600061328682613ba0565b6132908185613bb6565b93506132a0818560208601613dec565b6132a981613fe2565b840191505092915050565b60006132bf82613bab565b6132c98185613bc7565b93506132d9818560208601613dec565b6132e281613fe2565b840191505092915050565b60006132f882613bab565b6133028185613bd8565b9350613312818560208601613dec565b80840191505092915050565b600061332b602b83613bc7565b915061333682613ff3565b604082019050919050565b600061334e602c83613bc7565b915061335982614042565b604082019050919050565b6000613371603283613bc7565b915061337c82614091565b604082019050919050565b6000613394602683613bc7565b915061339f826140e0565b604082019050919050565b60006133b7601c83613bc7565b91506133c28261412f565b602082019050919050565b60006133da602d83613bc7565b91506133e582614158565b604082019050919050565b60006133fd601883613bc7565b9150613408826141a7565b602082019050919050565b6000613420603d83613bc7565b915061342b826141d0565b604082019050919050565b6000613443602483613bc7565b915061344e8261421f565b604082019050919050565b6000613466601983613bc7565b91506134718261426e565b602082019050919050565b6000613489602c83613bc7565b915061349482614297565b604082019050919050565b60006134ac603883613bc7565b91506134b7826142e6565b604082019050919050565b60006134cf602a83613bc7565b91506134da82614335565b604082019050919050565b60006134f2602983613bc7565b91506134fd82614384565b604082019050919050565b6000613515602083613bc7565b9150613520826143d3565b602082019050919050565b6000613538603183613bc7565b9150613543826143fc565b604082019050919050565b600061355b602c83613bc7565b91506135668261444b565b604082019050919050565b600061357e602083613bc7565b91506135898261449a565b602082019050919050565b60006135a1602983613bc7565b91506135ac826144c3565b604082019050919050565b60006135c4602f83613bc7565b91506135cf82614512565b604082019050919050565b60006135e7602183613bc7565b91506135f282614561565b604082019050919050565b600061360a601683613bc7565b9150613615826145b0565b602082019050919050565b600061362d601483613bc7565b9150613638826145d9565b602082019050919050565b6000613650603183613bc7565b915061365b82614602565b604082019050919050565b6000613673602c83613bc7565b915061367e82614651565b604082019050919050565b61369281613d84565b82525050565b6136a181613db2565b82525050565b6136b081613dbc565b82525050565b6136bf81613dd0565b82525050565b60006136d182856132ed565b91506136dd82846132ed565b91508190509392505050565b60006020820190506136fe600083018461325d565b92915050565b6000608082019050613719600083018761325d565b613726602083018661325d565b6137336040830185613698565b8181036060830152613745818461327b565b905095945050505050565b6000602082019050613765600083018461326c565b92915050565b6000602082019050818103600083015261378581846132b4565b905092915050565b600060208201905081810360008301526137a68161331e565b9050919050565b600060208201905081810360008301526137c681613341565b9050919050565b600060208201905081810360008301526137e681613364565b9050919050565b6000602082019050818103600083015261380681613387565b9050919050565b60006020820190508181036000830152613826816133aa565b9050919050565b60006020820190508181036000830152613846816133cd565b9050919050565b60006020820190508181036000830152613866816133f0565b9050919050565b6000602082019050818103600083015261388681613413565b9050919050565b600060208201905081810360008301526138a681613436565b9050919050565b600060208201905081810360008301526138c681613459565b9050919050565b600060208201905081810360008301526138e68161347c565b9050919050565b600060208201905081810360008301526139068161349f565b9050919050565b60006020820190508181036000830152613926816134c2565b9050919050565b60006020820190508181036000830152613946816134e5565b9050919050565b6000602082019050818103600083015261396681613508565b9050919050565b600060208201905081810360008301526139868161352b565b9050919050565b600060208201905081810360008301526139a68161354e565b9050919050565b600060208201905081810360008301526139c681613571565b9050919050565b600060208201905081810360008301526139e681613594565b9050919050565b60006020820190508181036000830152613a06816135b7565b9050919050565b60006020820190508181036000830152613a26816135da565b9050919050565b60006020820190508181036000830152613a46816135fd565b9050919050565b60006020820190508181036000830152613a6681613620565b9050919050565b60006020820190508181036000830152613a8681613643565b9050919050565b60006020820190508181036000830152613aa681613666565b9050919050565b6000602082019050613ac26000830184613689565b92915050565b6000602082019050613add6000830184613698565b92915050565b6000602082019050613af860008301846136a7565b92915050565b6000602082019050613b1360008301846136b6565b92915050565b6000613b23613b34565b9050613b2f8282613e51565b919050565b6000604051905090565b600067ffffffffffffffff821115613b5957613b58613fb3565b5b613b6282613fe2565b9050602081019050919050565b600067ffffffffffffffff821115613b8a57613b89613fb3565b5b613b9382613fe2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bee82613db2565b9150613bf983613db2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c2e57613c2d613f26565b5b828201905092915050565b6000613c4482613db2565b9150613c4f83613db2565b925082613c5f57613c5e613f55565b5b828204905092915050565b6000613c7582613db2565b9150613c8083613db2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cb957613cb8613f26565b5b828202905092915050565b6000613ccf82613dbc565b9150613cda83613dbc565b92508167ffffffffffffffff0483118215151615613cfb57613cfa613f26565b5b828202905092915050565b6000613d1182613db2565b9150613d1c83613db2565b925082821015613d2f57613d2e613f26565b5b828203905092915050565b6000613d4582613d92565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613e0a578082015181840152602081019050613def565b83811115613e19576000848401525b50505050565b60006002820490506001821680613e3757607f821691505b60208210811415613e4b57613e4a613f84565b5b50919050565b613e5a82613fe2565b810181811067ffffffffffffffff82111715613e7957613e78613fb3565b5b80604052505050565b6000613e8d82613db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec057613ebf613f26565b5b600182019050919050565b6000613ed682613dd0565b915060ff821415613eea57613ee9613f26565b5b600182019050919050565b6000613f0082613db2565b9150613f0b83613db2565b925082613f1b57613f1a613f55565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f57686974656c6973746564206d696e747320617265206c696d6974656420746f60008201527f2034207065722077616c6c657400000000000000000000000000000000000000602082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6146a981613d3a565b81146146b457600080fd5b50565b6146c081613d4c565b81146146cb57600080fd5b50565b6146d781613d58565b81146146e257600080fd5b50565b6146ee81613db2565b81146146f957600080fd5b50565b61470581613dd0565b811461471057600080fd5b5056fea2646970667358221220c8d7b977567e27c7691407a443b648f179e7d996a7ff5c318fa88feeb1763c4164736f6c63430008030033
Deployed Bytecode Sourcemap
46272:4288:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47551:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27775:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46577:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38854:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28665:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38522:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48098:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50102:455;;;;;;;;;;;;;:::i;:::-;;29075:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39044:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47773:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25910:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48670:1179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25640:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3849:94;;;;;;;;;;;;;:::i;:::-;;48400:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46947:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3198:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26385:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46529:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29331:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47058:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49861:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46442:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28434:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48283:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4098:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48519:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47551:212;47690:4;47719:36;47743:11;47719:23;:36::i;:::-;47712:43;;47551:212;;;:::o;26216:100::-;26270:13;26303:5;26296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26216:100;:::o;27775:221::-;27851:7;27879:16;27887:7;27879;:16::i;:::-;27871:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27964:15;:24;27980:7;27964:24;;;;;;;;;;;;;;;;;;;;;27957:31;;27775:221;;;:::o;27298:411::-;27379:13;27395:23;27410:7;27395:14;:23::i;:::-;27379:39;;27443:5;27437:11;;:2;:11;;;;27429:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:5;27521:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27546:37;27563:5;27570:12;:10;:12::i;:::-;27546:16;:37::i;:::-;27521:62;27499:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27680:21;27689:2;27693:7;27680:8;:21::i;:::-;27298:411;;;:::o;46577:50::-;;;;:::o;38854:113::-;38915:7;38942:10;:17;;;;38935:24;;38854:113;:::o;28665:339::-;28860:41;28879:12;:10;:12::i;:::-;28893:7;28860:18;:41::i;:::-;28852:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28968:28;28978:4;28984:2;28988:7;28968:9;:28::i;:::-;28665:339;;;:::o;38522:256::-;38619:7;38655:23;38672:5;38655:16;:23::i;:::-;38647:5;:31;38639:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38744:12;:19;38757:5;38744:19;;;;;;;;;;;;;;;:26;38764:5;38744:26;;;;;;;;;;;;38737:33;;38522:256;;;;:::o;48098:123::-;48150:5;48194:10;;48175:15;:29;;:38;;48212:1;48175:38;;;48207:2;48175:38;48168:45;;48098:123;:::o;50102:455::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50182:1:::1;50158:21;:25;50150:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50233:16;50252:21;50233:40;;50284:19;50306:42;50284:64;;50367:11;50359:29;;:48;50404:2;50401:1;50390:8;:12;;;;:::i;:::-;50389:17;;;;:::i;:::-;50359:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50428:18;50449:42;50428:63;;50510:10;50502:28;;:47;50546:2;50543:1;50532:8;:12;;;;:::i;:::-;50531:17;;;;:::i;:::-;50502:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3489:1;;;50102:455::o:0;29075:185::-;29213:39;29230:4;29236:2;29240:7;29213:39;;;;;;;;;;;;:16;:39::i;:::-;29075:185;;;:::o;39044:233::-;39119:7;39155:30;:28;:30::i;:::-;39147:5;:38;39139:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39252:10;39263:5;39252:17;;;;;;;;;;;;;;;;;;;;;;;;39245:24;;39044:233;;;:::o;47773:120::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47869:16:::1;47853:13;:32;;;;;;;;;;;;:::i;:::-;;47773:120:::0;:::o;25910:239::-;25982:7;26002:13;26018:7;:16;26026:7;26018:16;;;;;;;;;;;;;;;;;;;;;26002:32;;26070:1;26053:19;;:5;:19;;;;26045:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26136:5;26129:12;;;25910:239;;;:::o;48670:1179::-;48755:15;48741:10;;:29;;:109;;;;48794:19;;48775:15;:38;;:74;;;;;48845:4;48817:32;;:12;:24;48830:10;48817:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;48775:74;48741:109;48871:19;;48852:15;:38;;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48733:199;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;48970:1;48951:15;:20;;;;48943:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49034:19;;49015:15;:38;;:71;;;;;49076:10;;49057:15;:29;;49015:71;:127;;49138:4;49015:127;;;49133:1;49108:21;49118:10;49108:9;:21::i;:::-;49090:15;:39;;;;;;:::i;:::-;:44;;49015:127;49007:185;;;;;;;;;;;;:::i;:::-;;;;;;;;;49244:21;:19;:21::i;:::-;49225:40;;:15;:40;;;;49203:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;46477:4;49387:46;;49406:13;:11;:13::i;:::-;49388:15;:31;;;;;;:::i;:::-;49387:46;;49365:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;49550:15;49530:35;;:17;:15;:17::i;:::-;:35;;;;:::i;:::-;49516:50;;:9;:50;49494:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;49656:7;49651:191;49673:15;49669:19;;:1;:19;;;49651:191;;;49710:21;:9;:19;:21::i;:::-;49748:17;49768:19;:9;:17;:19::i;:::-;49748:39;;49802:28;49808:10;49820:9;49802:5;:28::i;:::-;49651:191;49690:3;;;;;:::i;:::-;;;;49651:191;;;;48670:1179;:::o;25640:208::-;25712:7;25757:1;25740:19;;:5;:19;;;;25732:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25824:9;:16;25834:5;25824:16;;;;;;;;;;;;;;;;25817:23;;25640:208;;;:::o;3849:94::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3914:21:::1;3932:1;3914:9;:21::i;:::-;3849:94::o:0;48400:107::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48495:4:::1;48472:12;:20;48485:6;48472:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;48400:107:::0;:::o;46947:99::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47029:9:::1;47016:10;:22;;;;46947:99:::0;:::o;3198:87::-;3244:7;3271:6;;;;;;;;;;;3264:13;;3198:87;:::o;26385:104::-;26441:13;26474:7;26467:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26385:104;:::o;28068:295::-;28183:12;:10;:12::i;:::-;28171:24;;:8;:24;;;;28163:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:8;28238:18;:32;28257:12;:10;:12::i;:::-;28238:32;;;;;;;;;;;;;;;:42;28271:8;28238:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28336:8;28307:48;;28322:12;:10;:12::i;:::-;28307:48;;;28346:8;28307:48;;;;;;:::i;:::-;;;;;;;;28068:295;;:::o;46529:41::-;;;;:::o;29331:328::-;29506:41;29525:12;:10;:12::i;:::-;29539:7;29506:18;:41::i;:::-;29498:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29612:39;29626:4;29632:2;29636:7;29645:5;29612:13;:39::i;:::-;29331:328;;;;:::o;47058:135::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47167:18:::1;47145:19;:40;;;;47058:135:::0;:::o;49861:196::-;49988:13;50026:23;50041:7;50026:14;:23::i;:::-;50019:30;;49861:196;;;:::o;46442:39::-;46477:4;46442:39;:::o;28434:164::-;28531:4;28555:18;:25;28574:5;28555:25;;;;;;;;;;;;;;;:35;28581:8;28555:35;;;;;;;;;;;;;;;;;;;;;;;;;28548:42;;28434:164;;;;:::o;48283:105::-;48331:6;48357:23;48350:30;;48283:105;:::o;4098:192::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4207:1:::1;4187:22;;:8;:22;;;;4179:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4263:19;4273:8;4263:9;:19::i;:::-;4098:192:::0;:::o;48519:113::-;3429:12;:10;:12::i;:::-;3418:23;;:7;:5;:7::i;:::-;:23;;;3410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48619:5:::1;48596:12;:20;48609:6;48596:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;48519:113:::0;:::o;951:127::-;1058:1;1040:7;:14;;;:19;;;;;;;;;;;951:127;:::o;829:114::-;894:7;921;:14;;;914:21;;829:114;;;:::o;39890:589::-;40034:45;40061:4;40067:2;40071:7;40034:26;:45::i;:::-;40112:1;40096:18;;:4;:18;;;40092:187;;;40131:40;40163:7;40131:31;:40::i;:::-;40092:187;;;40201:2;40193:10;;:4;:10;;;40189:90;;40220:47;40253:4;40259:7;40220:32;:47::i;:::-;40189:90;40092:187;40307:1;40293:16;;:2;:16;;;40289:183;;;40326:45;40363:7;40326:36;:45::i;:::-;40289:183;;;40399:4;40393:10;;:2;:10;;;40389:83;;40420:40;40448:2;40452:7;40420:27;:40::i;:::-;40389:83;40289:183;39890:589;;;:::o;37265:126::-;;;;:::o;38214:224::-;38316:4;38355:35;38340:50;;;:11;:50;;;;:90;;;;38394:36;38418:11;38394:23;:36::i;:::-;38340:90;38333:97;;38214:224;;;:::o;31169:127::-;31234:4;31286:1;31258:30;;:7;:16;31266:7;31258:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31251:37;;31169:127;;;:::o;2043:98::-;2096:7;2123:10;2116:17;;2043:98;:::o;35151:174::-;35253:2;35226:15;:24;35242:7;35226:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35309:7;35305:2;35271:46;;35280:23;35295:7;35280:14;:23::i;:::-;35271:46;;;;;;;;;;;;35151:174;;:::o;31463:348::-;31556:4;31581:16;31589:7;31581;:16::i;:::-;31573:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31657:13;31673:23;31688:7;31673:14;:23::i;:::-;31657:39;;31726:5;31715:16;;:7;:16;;;:51;;;;31759:7;31735:31;;:20;31747:7;31735:11;:20::i;:::-;:31;;;31715:51;:87;;;;31770:32;31787:5;31794:7;31770:16;:32::i;:::-;31715:87;31707:96;;;31463:348;;;;:::o;34455:578::-;34614:4;34587:31;;:23;34602:7;34587:14;:23::i;:::-;:31;;;34579:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34697:1;34683:16;;:2;:16;;;;34675:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34753:39;34774:4;34780:2;34784:7;34753:20;:39::i;:::-;34857:29;34874:1;34878:7;34857:8;:29::i;:::-;34918:1;34899:9;:15;34909:4;34899:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34947:1;34930:9;:13;34940:2;34930:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34978:2;34959:7;:16;34967:7;34959:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35017:7;35013:2;34998:27;;35007:4;34998:27;;;;;;;;;;;;34455:578;;;:::o;33147:382::-;33241:1;33227:16;;:2;:16;;;;33219:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33300:16;33308:7;33300;:16::i;:::-;33299:17;33291:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33362:45;33391:1;33395:2;33399:7;33362:20;:45::i;:::-;33437:1;33420:9;:13;33430:2;33420:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33468:2;33449:7;:16;33457:7;33449:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33513:7;33509:2;33488:33;;33505:1;33488:33;;;;;;;;;;;;33147:382;;:::o;4298:173::-;4354:16;4373:6;;;;;;;;;;;4354:25;;4399:8;4390:6;;:17;;;;;;;;;;;;;;;;;;4454:8;4423:40;;4444:8;4423:40;;;;;;;;;;;;4298:173;;:::o;30541:315::-;30698:28;30708:4;30714:2;30718:7;30698:9;:28::i;:::-;30745:48;30768:4;30774:2;30778:7;30787:5;30745:22;:48::i;:::-;30737:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30541:315;;;;:::o;44707:679::-;44780:13;44814:16;44822:7;44814;:16::i;:::-;44806:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44897:23;44923:10;:19;44934:7;44923:19;;;;;;;;;;;44897:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44953:18;44974:10;:8;:10::i;:::-;44953:31;;45082:1;45066:4;45060:18;:23;45056:72;;;45107:9;45100:16;;;;;;45056:72;45258:1;45238:9;45232:23;:27;45228:108;;;45307:4;45313:9;45290:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45276:48;;;;;;45228:108;45355:23;45370:7;45355:14;:23::i;:::-;45348:30;;;;44707:679;;;;:::o;41202:164::-;41306:10;:17;;;;41279:15;:24;41295:7;41279:24;;;;;;;;;;;:44;;;;41334:10;41350:7;41334:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41202:164;:::o;41993:988::-;42259:22;42309:1;42284:22;42301:4;42284:16;:22::i;:::-;:26;;;;:::i;:::-;42259:51;;42321:18;42342:17;:26;42360:7;42342:26;;;;;;;;;;;;42321:47;;42489:14;42475:10;:28;42471:328;;42520:19;42542:12;:18;42555:4;42542:18;;;;;;;;;;;;;;;:34;42561:14;42542:34;;;;;;;;;;;;42520:56;;42626:11;42593:12;:18;42606:4;42593:18;;;;;;;;;;;;;;;:30;42612:10;42593:30;;;;;;;;;;;:44;;;;42743:10;42710:17;:30;42728:11;42710:30;;;;;;;;;;;:43;;;;42471:328;;42895:17;:26;42913:7;42895:26;;;;;;;;;;;42888:33;;;42939:12;:18;42952:4;42939:18;;;;;;;;;;;;;;;:34;42958:14;42939:34;;;;;;;;;;;42932:41;;;41993:988;;;;:::o;43276:1079::-;43529:22;43574:1;43554:10;:17;;;;:21;;;;:::i;:::-;43529:46;;43586:18;43607:15;:24;43623:7;43607:24;;;;;;;;;;;;43586:45;;43958:19;43980:10;43991:14;43980:26;;;;;;;;;;;;;;;;;;;;;;;;43958:48;;44044:11;44019:10;44030;44019:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44155:10;44124:15;:28;44140:11;44124:28;;;;;;;;;;;:41;;;;44296:15;:24;44312:7;44296:24;;;;;;;;;;;44289:31;;;44331:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43276:1079;;;;:::o;40780:221::-;40865:14;40882:20;40899:2;40882:16;:20::i;:::-;40865:37;;40940:7;40913:12;:16;40926:2;40913:16;;;;;;;;;;;;;;;:24;40930:6;40913:24;;;;;;;;;;;:34;;;;40987:6;40958:17;:26;40976:7;40958:26;;;;;;;;;;;:35;;;;40780:221;;;:::o;25271:305::-;25373:4;25425:25;25410:40;;;:11;:40;;;;:105;;;;25482:33;25467:48;;;:11;:48;;;;25410:105;:158;;;;25532:36;25556:11;25532:23;:36::i;:::-;25410:158;25390:178;;25271:305;;;:::o;47201:215::-;47363:45;47390:4;47396:2;47400:7;47363:26;:45::i;:::-;47201:215;;;:::o;35890:803::-;36045:4;36066:15;:2;:13;;;:15::i;:::-;36062:624;;;36118:2;36102:36;;;36139:12;:10;:12::i;:::-;36153:4;36159:7;36168:5;36102:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36098:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36365:1;36348:6;:13;:18;36344:272;;;36391:60;;;;;;;;;;:::i;:::-;;;;;;;;36344:272;36566:6;36560:13;36551:6;36547:2;36543:15;36536:38;36098:533;36235:45;;;36225:55;;;:6;:55;;;;36218:62;;;;;36062:624;36670:4;36663:11;;35890:803;;;;;;;:::o;47901:106::-;47953:13;47986;47979:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47901:106;:::o;26560:334::-;26633:13;26667:16;26675:7;26667;:16::i;:::-;26659:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26748:21;26772:10;:8;:10::i;:::-;26748:34;;26824:1;26806:7;26800:21;:25;:86;;;;;;;;;;;;;;;;;26852:7;26861:18;:7;:16;:18::i;:::-;26835:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26800:86;26793:93;;;26560:334;;;:::o;6309:157::-;6394:4;6433:25;6418:40;;;:11;:40;;;;6411:47;;6309:157;;;:::o;9355:387::-;9415:4;9623:12;9690:7;9678:20;9670:28;;9733:1;9726:4;:8;9719:15;;;9355:387;;;:::o;6780:723::-;6836:13;7066:1;7057:5;:10;7053:53;;;7084:10;;;;;;;;;;;;;;;;;;;;;7053:53;7116:12;7131:5;7116:20;;7147:14;7172:78;7187:1;7179:4;:9;7172:78;;7205:8;;;;;:::i;:::-;;;;7236:2;7228:10;;;;;:::i;:::-;;;7172:78;;;7260:19;7292:6;7282:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7260:39;;7310:154;7326:1;7317:5;:10;7310:154;;7354:1;7344:11;;;;;:::i;:::-;;;7421:2;7413:5;:10;;;;:::i;:::-;7400:2;:24;;;;:::i;:::-;7387:39;;7370:6;7377;7370:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7450:2;7441:11;;;;;:::i;:::-;;;7310:154;;;7488:6;7474:21;;;;;6780:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:135::-;;2091:6;2078:20;2069:29;;2107:31;2132:5;2107:31;:::i;:::-;2059:85;;;;:::o;2150:262::-;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2216:196;;;;:::o;2418:407::-;;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:53;2672:7;2663:6;2652:9;2648:22;2627:53;:::i;:::-;2617:63;;2573:117;2729:2;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2700:118;2501:324;;;;;:::o;2831:552::-;;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:53;3230:7;3221:6;3210:9;3206:22;3185:53;:::i;:::-;3175:63;;3130:118;3287:2;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3258:118;2931:452;;;;;:::o;3389:809::-;;;;;3557:3;3545:9;3536:7;3532:23;3528:33;3525:2;;;3574:1;3571;3564:12;3525:2;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;4028:2;4017:9;4013:18;4000:32;4059:18;4051:6;4048:30;4045:2;;;4091:1;4088;4081:12;4045:2;4119:62;4173:7;4164:6;4153:9;4149:22;4119:62;:::i;:::-;4109:72;;3971:220;3515:683;;;;;;;:::o;4204:401::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4342:1;4339;4332:12;4294:2;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4512:2;4538:50;4580:7;4571:6;4560:9;4556:22;4538:50;:::i;:::-;4528:60;;4483:115;4284:321;;;;;:::o;4611:407::-;;;4736:2;4724:9;4715:7;4711:23;4707:32;4704:2;;;4752:1;4749;4742:12;4704:2;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4694:324;;;;;:::o;5024:260::-;;5131:2;5119:9;5110:7;5106:23;5102:32;5099:2;;;5147:1;5144;5137:12;5099:2;5190:1;5215:52;5259:7;5250:6;5239:9;5235:22;5215:52;:::i;:::-;5205:62;;5161:116;5089:195;;;;:::o;5290:282::-;;5408:2;5396:9;5387:7;5383:23;5379:32;5376:2;;;5424:1;5421;5414:12;5376:2;5467:1;5492:63;5547:7;5538:6;5527:9;5523:22;5492:63;:::i;:::-;5482:73;;5438:127;5366:206;;;;:::o;5578:375::-;;5696:2;5684:9;5675:7;5671:23;5667:32;5664:2;;;5712:1;5709;5702:12;5664:2;5783:1;5772:9;5768:17;5755:31;5813:18;5805:6;5802:30;5799:2;;;5845:1;5842;5835:12;5799:2;5873:63;5928:7;5919:6;5908:9;5904:22;5873:63;:::i;:::-;5863:73;;5726:220;5654:299;;;;:::o;5959:262::-;;6067:2;6055:9;6046:7;6042:23;6038:32;6035:2;;;6083:1;6080;6073:12;6035:2;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6025:196;;;;:::o;6227:258::-;;6333:2;6321:9;6312:7;6308:23;6304:32;6301:2;;;6349:1;6346;6339:12;6301:2;6392:1;6417:51;6460:7;6451:6;6440:9;6436:22;6417:51;:::i;:::-;6407:61;;6363:115;6291:194;;;;:::o;6491:118::-;6578:24;6596:5;6578:24;:::i;:::-;6573:3;6566:37;6556:53;;:::o;6615:109::-;6696:21;6711:5;6696:21;:::i;:::-;6691:3;6684:34;6674:50;;:::o;6730:360::-;;6844:38;6876:5;6844:38;:::i;:::-;6898:70;6961:6;6956:3;6898:70;:::i;:::-;6891:77;;6977:52;7022:6;7017:3;7010:4;7003:5;6999:16;6977:52;:::i;:::-;7054:29;7076:6;7054:29;:::i;:::-;7049:3;7045:39;7038:46;;6820:270;;;;;:::o;7096:364::-;;7212:39;7245:5;7212:39;:::i;:::-;7267:71;7331:6;7326:3;7267:71;:::i;:::-;7260:78;;7347:52;7392:6;7387:3;7380:4;7373:5;7369:16;7347:52;:::i;:::-;7424:29;7446:6;7424:29;:::i;:::-;7419:3;7415:39;7408:46;;7188:272;;;;;:::o;7466:377::-;;7600:39;7633:5;7600:39;:::i;:::-;7655:89;7737:6;7732:3;7655:89;:::i;:::-;7648:96;;7753:52;7798:6;7793:3;7786:4;7779:5;7775:16;7753:52;:::i;:::-;7830:6;7825:3;7821:16;7814:23;;7576:267;;;;;:::o;7849:366::-;;8012:67;8076:2;8071:3;8012:67;:::i;:::-;8005:74;;8088:93;8177:3;8088:93;:::i;:::-;8206:2;8201:3;8197:12;8190:19;;7995:220;;;:::o;8221:366::-;;8384:67;8448:2;8443:3;8384:67;:::i;:::-;8377:74;;8460:93;8549:3;8460:93;:::i;:::-;8578:2;8573:3;8569:12;8562:19;;8367:220;;;:::o;8593:366::-;;8756:67;8820:2;8815:3;8756:67;:::i;:::-;8749:74;;8832:93;8921:3;8832:93;:::i;:::-;8950:2;8945:3;8941:12;8934:19;;8739:220;;;:::o;8965:366::-;;9128:67;9192:2;9187:3;9128:67;:::i;:::-;9121:74;;9204:93;9293:3;9204:93;:::i;:::-;9322:2;9317:3;9313:12;9306:19;;9111:220;;;:::o;9337:366::-;;9500:67;9564:2;9559:3;9500:67;:::i;:::-;9493:74;;9576:93;9665:3;9576:93;:::i;:::-;9694:2;9689:3;9685:12;9678:19;;9483:220;;;:::o;9709:366::-;;9872:67;9936:2;9931:3;9872:67;:::i;:::-;9865:74;;9948:93;10037:3;9948:93;:::i;:::-;10066:2;10061:3;10057:12;10050:19;;9855:220;;;:::o;10081:366::-;;10244:67;10308:2;10303:3;10244:67;:::i;:::-;10237:74;;10320:93;10409:3;10320:93;:::i;:::-;10438:2;10433:3;10429:12;10422:19;;10227:220;;;:::o;10453:366::-;;10616:67;10680:2;10675:3;10616:67;:::i;:::-;10609:74;;10692:93;10781:3;10692:93;:::i;:::-;10810:2;10805:3;10801:12;10794:19;;10599:220;;;:::o;10825:366::-;;10988:67;11052:2;11047:3;10988:67;:::i;:::-;10981:74;;11064:93;11153:3;11064:93;:::i;:::-;11182:2;11177:3;11173:12;11166:19;;10971:220;;;:::o;11197:366::-;;11360:67;11424:2;11419:3;11360:67;:::i;:::-;11353:74;;11436:93;11525:3;11436:93;:::i;:::-;11554:2;11549:3;11545:12;11538:19;;11343:220;;;:::o;11569:366::-;;11732:67;11796:2;11791:3;11732:67;:::i;:::-;11725:74;;11808:93;11897:3;11808:93;:::i;:::-;11926:2;11921:3;11917:12;11910:19;;11715:220;;;:::o;11941:366::-;;12104:67;12168:2;12163:3;12104:67;:::i;:::-;12097:74;;12180:93;12269:3;12180:93;:::i;:::-;12298:2;12293:3;12289:12;12282:19;;12087:220;;;:::o;12313:366::-;;12476:67;12540:2;12535:3;12476:67;:::i;:::-;12469:74;;12552:93;12641:3;12552:93;:::i;:::-;12670:2;12665:3;12661:12;12654:19;;12459:220;;;:::o;12685:366::-;;12848:67;12912:2;12907:3;12848:67;:::i;:::-;12841:74;;12924:93;13013:3;12924:93;:::i;:::-;13042:2;13037:3;13033:12;13026:19;;12831:220;;;:::o;13057:366::-;;13220:67;13284:2;13279:3;13220:67;:::i;:::-;13213:74;;13296:93;13385:3;13296:93;:::i;:::-;13414:2;13409:3;13405:12;13398:19;;13203:220;;;:::o;13429:366::-;;13592:67;13656:2;13651:3;13592:67;:::i;:::-;13585:74;;13668:93;13757:3;13668:93;:::i;:::-;13786:2;13781:3;13777:12;13770:19;;13575:220;;;:::o;13801:366::-;;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13947:220;;;:::o;14173:366::-;;14336:67;14400:2;14395:3;14336:67;:::i;:::-;14329:74;;14412:93;14501:3;14412:93;:::i;:::-;14530:2;14525:3;14521:12;14514:19;;14319:220;;;:::o;14545:366::-;;14708:67;14772:2;14767:3;14708:67;:::i;:::-;14701:74;;14784:93;14873:3;14784:93;:::i;:::-;14902:2;14897:3;14893:12;14886:19;;14691:220;;;:::o;14917:366::-;;15080:67;15144:2;15139:3;15080:67;:::i;:::-;15073:74;;15156:93;15245:3;15156:93;:::i;:::-;15274:2;15269:3;15265:12;15258:19;;15063:220;;;:::o;15289:366::-;;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15435:220;;;:::o;15661:366::-;;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15807:220;;;:::o;16033:366::-;;16196:67;16260:2;16255:3;16196:67;:::i;:::-;16189:74;;16272:93;16361:3;16272:93;:::i;:::-;16390:2;16385:3;16381:12;16374:19;;16179:220;;;:::o;16405:366::-;;16568:67;16632:2;16627:3;16568:67;:::i;:::-;16561:74;;16644:93;16733:3;16644:93;:::i;:::-;16762:2;16757:3;16753:12;16746:19;;16551:220;;;:::o;16777:366::-;;16940:67;17004:2;16999:3;16940:67;:::i;:::-;16933:74;;17016:93;17105:3;17016:93;:::i;:::-;17134:2;17129:3;17125:12;17118:19;;16923:220;;;:::o;17149:115::-;17234:23;17251:5;17234:23;:::i;:::-;17229:3;17222:36;17212:52;;:::o;17270:118::-;17357:24;17375:5;17357:24;:::i;:::-;17352:3;17345:37;17335:53;;:::o;17394:115::-;17479:23;17496:5;17479:23;:::i;:::-;17474:3;17467:36;17457:52;;:::o;17515:112::-;17598:22;17614:5;17598:22;:::i;:::-;17593:3;17586:35;17576:51;;:::o;17633:435::-;;17835:95;17926:3;17917:6;17835:95;:::i;:::-;17828:102;;17947:95;18038:3;18029:6;17947:95;:::i;:::-;17940:102;;18059:3;18052:10;;17817:251;;;;;:::o;18074:222::-;;18205:2;18194:9;18190:18;18182:26;;18218:71;18286:1;18275:9;18271:17;18262:6;18218:71;:::i;:::-;18172:124;;;;:::o;18302:640::-;;18535:3;18524:9;18520:19;18512:27;;18549:71;18617:1;18606:9;18602:17;18593:6;18549:71;:::i;:::-;18630:72;18698:2;18687:9;18683:18;18674:6;18630:72;:::i;:::-;18712;18780:2;18769:9;18765:18;18756:6;18712:72;:::i;:::-;18831:9;18825:4;18821:20;18816:2;18805:9;18801:18;18794:48;18859:76;18930:4;18921:6;18859:76;:::i;:::-;18851:84;;18502:440;;;;;;;:::o;18948:210::-;;19073:2;19062:9;19058:18;19050:26;;19086:65;19148:1;19137:9;19133:17;19124:6;19086:65;:::i;:::-;19040:118;;;;:::o;19164:313::-;;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:78;19465:4;19456:6;19392:78;:::i;:::-;19384:86;;19282:195;;;;:::o;19483:419::-;;19687:2;19676:9;19672:18;19664:26;;19736:9;19730:4;19726:20;19722:1;19711:9;19707:17;19700:47;19764:131;19890:4;19764:131;:::i;:::-;19756:139;;19654:248;;;:::o;19908:419::-;;20112:2;20101:9;20097:18;20089:26;;20161:9;20155:4;20151:20;20147:1;20136:9;20132:17;20125:47;20189:131;20315:4;20189:131;:::i;:::-;20181:139;;20079:248;;;:::o;20333:419::-;;20537:2;20526:9;20522:18;20514:26;;20586:9;20580:4;20576:20;20572:1;20561:9;20557:17;20550:47;20614:131;20740:4;20614:131;:::i;:::-;20606:139;;20504:248;;;:::o;20758:419::-;;20962:2;20951:9;20947:18;20939:26;;21011:9;21005:4;21001:20;20997:1;20986:9;20982:17;20975:47;21039:131;21165:4;21039:131;:::i;:::-;21031:139;;20929:248;;;:::o;21183:419::-;;21387:2;21376:9;21372:18;21364:26;;21436:9;21430:4;21426:20;21422:1;21411:9;21407:17;21400:47;21464:131;21590:4;21464:131;:::i;:::-;21456:139;;21354:248;;;:::o;21608:419::-;;21812:2;21801:9;21797:18;21789:26;;21861:9;21855:4;21851:20;21847:1;21836:9;21832:17;21825:47;21889:131;22015:4;21889:131;:::i;:::-;21881:139;;21779:248;;;:::o;22033:419::-;;22237:2;22226:9;22222:18;22214:26;;22286:9;22280:4;22276:20;22272:1;22261:9;22257:17;22250:47;22314:131;22440:4;22314:131;:::i;:::-;22306:139;;22204:248;;;:::o;22458:419::-;;22662:2;22651:9;22647:18;22639:26;;22711:9;22705:4;22701:20;22697:1;22686:9;22682:17;22675:47;22739:131;22865:4;22739:131;:::i;:::-;22731:139;;22629:248;;;:::o;22883:419::-;;23087:2;23076:9;23072:18;23064:26;;23136:9;23130:4;23126:20;23122:1;23111:9;23107:17;23100:47;23164:131;23290:4;23164:131;:::i;:::-;23156:139;;23054:248;;;:::o;23308:419::-;;23512:2;23501:9;23497:18;23489:26;;23561:9;23555:4;23551:20;23547:1;23536:9;23532:17;23525:47;23589:131;23715:4;23589:131;:::i;:::-;23581:139;;23479:248;;;:::o;23733:419::-;;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:131;24140:4;24014:131;:::i;:::-;24006:139;;23904:248;;;:::o;24158:419::-;;24362:2;24351:9;24347:18;24339:26;;24411:9;24405:4;24401:20;24397:1;24386:9;24382:17;24375:47;24439:131;24565:4;24439:131;:::i;:::-;24431:139;;24329:248;;;:::o;24583:419::-;;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:131;24990:4;24864:131;:::i;:::-;24856:139;;24754:248;;;:::o;25008:419::-;;25212:2;25201:9;25197:18;25189:26;;25261:9;25255:4;25251:20;25247:1;25236:9;25232:17;25225:47;25289:131;25415:4;25289:131;:::i;:::-;25281:139;;25179:248;;;:::o;25433:419::-;;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25604:248;;;:::o;25858:419::-;;26062:2;26051:9;26047:18;26039:26;;26111:9;26105:4;26101:20;26097:1;26086:9;26082:17;26075:47;26139:131;26265:4;26139:131;:::i;:::-;26131:139;;26029:248;;;:::o;26283:419::-;;26487:2;26476:9;26472:18;26464:26;;26536:9;26530:4;26526:20;26522:1;26511:9;26507:17;26500:47;26564:131;26690:4;26564:131;:::i;:::-;26556:139;;26454:248;;;:::o;26708:419::-;;26912:2;26901:9;26897:18;26889:26;;26961:9;26955:4;26951:20;26947:1;26936:9;26932:17;26925:47;26989:131;27115:4;26989:131;:::i;:::-;26981:139;;26879:248;;;:::o;27133:419::-;;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27304:248;;;:::o;27558:419::-;;27762:2;27751:9;27747:18;27739:26;;27811:9;27805:4;27801:20;27797:1;27786:9;27782:17;27775:47;27839:131;27965:4;27839:131;:::i;:::-;27831:139;;27729:248;;;:::o;27983:419::-;;28187:2;28176:9;28172:18;28164:26;;28236:9;28230:4;28226:20;28222:1;28211:9;28207:17;28200:47;28264:131;28390:4;28264:131;:::i;:::-;28256:139;;28154:248;;;:::o;28408:419::-;;28612:2;28601:9;28597:18;28589:26;;28661:9;28655:4;28651:20;28647:1;28636:9;28632:17;28625:47;28689:131;28815:4;28689:131;:::i;:::-;28681:139;;28579:248;;;:::o;28833:419::-;;29037:2;29026:9;29022:18;29014:26;;29086:9;29080:4;29076:20;29072:1;29061:9;29057:17;29050:47;29114:131;29240:4;29114:131;:::i;:::-;29106:139;;29004:248;;;:::o;29258:419::-;;29462:2;29451:9;29447:18;29439:26;;29511:9;29505:4;29501:20;29497:1;29486:9;29482:17;29475:47;29539:131;29665:4;29539:131;:::i;:::-;29531:139;;29429:248;;;:::o;29683:419::-;;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29854:248;;;:::o;30108:218::-;;30237:2;30226:9;30222:18;30214:26;;30250:69;30316:1;30305:9;30301:17;30292:6;30250:69;:::i;:::-;30204:122;;;;:::o;30332:222::-;;30463:2;30452:9;30448:18;30440:26;;30476:71;30544:1;30533:9;30529:17;30520:6;30476:71;:::i;:::-;30430:124;;;;:::o;30560:218::-;;30689:2;30678:9;30674:18;30666:26;;30702:69;30768:1;30757:9;30753:17;30744:6;30702:69;:::i;:::-;30656:122;;;;:::o;30784:214::-;;30911:2;30900:9;30896:18;30888:26;;30924:67;30988:1;30977:9;30973:17;30964:6;30924:67;:::i;:::-;30878:120;;;;:::o;31004:129::-;;31065:20;;:::i;:::-;31055:30;;31094:33;31122:4;31114:6;31094:33;:::i;:::-;31045:88;;;:::o;31139:75::-;;31205:2;31199:9;31189:19;;31179:35;:::o;31220:307::-;;31371:18;31363:6;31360:30;31357:2;;;31393:18;;:::i;:::-;31357:2;31431:29;31453:6;31431:29;:::i;:::-;31423:37;;31515:4;31509;31505:15;31497:23;;31286:241;;;:::o;31533:308::-;;31685:18;31677:6;31674:30;31671:2;;;31707:18;;:::i;:::-;31671:2;31745:29;31767:6;31745:29;:::i;:::-;31737:37;;31829:4;31823;31819:15;31811:23;;31600:241;;;:::o;31847:98::-;;31932:5;31926:12;31916:22;;31905:40;;;:::o;31951:99::-;;32037:5;32031:12;32021:22;;32010:40;;;:::o;32056:168::-;;32173:6;32168:3;32161:19;32213:4;32208:3;32204:14;32189:29;;32151:73;;;;:::o;32230:169::-;;32348:6;32343:3;32336:19;32388:4;32383:3;32379:14;32364:29;;32326:73;;;;:::o;32405:148::-;;32544:3;32529:18;;32519:34;;;;:::o;32559:305::-;;32618:20;32636:1;32618:20;:::i;:::-;32613:25;;32652:20;32670:1;32652:20;:::i;:::-;32647:25;;32806:1;32738:66;32734:74;32731:1;32728:81;32725:2;;;32812:18;;:::i;:::-;32725:2;32856:1;32853;32849:9;32842:16;;32603:261;;;;:::o;32870:185::-;;32927:20;32945:1;32927:20;:::i;:::-;32922:25;;32961:20;32979:1;32961:20;:::i;:::-;32956:25;;33000:1;32990:2;;33005:18;;:::i;:::-;32990:2;33047:1;33044;33040:9;33035:14;;32912:143;;;;:::o;33061:348::-;;33124:20;33142:1;33124:20;:::i;:::-;33119:25;;33158:20;33176:1;33158:20;:::i;:::-;33153:25;;33346:1;33278:66;33274:74;33271:1;33268:81;33263:1;33256:9;33249:17;33245:105;33242:2;;;33353:18;;:::i;:::-;33242:2;33401:1;33398;33394:9;33383:20;;33109:300;;;;:::o;33415:297::-;;33477:19;33494:1;33477:19;:::i;:::-;33472:24;;33510:19;33527:1;33510:19;:::i;:::-;33505:24;;33649:1;33629:18;33625:26;33622:1;33619:33;33614:1;33607:9;33600:17;33596:57;33593:2;;;33656:18;;:::i;:::-;33593:2;33704:1;33701;33697:9;33686:20;;33462:250;;;;:::o;33718:191::-;;33778:20;33796:1;33778:20;:::i;:::-;33773:25;;33812:20;33830:1;33812:20;:::i;:::-;33807:25;;33851:1;33848;33845:8;33842:2;;;33856:18;;:::i;:::-;33842:2;33901:1;33898;33894:9;33886:17;;33763:146;;;;:::o;33915:96::-;;33981:24;33999:5;33981:24;:::i;:::-;33970:35;;33960:51;;;:::o;34017:90::-;;34094:5;34087:13;34080:21;34069:32;;34059:48;;;:::o;34113:149::-;;34189:66;34182:5;34178:78;34167:89;;34157:105;;;:::o;34268:89::-;;34344:6;34337:5;34333:18;34322:29;;34312:45;;;:::o;34363:126::-;;34440:42;34433:5;34429:54;34418:65;;34408:81;;;:::o;34495:77::-;;34561:5;34550:16;;34540:32;;;:::o;34578:101::-;;34654:18;34647:5;34643:30;34632:41;;34622:57;;;:::o;34685:86::-;;34760:4;34753:5;34749:16;34738:27;;34728:43;;;:::o;34777:154::-;34861:6;34856:3;34851;34838:30;34923:1;34914:6;34909:3;34905:16;34898:27;34828:103;;;:::o;34937:307::-;35005:1;35015:113;35029:6;35026:1;35023:13;35015:113;;;35114:1;35109:3;35105:11;35099:18;35095:1;35090:3;35086:11;35079:39;35051:2;35048:1;35044:10;35039:15;;35015:113;;;35146:6;35143:1;35140:13;35137:2;;;35226:1;35217:6;35212:3;35208:16;35201:27;35137:2;34986:258;;;;:::o;35250:320::-;;35331:1;35325:4;35321:12;35311:22;;35378:1;35372:4;35368:12;35399:18;35389:2;;35455:4;35447:6;35443:17;35433:27;;35389:2;35517;35509:6;35506:14;35486:18;35483:38;35480:2;;;35536:18;;:::i;:::-;35480:2;35301:269;;;;:::o;35576:281::-;35659:27;35681:4;35659:27;:::i;:::-;35651:6;35647:40;35789:6;35777:10;35774:22;35753:18;35741:10;35738:34;35735:62;35732:2;;;35800:18;;:::i;:::-;35732:2;35840:10;35836:2;35829:22;35619:238;;;:::o;35863:233::-;;35925:24;35943:5;35925:24;:::i;:::-;35916:33;;35971:66;35964:5;35961:77;35958:2;;;36041:18;;:::i;:::-;35958:2;36088:1;36081:5;36077:13;36070:20;;35906:190;;;:::o;36102:167::-;;36162:22;36178:5;36162:22;:::i;:::-;36153:31;;36206:4;36199:5;36196:15;36193:2;;;36214:18;;:::i;:::-;36193:2;36261:1;36254:5;36250:13;36243:20;;36143:126;;;:::o;36275:176::-;;36324:20;36342:1;36324:20;:::i;:::-;36319:25;;36358:20;36376:1;36358:20;:::i;:::-;36353:25;;36397:1;36387:2;;36402:18;;:::i;:::-;36387:2;36443:1;36440;36436:9;36431:14;;36309:142;;;;:::o;36457:180::-;36505:77;36502:1;36495:88;36602:4;36599:1;36592:15;36626:4;36623:1;36616:15;36643:180;36691:77;36688:1;36681:88;36788:4;36785:1;36778:15;36812:4;36809:1;36802:15;36829:180;36877:77;36874:1;36867:88;36974:4;36971:1;36964:15;36998:4;36995:1;36988:15;37015:180;37063:77;37060:1;37053:88;37160:4;37157:1;37150:15;37184:4;37181:1;37174:15;37201:102;;37293:2;37289:7;37284:2;37277:5;37273:14;37269:28;37259:38;;37249:54;;;:::o;37309:230::-;37449:34;37445:1;37437:6;37433:14;37426:58;37518:13;37513:2;37505:6;37501:15;37494:38;37415:124;:::o;37545:231::-;37685:34;37681:1;37673:6;37669:14;37662:58;37754:14;37749:2;37741:6;37737:15;37730:39;37651:125;:::o;37782:237::-;37922:34;37918:1;37910:6;37906:14;37899:58;37991:20;37986:2;37978:6;37974:15;37967:45;37888:131;:::o;38025:225::-;38165:34;38161:1;38153:6;38149:14;38142:58;38234:8;38229:2;38221:6;38217:15;38210:33;38131:119;:::o;38256:178::-;38396:30;38392:1;38384:6;38380:14;38373:54;38362:72;:::o;38440:232::-;38580:34;38576:1;38568:6;38564:14;38557:58;38649:15;38644:2;38636:6;38632:15;38625:40;38546:126;:::o;38678:174::-;38818:26;38814:1;38806:6;38802:14;38795:50;38784:68;:::o;38858:248::-;38998:34;38994:1;38986:6;38982:14;38975:58;39067:31;39062:2;39054:6;39050:15;39043:56;38964:142;:::o;39112:223::-;39252:34;39248:1;39240:6;39236:14;39229:58;39321:6;39316:2;39308:6;39304:15;39297:31;39218:117;:::o;39341:175::-;39481:27;39477:1;39469:6;39465:14;39458:51;39447:69;:::o;39522:231::-;39662:34;39658:1;39650:6;39646:14;39639:58;39731:14;39726:2;39718:6;39714:15;39707:39;39628:125;:::o;39759:243::-;39899:34;39895:1;39887:6;39883:14;39876:58;39968:26;39963:2;39955:6;39951:15;39944:51;39865:137;:::o;40008:229::-;40148:34;40144:1;40136:6;40132:14;40125:58;40217:12;40212:2;40204:6;40200:15;40193:37;40114:123;:::o;40243:228::-;40383:34;40379:1;40371:6;40367:14;40360:58;40452:11;40447:2;40439:6;40435:15;40428:36;40349:122;:::o;40477:182::-;40617:34;40613:1;40605:6;40601:14;40594:58;40583:76;:::o;40665:236::-;40805:34;40801:1;40793:6;40789:14;40782:58;40874:19;40869:2;40861:6;40857:15;40850:44;40771:130;:::o;40907:231::-;41047:34;41043:1;41035:6;41031:14;41024:58;41116:14;41111:2;41103:6;41099:15;41092:39;41013:125;:::o;41144:182::-;41284:34;41280:1;41272:6;41268:14;41261:58;41250:76;:::o;41332:228::-;41472:34;41468:1;41460:6;41456:14;41449:58;41541:11;41536:2;41528:6;41524:15;41517:36;41438:122;:::o;41566:234::-;41706:34;41702:1;41694:6;41690:14;41683:58;41775:17;41770:2;41762:6;41758:15;41751:42;41672:128;:::o;41806:220::-;41946:34;41942:1;41934:6;41930:14;41923:58;42015:3;42010:2;42002:6;41998:15;41991:28;41912:114;:::o;42032:172::-;42172:24;42168:1;42160:6;42156:14;42149:48;42138:66;:::o;42210:170::-;42350:22;42346:1;42338:6;42334:14;42327:46;42316:64;:::o;42386:236::-;42526:34;42522:1;42514:6;42510:14;42503:58;42595:19;42590:2;42582:6;42578:15;42571:44;42492:130;:::o;42628:231::-;42768:34;42764:1;42756:6;42752:14;42745:58;42837:14;42832:2;42824:6;42820:15;42813:39;42734:125;:::o;42865:122::-;42938:24;42956:5;42938:24;:::i;:::-;42931:5;42928:35;42918:2;;42977:1;42974;42967:12;42918:2;42908:79;:::o;42993:116::-;43063:21;43078:5;43063:21;:::i;:::-;43056:5;43053:32;43043:2;;43099:1;43096;43089:12;43043:2;43033:76;:::o;43115:120::-;43187:23;43204:5;43187:23;:::i;:::-;43180:5;43177:34;43167:2;;43225:1;43222;43215:12;43167:2;43157:78;:::o;43241:122::-;43314:24;43332:5;43314:24;:::i;:::-;43307:5;43304:35;43294:2;;43353:1;43350;43343:12;43294:2;43284:79;:::o;43369:118::-;43440:22;43456:5;43440:22;:::i;:::-;43433:5;43430:33;43420:2;;43477:1;43474;43467:12;43420:2;43410:77;:::o
Swarm Source
ipfs://c8d7b977567e27c7691407a443b648f179e7d996a7ff5c318fa88feeb1763c41
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.