Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 47 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 16411887 | 594 days ago | IN | 0 ETH | 0.00075245 | ||||
Set Approval For... | 15419864 | 735 days ago | IN | 0 ETH | 0.00037612 | ||||
Set Approval For... | 15349022 | 746 days ago | IN | 0 ETH | 0.00056115 | ||||
Withdraw | 15168692 | 774 days ago | IN | 0 ETH | 0.00425547 | ||||
Set Members | 15168684 | 774 days ago | IN | 0 ETH | 0.00228182 | ||||
Whitelist Mint | 15148540 | 777 days ago | IN | 0.09 ETH | 0.01526265 | ||||
Public Mint | 15142592 | 778 days ago | IN | 0.12 ETH | 0.00624244 | ||||
Whitelist Mint | 15138656 | 779 days ago | IN | 0.15 ETH | 0.00260193 | ||||
Toggle Mystery U... | 15135800 | 779 days ago | IN | 0 ETH | 0.00066772 | ||||
Whitelist Mint | 15117667 | 782 days ago | IN | 0.03 ETH | 0.00128404 | ||||
Whitelist Mint | 15117068 | 782 days ago | IN | 0.06 ETH | 0.00505728 | ||||
Public Mint | 15109452 | 783 days ago | IN | 0.03 ETH | 0.00196491 | ||||
Set Approval For... | 15107575 | 784 days ago | IN | 0 ETH | 0.0005697 | ||||
Whitelist Mint | 15107565 | 784 days ago | IN | 0.09 ETH | 0.00244677 | ||||
Whitelist Mint | 15104782 | 784 days ago | IN | 0.03 ETH | 0.00117204 | ||||
Set Whitelist Pr... | 15104744 | 784 days ago | IN | 0 ETH | 0.000459 | ||||
Set Public Price | 15104739 | 784 days ago | IN | 0 ETH | 0.00048421 | ||||
Whitelist Mint | 15099251 | 785 days ago | IN | 0.05 ETH | 0.00409735 | ||||
Withdraw | 15097415 | 785 days ago | IN | 0 ETH | 0.0041958 | ||||
Set Members | 15097409 | 785 days ago | IN | 0 ETH | 0.00222936 | ||||
Whitelist Mint | 15084458 | 787 days ago | IN | 0.1 ETH | 0.00286079 | ||||
Whitelist Mint | 15079112 | 788 days ago | IN | 0.1 ETH | 0.00542019 | ||||
Whitelist Mint | 15059727 | 791 days ago | IN | 0.05 ETH | 0.00206358 | ||||
Whitelist Mint | 15058534 | 791 days ago | IN | 0.15 ETH | 0.0107237 | ||||
Set Whitelist | 15057385 | 791 days ago | IN | 0 ETH | 0.00373638 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15168692 | 774 days ago | 0.2275 ETH | ||||
15168692 | 774 days ago | 0.0325 ETH | ||||
15168692 | 774 days ago | 0.13 ETH | ||||
15168692 | 774 days ago | 0.13 ETH | ||||
15168692 | 774 days ago | 0.13 ETH | ||||
15097415 | 785 days ago | 1.064 ETH | ||||
15097415 | 785 days ago | 0.152 ETH | ||||
15097415 | 785 days ago | 0.608 ETH | ||||
15097415 | 785 days ago | 0.608 ETH | ||||
15097415 | 785 days ago | 0.608 ETH |
Loading...
Loading
Contract Name:
MSBB
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Ownable.sol"; contract MSBB is ERC721, Ownable { using Strings for uint256; // Change these address private memberOne = 0x10EC1f4dA5Ad2F0A7b1caf0c7378AEd4dA09FA6a; address private memberTwo = 0xE3509C119D6Cc7ba3cec84A8Ee31ac2da95C2C48; address private memberThree = 0xBfC422e564965be583fc4BD6B2c6187E21824B76; address private memberFour = 0xc1892EDCc1Fe358DbB9F1892f8E1f0eFc9c64283; address private memberFive = 0xED4f50f439BE1eA9435a1379F48b36E3635c6D87; uint256 public constant NFT_MAX = 3500; uint256 public constant NFT_LIVE_MAX = 3333; uint256 public PUBLIC_PRICE = 0.08 ether; uint256 public WHITELIST_PRICE = 0.05 ether; uint256 public constant NFTS_PER_MINT = 10; string private _tokenBaseURI = "https://gateway.pinata.cloud/ipfs/QmZWNdufRzEygfQVUpcxHi8j8mtstdD27UAH1dHmRPNbH3/"; string private _mysteryURI = "https://gateway.pinata.cloud/ipfs/QmZWNdufRzEygfQVUpcxHi8j8mtstdD27UAH1dHmRPNbH3/mystery.json"; mapping(address => bool) private _whiteList; bool public mintLive; bool public revealed; uint256 public totalSupply; constructor() ERC721("Ms. Bigfoot Baddie", "MSBB") {} function ownerMint(uint256 tokenQuantity, address wallet) external onlyOwner { require(totalSupply < NFT_MAX, "OUT_OF_STOCK"); require(totalSupply + tokenQuantity <= NFT_MAX, "EXCEED_STOCK"); for (uint256 i = 0; i < tokenQuantity; i++) { _safeMint(wallet, totalSupply + i + 1); } totalSupply += tokenQuantity; } function publicMint( uint256 tokenQuantity ) external payable { require(mintLive, "SALE_CLOSED"); require(totalSupply < NFT_LIVE_MAX, "OUT_OF_STOCK"); require(totalSupply + tokenQuantity <= NFT_LIVE_MAX, "EXCEED_STOCK"); require(PUBLIC_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(tokenQuantity <= NFTS_PER_MINT, "EXCEED_NFTS_PER_MINT"); for (uint256 i = 0; i < tokenQuantity; i++) { _safeMint(msg.sender, totalSupply + i + 1); } totalSupply += tokenQuantity; } function whitelistMint( uint256 tokenQuantity ) external payable { require(mintLive, "SALE_CLOSED"); require(totalSupply < NFT_LIVE_MAX, "OUT_OF_STOCK"); require(totalSupply + tokenQuantity <= NFT_LIVE_MAX, "EXCEED_STOCK"); require(_whiteList[msg.sender], "NOT_WHITELISTED"); require(WHITELIST_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(tokenQuantity <= NFTS_PER_MINT, "EXCEED_NFTS_PER_MINT"); for (uint256 i = 0; i < tokenQuantity; i++) { _safeMint(msg.sender, totalSupply + i + 1); } totalSupply += tokenQuantity; } function withdraw() external onlyOwner { uint256 currentBalance = address(this).balance; payable(memberOne).transfer((currentBalance * 200) / 1000); payable(memberTwo).transfer((currentBalance * 200) / 1000); payable(memberThree).transfer((currentBalance * 200) / 1000); payable(memberFour).transfer((currentBalance * 50) / 1000); payable(memberFive).transfer((currentBalance * 350) / 1000); } function isWhitelisted(address wallet) public view returns (bool) { return _whiteList[wallet]; } function mintStatus() public view returns (bool) { return totalSupply < NFT_LIVE_MAX; } function setWhitelist(address[] memory addresses) external onlyOwner { for(uint256 i = 0; i < addresses.length; i++) { _whiteList[addresses[i]] = true; } } function removeWhitelist(address[] memory addresses) external onlyOwner { for(uint256 i = 0; i < addresses.length; i++) { _whiteList[addresses[i]] = false; } } function toggleMintLive() external onlyOwner { mintLive = !mintLive; } function setPublicPrice(uint256 price) external onlyOwner { // 80000000000000000 = .08 eth PUBLIC_PRICE = price; } function setWhitelistPrice(uint256 price) external onlyOwner { // 50000000000000000 = .05 eth WHITELIST_PRICE = price; } function setTokenBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function tokenBaseURI() public view returns (string memory) { return _tokenBaseURI; } function setMisteryURI(string calldata URI) external onlyOwner { _mysteryURI = URI; } function mysteryURI() public view returns (string memory) { return _mysteryURI; } function toggleMysteryURI() public onlyOwner { revealed = !revealed; } function setMembers(address _memberOne, address _memeberTwo, address _memberThree, address _memberFour, address _memberFive) external onlyOwner { memberOne = _memberOne; memberTwo = _memeberTwo; memberThree = _memberThree; memberFour = _memberFour; memberFive = _memberFive; } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require(_exists(tokenId), "Cannot query non-existent token"); if (revealed == false) { return _mysteryURI; } return string( abi.encodePacked(_tokenBaseURI, tokenId.toString(), ".json") ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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 { _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT 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); } }
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":"NFTS_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_LIVE_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mysteryURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_memberOne","type":"address"},{"internalType":"address","name":"_memeberTwo","type":"address"},{"internalType":"address","name":"_memberThree","type":"address"},{"internalType":"address","name":"_memberFour","type":"address"},{"internalType":"address","name":"_memberFive","type":"address"}],"name":"setMembers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setMisteryURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setWhitelistPrice","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":[],"name":"toggleMintLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMysteryURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527310ec1f4da5ad2f0a7b1caf0c7378aed4da09fa6a600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3509c119d6cc7ba3cec84a8ee31ac2da95c2c48600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bfc422e564965be583fc4bd6b2c6187e21824b76600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c1892edcc1fe358dbb9f1892f8e1f0efc9c64283600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ed4f50f439be1ea9435a1379f48b36e3635c6d87600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067011c37937e080000600c5566b1a2bc2ec50000600d5560405180608001604052806051815260200162004edd60519139600e9080519060200190620001f5929190620003ca565b506040518060800160405280605d815260200162004f2e605d9139600f908051906020019062000227929190620003ca565b503480156200023557600080fd5b506040518060400160405280601281526020017f4d732e20426967666f6f742042616464696500000000000000000000000000008152506040518060400160405280600481526020017f4d534242000000000000000000000000000000000000000000000000000000008152508160009080519060200190620002ba929190620003ca565b508060019080519060200190620002d3929190620003ca565b505050620002f6620002ea620002fc60201b60201c565b6200030460201b60201c565b620004df565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003d8906200047a565b90600052602060002090601f016020900481019282620003fc576000855562000448565b82601f106200041757805160ff191683800117855562000448565b8280016001018555821562000448579182015b82811115620004475782518255916020019190600101906200042a565b5b5090506200045791906200045b565b5090565b5b80821115620004765760008160009055506001016200045c565b5090565b600060028204905060018216806200049357607f821691505b60208210811415620004aa57620004a9620004b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6149ee80620004ef6000396000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063a22cb465116100b6578063d034291d1161007a578063d034291d14610814578063d52c57e01461083f578063e8656fcc14610868578063e985e9c514610893578063f2fde38b146108d0578063f4217648146108f957610246565b8063a22cb46514610731578063b88d4fde1461075a578063c30e768414610783578063c6275255146107ae578063c87b56dd146107d757610246565b8063868ff4a2116100fd578063868ff4a21461066b5780638da5cb5b146106875780638ef79e91146106b257806395d89b41146106db5780639da3f8fd1461070657610246565b806370a082311461059a578063715018a6146105d7578063717d57d3146105ee57806372bfb1af146106175780638388b1541461064257610246565b8063345c6d7f116101c757806345bcf17f1161018b57806345bcf17f146104c55780634e99b800146104dc5780635183022714610507578063611f3f10146105325780636352211e1461055d57610246565b8063345c6d7f146103f4578063370491831461041d5780633af32abf146104485780633ccfd60b1461048557806342842e0e1461049c57610246565b806317e7f2951161020e57806317e7f2951461033057806318160ddd1461035b578063232452161461038657806323b872dd146103af5780632db11544146103d857610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f0578063105739b814610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613639565b610922565b60405161027f9190613c57565b60405180910390f35b34801561029457600080fd5b5061029d610a04565b6040516102aa9190613c72565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906136e0565b610a96565b6040516102e79190613bf0565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135b0565b610b1b565b005b34801561032557600080fd5b5061032e610c33565b005b34801561033c57600080fd5b50610345610cdb565b6040516103529190613f54565b60405180910390f35b34801561036757600080fd5b50610370610ce1565b60405161037d9190613f54565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906135f0565b610ce7565b005b3480156103bb57600080fd5b506103d660048036038101906103d1919061349a565b610df8565b005b6103f260048036038101906103ed91906136e0565b610e58565b005b34801561040057600080fd5b5061041b6004803603810190610416919061341f565b611031565b005b34801561042957600080fd5b506104326111f9565b60405161043f9190613f54565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906133b2565b6111ff565b60405161047c9190613c57565b60405180910390f35b34801561049157600080fd5b5061049a611255565b005b3480156104a857600080fd5b506104c360048036038101906104be919061349a565b611564565b005b3480156104d157600080fd5b506104da611584565b005b3480156104e857600080fd5b506104f161162c565b6040516104fe9190613c72565b60405180910390f35b34801561051357600080fd5b5061051c6116be565b6040516105299190613c57565b60405180910390f35b34801561053e57600080fd5b506105476116d1565b6040516105549190613f54565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906136e0565b6116d7565b6040516105919190613bf0565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906133b2565b611789565b6040516105ce9190613f54565b60405180910390f35b3480156105e357600080fd5b506105ec611841565b005b3480156105fa57600080fd5b50610615600480360381019061061091906136e0565b6118c9565b005b34801561062357600080fd5b5061062c61194f565b6040516106399190613f54565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613693565b611954565b005b610685600480360381019061068091906136e0565b6119e6565b005b34801561069357600080fd5b5061069c611c4b565b6040516106a99190613bf0565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613693565b611c75565b005b3480156106e757600080fd5b506106f0611d07565b6040516106fd9190613c72565b60405180910390f35b34801561071257600080fd5b5061071b611d99565b6040516107289190613c57565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190613570565b611da7565b005b34801561076657600080fd5b50610781600480360381019061077c91906134ed565b611dbd565b005b34801561078f57600080fd5b50610798611e1f565b6040516107a59190613f54565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906136e0565b611e25565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906136e0565b611eab565b60405161080b9190613c72565b60405180910390f35b34801561082057600080fd5b50610829611fd6565b6040516108369190613c72565b60405180910390f35b34801561084b57600080fd5b506108666004803603810190610861919061370d565b612068565b005b34801561087457600080fd5b5061087d6121db565b60405161088a9190613c57565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b591906133df565b6121ee565b6040516108c79190613c57565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906133b2565b612282565b005b34801561090557600080fd5b50610920600480360381019061091b91906135f0565b61237a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc8261248b565b5b9050919050565b606060008054610a1390614214565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f90614214565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa1826124f5565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613e34565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b26826116d7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613eb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612561565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612561565b6121ee565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613db4565b60405180910390fd5b610c2e8383612569565b505050565b610c3b612561565b73ffffffffffffffffffffffffffffffffffffffff16610c59611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613e54565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600d5481565b60125481565b610cef612561565b73ffffffffffffffffffffffffffffffffffffffff16610d0d611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613e54565b60405180910390fd5b60005b8151811015610df457600060106000848481518110610d8857610d8761437e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dec90614277565b915050610d66565b5050565b610e09610e03612561565b82612622565b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613ed4565b60405180910390fd5b610e53838383612700565b505050565b601160009054906101000a900460ff16610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613d74565b60405180910390fd5b610d0560125410610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613d54565b60405180910390fd5b610d0581601254610efe9190614049565b1115610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613cd4565b60405180910390fd5b3481600c54610f4e91906140d0565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690613f34565b60405180910390fd5b600a811115610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f14565b60405180910390fd5b60005b818110156110145761100133600183601254610ff29190614049565b610ffc9190614049565b61295c565b808061100c90614277565b915050610fd6565b5080601260008282546110279190614049565b9250508190555050565b611039612561565b73ffffffffffffffffffffffffffffffffffffffff16611057611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613e54565b60405180910390fd5b84600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b610d0581565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61125d612561565b73ffffffffffffffffffffffffffffffffffffffff1661127b611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890613e54565b60405180910390fd5b6000479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c88461132291906140d0565b61132c919061409f565b9081150290604051600060405180830381858888f19350505050158015611357573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c8846113a491906140d0565b6113ae919061409f565b9081150290604051600060405180830381858888f193505050501580156113d9573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c88461142691906140d0565b611430919061409f565b9081150290604051600060405180830381858888f1935050505015801561145b573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e86032846114a891906140d0565b6114b2919061409f565b9081150290604051600060405180830381858888f193505050501580156114dd573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e861015e8461152b91906140d0565b611535919061409f565b9081150290604051600060405180830381858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61157f83838360405180602001604052806000815250611dbd565b505050565b61158c612561565b73ffffffffffffffffffffffffffffffffffffffff166115aa611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613e54565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6060600e805461163b90614214565b80601f016020809104026020016040519081016040528092919081815260200182805461166790614214565b80156116b45780601f10611689576101008083540402835291602001916116b4565b820191906000526020600020905b81548152906001019060200180831161169757829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613df4565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613dd4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611849612561565b73ffffffffffffffffffffffffffffffffffffffff16611867611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613e54565b60405180910390fd5b6118c7600061297a565b565b6118d1612561565b73ffffffffffffffffffffffffffffffffffffffff166118ef611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613e54565b60405180910390fd5b80600d8190555050565b600a81565b61195c612561565b73ffffffffffffffffffffffffffffffffffffffff1661197a611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790613e54565b60405180910390fd5b8181600f91906119e1929190613142565b505050565b601160009054906101000a900460ff16611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613d74565b60405180910390fd5b610d0560125410611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613d54565b60405180910390fd5b610d0581601254611a8c9190614049565b1115611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490613cd4565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613ef4565b60405180910390fd5b3481600d54611b6891906140d0565b1115611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090613f34565b60405180910390fd5b600a811115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613f14565b60405180910390fd5b60005b81811015611c2e57611c1b33600183601254611c0c9190614049565b611c169190614049565b61295c565b8080611c2690614277565b915050611bf0565b508060126000828254611c419190614049565b9250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c7d612561565b73ffffffffffffffffffffffffffffffffffffffff16611c9b611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890613e54565b60405180910390fd5b8181600e9190611d02929190613142565b505050565b606060018054611d1690614214565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614214565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905090565b6000610d0560125410905090565b611db9611db2612561565b8383612a40565b5050565b611dce611dc8612561565b83612622565b611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490613ed4565b60405180910390fd5b611e1984848484612bad565b50505050565b610dac81565b611e2d612561565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613e54565b60405180910390fd5b80600c8190555050565b6060611eb6826124f5565b611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec90613e94565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611fa357600f8054611f1e90614214565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4a90614214565b8015611f975780601f10611f6c57610100808354040283529160200191611f97565b820191906000526020600020905b815481529060010190602001808311611f7a57829003601f168201915b50505050509050611fd1565b600e611fae83612c09565b604051602001611fbf929190613bc1565b60405160208183030381529060405290505b919050565b6060600f8054611fe590614214565b80601f016020809104026020016040519081016040528092919081815260200182805461201190614214565b801561205e5780601f106120335761010080835404028352916020019161205e565b820191906000526020600020905b81548152906001019060200180831161204157829003601f168201915b5050505050905090565b612070612561565b73ffffffffffffffffffffffffffffffffffffffff1661208e611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613e54565b60405180910390fd5b610dac6012541061212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613d54565b60405180910390fd5b610dac8260125461213b9190614049565b111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613cd4565b60405180910390fd5b60005b828110156121bd576121aa8260018360125461219b9190614049565b6121a59190614049565b61295c565b80806121b590614277565b91505061217f565b5081601260008282546121d09190614049565b925050819055505050565b601160009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61228a612561565b73ffffffffffffffffffffffffffffffffffffffff166122a8611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590613e54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590613cb4565b60405180910390fd5b6123778161297a565b50565b612382612561565b73ffffffffffffffffffffffffffffffffffffffff166123a0611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90613e54565b60405180910390fd5b60005b81518110156124875760016010600084848151811061241b5761241a61437e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061247f90614277565b9150506123f9565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125dc836116d7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061262d826124f5565b61266c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266390613d94565b60405180910390fd5b6000612677836116d7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126e657508373ffffffffffffffffffffffffffffffffffffffff166126ce84610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b806126f757506126f681856121ee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612720826116d7565b73ffffffffffffffffffffffffffffffffffffffff1614612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90613e74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90613d14565b60405180910390fd5b6127f1838383612d6a565b6127fc600082612569565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284c919061412a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a39190614049565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612976828260405180602001604052806000815250612d6f565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690613d34565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ba09190613c57565b60405180910390a3505050565b612bb8848484612700565b612bc484848484612dca565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90613c94565b60405180910390fd5b50505050565b60606000821415612c51576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d65565b600082905060005b60008214612c83578080612c6c90614277565b915050600a82612c7c919061409f565b9150612c59565b60008167ffffffffffffffff811115612c9f57612c9e6143ad565b5b6040519080825280601f01601f191660200182016040528015612cd15781602001600182028036833780820191505090505b5090505b60008514612d5e57600182612cea919061412a565b9150600a85612cf991906142c0565b6030612d059190614049565b60f81b818381518110612d1b57612d1a61437e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d57919061409f565b9450612cd5565b8093505050505b919050565b505050565b612d798383612f61565b612d866000848484612dca565b612dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbc90613c94565b60405180910390fd5b505050565b6000612deb8473ffffffffffffffffffffffffffffffffffffffff1661312f565b15612f54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e14612561565b8786866040518563ffffffff1660e01b8152600401612e369493929190613c0b565b602060405180830381600087803b158015612e5057600080fd5b505af1925050508015612e8157506040513d601f19601f82011682018060405250810190612e7e9190613666565b60015b612f04573d8060008114612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b50600081511415612efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef390613c94565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f59565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc890613e14565b60405180910390fd5b612fda816124f5565b1561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190613cf4565b60405180910390fd5b61302660008383612d6a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130769190614049565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461314e90614214565b90600052602060002090601f01602090048101928261317057600085556131b7565b82601f1061318957803560ff19168380011785556131b7565b828001600101855582156131b7579182015b828111156131b657823582559160200191906001019061319b565b5b5090506131c491906131c8565b5090565b5b808211156131e15760008160009055506001016131c9565b5090565b60006131f86131f384613f94565b613f6f565b9050808382526020820190508285602086028201111561321b5761321a6143e6565b5b60005b8581101561324b57816132318882613297565b84526020840193506020830192505060018101905061321e565b5050509392505050565b600061326861326384613fc0565b613f6f565b905082815260208101848484011115613284576132836143eb565b5b61328f8482856141d2565b509392505050565b6000813590506132a68161495c565b92915050565b600082601f8301126132c1576132c06143e1565b5b81356132d18482602086016131e5565b91505092915050565b6000813590506132e981614973565b92915050565b6000813590506132fe8161498a565b92915050565b6000815190506133138161498a565b92915050565b600082601f83011261332e5761332d6143e1565b5b813561333e848260208601613255565b91505092915050565b60008083601f84011261335d5761335c6143e1565b5b8235905067ffffffffffffffff81111561337a576133796143dc565b5b602083019150836001820283011115613396576133956143e6565b5b9250929050565b6000813590506133ac816149a1565b92915050565b6000602082840312156133c8576133c76143f5565b5b60006133d684828501613297565b91505092915050565b600080604083850312156133f6576133f56143f5565b5b600061340485828601613297565b925050602061341585828601613297565b9150509250929050565b600080600080600060a0868803121561343b5761343a6143f5565b5b600061344988828901613297565b955050602061345a88828901613297565b945050604061346b88828901613297565b935050606061347c88828901613297565b925050608061348d88828901613297565b9150509295509295909350565b6000806000606084860312156134b3576134b26143f5565b5b60006134c186828701613297565b93505060206134d286828701613297565b92505060406134e38682870161339d565b9150509250925092565b60008060008060808587031215613507576135066143f5565b5b600061351587828801613297565b945050602061352687828801613297565b93505060406135378782880161339d565b925050606085013567ffffffffffffffff811115613558576135576143f0565b5b61356487828801613319565b91505092959194509250565b60008060408385031215613587576135866143f5565b5b600061359585828601613297565b92505060206135a6858286016132da565b9150509250929050565b600080604083850312156135c7576135c66143f5565b5b60006135d585828601613297565b92505060206135e68582860161339d565b9150509250929050565b600060208284031215613606576136056143f5565b5b600082013567ffffffffffffffff811115613624576136236143f0565b5b613630848285016132ac565b91505092915050565b60006020828403121561364f5761364e6143f5565b5b600061365d848285016132ef565b91505092915050565b60006020828403121561367c5761367b6143f5565b5b600061368a84828501613304565b91505092915050565b600080602083850312156136aa576136a96143f5565b5b600083013567ffffffffffffffff8111156136c8576136c76143f0565b5b6136d485828601613347565b92509250509250929050565b6000602082840312156136f6576136f56143f5565b5b60006137048482850161339d565b91505092915050565b60008060408385031215613724576137236143f5565b5b60006137328582860161339d565b925050602061374385828601613297565b9150509250929050565b6137568161415e565b82525050565b61376581614170565b82525050565b600061377682614006565b613780818561401c565b93506137908185602086016141e1565b613799816143fa565b840191505092915050565b60006137af82614011565b6137b9818561402d565b93506137c98185602086016141e1565b6137d2816143fa565b840191505092915050565b60006137e882614011565b6137f2818561403e565b93506138028185602086016141e1565b80840191505092915050565b6000815461381b81614214565b613825818661403e565b94506001821660008114613840576001811461385157613884565b60ff19831686528186019350613884565b61385a85613ff1565b60005b8381101561387c5781548189015260018201915060208101905061385d565b838801955050505b50505092915050565b600061389a60328361402d565b91506138a58261440b565b604082019050919050565b60006138bd60268361402d565b91506138c88261445a565b604082019050919050565b60006138e0600c8361402d565b91506138eb826144a9565b602082019050919050565b6000613903601c8361402d565b915061390e826144d2565b602082019050919050565b600061392660248361402d565b9150613931826144fb565b604082019050919050565b600061394960198361402d565b91506139548261454a565b602082019050919050565b600061396c600c8361402d565b915061397782614573565b602082019050919050565b600061398f600b8361402d565b915061399a8261459c565b602082019050919050565b60006139b2602c8361402d565b91506139bd826145c5565b604082019050919050565b60006139d560388361402d565b91506139e082614614565b604082019050919050565b60006139f8602a8361402d565b9150613a0382614663565b604082019050919050565b6000613a1b60298361402d565b9150613a26826146b2565b604082019050919050565b6000613a3e60208361402d565b9150613a4982614701565b602082019050919050565b6000613a61602c8361402d565b9150613a6c8261472a565b604082019050919050565b6000613a8460058361403e565b9150613a8f82614779565b600582019050919050565b6000613aa760208361402d565b9150613ab2826147a2565b602082019050919050565b6000613aca60298361402d565b9150613ad5826147cb565b604082019050919050565b6000613aed601f8361402d565b9150613af88261481a565b602082019050919050565b6000613b1060218361402d565b9150613b1b82614843565b604082019050919050565b6000613b3360318361402d565b9150613b3e82614892565b604082019050919050565b6000613b56600f8361402d565b9150613b61826148e1565b602082019050919050565b6000613b7960148361402d565b9150613b848261490a565b602082019050919050565b6000613b9c60108361402d565b9150613ba782614933565b602082019050919050565b613bbb816141c8565b82525050565b6000613bcd828561380e565b9150613bd982846137dd565b9150613be482613a77565b91508190509392505050565b6000602082019050613c05600083018461374d565b92915050565b6000608082019050613c20600083018761374d565b613c2d602083018661374d565b613c3a6040830185613bb2565b8181036060830152613c4c818461376b565b905095945050505050565b6000602082019050613c6c600083018461375c565b92915050565b60006020820190508181036000830152613c8c81846137a4565b905092915050565b60006020820190508181036000830152613cad8161388d565b9050919050565b60006020820190508181036000830152613ccd816138b0565b9050919050565b60006020820190508181036000830152613ced816138d3565b9050919050565b60006020820190508181036000830152613d0d816138f6565b9050919050565b60006020820190508181036000830152613d2d81613919565b9050919050565b60006020820190508181036000830152613d4d8161393c565b9050919050565b60006020820190508181036000830152613d6d8161395f565b9050919050565b60006020820190508181036000830152613d8d81613982565b9050919050565b60006020820190508181036000830152613dad816139a5565b9050919050565b60006020820190508181036000830152613dcd816139c8565b9050919050565b60006020820190508181036000830152613ded816139eb565b9050919050565b60006020820190508181036000830152613e0d81613a0e565b9050919050565b60006020820190508181036000830152613e2d81613a31565b9050919050565b60006020820190508181036000830152613e4d81613a54565b9050919050565b60006020820190508181036000830152613e6d81613a9a565b9050919050565b60006020820190508181036000830152613e8d81613abd565b9050919050565b60006020820190508181036000830152613ead81613ae0565b9050919050565b60006020820190508181036000830152613ecd81613b03565b9050919050565b60006020820190508181036000830152613eed81613b26565b9050919050565b60006020820190508181036000830152613f0d81613b49565b9050919050565b60006020820190508181036000830152613f2d81613b6c565b9050919050565b60006020820190508181036000830152613f4d81613b8f565b9050919050565b6000602082019050613f696000830184613bb2565b92915050565b6000613f79613f8a565b9050613f858282614246565b919050565b6000604051905090565b600067ffffffffffffffff821115613faf57613fae6143ad565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fdb57613fda6143ad565b5b613fe4826143fa565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614054826141c8565b915061405f836141c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614094576140936142f1565b5b828201905092915050565b60006140aa826141c8565b91506140b5836141c8565b9250826140c5576140c4614320565b5b828204905092915050565b60006140db826141c8565b91506140e6836141c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411f5761411e6142f1565b5b828202905092915050565b6000614135826141c8565b9150614140836141c8565b925082821015614153576141526142f1565b5b828203905092915050565b6000614169826141a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141ff5780820151818401526020810190506141e4565b8381111561420e576000848401525b50505050565b6000600282049050600182168061422c57607f821691505b602082108114156142405761423f61434f565b5b50919050565b61424f826143fa565b810181811067ffffffffffffffff8211171561426e5761426d6143ad565b5b80604052505050565b6000614282826141c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b5576142b46142f1565b5b600182019050919050565b60006142cb826141c8565b91506142d6836141c8565b9250826142e6576142e5614320565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f53544f434b0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f55545f4f465f53544f434b0000000000000000000000000000000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e4f545f57484954454c49535445440000000000000000000000000000000000600082015250565b7f4558434545445f4e4654535f5045525f4d494e54000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b6149658161415e565b811461497057600080fd5b50565b61497c81614170565b811461498757600080fd5b50565b6149938161417c565b811461499e57600080fd5b50565b6149aa816141c8565b81146149b557600080fd5b5056fea26469706673582212202e0f5ef7b9d0ac3f8c14fbb9aabd32a15cd7919d3a38efb05709d1839fdc2e2664736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a574e647566527a457967665156557063784869386a386d747374644432375541483164486d52504e6248332f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a574e647566527a457967665156557063784869386a386d747374644432375541483164486d52504e6248332f6d7973746572792e6a736f6e
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063a22cb465116100b6578063d034291d1161007a578063d034291d14610814578063d52c57e01461083f578063e8656fcc14610868578063e985e9c514610893578063f2fde38b146108d0578063f4217648146108f957610246565b8063a22cb46514610731578063b88d4fde1461075a578063c30e768414610783578063c6275255146107ae578063c87b56dd146107d757610246565b8063868ff4a2116100fd578063868ff4a21461066b5780638da5cb5b146106875780638ef79e91146106b257806395d89b41146106db5780639da3f8fd1461070657610246565b806370a082311461059a578063715018a6146105d7578063717d57d3146105ee57806372bfb1af146106175780638388b1541461064257610246565b8063345c6d7f116101c757806345bcf17f1161018b57806345bcf17f146104c55780634e99b800146104dc5780635183022714610507578063611f3f10146105325780636352211e1461055d57610246565b8063345c6d7f146103f4578063370491831461041d5780633af32abf146104485780633ccfd60b1461048557806342842e0e1461049c57610246565b806317e7f2951161020e57806317e7f2951461033057806318160ddd1461035b578063232452161461038657806323b872dd146103af5780632db11544146103d857610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f0578063105739b814610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613639565b610922565b60405161027f9190613c57565b60405180910390f35b34801561029457600080fd5b5061029d610a04565b6040516102aa9190613c72565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906136e0565b610a96565b6040516102e79190613bf0565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135b0565b610b1b565b005b34801561032557600080fd5b5061032e610c33565b005b34801561033c57600080fd5b50610345610cdb565b6040516103529190613f54565b60405180910390f35b34801561036757600080fd5b50610370610ce1565b60405161037d9190613f54565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906135f0565b610ce7565b005b3480156103bb57600080fd5b506103d660048036038101906103d1919061349a565b610df8565b005b6103f260048036038101906103ed91906136e0565b610e58565b005b34801561040057600080fd5b5061041b6004803603810190610416919061341f565b611031565b005b34801561042957600080fd5b506104326111f9565b60405161043f9190613f54565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906133b2565b6111ff565b60405161047c9190613c57565b60405180910390f35b34801561049157600080fd5b5061049a611255565b005b3480156104a857600080fd5b506104c360048036038101906104be919061349a565b611564565b005b3480156104d157600080fd5b506104da611584565b005b3480156104e857600080fd5b506104f161162c565b6040516104fe9190613c72565b60405180910390f35b34801561051357600080fd5b5061051c6116be565b6040516105299190613c57565b60405180910390f35b34801561053e57600080fd5b506105476116d1565b6040516105549190613f54565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906136e0565b6116d7565b6040516105919190613bf0565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906133b2565b611789565b6040516105ce9190613f54565b60405180910390f35b3480156105e357600080fd5b506105ec611841565b005b3480156105fa57600080fd5b50610615600480360381019061061091906136e0565b6118c9565b005b34801561062357600080fd5b5061062c61194f565b6040516106399190613f54565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613693565b611954565b005b610685600480360381019061068091906136e0565b6119e6565b005b34801561069357600080fd5b5061069c611c4b565b6040516106a99190613bf0565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613693565b611c75565b005b3480156106e757600080fd5b506106f0611d07565b6040516106fd9190613c72565b60405180910390f35b34801561071257600080fd5b5061071b611d99565b6040516107289190613c57565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190613570565b611da7565b005b34801561076657600080fd5b50610781600480360381019061077c91906134ed565b611dbd565b005b34801561078f57600080fd5b50610798611e1f565b6040516107a59190613f54565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906136e0565b611e25565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906136e0565b611eab565b60405161080b9190613c72565b60405180910390f35b34801561082057600080fd5b50610829611fd6565b6040516108369190613c72565b60405180910390f35b34801561084b57600080fd5b506108666004803603810190610861919061370d565b612068565b005b34801561087457600080fd5b5061087d6121db565b60405161088a9190613c57565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b591906133df565b6121ee565b6040516108c79190613c57565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906133b2565b612282565b005b34801561090557600080fd5b50610920600480360381019061091b91906135f0565b61237a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc8261248b565b5b9050919050565b606060008054610a1390614214565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f90614214565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa1826124f5565b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613e34565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b26826116d7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613eb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb6612561565b73ffffffffffffffffffffffffffffffffffffffff161480610be55750610be481610bdf612561565b6121ee565b5b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613db4565b60405180910390fd5b610c2e8383612569565b505050565b610c3b612561565b73ffffffffffffffffffffffffffffffffffffffff16610c59611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613e54565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600d5481565b60125481565b610cef612561565b73ffffffffffffffffffffffffffffffffffffffff16610d0d611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613e54565b60405180910390fd5b60005b8151811015610df457600060106000848481518110610d8857610d8761437e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dec90614277565b915050610d66565b5050565b610e09610e03612561565b82612622565b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613ed4565b60405180910390fd5b610e53838383612700565b505050565b601160009054906101000a900460ff16610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613d74565b60405180910390fd5b610d0560125410610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613d54565b60405180910390fd5b610d0581601254610efe9190614049565b1115610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613cd4565b60405180910390fd5b3481600c54610f4e91906140d0565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690613f34565b60405180910390fd5b600a811115610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f14565b60405180910390fd5b60005b818110156110145761100133600183601254610ff29190614049565b610ffc9190614049565b61295c565b808061100c90614277565b915050610fd6565b5080601260008282546110279190614049565b9250508190555050565b611039612561565b73ffffffffffffffffffffffffffffffffffffffff16611057611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613e54565b60405180910390fd5b84600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b610d0581565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61125d612561565b73ffffffffffffffffffffffffffffffffffffffff1661127b611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890613e54565b60405180910390fd5b6000479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c88461132291906140d0565b61132c919061409f565b9081150290604051600060405180830381858888f19350505050158015611357573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c8846113a491906140d0565b6113ae919061409f565b9081150290604051600060405180830381858888f193505050501580156113d9573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e860c88461142691906140d0565b611430919061409f565b9081150290604051600060405180830381858888f1935050505015801561145b573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e86032846114a891906140d0565b6114b2919061409f565b9081150290604051600060405180830381858888f193505050501580156114dd573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e861015e8461152b91906140d0565b611535919061409f565b9081150290604051600060405180830381858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61157f83838360405180602001604052806000815250611dbd565b505050565b61158c612561565b73ffffffffffffffffffffffffffffffffffffffff166115aa611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613e54565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6060600e805461163b90614214565b80601f016020809104026020016040519081016040528092919081815260200182805461166790614214565b80156116b45780601f10611689576101008083540402835291602001916116b4565b820191906000526020600020905b81548152906001019060200180831161169757829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613df4565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613dd4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611849612561565b73ffffffffffffffffffffffffffffffffffffffff16611867611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613e54565b60405180910390fd5b6118c7600061297a565b565b6118d1612561565b73ffffffffffffffffffffffffffffffffffffffff166118ef611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613e54565b60405180910390fd5b80600d8190555050565b600a81565b61195c612561565b73ffffffffffffffffffffffffffffffffffffffff1661197a611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790613e54565b60405180910390fd5b8181600f91906119e1929190613142565b505050565b601160009054906101000a900460ff16611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613d74565b60405180910390fd5b610d0560125410611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613d54565b60405180910390fd5b610d0581601254611a8c9190614049565b1115611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490613cd4565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613ef4565b60405180910390fd5b3481600d54611b6891906140d0565b1115611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090613f34565b60405180910390fd5b600a811115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613f14565b60405180910390fd5b60005b81811015611c2e57611c1b33600183601254611c0c9190614049565b611c169190614049565b61295c565b8080611c2690614277565b915050611bf0565b508060126000828254611c419190614049565b9250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c7d612561565b73ffffffffffffffffffffffffffffffffffffffff16611c9b611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890613e54565b60405180910390fd5b8181600e9190611d02929190613142565b505050565b606060018054611d1690614214565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614214565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905090565b6000610d0560125410905090565b611db9611db2612561565b8383612a40565b5050565b611dce611dc8612561565b83612622565b611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490613ed4565b60405180910390fd5b611e1984848484612bad565b50505050565b610dac81565b611e2d612561565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611c4b565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613e54565b60405180910390fd5b80600c8190555050565b6060611eb6826124f5565b611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec90613e94565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611fa357600f8054611f1e90614214565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4a90614214565b8015611f975780601f10611f6c57610100808354040283529160200191611f97565b820191906000526020600020905b815481529060010190602001808311611f7a57829003601f168201915b50505050509050611fd1565b600e611fae83612c09565b604051602001611fbf929190613bc1565b60405160208183030381529060405290505b919050565b6060600f8054611fe590614214565b80601f016020809104026020016040519081016040528092919081815260200182805461201190614214565b801561205e5780601f106120335761010080835404028352916020019161205e565b820191906000526020600020905b81548152906001019060200180831161204157829003601f168201915b5050505050905090565b612070612561565b73ffffffffffffffffffffffffffffffffffffffff1661208e611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613e54565b60405180910390fd5b610dac6012541061212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613d54565b60405180910390fd5b610dac8260125461213b9190614049565b111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613cd4565b60405180910390fd5b60005b828110156121bd576121aa8260018360125461219b9190614049565b6121a59190614049565b61295c565b80806121b590614277565b91505061217f565b5081601260008282546121d09190614049565b925050819055505050565b601160009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61228a612561565b73ffffffffffffffffffffffffffffffffffffffff166122a8611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590613e54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590613cb4565b60405180910390fd5b6123778161297a565b50565b612382612561565b73ffffffffffffffffffffffffffffffffffffffff166123a0611c4b565b73ffffffffffffffffffffffffffffffffffffffff16146123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90613e54565b60405180910390fd5b60005b81518110156124875760016010600084848151811061241b5761241a61437e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061247f90614277565b9150506123f9565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125dc836116d7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061262d826124f5565b61266c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266390613d94565b60405180910390fd5b6000612677836116d7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126e657508373ffffffffffffffffffffffffffffffffffffffff166126ce84610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b806126f757506126f681856121ee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612720826116d7565b73ffffffffffffffffffffffffffffffffffffffff1614612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90613e74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90613d14565b60405180910390fd5b6127f1838383612d6a565b6127fc600082612569565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284c919061412a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a39190614049565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612976828260405180602001604052806000815250612d6f565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa690613d34565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ba09190613c57565b60405180910390a3505050565b612bb8848484612700565b612bc484848484612dca565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90613c94565b60405180910390fd5b50505050565b60606000821415612c51576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d65565b600082905060005b60008214612c83578080612c6c90614277565b915050600a82612c7c919061409f565b9150612c59565b60008167ffffffffffffffff811115612c9f57612c9e6143ad565b5b6040519080825280601f01601f191660200182016040528015612cd15781602001600182028036833780820191505090505b5090505b60008514612d5e57600182612cea919061412a565b9150600a85612cf991906142c0565b6030612d059190614049565b60f81b818381518110612d1b57612d1a61437e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d57919061409f565b9450612cd5565b8093505050505b919050565b505050565b612d798383612f61565b612d866000848484612dca565b612dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbc90613c94565b60405180910390fd5b505050565b6000612deb8473ffffffffffffffffffffffffffffffffffffffff1661312f565b15612f54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e14612561565b8786866040518563ffffffff1660e01b8152600401612e369493929190613c0b565b602060405180830381600087803b158015612e5057600080fd5b505af1925050508015612e8157506040513d601f19601f82011682018060405250810190612e7e9190613666565b60015b612f04573d8060008114612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b50600081511415612efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef390613c94565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f59565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc890613e14565b60405180910390fd5b612fda816124f5565b1561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190613cf4565b60405180910390fd5b61302660008383612d6a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130769190614049565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461314e90614214565b90600052602060002090601f01602090048101928261317057600085556131b7565b82601f1061318957803560ff19168380011785556131b7565b828001600101855582156131b7579182015b828111156131b657823582559160200191906001019061319b565b5b5090506131c491906131c8565b5090565b5b808211156131e15760008160009055506001016131c9565b5090565b60006131f86131f384613f94565b613f6f565b9050808382526020820190508285602086028201111561321b5761321a6143e6565b5b60005b8581101561324b57816132318882613297565b84526020840193506020830192505060018101905061321e565b5050509392505050565b600061326861326384613fc0565b613f6f565b905082815260208101848484011115613284576132836143eb565b5b61328f8482856141d2565b509392505050565b6000813590506132a68161495c565b92915050565b600082601f8301126132c1576132c06143e1565b5b81356132d18482602086016131e5565b91505092915050565b6000813590506132e981614973565b92915050565b6000813590506132fe8161498a565b92915050565b6000815190506133138161498a565b92915050565b600082601f83011261332e5761332d6143e1565b5b813561333e848260208601613255565b91505092915050565b60008083601f84011261335d5761335c6143e1565b5b8235905067ffffffffffffffff81111561337a576133796143dc565b5b602083019150836001820283011115613396576133956143e6565b5b9250929050565b6000813590506133ac816149a1565b92915050565b6000602082840312156133c8576133c76143f5565b5b60006133d684828501613297565b91505092915050565b600080604083850312156133f6576133f56143f5565b5b600061340485828601613297565b925050602061341585828601613297565b9150509250929050565b600080600080600060a0868803121561343b5761343a6143f5565b5b600061344988828901613297565b955050602061345a88828901613297565b945050604061346b88828901613297565b935050606061347c88828901613297565b925050608061348d88828901613297565b9150509295509295909350565b6000806000606084860312156134b3576134b26143f5565b5b60006134c186828701613297565b93505060206134d286828701613297565b92505060406134e38682870161339d565b9150509250925092565b60008060008060808587031215613507576135066143f5565b5b600061351587828801613297565b945050602061352687828801613297565b93505060406135378782880161339d565b925050606085013567ffffffffffffffff811115613558576135576143f0565b5b61356487828801613319565b91505092959194509250565b60008060408385031215613587576135866143f5565b5b600061359585828601613297565b92505060206135a6858286016132da565b9150509250929050565b600080604083850312156135c7576135c66143f5565b5b60006135d585828601613297565b92505060206135e68582860161339d565b9150509250929050565b600060208284031215613606576136056143f5565b5b600082013567ffffffffffffffff811115613624576136236143f0565b5b613630848285016132ac565b91505092915050565b60006020828403121561364f5761364e6143f5565b5b600061365d848285016132ef565b91505092915050565b60006020828403121561367c5761367b6143f5565b5b600061368a84828501613304565b91505092915050565b600080602083850312156136aa576136a96143f5565b5b600083013567ffffffffffffffff8111156136c8576136c76143f0565b5b6136d485828601613347565b92509250509250929050565b6000602082840312156136f6576136f56143f5565b5b60006137048482850161339d565b91505092915050565b60008060408385031215613724576137236143f5565b5b60006137328582860161339d565b925050602061374385828601613297565b9150509250929050565b6137568161415e565b82525050565b61376581614170565b82525050565b600061377682614006565b613780818561401c565b93506137908185602086016141e1565b613799816143fa565b840191505092915050565b60006137af82614011565b6137b9818561402d565b93506137c98185602086016141e1565b6137d2816143fa565b840191505092915050565b60006137e882614011565b6137f2818561403e565b93506138028185602086016141e1565b80840191505092915050565b6000815461381b81614214565b613825818661403e565b94506001821660008114613840576001811461385157613884565b60ff19831686528186019350613884565b61385a85613ff1565b60005b8381101561387c5781548189015260018201915060208101905061385d565b838801955050505b50505092915050565b600061389a60328361402d565b91506138a58261440b565b604082019050919050565b60006138bd60268361402d565b91506138c88261445a565b604082019050919050565b60006138e0600c8361402d565b91506138eb826144a9565b602082019050919050565b6000613903601c8361402d565b915061390e826144d2565b602082019050919050565b600061392660248361402d565b9150613931826144fb565b604082019050919050565b600061394960198361402d565b91506139548261454a565b602082019050919050565b600061396c600c8361402d565b915061397782614573565b602082019050919050565b600061398f600b8361402d565b915061399a8261459c565b602082019050919050565b60006139b2602c8361402d565b91506139bd826145c5565b604082019050919050565b60006139d560388361402d565b91506139e082614614565b604082019050919050565b60006139f8602a8361402d565b9150613a0382614663565b604082019050919050565b6000613a1b60298361402d565b9150613a26826146b2565b604082019050919050565b6000613a3e60208361402d565b9150613a4982614701565b602082019050919050565b6000613a61602c8361402d565b9150613a6c8261472a565b604082019050919050565b6000613a8460058361403e565b9150613a8f82614779565b600582019050919050565b6000613aa760208361402d565b9150613ab2826147a2565b602082019050919050565b6000613aca60298361402d565b9150613ad5826147cb565b604082019050919050565b6000613aed601f8361402d565b9150613af88261481a565b602082019050919050565b6000613b1060218361402d565b9150613b1b82614843565b604082019050919050565b6000613b3360318361402d565b9150613b3e82614892565b604082019050919050565b6000613b56600f8361402d565b9150613b61826148e1565b602082019050919050565b6000613b7960148361402d565b9150613b848261490a565b602082019050919050565b6000613b9c60108361402d565b9150613ba782614933565b602082019050919050565b613bbb816141c8565b82525050565b6000613bcd828561380e565b9150613bd982846137dd565b9150613be482613a77565b91508190509392505050565b6000602082019050613c05600083018461374d565b92915050565b6000608082019050613c20600083018761374d565b613c2d602083018661374d565b613c3a6040830185613bb2565b8181036060830152613c4c818461376b565b905095945050505050565b6000602082019050613c6c600083018461375c565b92915050565b60006020820190508181036000830152613c8c81846137a4565b905092915050565b60006020820190508181036000830152613cad8161388d565b9050919050565b60006020820190508181036000830152613ccd816138b0565b9050919050565b60006020820190508181036000830152613ced816138d3565b9050919050565b60006020820190508181036000830152613d0d816138f6565b9050919050565b60006020820190508181036000830152613d2d81613919565b9050919050565b60006020820190508181036000830152613d4d8161393c565b9050919050565b60006020820190508181036000830152613d6d8161395f565b9050919050565b60006020820190508181036000830152613d8d81613982565b9050919050565b60006020820190508181036000830152613dad816139a5565b9050919050565b60006020820190508181036000830152613dcd816139c8565b9050919050565b60006020820190508181036000830152613ded816139eb565b9050919050565b60006020820190508181036000830152613e0d81613a0e565b9050919050565b60006020820190508181036000830152613e2d81613a31565b9050919050565b60006020820190508181036000830152613e4d81613a54565b9050919050565b60006020820190508181036000830152613e6d81613a9a565b9050919050565b60006020820190508181036000830152613e8d81613abd565b9050919050565b60006020820190508181036000830152613ead81613ae0565b9050919050565b60006020820190508181036000830152613ecd81613b03565b9050919050565b60006020820190508181036000830152613eed81613b26565b9050919050565b60006020820190508181036000830152613f0d81613b49565b9050919050565b60006020820190508181036000830152613f2d81613b6c565b9050919050565b60006020820190508181036000830152613f4d81613b8f565b9050919050565b6000602082019050613f696000830184613bb2565b92915050565b6000613f79613f8a565b9050613f858282614246565b919050565b6000604051905090565b600067ffffffffffffffff821115613faf57613fae6143ad565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fdb57613fda6143ad565b5b613fe4826143fa565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614054826141c8565b915061405f836141c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614094576140936142f1565b5b828201905092915050565b60006140aa826141c8565b91506140b5836141c8565b9250826140c5576140c4614320565b5b828204905092915050565b60006140db826141c8565b91506140e6836141c8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411f5761411e6142f1565b5b828202905092915050565b6000614135826141c8565b9150614140836141c8565b925082821015614153576141526142f1565b5b828203905092915050565b6000614169826141a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141ff5780820151818401526020810190506141e4565b8381111561420e576000848401525b50505050565b6000600282049050600182168061422c57607f821691505b602082108114156142405761423f61434f565b5b50919050565b61424f826143fa565b810181811067ffffffffffffffff8211171561426e5761426d6143ad565b5b80604052505050565b6000614282826141c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b5576142b46142f1565b5b600182019050919050565b60006142cb826141c8565b91506142d6836141c8565b9250826142e6576142e5614320565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f53544f434b0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f55545f4f465f53544f434b0000000000000000000000000000000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e4f545f57484954454c49535445440000000000000000000000000000000000600082015250565b7f4558434545445f4e4654535f5045525f4d494e54000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b6149658161415e565b811461497057600080fd5b50565b61497c81614170565b811461498757600080fd5b50565b6149938161417c565b811461499e57600080fd5b50565b6149aa816141c8565b81146149b557600080fd5b5056fea26469706673582212202e0f5ef7b9d0ac3f8c14fbb9aabd32a15cd7919d3a38efb05709d1839fdc2e2664736f6c63430008070033
Deployed Bytecode Sourcemap
113:5608:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:305:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2426:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3985:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3508:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4055:84:8;;;;;;;;;;;;;:::i;:::-;;739:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1200:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3852:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4735:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1705:589:8;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4963:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;642:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3426:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2966:452;;;;;;;;;;;;;:::i;:::-;;5145:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4871:84:8;;;;;;;;;;;;;:::i;:::-;;4554:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1171:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;692:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2120:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1659:103:9;;;;;;;;;;;;;:::i;:::-;;4292:143:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;789:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4661:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2302:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1008:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4443:103:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2595:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3544:101:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4278:155:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5401:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;597:38:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4147:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5297:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4768:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1144:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4504:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1917:201:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3653:191:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1481:305:3;1583:4;1635:25;1620:40;;;:11;:40;;;;:105;;;;1692:33;1677:48;;;:11;:48;;;;1620:105;:158;;;;1742:36;1766:11;1742:23;:36::i;:::-;1620:158;1600:178;;1481:305;;;:::o;2426:100::-;2480:13;2513:5;2506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:100;:::o;3985:221::-;4061:7;4089:16;4097:7;4089;:16::i;:::-;4081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:15;:24;4190:7;4174:24;;;;;;;;;;;;;;;;;;;;;4167:31;;3985:221;;;:::o;3508:411::-;3589:13;3605:23;3620:7;3605:14;:23::i;:::-;3589:39;;3653:5;3647:11;;:2;:11;;;;3639:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3747:5;3731:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3756:37;3773:5;3780:12;:10;:12::i;:::-;3756:16;:37::i;:::-;3731:62;3709:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3890:21;3899:2;3903:7;3890:8;:21::i;:::-;3578:341;3508:411;;:::o;4055:84:8:-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4123:8:8::1;;;;;;;;;;;4122:9;4111:8;;:20;;;;;;;;;;;;;;;;;;4055:84::o:0;739:43::-;;;;:::o;1200:26::-;;;;:::o;3852:195::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3939:9:8::1;3935:105;3958:9;:16;3954:1;:20;3935:105;;;4023:5;3996:10;:24;4007:9;4017:1;4007:12;;;;;;;;:::i;:::-;;;;;;;;3996:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;3976:3;;;;;:::i;:::-;;;;3935:105;;;;3852:195:::0;:::o;4735:339:3:-;4930:41;4949:12;:10;:12::i;:::-;4963:7;4930:18;:41::i;:::-;4922:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5038:28;5048:4;5054:2;5058:7;5038:9;:28::i;:::-;4735:339;;;:::o;1705:589:8:-;1800:8;;;;;;;;;;;1792:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;681:4;1843:11;;:26;1835:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;681:4;1919:13;1905:11;;:27;;;;:::i;:::-;:43;;1897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2016:9;1999:13;1984:12;;:28;;;;:::i;:::-;:41;;1976:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;829:2;2065:13;:30;;2057:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2138:9;2133:113;2157:13;2153:1;:17;2133:113;;;2192:42;2202:10;2232:1;2228;2214:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;2192:9;:42::i;:::-;2172:3;;;;;:::i;:::-;;;;2133:113;;;;2273:13;2258:11;;:28;;;;;;;:::i;:::-;;;;;;;;1705:589;:::o;4963:326::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:10:8::1;5118:9;;:22;;;;;;;;;;;;;;;;;;5163:11;5151:9;;:23;;;;;;;;;;;;;;;;;;5199:12;5185:11;;:26;;;;;;;;;;;;;;;;;;5235:11;5222:10;;:24;;;;;;;;;;;;;;;;;;5270:11;5257:10;;:24;;;;;;;;;;;;;;;;;;4963:326:::0;;;;;:::o;642:43::-;681:4;642:43;:::o;3426:110::-;3486:4;3510:10;:18;3521:6;3510:18;;;;;;;;;;;;;;;;;;;;;;;;;3503:25;;3426:110;;;:::o;2966:452::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3016:22:8::1;3041:21;3016:46;;3081:9;;;;;;;;;;;3073:27;;:58;3126:4;3119:3;3102:14;:20;;;;:::i;:::-;3101:29;;;;:::i;:::-;3073:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3150:9;;;;;;;;;;;3142:27;;:58;3195:4;3188:3;3171:14;:20;;;;:::i;:::-;3170:29;;;;:::i;:::-;3142:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3219:11;;;;;;;;;;;3211:29;;:60;3266:4;3259:3;3242:14;:20;;;;:::i;:::-;3241:29;;;;:::i;:::-;3211:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3290:10;;;;;;;;;;;3282:28;;:58;3335:4;3329:2;3312:14;:19;;;;:::i;:::-;3311:28;;;;:::i;:::-;3282:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3359:10;;;;;;;;;;;3351:28;;:59;3405:4;3398:3;3381:14;:20;;;;:::i;:::-;3380:29;;;;:::i;:::-;3351:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3005:413;2966:452::o:0;5145:185:3:-;5283:39;5300:4;5306:2;5310:7;5283:39;;;;;;;;;;;;:16;:39::i;:::-;5145:185;;;:::o;4871:84:8:-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4939:8:8::1;;;;;;;;;;;4938:9;4927:8;;:20;;;;;;;;;;;;;;;;;;4871:84::o:0;4554:99::-;4599:13;4632;4625:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4554:99;:::o;1171:20::-;;;;;;;;;;;;;:::o;692:40::-;;;;:::o;2120:239:3:-;2192:7;2212:13;2228:7;:16;2236:7;2228:16;;;;;;;;;;;;;;;;;;;;;2212:32;;2280:1;2263:19;;:5;:19;;;;2255:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2346:5;2339:12;;;2120:239;;;:::o;1850:208::-;1922:7;1967:1;1950:19;;:5;:19;;;;1942:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1850:208;;;:::o;1659:103:9:-;1239:12;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1724:30:::1;1751:1;1724:18;:30::i;:::-;1659:103::o:0;4292:143:8:-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4422:5:8::1;4404:15;:23;;;;4292:143:::0;:::o;789:42::-;829:2;789:42;:::o;4661:99::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4749:3:8::1;;4735:11;:17;;;;;;;:::i;:::-;;4661:99:::0;;:::o;2302:656::-;2400:8;;;;;;;;;;;2392:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;681:4;2443:11;;:26;2435:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;681:4;2519:13;2505:11;;:27;;;;:::i;:::-;:43;;2497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2584:10;:22;2595:10;2584:22;;;;;;;;;;;;;;;;;;;;;;;;;2576:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2680:9;2663:13;2645:15;;:31;;;;:::i;:::-;:44;;2637:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;829:2;2729:13;:30;;2721:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2802:9;2797:113;2821:13;2817:1;:17;2797:113;;;2856:42;2866:10;2896:1;2892;2878:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;2856:9;:42::i;:::-;2836:3;;;;;:::i;:::-;;;;2797:113;;;;2937:13;2922:11;;:28;;;;;;;:::i;:::-;;;;;;;;2302:656;:::o;1008:87:9:-;1054:7;1081:6;;;;;;;;;;;1074:13;;1008:87;:::o;4443:103:8:-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4535:3:8::1;;4519:13;:19;;;;;;;:::i;:::-;;4443:103:::0;;:::o;2595:104:3:-;2651:13;2684:7;2677:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:104;:::o;3544:101:8:-;3587:4;681;3611:11;;:26;3604:33;;3544:101;:::o;4278:155:3:-;4373:52;4392:12;:10;:12::i;:::-;4406:8;4416;4373:18;:52::i;:::-;4278:155;;:::o;5401:328::-;5576:41;5595:12;:10;:12::i;:::-;5609:7;5576:18;:41::i;:::-;5568:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5682:39;5696:4;5702:2;5706:7;5715:5;5682:13;:39::i;:::-;5401:328;;;;:::o;597:38:8:-;631:4;597:38;:::o;4147:137::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4271:5:8::1;4256:12;:20;;;;4147:137:::0;:::o;5297:421::-;5406:13;5445:16;5453:7;5445;:16::i;:::-;5437:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5526:5;5514:17;;:8;;;;;;;;;;;:17;;;5510:68;;;5555:11;5548:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5510:68;5652:13;5667:18;:7;:16;:18::i;:::-;5635:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5590:120;;5297:421;;;;:::o;4768:95::-;4811:13;4844:11;4837:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4768:95;:::o;1296:401::-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;631:4:8::1;1415:11;;:21;1407:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;631:4;1486:13;1472:11;;:27;;;;:::i;:::-;:38;;1464:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1545:9;1540:109;1564:13;1560:1;:17;1540:109;;;1599:38;1609:6;1635:1;1631;1617:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;1599:9;:38::i;:::-;1579:3;;;;;:::i;:::-;;;;1540:109;;;;1676:13;1661:11;;:28;;;;;;;:::i;:::-;;;;;;;;1296:401:::0;;:::o;1144:20::-;;;;;;;;;;;;;:::o;4504:164:3:-;4601:4;4625:18;:25;4644:5;4625:25;;;;;;;;;;;;;;;:35;4651:8;4625:35;;;;;;;;;;;;;;;;;;;;;;;;;4618:42;;4504:164;;;;:::o;1917:201:9:-;1239:12;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2082:28;2101:8;2082:18;:28::i;:::-;1917:201:::0;:::o;3653:191:8:-;1239:12:9;:10;:12::i;:::-;1228:23;;:7;:5;:7::i;:::-;:23;;;1220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3737:9:8::1;3733:104;3756:9;:16;3752:1;:20;3733:104;;;3821:4;3794:10;:24;3805:9;3815:1;3805:12;;;;;;;;:::i;:::-;;;;;;;;3794:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;3774:3;;;;;:::i;:::-;;;;3733:104;;;;3653:191:::0;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;7239:127:3:-;7304:4;7356:1;7328:30;;:7;:16;7336:7;7328:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7321:37;;7239:127;;;:::o;602:98:1:-;655:7;682:10;675:17;;602:98;:::o;11221:174:3:-;11323:2;11296:15;:24;11312:7;11296:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11379:7;11375:2;11341:46;;11350:23;11365:7;11350:14;:23::i;:::-;11341:46;;;;;;;;;;;;11221:174;;:::o;7533:348::-;7626:4;7651:16;7659:7;7651;:16::i;:::-;7643:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7727:13;7743:23;7758:7;7743:14;:23::i;:::-;7727:39;;7796:5;7785:16;;:7;:16;;;:51;;;;7829:7;7805:31;;:20;7817:7;7805:11;:20::i;:::-;:31;;;7785:51;:87;;;;7840:32;7857:5;7864:7;7840:16;:32::i;:::-;7785:87;7777:96;;;7533:348;;;;:::o;10525:578::-;10684:4;10657:31;;:23;10672:7;10657:14;:23::i;:::-;:31;;;10649:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10767:1;10753:16;;:2;:16;;;;10745:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10823:39;10844:4;10850:2;10854:7;10823:20;:39::i;:::-;10927:29;10944:1;10948:7;10927:8;:29::i;:::-;10988:1;10969:9;:15;10979:4;10969:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11017:1;11000:9;:13;11010:2;11000:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11048:2;11029:7;:16;11037:7;11029:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11087:7;11083:2;11068:27;;11077:4;11068:27;;;;;;;;;;;;10525:578;;;:::o;8223:110::-;8299:26;8309:2;8313:7;8299:26;;;;;;;;;;;;:9;:26::i;:::-;8223:110;;:::o;2278:191:9:-;2352:16;2371:6;;;;;;;;;;;2352:25;;2397:8;2388:6;;:17;;;;;;;;;;;;;;;;;;2452:8;2421:40;;2442:8;2421:40;;;;;;;;;;;;2341:128;2278:191;:::o;11537:315:3:-;11692:8;11683:17;;:5;:17;;;;11675:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11779:8;11741:18;:25;11760:5;11741:25;;;;;;;;;;;;;;;:35;11767:8;11741:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11825:8;11803:41;;11818:5;11803:41;;;11835:8;11803:41;;;;;;:::i;:::-;;;;;;;;11537:315;;;:::o;6611:::-;6768:28;6778:4;6784:2;6788:7;6768:9;:28::i;:::-;6815:48;6838:4;6844:2;6848:7;6857:5;6815:22;:48::i;:::-;6807:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6611:315;;;;:::o;288:723:10:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;13788:126:3:-;;;;:::o;8560:321::-;8690:18;8696:2;8700:7;8690:5;:18::i;:::-;8741:54;8772:1;8776:2;8780:7;8789:5;8741:22;:54::i;:::-;8719:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8560:321;;;:::o;12417:799::-;12572:4;12593:15;:2;:13;;;:15::i;:::-;12589:620;;;12645:2;12629:36;;;12666:12;:10;:12::i;:::-;12680:4;12686:7;12695:5;12629:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12625:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12888:1;12871:6;:13;:18;12867:272;;;12914:60;;;;;;;;;;:::i;:::-;;;;;;;;12867:272;13089:6;13083:13;13074:6;13070:2;13066:15;13059:38;12625:529;12762:41;;;12752:51;;;:6;:51;;;;12745:58;;;;;12589:620;13193:4;13186:11;;12417:799;;;;;;;:::o;9217:382::-;9311:1;9297:16;;:2;:16;;;;9289:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9370:16;9378:7;9370;:16::i;:::-;9369:17;9361:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9432:45;9461:1;9465:2;9469:7;9432:20;:45::i;:::-;9507:1;9490:9;:13;9500:2;9490:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9538:2;9519:7;:16;9527:7;9519:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9583:7;9579:2;9558:33;;9575:1;9558:33;;;;;;;;;;;;9217:382;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:137::-;1890:5;1928:6;1915:20;1906:29;;1944:32;1970:5;1944:32;:::i;:::-;1845:137;;;;:::o;1988:141::-;2044:5;2075:6;2069:13;2060:22;;2091:32;2117:5;2091:32;:::i;:::-;1988:141;;;;:::o;2148:338::-;2203:5;2252:3;2245:4;2237:6;2233:17;2229:27;2219:122;;2260:79;;:::i;:::-;2219:122;2377:6;2364:20;2402:78;2476:3;2468:6;2461:4;2453:6;2449:17;2402:78;:::i;:::-;2393:87;;2209:277;2148:338;;;;:::o;2506:553::-;2564:8;2574:6;2624:3;2617:4;2609:6;2605:17;2601:27;2591:122;;2632:79;;:::i;:::-;2591:122;2745:6;2732:20;2722:30;;2775:18;2767:6;2764:30;2761:117;;;2797:79;;:::i;:::-;2761:117;2911:4;2903:6;2899:17;2887:29;;2965:3;2957:4;2949:6;2945:17;2935:8;2931:32;2928:41;2925:128;;;2972:79;;:::i;:::-;2925:128;2506:553;;;;;:::o;3065:139::-;3111:5;3149:6;3136:20;3127:29;;3165:33;3192:5;3165:33;:::i;:::-;3065:139;;;;:::o;3210:329::-;3269:6;3318:2;3306:9;3297:7;3293:23;3289:32;3286:119;;;3324:79;;:::i;:::-;3286:119;3444:1;3469:53;3514:7;3505:6;3494:9;3490:22;3469:53;:::i;:::-;3459:63;;3415:117;3210:329;;;;:::o;3545:474::-;3613:6;3621;3670:2;3658:9;3649:7;3645:23;3641:32;3638:119;;;3676:79;;:::i;:::-;3638:119;3796:1;3821:53;3866:7;3857:6;3846:9;3842:22;3821:53;:::i;:::-;3811:63;;3767:117;3923:2;3949:53;3994:7;3985:6;3974:9;3970:22;3949:53;:::i;:::-;3939:63;;3894:118;3545:474;;;;;:::o;4025:911::-;4120:6;4128;4136;4144;4152;4201:3;4189:9;4180:7;4176:23;4172:33;4169:120;;;4208:79;;:::i;:::-;4169:120;4328:1;4353:53;4398:7;4389:6;4378:9;4374:22;4353:53;:::i;:::-;4343:63;;4299:117;4455:2;4481:53;4526:7;4517:6;4506:9;4502:22;4481:53;:::i;:::-;4471:63;;4426:118;4583:2;4609:53;4654:7;4645:6;4634:9;4630:22;4609:53;:::i;:::-;4599:63;;4554:118;4711:2;4737:53;4782:7;4773:6;4762:9;4758:22;4737:53;:::i;:::-;4727:63;;4682:118;4839:3;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4810:119;4025:911;;;;;;;;:::o;4942:619::-;5019:6;5027;5035;5084:2;5072:9;5063:7;5059:23;5055:32;5052:119;;;5090:79;;:::i;:::-;5052:119;5210:1;5235:53;5280:7;5271:6;5260:9;5256:22;5235:53;:::i;:::-;5225:63;;5181:117;5337:2;5363:53;5408:7;5399:6;5388:9;5384:22;5363:53;:::i;:::-;5353:63;;5308:118;5465:2;5491:53;5536:7;5527:6;5516:9;5512:22;5491:53;:::i;:::-;5481:63;;5436:118;4942:619;;;;;:::o;5567:943::-;5662:6;5670;5678;5686;5735:3;5723:9;5714:7;5710:23;5706:33;5703:120;;;5742:79;;:::i;:::-;5703:120;5862:1;5887:53;5932:7;5923:6;5912:9;5908:22;5887:53;:::i;:::-;5877:63;;5833:117;5989:2;6015:53;6060:7;6051:6;6040:9;6036:22;6015:53;:::i;:::-;6005:63;;5960:118;6117:2;6143:53;6188:7;6179:6;6168:9;6164:22;6143:53;:::i;:::-;6133:63;;6088:118;6273:2;6262:9;6258:18;6245:32;6304:18;6296:6;6293:30;6290:117;;;6326:79;;:::i;:::-;6290:117;6431:62;6485:7;6476:6;6465:9;6461:22;6431:62;:::i;:::-;6421:72;;6216:287;5567:943;;;;;;;:::o;6516:468::-;6581:6;6589;6638:2;6626:9;6617:7;6613:23;6609:32;6606:119;;;6644:79;;:::i;:::-;6606:119;6764:1;6789:53;6834:7;6825:6;6814:9;6810:22;6789:53;:::i;:::-;6779:63;;6735:117;6891:2;6917:50;6959:7;6950:6;6939:9;6935:22;6917:50;:::i;:::-;6907:60;;6862:115;6516:468;;;;;:::o;6990:474::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:53;7439:7;7430:6;7419:9;7415:22;7394:53;:::i;:::-;7384:63;;7339:118;6990:474;;;;;:::o;7470:539::-;7554:6;7603:2;7591:9;7582:7;7578:23;7574:32;7571:119;;;7609:79;;:::i;:::-;7571:119;7757:1;7746:9;7742:17;7729:31;7787:18;7779:6;7776:30;7773:117;;;7809:79;;:::i;:::-;7773:117;7914:78;7984:7;7975:6;7964:9;7960:22;7914:78;:::i;:::-;7904:88;;7700:302;7470:539;;;;:::o;8015:327::-;8073:6;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:52;8317:7;8308:6;8297:9;8293:22;8273:52;:::i;:::-;8263:62;;8219:116;8015:327;;;;:::o;8348:349::-;8417:6;8466:2;8454:9;8445:7;8441:23;8437:32;8434:119;;;8472:79;;:::i;:::-;8434:119;8592:1;8617:63;8672:7;8663:6;8652:9;8648:22;8617:63;:::i;:::-;8607:73;;8563:127;8348:349;;;;:::o;8703:529::-;8774:6;8782;8831:2;8819:9;8810:7;8806:23;8802:32;8799:119;;;8837:79;;:::i;:::-;8799:119;8985:1;8974:9;8970:17;8957:31;9015:18;9007:6;9004:30;9001:117;;;9037:79;;:::i;:::-;9001:117;9150:65;9207:7;9198:6;9187:9;9183:22;9150:65;:::i;:::-;9132:83;;;;8928:297;8703:529;;;;;:::o;9238:329::-;9297:6;9346:2;9334:9;9325:7;9321:23;9317:32;9314:119;;;9352:79;;:::i;:::-;9314:119;9472:1;9497:53;9542:7;9533:6;9522:9;9518:22;9497:53;:::i;:::-;9487:63;;9443:117;9238:329;;;;:::o;9573:474::-;9641:6;9649;9698:2;9686:9;9677:7;9673:23;9669:32;9666:119;;;9704:79;;:::i;:::-;9666:119;9824:1;9849:53;9894:7;9885:6;9874:9;9870:22;9849:53;:::i;:::-;9839:63;;9795:117;9951:2;9977:53;10022:7;10013:6;10002:9;9998:22;9977:53;:::i;:::-;9967:63;;9922:118;9573:474;;;;;:::o;10053:118::-;10140:24;10158:5;10140:24;:::i;:::-;10135:3;10128:37;10053:118;;:::o;10177:109::-;10258:21;10273:5;10258:21;:::i;:::-;10253:3;10246:34;10177:109;;:::o;10292:360::-;10378:3;10406:38;10438:5;10406:38;:::i;:::-;10460:70;10523:6;10518:3;10460:70;:::i;:::-;10453:77;;10539:52;10584:6;10579:3;10572:4;10565:5;10561:16;10539:52;:::i;:::-;10616:29;10638:6;10616:29;:::i;:::-;10611:3;10607:39;10600:46;;10382:270;10292:360;;;;:::o;10658:364::-;10746:3;10774:39;10807:5;10774:39;:::i;:::-;10829:71;10893:6;10888:3;10829:71;:::i;:::-;10822:78;;10909:52;10954:6;10949:3;10942:4;10935:5;10931:16;10909:52;:::i;:::-;10986:29;11008:6;10986:29;:::i;:::-;10981:3;10977:39;10970:46;;10750:272;10658:364;;;;:::o;11028:377::-;11134:3;11162:39;11195:5;11162:39;:::i;:::-;11217:89;11299:6;11294:3;11217:89;:::i;:::-;11210:96;;11315:52;11360:6;11355:3;11348:4;11341:5;11337:16;11315:52;:::i;:::-;11392:6;11387:3;11383:16;11376:23;;11138:267;11028:377;;;;:::o;11435:845::-;11538:3;11575:5;11569:12;11604:36;11630:9;11604:36;:::i;:::-;11656:89;11738:6;11733:3;11656:89;:::i;:::-;11649:96;;11776:1;11765:9;11761:17;11792:1;11787:137;;;;11938:1;11933:341;;;;11754:520;;11787:137;11871:4;11867:9;11856;11852:25;11847:3;11840:38;11907:6;11902:3;11898:16;11891:23;;11787:137;;11933:341;12000:38;12032:5;12000:38;:::i;:::-;12060:1;12074:154;12088:6;12085:1;12082:13;12074:154;;;12162:7;12156:14;12152:1;12147:3;12143:11;12136:35;12212:1;12203:7;12199:15;12188:26;;12110:4;12107:1;12103:12;12098:17;;12074:154;;;12257:6;12252:3;12248:16;12241:23;;11940:334;;11754:520;;11542:738;;11435:845;;;;:::o;12286:366::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:::-;12800:3;12821:67;12885:2;12880:3;12821:67;:::i;:::-;12814:74;;12897:93;12986:3;12897:93;:::i;:::-;13015:2;13010:3;13006:12;12999:19;;12658:366;;;:::o;13030:::-;13172:3;13193:67;13257:2;13252:3;13193:67;:::i;:::-;13186:74;;13269:93;13358:3;13269:93;:::i;:::-;13387:2;13382:3;13378:12;13371:19;;13030:366;;;:::o;13402:::-;13544:3;13565:67;13629:2;13624:3;13565:67;:::i;:::-;13558:74;;13641:93;13730:3;13641:93;:::i;:::-;13759:2;13754:3;13750:12;13743:19;;13402:366;;;:::o;13774:::-;13916:3;13937:67;14001:2;13996:3;13937:67;:::i;:::-;13930:74;;14013:93;14102:3;14013:93;:::i;:::-;14131:2;14126:3;14122:12;14115:19;;13774:366;;;:::o;14146:::-;14288:3;14309:67;14373:2;14368:3;14309:67;:::i;:::-;14302:74;;14385:93;14474:3;14385:93;:::i;:::-;14503:2;14498:3;14494:12;14487:19;;14146:366;;;:::o;14518:::-;14660:3;14681:67;14745:2;14740:3;14681:67;:::i;:::-;14674:74;;14757:93;14846:3;14757:93;:::i;:::-;14875:2;14870:3;14866:12;14859:19;;14518:366;;;:::o;14890:::-;15032:3;15053:67;15117:2;15112:3;15053:67;:::i;:::-;15046:74;;15129:93;15218:3;15129:93;:::i;:::-;15247:2;15242:3;15238:12;15231:19;;14890:366;;;:::o;15262:::-;15404:3;15425:67;15489:2;15484:3;15425:67;:::i;:::-;15418:74;;15501:93;15590:3;15501:93;:::i;:::-;15619:2;15614:3;15610:12;15603:19;;15262:366;;;:::o;15634:::-;15776:3;15797:67;15861:2;15856:3;15797:67;:::i;:::-;15790:74;;15873:93;15962:3;15873:93;:::i;:::-;15991:2;15986:3;15982:12;15975:19;;15634:366;;;:::o;16006:::-;16148:3;16169:67;16233:2;16228:3;16169:67;:::i;:::-;16162:74;;16245:93;16334:3;16245:93;:::i;:::-;16363:2;16358:3;16354:12;16347:19;;16006:366;;;:::o;16378:::-;16520:3;16541:67;16605:2;16600:3;16541:67;:::i;:::-;16534:74;;16617:93;16706:3;16617:93;:::i;:::-;16735:2;16730:3;16726:12;16719:19;;16378:366;;;:::o;16750:::-;16892:3;16913:67;16977:2;16972:3;16913:67;:::i;:::-;16906:74;;16989:93;17078:3;16989:93;:::i;:::-;17107:2;17102:3;17098:12;17091:19;;16750:366;;;:::o;17122:::-;17264:3;17285:67;17349:2;17344:3;17285:67;:::i;:::-;17278:74;;17361:93;17450:3;17361:93;:::i;:::-;17479:2;17474:3;17470:12;17463:19;;17122:366;;;:::o;17494:400::-;17654:3;17675:84;17757:1;17752:3;17675:84;:::i;:::-;17668:91;;17768:93;17857:3;17768:93;:::i;:::-;17886:1;17881:3;17877:11;17870:18;;17494:400;;;:::o;17900:366::-;18042:3;18063:67;18127:2;18122:3;18063:67;:::i;:::-;18056:74;;18139:93;18228:3;18139:93;:::i;:::-;18257:2;18252:3;18248:12;18241:19;;17900:366;;;:::o;18272:::-;18414:3;18435:67;18499:2;18494:3;18435:67;:::i;:::-;18428:74;;18511:93;18600:3;18511:93;:::i;:::-;18629:2;18624:3;18620:12;18613:19;;18272:366;;;:::o;18644:::-;18786:3;18807:67;18871:2;18866:3;18807:67;:::i;:::-;18800:74;;18883:93;18972:3;18883:93;:::i;:::-;19001:2;18996:3;18992:12;18985:19;;18644:366;;;:::o;19016:::-;19158:3;19179:67;19243:2;19238:3;19179:67;:::i;:::-;19172:74;;19255:93;19344:3;19255:93;:::i;:::-;19373:2;19368:3;19364:12;19357:19;;19016:366;;;:::o;19388:::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:::-;19902:3;19923:67;19987:2;19982:3;19923:67;:::i;:::-;19916:74;;19999:93;20088:3;19999:93;:::i;:::-;20117:2;20112:3;20108:12;20101:19;;19760:366;;;:::o;20132:::-;20274:3;20295:67;20359:2;20354:3;20295:67;:::i;:::-;20288:74;;20371:93;20460:3;20371:93;:::i;:::-;20489:2;20484:3;20480:12;20473:19;;20132:366;;;:::o;20504:::-;20646:3;20667:67;20731:2;20726:3;20667:67;:::i;:::-;20660:74;;20743:93;20832:3;20743:93;:::i;:::-;20861:2;20856:3;20852:12;20845:19;;20504:366;;;:::o;20876:118::-;20963:24;20981:5;20963:24;:::i;:::-;20958:3;20951:37;20876:118;;:::o;21000:695::-;21278:3;21300:92;21388:3;21379:6;21300:92;:::i;:::-;21293:99;;21409:95;21500:3;21491:6;21409:95;:::i;:::-;21402:102;;21521:148;21665:3;21521:148;:::i;:::-;21514:155;;21686:3;21679:10;;21000:695;;;;;:::o;21701:222::-;21794:4;21832:2;21821:9;21817:18;21809:26;;21845:71;21913:1;21902:9;21898:17;21889:6;21845:71;:::i;:::-;21701:222;;;;:::o;21929:640::-;22124:4;22162:3;22151:9;22147:19;22139:27;;22176:71;22244:1;22233:9;22229:17;22220:6;22176:71;:::i;:::-;22257:72;22325:2;22314:9;22310:18;22301:6;22257:72;:::i;:::-;22339;22407:2;22396:9;22392:18;22383:6;22339:72;:::i;:::-;22458:9;22452:4;22448:20;22443:2;22432:9;22428:18;22421:48;22486:76;22557:4;22548:6;22486:76;:::i;:::-;22478:84;;21929:640;;;;;;;:::o;22575:210::-;22662:4;22700:2;22689:9;22685:18;22677:26;;22713:65;22775:1;22764:9;22760:17;22751:6;22713:65;:::i;:::-;22575:210;;;;:::o;22791:313::-;22904:4;22942:2;22931:9;22927:18;22919:26;;22991:9;22985:4;22981:20;22977:1;22966:9;22962:17;22955:47;23019:78;23092:4;23083:6;23019:78;:::i;:::-;23011:86;;22791:313;;;;:::o;23110:419::-;23276:4;23314:2;23303:9;23299:18;23291:26;;23363:9;23357:4;23353:20;23349:1;23338:9;23334:17;23327:47;23391:131;23517:4;23391:131;:::i;:::-;23383:139;;23110:419;;;:::o;23535:::-;23701:4;23739:2;23728:9;23724:18;23716:26;;23788:9;23782:4;23778:20;23774:1;23763:9;23759:17;23752:47;23816:131;23942:4;23816:131;:::i;:::-;23808:139;;23535:419;;;:::o;23960:::-;24126:4;24164:2;24153:9;24149:18;24141:26;;24213:9;24207:4;24203:20;24199:1;24188:9;24184:17;24177:47;24241:131;24367:4;24241:131;:::i;:::-;24233:139;;23960:419;;;:::o;24385:::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:::-;24976:4;25014:2;25003:9;24999:18;24991:26;;25063:9;25057:4;25053:20;25049:1;25038:9;25034:17;25027:47;25091:131;25217:4;25091:131;:::i;:::-;25083:139;;24810:419;;;:::o;25235:::-;25401:4;25439:2;25428:9;25424:18;25416:26;;25488:9;25482:4;25478:20;25474:1;25463:9;25459:17;25452:47;25516:131;25642:4;25516:131;:::i;:::-;25508:139;;25235:419;;;:::o;25660:::-;25826:4;25864:2;25853:9;25849:18;25841:26;;25913:9;25907:4;25903:20;25899:1;25888:9;25884:17;25877:47;25941:131;26067:4;25941:131;:::i;:::-;25933:139;;25660:419;;;:::o;26085:::-;26251:4;26289:2;26278:9;26274:18;26266:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26366:131;26492:4;26366:131;:::i;:::-;26358:139;;26085:419;;;:::o;26510:::-;26676:4;26714:2;26703:9;26699:18;26691:26;;26763:9;26757:4;26753:20;26749:1;26738:9;26734:17;26727:47;26791:131;26917:4;26791:131;:::i;:::-;26783:139;;26510:419;;;:::o;26935:::-;27101:4;27139:2;27128:9;27124:18;27116:26;;27188:9;27182:4;27178:20;27174:1;27163:9;27159:17;27152:47;27216:131;27342:4;27216:131;:::i;:::-;27208:139;;26935:419;;;:::o;27360:::-;27526:4;27564:2;27553:9;27549:18;27541:26;;27613:9;27607:4;27603:20;27599:1;27588:9;27584:17;27577:47;27641:131;27767:4;27641:131;:::i;:::-;27633:139;;27360:419;;;:::o;27785:::-;27951:4;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27785:419;;;:::o;28210:::-;28376:4;28414:2;28403:9;28399:18;28391:26;;28463:9;28457:4;28453:20;28449:1;28438:9;28434:17;28427:47;28491:131;28617:4;28491:131;:::i;:::-;28483:139;;28210:419;;;:::o;28635:::-;28801:4;28839:2;28828:9;28824:18;28816:26;;28888:9;28882:4;28878:20;28874:1;28863:9;28859:17;28852:47;28916:131;29042:4;28916:131;:::i;:::-;28908:139;;28635:419;;;:::o;29060:::-;29226:4;29264:2;29253:9;29249:18;29241:26;;29313:9;29307:4;29303:20;29299:1;29288:9;29284:17;29277:47;29341:131;29467:4;29341:131;:::i;:::-;29333:139;;29060:419;;;:::o;29485:::-;29651:4;29689:2;29678:9;29674:18;29666:26;;29738:9;29732:4;29728:20;29724:1;29713:9;29709:17;29702:47;29766:131;29892:4;29766:131;:::i;:::-;29758:139;;29485:419;;;:::o;29910:::-;30076:4;30114:2;30103:9;30099:18;30091:26;;30163:9;30157:4;30153:20;30149:1;30138:9;30134:17;30127:47;30191:131;30317:4;30191:131;:::i;:::-;30183:139;;29910:419;;;:::o;30335:::-;30501:4;30539:2;30528:9;30524:18;30516:26;;30588:9;30582:4;30578:20;30574:1;30563:9;30559:17;30552:47;30616:131;30742:4;30616:131;:::i;:::-;30608:139;;30335:419;;;:::o;30760:::-;30926:4;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:131;31167:4;31041:131;:::i;:::-;31033:139;;30760:419;;;:::o;31185:::-;31351:4;31389:2;31378:9;31374:18;31366:26;;31438:9;31432:4;31428:20;31424:1;31413:9;31409:17;31402:47;31466:131;31592:4;31466:131;:::i;:::-;31458:139;;31185:419;;;:::o;31610:::-;31776:4;31814:2;31803:9;31799:18;31791:26;;31863:9;31857:4;31853:20;31849:1;31838:9;31834:17;31827:47;31891:131;32017:4;31891:131;:::i;:::-;31883:139;;31610:419;;;:::o;32035:::-;32201:4;32239:2;32228:9;32224:18;32216:26;;32288:9;32282:4;32278:20;32274:1;32263:9;32259:17;32252:47;32316:131;32442:4;32316:131;:::i;:::-;32308:139;;32035:419;;;:::o;32460:222::-;32553:4;32591:2;32580:9;32576:18;32568:26;;32604:71;32672:1;32661:9;32657:17;32648:6;32604:71;:::i;:::-;32460:222;;;;:::o;32688:129::-;32722:6;32749:20;;:::i;:::-;32739:30;;32778:33;32806:4;32798:6;32778:33;:::i;:::-;32688:129;;;:::o;32823:75::-;32856:6;32889:2;32883:9;32873:19;;32823:75;:::o;32904:311::-;32981:4;33071:18;33063:6;33060:30;33057:56;;;33093:18;;:::i;:::-;33057:56;33143:4;33135:6;33131:17;33123:25;;33203:4;33197;33193:15;33185:23;;32904:311;;;:::o;33221:307::-;33282:4;33372:18;33364:6;33361:30;33358:56;;;33394:18;;:::i;:::-;33358:56;33432:29;33454:6;33432:29;:::i;:::-;33424:37;;33516:4;33510;33506:15;33498:23;;33221:307;;;:::o;33534:141::-;33583:4;33606:3;33598:11;;33629:3;33626:1;33619:14;33663:4;33660:1;33650:18;33642:26;;33534:141;;;:::o;33681:98::-;33732:6;33766:5;33760:12;33750:22;;33681:98;;;:::o;33785:99::-;33837:6;33871:5;33865:12;33855:22;;33785:99;;;:::o;33890:168::-;33973:11;34007:6;34002:3;33995:19;34047:4;34042:3;34038:14;34023:29;;33890:168;;;;:::o;34064:169::-;34148:11;34182:6;34177:3;34170:19;34222:4;34217:3;34213:14;34198:29;;34064:169;;;;:::o;34239:148::-;34341:11;34378:3;34363:18;;34239:148;;;;:::o;34393:305::-;34433:3;34452:20;34470:1;34452:20;:::i;:::-;34447:25;;34486:20;34504:1;34486:20;:::i;:::-;34481:25;;34640:1;34572:66;34568:74;34565:1;34562:81;34559:107;;;34646:18;;:::i;:::-;34559:107;34690:1;34687;34683:9;34676:16;;34393:305;;;;:::o;34704:185::-;34744:1;34761:20;34779:1;34761:20;:::i;:::-;34756:25;;34795:20;34813:1;34795:20;:::i;:::-;34790:25;;34834:1;34824:35;;34839:18;;:::i;:::-;34824:35;34881:1;34878;34874:9;34869:14;;34704:185;;;;:::o;34895:348::-;34935:7;34958:20;34976:1;34958:20;:::i;:::-;34953:25;;34992:20;35010:1;34992:20;:::i;:::-;34987:25;;35180:1;35112:66;35108:74;35105:1;35102:81;35097:1;35090:9;35083:17;35079:105;35076:131;;;35187:18;;:::i;:::-;35076:131;35235:1;35232;35228:9;35217:20;;34895:348;;;;:::o;35249:191::-;35289:4;35309:20;35327:1;35309:20;:::i;:::-;35304:25;;35343:20;35361:1;35343:20;:::i;:::-;35338:25;;35382:1;35379;35376:8;35373:34;;;35387:18;;:::i;:::-;35373:34;35432:1;35429;35425:9;35417:17;;35249:191;;;;:::o;35446:96::-;35483:7;35512:24;35530:5;35512:24;:::i;:::-;35501:35;;35446:96;;;:::o;35548:90::-;35582:7;35625:5;35618:13;35611:21;35600:32;;35548:90;;;:::o;35644:149::-;35680:7;35720:66;35713:5;35709:78;35698:89;;35644:149;;;:::o;35799:126::-;35836:7;35876:42;35869:5;35865:54;35854:65;;35799:126;;;:::o;35931:77::-;35968:7;35997:5;35986:16;;35931:77;;;:::o;36014:154::-;36098:6;36093:3;36088;36075:30;36160:1;36151:6;36146:3;36142:16;36135:27;36014:154;;;:::o;36174:307::-;36242:1;36252:113;36266:6;36263:1;36260:13;36252:113;;;36351:1;36346:3;36342:11;36336:18;36332:1;36327:3;36323:11;36316:39;36288:2;36285:1;36281:10;36276:15;;36252:113;;;36383:6;36380:1;36377:13;36374:101;;;36463:1;36454:6;36449:3;36445:16;36438:27;36374:101;36223:258;36174:307;;;:::o;36487:320::-;36531:6;36568:1;36562:4;36558:12;36548:22;;36615:1;36609:4;36605:12;36636:18;36626:81;;36692:4;36684:6;36680:17;36670:27;;36626:81;36754:2;36746:6;36743:14;36723:18;36720:38;36717:84;;;36773:18;;:::i;:::-;36717:84;36538:269;36487:320;;;:::o;36813:281::-;36896:27;36918:4;36896:27;:::i;:::-;36888:6;36884:40;37026:6;37014:10;37011:22;36990:18;36978:10;36975:34;36972:62;36969:88;;;37037:18;;:::i;:::-;36969:88;37077:10;37073:2;37066:22;36856:238;36813:281;;:::o;37100:233::-;37139:3;37162:24;37180:5;37162:24;:::i;:::-;37153:33;;37208:66;37201:5;37198:77;37195:103;;;37278:18;;:::i;:::-;37195:103;37325:1;37318:5;37314:13;37307:20;;37100:233;;;:::o;37339:176::-;37371:1;37388:20;37406:1;37388:20;:::i;:::-;37383:25;;37422:20;37440:1;37422:20;:::i;:::-;37417:25;;37461:1;37451:35;;37466:18;;:::i;:::-;37451:35;37507:1;37504;37500:9;37495:14;;37339:176;;;;:::o;37521:180::-;37569:77;37566:1;37559:88;37666:4;37663:1;37656:15;37690:4;37687:1;37680:15;37707:180;37755:77;37752:1;37745:88;37852:4;37849:1;37842:15;37876:4;37873:1;37866:15;37893:180;37941:77;37938:1;37931:88;38038:4;38035:1;38028:15;38062:4;38059:1;38052:15;38079:180;38127:77;38124:1;38117:88;38224:4;38221:1;38214:15;38248:4;38245:1;38238:15;38265:180;38313:77;38310:1;38303:88;38410:4;38407:1;38400:15;38434:4;38431:1;38424:15;38451:117;38560:1;38557;38550:12;38574:117;38683:1;38680;38673:12;38697:117;38806:1;38803;38796:12;38820:117;38929:1;38926;38919:12;38943:117;39052:1;39049;39042:12;39066:117;39175:1;39172;39165:12;39189:102;39230:6;39281:2;39277:7;39272:2;39265:5;39261:14;39257:28;39247:38;;39189:102;;;:::o;39297:237::-;39437:34;39433:1;39425:6;39421:14;39414:58;39506:20;39501:2;39493:6;39489:15;39482:45;39297:237;:::o;39540:225::-;39680:34;39676:1;39668:6;39664:14;39657:58;39749:8;39744:2;39736:6;39732:15;39725:33;39540:225;:::o;39771:162::-;39911:14;39907:1;39899:6;39895:14;39888:38;39771:162;:::o;39939:178::-;40079:30;40075:1;40067:6;40063:14;40056:54;39939:178;:::o;40123:223::-;40263:34;40259:1;40251:6;40247:14;40240:58;40332:6;40327:2;40319:6;40315:15;40308:31;40123:223;:::o;40352:175::-;40492:27;40488:1;40480:6;40476:14;40469:51;40352:175;:::o;40533:162::-;40673:14;40669:1;40661:6;40657:14;40650:38;40533:162;:::o;40701:161::-;40841:13;40837:1;40829:6;40825:14;40818:37;40701:161;:::o;40868:231::-;41008:34;41004:1;40996:6;40992:14;40985:58;41077:14;41072:2;41064:6;41060:15;41053:39;40868:231;:::o;41105:243::-;41245:34;41241:1;41233:6;41229:14;41222:58;41314:26;41309:2;41301:6;41297:15;41290:51;41105:243;:::o;41354:229::-;41494:34;41490:1;41482:6;41478:14;41471:58;41563:12;41558:2;41550:6;41546:15;41539:37;41354:229;:::o;41589:228::-;41729:34;41725:1;41717:6;41713:14;41706:58;41798:11;41793:2;41785:6;41781:15;41774:36;41589:228;:::o;41823:182::-;41963:34;41959:1;41951:6;41947:14;41940:58;41823:182;:::o;42011:231::-;42151:34;42147:1;42139:6;42135:14;42128:58;42220:14;42215:2;42207:6;42203:15;42196:39;42011:231;:::o;42248:155::-;42388:7;42384:1;42376:6;42372:14;42365:31;42248:155;:::o;42409:182::-;42549:34;42545:1;42537:6;42533:14;42526:58;42409:182;:::o;42597:228::-;42737:34;42733:1;42725:6;42721:14;42714:58;42806:11;42801:2;42793:6;42789:15;42782:36;42597:228;:::o;42831:181::-;42971:33;42967:1;42959:6;42955:14;42948:57;42831:181;:::o;43018:220::-;43158:34;43154:1;43146:6;43142:14;43135:58;43227:3;43222:2;43214:6;43210:15;43203:28;43018:220;:::o;43244:236::-;43384:34;43380:1;43372:6;43368:14;43361:58;43453:19;43448:2;43440:6;43436:15;43429:44;43244:236;:::o;43486:165::-;43626:17;43622:1;43614:6;43610:14;43603:41;43486:165;:::o;43657:170::-;43797:22;43793:1;43785:6;43781:14;43774:46;43657:170;:::o;43833:166::-;43973:18;43969:1;43961:6;43957:14;43950:42;43833:166;:::o;44005:122::-;44078:24;44096:5;44078:24;:::i;:::-;44071:5;44068:35;44058:63;;44117:1;44114;44107:12;44058:63;44005:122;:::o;44133:116::-;44203:21;44218:5;44203:21;:::i;:::-;44196:5;44193:32;44183:60;;44239:1;44236;44229:12;44183:60;44133:116;:::o;44255:120::-;44327:23;44344:5;44327:23;:::i;:::-;44320:5;44317:34;44307:62;;44365:1;44362;44355:12;44307:62;44255:120;:::o;44381:122::-;44454:24;44472:5;44454:24;:::i;:::-;44447:5;44444:35;44434:63;;44493:1;44490;44483:12;44434:63;44381:122;:::o
Swarm Source
ipfs://2e0f5ef7b9d0ac3f8c14fbb9aabd32a15cd7919d3a38efb05709d1839fdc2e26
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.