Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 92 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint Preorder | 14470774 | 894 days ago | IN | 0 ETH | 0.01242321 | ||||
Withdraw All | 14457478 | 896 days ago | IN | 0 ETH | 0.00451408 | ||||
Activate Presale | 14450204 | 897 days ago | IN | 0 ETH | 0.00160302 | ||||
Preorder | 14450028 | 897 days ago | IN | 0.07 ETH | 0.00586994 | ||||
Preorder | 14449053 | 897 days ago | IN | 0.07 ETH | 0.00155811 | ||||
Preorder | 14448614 | 897 days ago | IN | 0.21 ETH | 0.00142862 | ||||
Preorder | 14448547 | 897 days ago | IN | 0.07 ETH | 0.00208466 | ||||
Cancel Preorder | 14444233 | 898 days ago | IN | 0 ETH | 0.00163888 | ||||
Preorder | 14443727 | 898 days ago | IN | 0.07 ETH | 0.0020036 | ||||
Cancel Preorder | 14443381 | 898 days ago | IN | 0 ETH | 0.00174024 | ||||
Preorder | 14439842 | 899 days ago | IN | 0.07 ETH | 0.00254288 | ||||
Preorder | 14438947 | 899 days ago | IN | 0.07 ETH | 0.00195557 | ||||
Preorder | 14437320 | 899 days ago | IN | 0.07 ETH | 0.00285412 | ||||
Preorder | 14430245 | 900 days ago | IN | 0.14 ETH | 0.00223452 | ||||
Cancel Preorder | 14429888 | 900 days ago | IN | 0 ETH | 0.00106364 | ||||
Preorder | 14429599 | 900 days ago | IN | 0.07 ETH | 0.00085935 | ||||
Preorder | 14428127 | 901 days ago | IN | 0.07 ETH | 0.00123224 | ||||
Preorder | 14426396 | 901 days ago | IN | 0.07 ETH | 0.00136276 | ||||
Preorder | 14422927 | 901 days ago | IN | 0.07 ETH | 0.00129104 | ||||
Preorder | 14419759 | 902 days ago | IN | 0.07 ETH | 0.00094173 | ||||
Cancel Preorder | 14418217 | 902 days ago | IN | 0 ETH | 0.00077859 | ||||
Cancel Preorder | 14418217 | 902 days ago | IN | 0 ETH | 0.00056844 | ||||
Cancel Preorder | 14418217 | 902 days ago | IN | 0 ETH | 0.00064262 | ||||
Cancel Preorder | 14416003 | 902 days ago | IN | 0 ETH | 0.00073351 | ||||
Preorder | 14415266 | 903 days ago | IN | 0.07 ETH | 0.0016592 |
Latest 19 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14457478 | 896 days ago | 1.96 ETH | ||||
14457478 | 896 days ago | 1.96 ETH | ||||
14444233 | 898 days ago | 0.07 ETH | ||||
14443381 | 898 days ago | 0.14 ETH | ||||
14429888 | 900 days ago | 0.07 ETH | ||||
14418217 | 902 days ago | 0.07 ETH | ||||
14416003 | 902 days ago | 0.21 ETH | ||||
14401717 | 905 days ago | 0.07 ETH | ||||
14370906 | 909 days ago | 0.07 ETH | ||||
14369611 | 910 days ago | 0.07 ETH | ||||
14360226 | 911 days ago | 0.21 ETH | ||||
14356500 | 912 days ago | 0.14 ETH | ||||
14345270 | 913 days ago | 0.07 ETH | ||||
14345054 | 914 days ago | 0.14 ETH | ||||
14338485 | 915 days ago | 0.07 ETH | ||||
14333678 | 915 days ago | 0.14 ETH | ||||
14324793 | 917 days ago | 0.07 ETH | ||||
14309645 | 919 days ago | 0.07 ETH | ||||
14306012 | 920 days ago | 0.07 ETH |
Loading...
Loading
Contract Name:
InscrutableApes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } 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); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; mapping(uint256 => address) private _owners; mapping(address => uint256) private _balances; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } 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; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } 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())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } 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); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } 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)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } 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); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } 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); _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } 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; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { mapping(address => mapping(uint256 => uint256)) private _ownedTokens; mapping(uint256 => uint256) private _ownedTokensIndex; uint256[] private _allTokens; mapping(uint256 => uint256) private _allTokensIndex; function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; _ownedTokensIndex[lastTokenId] = tokenIndex; } delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; _allTokensIndex[lastTokenId] = tokenIndex; delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract ERC721Holder is IERC721Receiver { function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } contract InscrutableApes is ERC721A, ERC721Holder, Ownable, ReentrancyGuard{ uint256 public constant MAX_SUPPLY = 10000; uint256 public constant PRICE_PUBLIC = 0.1 ether; uint256 public constant PRICE_PRESALE = 0.07 ether; uint256 public constant PRICE_PREORDER = 0.07 ether; uint256 public maxPresale = 3; uint256 public maxPreorder = 3; uint256 public maxPublicTx = 10; uint256 public maxPreorderReserved = 5000; bool public _isActive = false; bool public _presaleActive = false; bool public _preorderActive = true; // merkle root bytes32 public preSaleRoot; mapping(address => uint256) private presales; mapping(address => uint256) private preorders; uint public preordersQty; string private _baseTokenURI; using Strings for uint256; constructor() ERC721A("InscrutableApes", "IAPES", maxPublicTx, MAX_SUPPLY) {} function mint(uint256 _count) public payable nonReentrant { require(_isActive, "Public mint is not active"); require(totalSupply() + _count <= MAX_SUPPLY - preordersQty, "Purchase would exceed max supply of Tokens"); require(_count <= maxPublicTx, "Exceeded max available to transaction"); require(msg.value == _count * PRICE_PUBLIC, "Incorrect funds"); _safeMint(_msgSender(), _count); } function premint(uint256 _count, bytes32[] calldata _merkleProof) public payable nonReentrant { require(_presaleActive, "Pre mint is not active"); require(totalSupply() + _count <= MAX_SUPPLY - preordersQty, "Purchase would exceed max supply of Tokens"); require(_count <= maxPresale - presales[_msgSender()], "Insufficient mints left"); require(_verify(_merkleProof, _msgSender()), "Invalid MerkleProof"); require(msg.value == PRICE_PRESALE * _count, "Incorrect funds"); presales[_msgSender()] += _count; _safeMint(_msgSender(), _count); } function preorder(uint _count) public payable nonReentrant { require(totalSupply() < MAX_SUPPLY, "Sale end"); require(preordersQty < maxPreorderReserved, "Exceeds Pre-Orders limit"); require(_preorderActive, "Preorders is not active"); require(totalSupply() + _count <= MAX_SUPPLY - preordersQty, "Exceeds MAX limit"); require(preorders[msg.sender] + _count <= maxPreorder, "Exceeded max available to preorders"); require(msg.value == _count * PRICE_PREORDER, "Incorrect funds"); preorders[msg.sender] += _count; preordersQty += _count; } function cancelPreorder() public { require(_preorderActive, "Preorders is not active"); require(preorders[msg.sender] > 0, "No preorders"); require(payable(msg.sender).send(preorders[msg.sender] * PRICE_PREORDER)); preordersQty -= preorders[msg.sender]; preorders[msg.sender] = 0; } function mintPreorder() public nonReentrant{ require(totalSupply() < MAX_SUPPLY, "Sale end"); require(!_preorderActive, "Preorder mint closed"); require(preorders[msg.sender] > 0, "No preorders"); _safeMint(msg.sender, preorders[msg.sender]); preordersQty -= preorders[msg.sender]; preorders[msg.sender] = 0; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function preordersAtAddress(address _address) external view returns(uint256) { return preorders[_address]; } function presalesAtAddress(address _address) external view returns(uint256) { return presales[_address]; } function tokensOfOwner(address _owner) external view returns(uint256[] memory) { uint tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint i = 0; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function _verify(bytes32[] calldata merkleProof, address sender) private view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(sender)); return MerkleProof.verify(merkleProof, preSaleRoot, leaf); } function ownerMint(address _to, uint256 _count) public onlyOwner { require(totalSupply() + _count <= MAX_SUPPLY - preordersQty, "Purchase would exceed max supply of Tokens"); require(_count <= maxPublicTx, "Exceeded max available to transaction"); _safeMint(_to, _count); } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function activatePresale() public onlyOwner { _isActive = false; _presaleActive = true; _preorderActive = false; } function activatePublicSale() public onlyOwner { _isActive = true; _presaleActive = false; _preorderActive = false; } function setPreSaleRoot(bytes32 _preSaleRoot) public onlyOwner { preSaleRoot = _preSaleRoot; } function withdrawAll() public payable { address cf = 0x8Ab740f1B3A5ff13c85724227dA4BAcEaD992248; require(!_preorderActive, "Preorder mint closed"); require(msg.sender == owner() || msg.sender == cf); uint256 cf_value = address(this).balance / 100 * 50; uint256 owner_value = address(this).balance - cf_value; require(payable(cf).send(cf_value)); require(payable(owner()).send(owner_value)); } }
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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PREORDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preorderActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activatePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelPreorder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreorder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreorderReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPreorder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"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":[],"name":"preSaleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"premint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"preorder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"preordersAtAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preordersQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"presalesAtAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_preSaleRoot","type":"bytes32"}],"name":"setPreSaleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556003600a556003600b55600a600c55611388600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055503480156200008057600080fd5b506040518060400160405280600f81526020017f496e736372757461626c654170657300000000000000000000000000000000008152506040518060400160405280600581526020017f4941504553000000000000000000000000000000000000000000000000000000815250600c546127106000811162000139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013090620003e1565b60405180910390fd5b600082116200017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017690620003bf565b60405180910390fd5b836001908051906020019062000197929190620002c1565b508260029080519060200190620001b0929190620002c1565b508160a08181525050806080818152505050505050620001e5620001d9620001f360201b60201c565b620001fb60201b60201c565b600160098190555062000517565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002cf9062000414565b90600052602060002090601f016020900481019282620002f357600085556200033f565b82601f106200030e57805160ff19168380011785556200033f565b828001600101855582156200033f579182015b828111156200033e57825182559160200191906001019062000321565b5b5090506200034e919062000352565b5090565b5b808211156200036d57600081600090555060010162000353565b5090565b60006200038060278362000403565b91506200038d8262000479565b604082019050919050565b6000620003a7602e8362000403565b9150620003b482620004c8565b604082019050919050565b60006020820190508181036000830152620003da8162000371565b9050919050565b60006020820190508181036000830152620003fc8162000398565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042d57607f821691505b602082108114156200044457620004436200044a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051615e5f6200054860003960008181613185015281816131ae01526138d5015260005050615e5f6000f3fe6080604052600436106102935760003560e01c806383ebaa191161015a578063b68e8c91116100c1578063e985e9c51161007a578063e985e9c5146109c0578063ed9f0ed8146109fd578063f2ac223414610a28578063f2fde38b14610a3f578063fe042d4914610a68578063ff93bfd614610a9157610293565b8063b68e8c91146108d1578063b88d4fde146108e8578063c85d6b0e14610911578063c87b56dd1461093c578063d7224ba014610979578063df341adf146109a457610293565b806396ae80eb1161011357806396ae80eb146107ef578063a0712d681461081a578063a22cb46514610836578063a56d77301461085f578063afa6c7351461088a578063b4c5206c146108b557610293565b806383ebaa19146107105780638462151c14610727578063853828b6146107645780638da5cb5b1461076e5780638ec89e4f1461079957806395d89b41146107c457610293565b8063407aa346116101fe578063533906bd116101b7578063533906bd1461060057806355f804b31461062b5780636352211e146106545780636b0a11761461069157806370a08231146106bc578063715018a6146106f957610293565b8063407aa346146104cc57806342842e0e146104f7578063484b973c146105205780634a106b0f146105495780634f6ccce71461058657806352bad912146105c357610293565b806318160ddd1161025057806318160ddd146103ba5780632142ab29146103e557806323b872dd146104105780632f745c59146104395780633154b9c21461047657806332cb6b0c146104a157610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d57806311eb304714610366578063150b7a021461037d575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba919061422a565b610abc565b6040516102cc9190614a75565b60405180910390f35b3480156102e157600080fd5b506102ea610c06565b6040516102f79190614ac6565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906142cd565b610c98565b60405161033491906149ec565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906141bd565b610d1d565b005b34801561037257600080fd5b5061037b610e36565b005b34801561038957600080fd5b506103a4600480360381019061039f91906140fa565b610f05565b6040516103b19190614aab565b60405180910390f35b3480156103c657600080fd5b506103cf610f19565b6040516103dc9190614f48565b60405180910390f35b3480156103f157600080fd5b506103fa610f22565b6040516104079190614f48565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906140a7565b610f28565b005b34801561044557600080fd5b50610460600480360381019061045b91906141bd565b610f38565b60405161046d9190614f48565b60405180910390f35b34801561048257600080fd5b5061048b611136565b6040516104989190614a90565b60405180910390f35b3480156104ad57600080fd5b506104b661113c565b6040516104c39190614f48565b60405180910390f35b3480156104d857600080fd5b506104e1611142565b6040516104ee9190614f48565b60405180910390f35b34801561050357600080fd5b5061051e600480360381019061051991906140a7565b611148565b005b34801561052c57600080fd5b50610547600480360381019061054291906141bd565b611168565b005b34801561055557600080fd5b50610570600480360381019061056b919061403a565b61129b565b60405161057d9190614f48565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906142cd565b6112e4565b6040516105ba9190614f48565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e5919061403a565b611337565b6040516105f79190614f48565b60405180910390f35b34801561060c57600080fd5b50610615611380565b6040516106229190614f48565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614284565b61138b565b005b34801561066057600080fd5b5061067b600480360381019061067691906142cd565b611421565b60405161068891906149ec565b60405180910390f35b34801561069d57600080fd5b506106a6611437565b6040516106b39190614a75565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061403a565b61144a565b6040516106f09190614f48565b60405180910390f35b34801561070557600080fd5b5061070e611533565b005b34801561071c57600080fd5b506107256115bb565b005b34801561073357600080fd5b5061074e6004803603810190610749919061403a565b611816565b60405161075b9190614a53565b60405180910390f35b61076c6118c4565b005b34801561077a57600080fd5b50610783611a57565b60405161079091906149ec565b60405180910390f35b3480156107a557600080fd5b506107ae611a81565b6040516107bb9190614a75565b60405180910390f35b3480156107d057600080fd5b506107d9611a94565b6040516107e69190614ac6565b60405180910390f35b3480156107fb57600080fd5b50610804611b26565b6040516108119190614f48565b60405180910390f35b610834600480360381019061082f91906142cd565b611b2c565b005b34801561084257600080fd5b5061085d6004803603810190610858919061417d565b611ce3565b005b34801561086b57600080fd5b50610874611e64565b6040516108819190614f48565b60405180910390f35b34801561089657600080fd5b5061089f611e70565b6040516108ac9190614f48565b60405180910390f35b6108cf60048036038101906108ca91906142cd565b611e7b565b005b3480156108dd57600080fd5b506108e661216a565b005b3480156108f457600080fd5b5061090f600480360381019061090a91906140fa565b612239565b005b34801561091d57600080fd5b50610926612295565b6040516109339190614f48565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906142cd565b61229b565b6040516109709190614ac6565b60405180910390f35b34801561098557600080fd5b5061098e612342565b60405161099b9190614f48565b60405180910390f35b6109be60048036038101906109b991906142fa565b612348565b005b3480156109cc57600080fd5b506109e760048036038101906109e29190614067565b6125ff565b6040516109f49190614a75565b60405180910390f35b348015610a0957600080fd5b50610a12612693565b604051610a1f9190614a75565b60405180910390f35b348015610a3457600080fd5b50610a3d6126a6565b005b348015610a4b57600080fd5b50610a666004803603810190610a61919061403a565b6128a5565b005b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906141fd565b61299d565b005b348015610a9d57600080fd5b50610aa6612a23565b604051610ab39190614f48565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bef57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bff5750610bfe82612a29565b5b9050919050565b606060018054610c15906152fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c41906152fb565b8015610c8e5780601f10610c6357610100808354040283529160200191610c8e565b820191906000526020600020905b815481529060010190602001808311610c7157829003601f168201915b5050505050905090565b6000610ca382612a93565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990614ec8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2882611421565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db8612aa0565b73ffffffffffffffffffffffffffffffffffffffff161480610de75750610de681610de1612aa0565b6125ff565b5b610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90614c68565b60405180910390fd5b610e31838383612aa8565b505050565b610e3e612aa0565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611a57565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614d08565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff021916908315150217905550565b600063150b7a0260e01b9050949350505050565b60008054905090565b600a5481565b610f33838383612b5a565b505050565b6000610f438361144a565b8210610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90614ae8565b60405180910390fd5b6000610f8e610f19565b905060008060005b838110156110f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461108857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110e057868414156110d1578195505050505050611130565b83806110dc9061535e565b9450505b5080806110ec9061535e565b915050610f96565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790614e48565b60405180910390fd5b92915050565b600f5481565b61271081565b600d5481565b61116383838360405180602001604052806000815250612239565b505050565b611170612aa0565b73ffffffffffffffffffffffffffffffffffffffff1661118e611a57565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90614d08565b60405180910390fd5b6012546127106111f491906151c1565b816111fd610f19565b61120791906150ac565b1115611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614ba8565b60405180910390fd5b600c5481111561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614b68565b60405180910390fd5b6112978282613113565b5050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112ee610f19565b821061132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614bc8565b60405180910390fd5b819050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b66f8b0a10e47000081565b611393612aa0565b73ffffffffffffffffffffffffffffffffffffffff166113b1611a57565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614d08565b60405180910390fd5b806013908051906020019061141d929190613da9565b5050565b600061142c82613131565b600001519050919050565b600e60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290614c88565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61153b612aa0565b73ffffffffffffffffffffffffffffffffffffffff16611559611a57565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690614d08565b60405180910390fd5b6115b96000613334565b565b60026009541415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614e68565b60405180910390fd5b6002600981905550612710611614610f19565b10611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90614cc8565b60405180910390fd5b600e60029054906101000a900460ff16156116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614b88565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614c28565b60405180910390fd5b61176f33601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613113565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601260008282546117c091906151c1565b925050819055506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600981905550565b606060006118238361144a565b905060008167ffffffffffffffff811115611841576118406154b8565b5b60405190808252806020026020018201604052801561186f5781602001602082028036833780820191505090505b50905060005b828110156118b9576118878582610f38565b82828151811061189a57611899615489565b5b60200260200101818152505080806118b19061535e565b915050611875565b508092505050919050565b6000738ab740f1b3a5ff13c85724227da4bacead9922489050600e60029054906101000a900460ff161561192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614b88565b60405180910390fd5b611935611a57565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061199957508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119a257600080fd5b600060326064476119b39190615102565b6119bd9190615133565b9050600081476119cd91906151c1565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050611a0d57600080fd5b611a15611a57565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611a5257600080fd5b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900460ff1681565b606060028054611aa3906152fb565b80601f0160208091040260200160405190810160405280929190818152602001828054611acf906152fb565b8015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050505050905090565b600c5481565b60026009541415611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614e68565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff16611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090614f08565b60405180910390fd5b601254612710611bd991906151c1565b81611be2610f19565b611bec91906150ac565b1115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614ba8565b60405180910390fd5b600c54811115611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6990614b68565b60405180910390fd5b67016345785d8a000081611c869190615133565b3414611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614de8565b60405180910390fd5b611cd8611cd2612aa0565b82613113565b600160098190555050565b611ceb612aa0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614d48565b60405180910390fd5b8060066000611d66612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e13612aa0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e589190614a75565b60405180910390a35050565b67016345785d8a000081565b66f8b0a10e47000081565b60026009541415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614e68565b60405180910390fd5b6002600981905550612710611ed4610f19565b10611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90614cc8565b60405180910390fd5b600d5460125410611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614c08565b60405180910390fd5b600e60029054906101000a900460ff16611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614b08565b60405180910390fd5b601254612710611fb991906151c1565b81611fc2610f19565b611fcc91906150ac565b111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614f28565b60405180910390fd5b600b5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b91906150ac565b111561209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614ca8565b60405180910390fd5b66f8b0a10e470000816120af9190615133565b34146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614de8565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213f91906150ac565b92505081905550806012600082825461215891906150ac565b92505081905550600160098190555050565b612172612aa0565b73ffffffffffffffffffffffffffffffffffffffff16612190611a57565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614d08565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff021916908315150217905550565b612244848484612b5a565b612250848484846133fa565b61228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614dc8565b60405180910390fd5b50505050565b60125481565b60606122a682612a93565b6122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc90614d28565b60405180910390fd5b60006122ef613591565b9050600081511161230f576040518060200160405280600081525061233a565b8061231984613623565b60405160200161232a9291906149c8565b6040516020818303038152906040525b915050919050565b60075481565b6002600954141561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614e68565b60405180910390fd5b6002600981905550600e60019054906101000a900460ff166123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614ea8565b60405180910390fd5b6012546127106123f591906151c1565b836123fe610f19565b61240891906150ac565b1115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614ba8565b60405180910390fd5b60106000612455612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461249d91906151c1565b8311156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614d88565b60405180910390fd5b6124f182826124ec612aa0565b613784565b612530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252790614c48565b60405180910390fd5b8266f8b0a10e4700006125439190615133565b3414612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614de8565b60405180910390fd5b8260106000612591612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125da91906150ac565b925050819055506125f26125ec612aa0565b84613113565b6001600981905550505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60029054906101000a900460ff1681565b600e60029054906101000a900460ff166126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90614b08565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e90614c28565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc66f8b0a10e470000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e39190615133565b9081150290604051600060405180830381858888f1935050505061280657600080fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600082825461285791906151c1565b925050819055506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6128ad612aa0565b73ffffffffffffffffffffffffffffffffffffffff166128cb611a57565b73ffffffffffffffffffffffffffffffffffffffff1614612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291890614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614b28565b60405180910390fd5b61299a81613334565b50565b6129a5612aa0565b73ffffffffffffffffffffffffffffffffffffffff166129c3611a57565b73ffffffffffffffffffffffffffffffffffffffff1614612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090614d08565b60405180910390fd5b80600f8190555050565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612b6582613131565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612b8c612aa0565b73ffffffffffffffffffffffffffffffffffffffff161480612be85750612bb1612aa0565b73ffffffffffffffffffffffffffffffffffffffff16612bd084610c98565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c045750612c038260000151612bfe612aa0565b6125ff565b5b905080612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf90614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614be8565b60405180910390fd5b612d358585856001613808565b612d456000848460000151612aa8565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612db3919061518d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612e579190615066565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612f5d91906150ac565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130a357612fd381612a93565b156130a2576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310b868686600161380e565b505050505050565b61312d828260405180602001604052806000815250613814565b5050565b613139613e2f565b61314282612a93565b613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317890614b48565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106131e55760017f0000000000000000000000000000000000000000000000000000000000000000846131d891906151c1565b6131e291906150ac565b90505b60008390505b8181106132f3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146132df5780935050505061332f565b5080806132eb906152d1565b9150506131eb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332690614e88565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061341b8473ffffffffffffffffffffffffffffffffffffffff16613cf3565b15613584578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613444612aa0565b8786866040518563ffffffff1660e01b81526004016134669493929190614a07565b602060405180830381600087803b15801561348057600080fd5b505af19250505080156134b157506040513d601f19601f820116820180604052508101906134ae9190614257565b60015b613534573d80600081146134e1576040519150601f19603f3d011682016040523d82523d6000602084013e6134e6565b606091505b5060008151141561352c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352390614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613589565b600190505b949350505050565b6060601380546135a0906152fb565b80601f01602080910402602001604051908101604052809291908181526020018280546135cc906152fb565b80156136195780601f106135ee57610100808354040283529160200191613619565b820191906000526020600020905b8154815290600101906020018083116135fc57829003601f168201915b5050505050905090565b6060600082141561366b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061377f565b600082905060005b6000821461369d5780806136869061535e565b915050600a826136969190615102565b9150613673565b60008167ffffffffffffffff8111156136b9576136b86154b8565b5b6040519080825280601f01601f1916602001820160405280156136eb5781602001600182028036833780820191505090505b5090505b600085146137785760018261370491906151c1565b9150600a8561371391906153cb565b603061371f91906150ac565b60f81b81838151811061373557613734615489565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137719190615102565b94506136ef565b8093505050505b919050565b6000808260405160200161379891906149ad565b6040516020818303038152906040528051906020012090506137fe858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483613d06565b9150509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561388a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388190614e28565b60405180910390fd5b61389381612a93565b156138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca90614e08565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392d90614ee8565b60405180910390fd5b6139436000858386613808565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a409190615066565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a679190615066565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cd657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7660008884886133fa565b613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cac90614dc8565b60405180910390fd5b8180613cc09061535e565b9250508080613cce9061535e565b915050613c05565b5080600081905550613ceb600087858861380e565b505050505050565b600080823b905060008111915050919050565b600082613d138584613d1d565b1490509392505050565b60008082905060005b8451811015613d87576000858281518110613d4457613d43615489565b5b60200260200101519050808311613d6657613d5f8382613d92565b9250613d73565b613d708184613d92565b92505b508080613d7f9061535e565b915050613d26565b508091505092915050565b600082600052816020526040600020905092915050565b828054613db5906152fb565b90600052602060002090601f016020900481019282613dd75760008555613e1e565b82601f10613df057805160ff1916838001178555613e1e565b82800160010185558215613e1e579182015b82811115613e1d578251825591602001919060010190613e02565b5b509050613e2b9190613e69565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613e82576000816000905550600101613e6a565b5090565b6000613e99613e9484614f88565b614f63565b905082815260208101848484011115613eb557613eb46154f6565b5b613ec084828561528f565b509392505050565b6000613edb613ed684614fb9565b614f63565b905082815260208101848484011115613ef757613ef66154f6565b5b613f0284828561528f565b509392505050565b600081359050613f1981615db6565b92915050565b60008083601f840112613f3557613f346154ec565b5b8235905067ffffffffffffffff811115613f5257613f516154e7565b5b602083019150836020820283011115613f6e57613f6d6154f1565b5b9250929050565b600081359050613f8481615dcd565b92915050565b600081359050613f9981615de4565b92915050565b600081359050613fae81615dfb565b92915050565b600081519050613fc381615dfb565b92915050565b600082601f830112613fde57613fdd6154ec565b5b8135613fee848260208601613e86565b91505092915050565b600082601f83011261400c5761400b6154ec565b5b813561401c848260208601613ec8565b91505092915050565b60008135905061403481615e12565b92915050565b6000602082840312156140505761404f615500565b5b600061405e84828501613f0a565b91505092915050565b6000806040838503121561407e5761407d615500565b5b600061408c85828601613f0a565b925050602061409d85828601613f0a565b9150509250929050565b6000806000606084860312156140c0576140bf615500565b5b60006140ce86828701613f0a565b93505060206140df86828701613f0a565b92505060406140f086828701614025565b9150509250925092565b6000806000806080858703121561411457614113615500565b5b600061412287828801613f0a565b945050602061413387828801613f0a565b935050604061414487828801614025565b925050606085013567ffffffffffffffff811115614165576141646154fb565b5b61417187828801613fc9565b91505092959194509250565b6000806040838503121561419457614193615500565b5b60006141a285828601613f0a565b92505060206141b385828601613f75565b9150509250929050565b600080604083850312156141d4576141d3615500565b5b60006141e285828601613f0a565b92505060206141f385828601614025565b9150509250929050565b60006020828403121561421357614212615500565b5b600061422184828501613f8a565b91505092915050565b6000602082840312156142405761423f615500565b5b600061424e84828501613f9f565b91505092915050565b60006020828403121561426d5761426c615500565b5b600061427b84828501613fb4565b91505092915050565b60006020828403121561429a57614299615500565b5b600082013567ffffffffffffffff8111156142b8576142b76154fb565b5b6142c484828501613ff7565b91505092915050565b6000602082840312156142e3576142e2615500565b5b60006142f184828501614025565b91505092915050565b60008060006040848603121561431357614312615500565b5b600061432186828701614025565b935050602084013567ffffffffffffffff811115614342576143416154fb565b5b61434e86828701613f1f565b92509250509250925092565b6000614366838361498f565b60208301905092915050565b61437b816151f5565b82525050565b61439261438d826151f5565b6153a7565b82525050565b60006143a382614ffa565b6143ad8185615028565b93506143b883614fea565b8060005b838110156143e95781516143d0888261435a565b97506143db8361501b565b9250506001810190506143bc565b5085935050505092915050565b6143ff81615207565b82525050565b61440e81615213565b82525050565b61441d8161521d565b82525050565b600061442e82615005565b6144388185615039565b935061444881856020860161529e565b61445181615505565b840191505092915050565b600061446782615010565b614471818561504a565b935061448181856020860161529e565b61448a81615505565b840191505092915050565b60006144a082615010565b6144aa818561505b565b93506144ba81856020860161529e565b80840191505092915050565b60006144d360228361504a565b91506144de82615523565b604082019050919050565b60006144f660178361504a565b915061450182615572565b602082019050919050565b600061451960268361504a565b91506145248261559b565b604082019050919050565b600061453c602a8361504a565b9150614547826155ea565b604082019050919050565b600061455f60258361504a565b915061456a82615639565b604082019050919050565b600061458260148361504a565b915061458d82615688565b602082019050919050565b60006145a5602a8361504a565b91506145b0826156b1565b604082019050919050565b60006145c860238361504a565b91506145d382615700565b604082019050919050565b60006145eb60258361504a565b91506145f68261574f565b604082019050919050565b600061460e60188361504a565b91506146198261579e565b602082019050919050565b6000614631600c8361504a565b915061463c826157c7565b602082019050919050565b600061465460138361504a565b915061465f826157f0565b602082019050919050565b600061467760398361504a565b915061468282615819565b604082019050919050565b600061469a602b8361504a565b91506146a582615868565b604082019050919050565b60006146bd60238361504a565b91506146c8826158b7565b604082019050919050565b60006146e060088361504a565b91506146eb82615906565b602082019050919050565b600061470360268361504a565b915061470e8261592f565b604082019050919050565b600061472660208361504a565b91506147318261597e565b602082019050919050565b6000614749602f8361504a565b9150614754826159a7565b604082019050919050565b600061476c601a8361504a565b9150614777826159f6565b602082019050919050565b600061478f60328361504a565b915061479a82615a1f565b604082019050919050565b60006147b260178361504a565b91506147bd82615a6e565b602082019050919050565b60006147d560228361504a565b91506147e082615a97565b604082019050919050565b60006147f860338361504a565b915061480382615ae6565b604082019050919050565b600061481b600f8361504a565b915061482682615b35565b602082019050919050565b600061483e601d8361504a565b915061484982615b5e565b602082019050919050565b600061486160218361504a565b915061486c82615b87565b604082019050919050565b6000614884602e8361504a565b915061488f82615bd6565b604082019050919050565b60006148a7601f8361504a565b91506148b282615c25565b602082019050919050565b60006148ca602f8361504a565b91506148d582615c4e565b604082019050919050565b60006148ed60168361504a565b91506148f882615c9d565b602082019050919050565b6000614910602d8361504a565b915061491b82615cc6565b604082019050919050565b600061493360228361504a565b915061493e82615d15565b604082019050919050565b600061495660198361504a565b915061496182615d64565b602082019050919050565b600061497960118361504a565b915061498482615d8d565b602082019050919050565b61499881615285565b82525050565b6149a781615285565b82525050565b60006149b98284614381565b60148201915081905092915050565b60006149d48285614495565b91506149e08284614495565b91508190509392505050565b6000602082019050614a016000830184614372565b92915050565b6000608082019050614a1c6000830187614372565b614a296020830186614372565b614a36604083018561499e565b8181036060830152614a488184614423565b905095945050505050565b60006020820190508181036000830152614a6d8184614398565b905092915050565b6000602082019050614a8a60008301846143f6565b92915050565b6000602082019050614aa56000830184614405565b92915050565b6000602082019050614ac06000830184614414565b92915050565b60006020820190508181036000830152614ae0818461445c565b905092915050565b60006020820190508181036000830152614b01816144c6565b9050919050565b60006020820190508181036000830152614b21816144e9565b9050919050565b60006020820190508181036000830152614b418161450c565b9050919050565b60006020820190508181036000830152614b618161452f565b9050919050565b60006020820190508181036000830152614b8181614552565b9050919050565b60006020820190508181036000830152614ba181614575565b9050919050565b60006020820190508181036000830152614bc181614598565b9050919050565b60006020820190508181036000830152614be1816145bb565b9050919050565b60006020820190508181036000830152614c01816145de565b9050919050565b60006020820190508181036000830152614c2181614601565b9050919050565b60006020820190508181036000830152614c4181614624565b9050919050565b60006020820190508181036000830152614c6181614647565b9050919050565b60006020820190508181036000830152614c818161466a565b9050919050565b60006020820190508181036000830152614ca18161468d565b9050919050565b60006020820190508181036000830152614cc1816146b0565b9050919050565b60006020820190508181036000830152614ce1816146d3565b9050919050565b60006020820190508181036000830152614d01816146f6565b9050919050565b60006020820190508181036000830152614d2181614719565b9050919050565b60006020820190508181036000830152614d418161473c565b9050919050565b60006020820190508181036000830152614d618161475f565b9050919050565b60006020820190508181036000830152614d8181614782565b9050919050565b60006020820190508181036000830152614da1816147a5565b9050919050565b60006020820190508181036000830152614dc1816147c8565b9050919050565b60006020820190508181036000830152614de1816147eb565b9050919050565b60006020820190508181036000830152614e018161480e565b9050919050565b60006020820190508181036000830152614e2181614831565b9050919050565b60006020820190508181036000830152614e4181614854565b9050919050565b60006020820190508181036000830152614e6181614877565b9050919050565b60006020820190508181036000830152614e818161489a565b9050919050565b60006020820190508181036000830152614ea1816148bd565b9050919050565b60006020820190508181036000830152614ec1816148e0565b9050919050565b60006020820190508181036000830152614ee181614903565b9050919050565b60006020820190508181036000830152614f0181614926565b9050919050565b60006020820190508181036000830152614f2181614949565b9050919050565b60006020820190508181036000830152614f418161496c565b9050919050565b6000602082019050614f5d600083018461499e565b92915050565b6000614f6d614f7e565b9050614f79828261532d565b919050565b6000604051905090565b600067ffffffffffffffff821115614fa357614fa26154b8565b5b614fac82615505565b9050602081019050919050565b600067ffffffffffffffff821115614fd457614fd36154b8565b5b614fdd82615505565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061507182615249565b915061507c83615249565b9250826fffffffffffffffffffffffffffffffff038211156150a1576150a06153fc565b5b828201905092915050565b60006150b782615285565b91506150c283615285565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150f7576150f66153fc565b5b828201905092915050565b600061510d82615285565b915061511883615285565b9250826151285761512761542b565b5b828204905092915050565b600061513e82615285565b915061514983615285565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615182576151816153fc565b5b828202905092915050565b600061519882615249565b91506151a383615249565b9250828210156151b6576151b56153fc565b5b828203905092915050565b60006151cc82615285565b91506151d783615285565b9250828210156151ea576151e96153fc565b5b828203905092915050565b600061520082615265565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152bc5780820151818401526020810190506152a1565b838111156152cb576000848401525b50505050565b60006152dc82615285565b915060008214156152f0576152ef6153fc565b5b600182039050919050565b6000600282049050600182168061531357607f821691505b602082108114156153275761532661545a565b5b50919050565b61533682615505565b810181811067ffffffffffffffff82111715615355576153546154b8565b5b80604052505050565b600061536982615285565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561539c5761539b6153fc565b5b600182019050919050565b60006153b2826153b9565b9050919050565b60006153c482615516565b9050919050565b60006153d682615285565b91506153e183615285565b9250826153f1576153f061542b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f7264657273206973206e6f7420616374697665000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f72646572206d696e7420636c6f736564000000000000000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620546f6b656e7300000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473205072652d4f7264657273206c696d69740000000000000000600082015250565b7f4e6f207072656f72646572730000000000000000000000000000000000000000600082015250565b7f496e76616c6964204d65726b6c6550726f6f6600000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f207072656f726460008201527f6572730000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f496e636f72726563742066756e64730000000000000000000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f507265206d696e74206973206e6f742061637469766500000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766500000000000000600082015250565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b615dbf816151f5565b8114615dca57600080fd5b50565b615dd681615207565b8114615de157600080fd5b50565b615ded81615213565b8114615df857600080fd5b50565b615e048161521d565b8114615e0f57600080fd5b50565b615e1b81615285565b8114615e2657600080fd5b5056fea264697066735822122068b9881dfc4e777b01c6f37ebab9f9e9a1bb6f82b222c433c9b7eeee232fee4264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102935760003560e01c806383ebaa191161015a578063b68e8c91116100c1578063e985e9c51161007a578063e985e9c5146109c0578063ed9f0ed8146109fd578063f2ac223414610a28578063f2fde38b14610a3f578063fe042d4914610a68578063ff93bfd614610a9157610293565b8063b68e8c91146108d1578063b88d4fde146108e8578063c85d6b0e14610911578063c87b56dd1461093c578063d7224ba014610979578063df341adf146109a457610293565b806396ae80eb1161011357806396ae80eb146107ef578063a0712d681461081a578063a22cb46514610836578063a56d77301461085f578063afa6c7351461088a578063b4c5206c146108b557610293565b806383ebaa19146107105780638462151c14610727578063853828b6146107645780638da5cb5b1461076e5780638ec89e4f1461079957806395d89b41146107c457610293565b8063407aa346116101fe578063533906bd116101b7578063533906bd1461060057806355f804b31461062b5780636352211e146106545780636b0a11761461069157806370a08231146106bc578063715018a6146106f957610293565b8063407aa346146104cc57806342842e0e146104f7578063484b973c146105205780634a106b0f146105495780634f6ccce71461058657806352bad912146105c357610293565b806318160ddd1161025057806318160ddd146103ba5780632142ab29146103e557806323b872dd146104105780632f745c59146104395780633154b9c21461047657806332cb6b0c146104a157610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d57806311eb304714610366578063150b7a021461037d575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba919061422a565b610abc565b6040516102cc9190614a75565b60405180910390f35b3480156102e157600080fd5b506102ea610c06565b6040516102f79190614ac6565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906142cd565b610c98565b60405161033491906149ec565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906141bd565b610d1d565b005b34801561037257600080fd5b5061037b610e36565b005b34801561038957600080fd5b506103a4600480360381019061039f91906140fa565b610f05565b6040516103b19190614aab565b60405180910390f35b3480156103c657600080fd5b506103cf610f19565b6040516103dc9190614f48565b60405180910390f35b3480156103f157600080fd5b506103fa610f22565b6040516104079190614f48565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906140a7565b610f28565b005b34801561044557600080fd5b50610460600480360381019061045b91906141bd565b610f38565b60405161046d9190614f48565b60405180910390f35b34801561048257600080fd5b5061048b611136565b6040516104989190614a90565b60405180910390f35b3480156104ad57600080fd5b506104b661113c565b6040516104c39190614f48565b60405180910390f35b3480156104d857600080fd5b506104e1611142565b6040516104ee9190614f48565b60405180910390f35b34801561050357600080fd5b5061051e600480360381019061051991906140a7565b611148565b005b34801561052c57600080fd5b50610547600480360381019061054291906141bd565b611168565b005b34801561055557600080fd5b50610570600480360381019061056b919061403a565b61129b565b60405161057d9190614f48565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906142cd565b6112e4565b6040516105ba9190614f48565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e5919061403a565b611337565b6040516105f79190614f48565b60405180910390f35b34801561060c57600080fd5b50610615611380565b6040516106229190614f48565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614284565b61138b565b005b34801561066057600080fd5b5061067b600480360381019061067691906142cd565b611421565b60405161068891906149ec565b60405180910390f35b34801561069d57600080fd5b506106a6611437565b6040516106b39190614a75565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061403a565b61144a565b6040516106f09190614f48565b60405180910390f35b34801561070557600080fd5b5061070e611533565b005b34801561071c57600080fd5b506107256115bb565b005b34801561073357600080fd5b5061074e6004803603810190610749919061403a565b611816565b60405161075b9190614a53565b60405180910390f35b61076c6118c4565b005b34801561077a57600080fd5b50610783611a57565b60405161079091906149ec565b60405180910390f35b3480156107a557600080fd5b506107ae611a81565b6040516107bb9190614a75565b60405180910390f35b3480156107d057600080fd5b506107d9611a94565b6040516107e69190614ac6565b60405180910390f35b3480156107fb57600080fd5b50610804611b26565b6040516108119190614f48565b60405180910390f35b610834600480360381019061082f91906142cd565b611b2c565b005b34801561084257600080fd5b5061085d6004803603810190610858919061417d565b611ce3565b005b34801561086b57600080fd5b50610874611e64565b6040516108819190614f48565b60405180910390f35b34801561089657600080fd5b5061089f611e70565b6040516108ac9190614f48565b60405180910390f35b6108cf60048036038101906108ca91906142cd565b611e7b565b005b3480156108dd57600080fd5b506108e661216a565b005b3480156108f457600080fd5b5061090f600480360381019061090a91906140fa565b612239565b005b34801561091d57600080fd5b50610926612295565b6040516109339190614f48565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906142cd565b61229b565b6040516109709190614ac6565b60405180910390f35b34801561098557600080fd5b5061098e612342565b60405161099b9190614f48565b60405180910390f35b6109be60048036038101906109b991906142fa565b612348565b005b3480156109cc57600080fd5b506109e760048036038101906109e29190614067565b6125ff565b6040516109f49190614a75565b60405180910390f35b348015610a0957600080fd5b50610a12612693565b604051610a1f9190614a75565b60405180910390f35b348015610a3457600080fd5b50610a3d6126a6565b005b348015610a4b57600080fd5b50610a666004803603810190610a61919061403a565b6128a5565b005b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906141fd565b61299d565b005b348015610a9d57600080fd5b50610aa6612a23565b604051610ab39190614f48565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bef57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bff5750610bfe82612a29565b5b9050919050565b606060018054610c15906152fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c41906152fb565b8015610c8e5780601f10610c6357610100808354040283529160200191610c8e565b820191906000526020600020905b815481529060010190602001808311610c7157829003601f168201915b5050505050905090565b6000610ca382612a93565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990614ec8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2882611421565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db8612aa0565b73ffffffffffffffffffffffffffffffffffffffff161480610de75750610de681610de1612aa0565b6125ff565b5b610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90614c68565b60405180910390fd5b610e31838383612aa8565b505050565b610e3e612aa0565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611a57565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614d08565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff021916908315150217905550565b600063150b7a0260e01b9050949350505050565b60008054905090565b600a5481565b610f33838383612b5a565b505050565b6000610f438361144a565b8210610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90614ae8565b60405180910390fd5b6000610f8e610f19565b905060008060005b838110156110f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461108857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110e057868414156110d1578195505050505050611130565b83806110dc9061535e565b9450505b5080806110ec9061535e565b915050610f96565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790614e48565b60405180910390fd5b92915050565b600f5481565b61271081565b600d5481565b61116383838360405180602001604052806000815250612239565b505050565b611170612aa0565b73ffffffffffffffffffffffffffffffffffffffff1661118e611a57565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90614d08565b60405180910390fd5b6012546127106111f491906151c1565b816111fd610f19565b61120791906150ac565b1115611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614ba8565b60405180910390fd5b600c5481111561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614b68565b60405180910390fd5b6112978282613113565b5050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112ee610f19565b821061132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614bc8565b60405180910390fd5b819050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b66f8b0a10e47000081565b611393612aa0565b73ffffffffffffffffffffffffffffffffffffffff166113b1611a57565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614d08565b60405180910390fd5b806013908051906020019061141d929190613da9565b5050565b600061142c82613131565b600001519050919050565b600e60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290614c88565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61153b612aa0565b73ffffffffffffffffffffffffffffffffffffffff16611559611a57565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690614d08565b60405180910390fd5b6115b96000613334565b565b60026009541415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614e68565b60405180910390fd5b6002600981905550612710611614610f19565b10611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90614cc8565b60405180910390fd5b600e60029054906101000a900460ff16156116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614b88565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614c28565b60405180910390fd5b61176f33601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613113565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601260008282546117c091906151c1565b925050819055506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600981905550565b606060006118238361144a565b905060008167ffffffffffffffff811115611841576118406154b8565b5b60405190808252806020026020018201604052801561186f5781602001602082028036833780820191505090505b50905060005b828110156118b9576118878582610f38565b82828151811061189a57611899615489565b5b60200260200101818152505080806118b19061535e565b915050611875565b508092505050919050565b6000738ab740f1b3a5ff13c85724227da4bacead9922489050600e60029054906101000a900460ff161561192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614b88565b60405180910390fd5b611935611a57565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061199957508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119a257600080fd5b600060326064476119b39190615102565b6119bd9190615133565b9050600081476119cd91906151c1565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050611a0d57600080fd5b611a15611a57565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611a5257600080fd5b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900460ff1681565b606060028054611aa3906152fb565b80601f0160208091040260200160405190810160405280929190818152602001828054611acf906152fb565b8015611b1c5780601f10611af157610100808354040283529160200191611b1c565b820191906000526020600020905b815481529060010190602001808311611aff57829003601f168201915b5050505050905090565b600c5481565b60026009541415611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614e68565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff16611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090614f08565b60405180910390fd5b601254612710611bd991906151c1565b81611be2610f19565b611bec91906150ac565b1115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614ba8565b60405180910390fd5b600c54811115611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6990614b68565b60405180910390fd5b67016345785d8a000081611c869190615133565b3414611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614de8565b60405180910390fd5b611cd8611cd2612aa0565b82613113565b600160098190555050565b611ceb612aa0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614d48565b60405180910390fd5b8060066000611d66612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e13612aa0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e589190614a75565b60405180910390a35050565b67016345785d8a000081565b66f8b0a10e47000081565b60026009541415611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614e68565b60405180910390fd5b6002600981905550612710611ed4610f19565b10611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90614cc8565b60405180910390fd5b600d5460125410611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614c08565b60405180910390fd5b600e60029054906101000a900460ff16611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614b08565b60405180910390fd5b601254612710611fb991906151c1565b81611fc2610f19565b611fcc91906150ac565b111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614f28565b60405180910390fd5b600b5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205b91906150ac565b111561209c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209390614ca8565b60405180910390fd5b66f8b0a10e470000816120af9190615133565b34146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614de8565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213f91906150ac565b92505081905550806012600082825461215891906150ac565b92505081905550600160098190555050565b612172612aa0565b73ffffffffffffffffffffffffffffffffffffffff16612190611a57565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614d08565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff021916908315150217905550565b612244848484612b5a565b612250848484846133fa565b61228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614dc8565b60405180910390fd5b50505050565b60125481565b60606122a682612a93565b6122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc90614d28565b60405180910390fd5b60006122ef613591565b9050600081511161230f576040518060200160405280600081525061233a565b8061231984613623565b60405160200161232a9291906149c8565b6040516020818303038152906040525b915050919050565b60075481565b6002600954141561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614e68565b60405180910390fd5b6002600981905550600e60019054906101000a900460ff166123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614ea8565b60405180910390fd5b6012546127106123f591906151c1565b836123fe610f19565b61240891906150ac565b1115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614ba8565b60405180910390fd5b60106000612455612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461249d91906151c1565b8311156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614d88565b60405180910390fd5b6124f182826124ec612aa0565b613784565b612530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252790614c48565b60405180910390fd5b8266f8b0a10e4700006125439190615133565b3414612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614de8565b60405180910390fd5b8260106000612591612aa0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125da91906150ac565b925050819055506125f26125ec612aa0565b84613113565b6001600981905550505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60029054906101000a900460ff1681565b600e60029054906101000a900460ff166126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90614b08565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276e90614c28565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc66f8b0a10e470000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e39190615133565b9081150290604051600060405180830381858888f1935050505061280657600080fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600082825461285791906151c1565b925050819055506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6128ad612aa0565b73ffffffffffffffffffffffffffffffffffffffff166128cb611a57565b73ffffffffffffffffffffffffffffffffffffffff1614612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291890614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614b28565b60405180910390fd5b61299a81613334565b50565b6129a5612aa0565b73ffffffffffffffffffffffffffffffffffffffff166129c3611a57565b73ffffffffffffffffffffffffffffffffffffffff1614612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090614d08565b60405180910390fd5b80600f8190555050565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612b6582613131565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612b8c612aa0565b73ffffffffffffffffffffffffffffffffffffffff161480612be85750612bb1612aa0565b73ffffffffffffffffffffffffffffffffffffffff16612bd084610c98565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c045750612c038260000151612bfe612aa0565b6125ff565b5b905080612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612caf90614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f90614be8565b60405180910390fd5b612d358585856001613808565b612d456000848460000151612aa8565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612db3919061518d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612e579190615066565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612f5d91906150ac565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130a357612fd381612a93565b156130a2576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310b868686600161380e565b505050505050565b61312d828260405180602001604052806000815250613814565b5050565b613139613e2f565b61314282612a93565b613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317890614b48565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106131e55760017f000000000000000000000000000000000000000000000000000000000000000a846131d891906151c1565b6131e291906150ac565b90505b60008390505b8181106132f3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146132df5780935050505061332f565b5080806132eb906152d1565b9150506131eb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332690614e88565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061341b8473ffffffffffffffffffffffffffffffffffffffff16613cf3565b15613584578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613444612aa0565b8786866040518563ffffffff1660e01b81526004016134669493929190614a07565b602060405180830381600087803b15801561348057600080fd5b505af19250505080156134b157506040513d601f19601f820116820180604052508101906134ae9190614257565b60015b613534573d80600081146134e1576040519150601f19603f3d011682016040523d82523d6000602084013e6134e6565b606091505b5060008151141561352c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352390614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613589565b600190505b949350505050565b6060601380546135a0906152fb565b80601f01602080910402602001604051908101604052809291908181526020018280546135cc906152fb565b80156136195780601f106135ee57610100808354040283529160200191613619565b820191906000526020600020905b8154815290600101906020018083116135fc57829003601f168201915b5050505050905090565b6060600082141561366b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061377f565b600082905060005b6000821461369d5780806136869061535e565b915050600a826136969190615102565b9150613673565b60008167ffffffffffffffff8111156136b9576136b86154b8565b5b6040519080825280601f01601f1916602001820160405280156136eb5781602001600182028036833780820191505090505b5090505b600085146137785760018261370491906151c1565b9150600a8561371391906153cb565b603061371f91906150ac565b60f81b81838151811061373557613734615489565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137719190615102565b94506136ef565b8093505050505b919050565b6000808260405160200161379891906149ad565b6040516020818303038152906040528051906020012090506137fe858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483613d06565b9150509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561388a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388190614e28565b60405180910390fd5b61389381612a93565b156138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca90614e08565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115613936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392d90614ee8565b60405180910390fd5b6139436000858386613808565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a409190615066565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a679190615066565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cd657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7660008884886133fa565b613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cac90614dc8565b60405180910390fd5b8180613cc09061535e565b9250508080613cce9061535e565b915050613c05565b5080600081905550613ceb600087858861380e565b505050505050565b600080823b905060008111915050919050565b600082613d138584613d1d565b1490509392505050565b60008082905060005b8451811015613d87576000858281518110613d4457613d43615489565b5b60200260200101519050808311613d6657613d5f8382613d92565b9250613d73565b613d708184613d92565b92505b508080613d7f9061535e565b915050613d26565b508091505092915050565b600082600052816020526040600020905092915050565b828054613db5906152fb565b90600052602060002090601f016020900481019282613dd75760008555613e1e565b82601f10613df057805160ff1916838001178555613e1e565b82800160010185558215613e1e579182015b82811115613e1d578251825591602001919060010190613e02565b5b509050613e2b9190613e69565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613e82576000816000905550600101613e6a565b5090565b6000613e99613e9484614f88565b614f63565b905082815260208101848484011115613eb557613eb46154f6565b5b613ec084828561528f565b509392505050565b6000613edb613ed684614fb9565b614f63565b905082815260208101848484011115613ef757613ef66154f6565b5b613f0284828561528f565b509392505050565b600081359050613f1981615db6565b92915050565b60008083601f840112613f3557613f346154ec565b5b8235905067ffffffffffffffff811115613f5257613f516154e7565b5b602083019150836020820283011115613f6e57613f6d6154f1565b5b9250929050565b600081359050613f8481615dcd565b92915050565b600081359050613f9981615de4565b92915050565b600081359050613fae81615dfb565b92915050565b600081519050613fc381615dfb565b92915050565b600082601f830112613fde57613fdd6154ec565b5b8135613fee848260208601613e86565b91505092915050565b600082601f83011261400c5761400b6154ec565b5b813561401c848260208601613ec8565b91505092915050565b60008135905061403481615e12565b92915050565b6000602082840312156140505761404f615500565b5b600061405e84828501613f0a565b91505092915050565b6000806040838503121561407e5761407d615500565b5b600061408c85828601613f0a565b925050602061409d85828601613f0a565b9150509250929050565b6000806000606084860312156140c0576140bf615500565b5b60006140ce86828701613f0a565b93505060206140df86828701613f0a565b92505060406140f086828701614025565b9150509250925092565b6000806000806080858703121561411457614113615500565b5b600061412287828801613f0a565b945050602061413387828801613f0a565b935050604061414487828801614025565b925050606085013567ffffffffffffffff811115614165576141646154fb565b5b61417187828801613fc9565b91505092959194509250565b6000806040838503121561419457614193615500565b5b60006141a285828601613f0a565b92505060206141b385828601613f75565b9150509250929050565b600080604083850312156141d4576141d3615500565b5b60006141e285828601613f0a565b92505060206141f385828601614025565b9150509250929050565b60006020828403121561421357614212615500565b5b600061422184828501613f8a565b91505092915050565b6000602082840312156142405761423f615500565b5b600061424e84828501613f9f565b91505092915050565b60006020828403121561426d5761426c615500565b5b600061427b84828501613fb4565b91505092915050565b60006020828403121561429a57614299615500565b5b600082013567ffffffffffffffff8111156142b8576142b76154fb565b5b6142c484828501613ff7565b91505092915050565b6000602082840312156142e3576142e2615500565b5b60006142f184828501614025565b91505092915050565b60008060006040848603121561431357614312615500565b5b600061432186828701614025565b935050602084013567ffffffffffffffff811115614342576143416154fb565b5b61434e86828701613f1f565b92509250509250925092565b6000614366838361498f565b60208301905092915050565b61437b816151f5565b82525050565b61439261438d826151f5565b6153a7565b82525050565b60006143a382614ffa565b6143ad8185615028565b93506143b883614fea565b8060005b838110156143e95781516143d0888261435a565b97506143db8361501b565b9250506001810190506143bc565b5085935050505092915050565b6143ff81615207565b82525050565b61440e81615213565b82525050565b61441d8161521d565b82525050565b600061442e82615005565b6144388185615039565b935061444881856020860161529e565b61445181615505565b840191505092915050565b600061446782615010565b614471818561504a565b935061448181856020860161529e565b61448a81615505565b840191505092915050565b60006144a082615010565b6144aa818561505b565b93506144ba81856020860161529e565b80840191505092915050565b60006144d360228361504a565b91506144de82615523565b604082019050919050565b60006144f660178361504a565b915061450182615572565b602082019050919050565b600061451960268361504a565b91506145248261559b565b604082019050919050565b600061453c602a8361504a565b9150614547826155ea565b604082019050919050565b600061455f60258361504a565b915061456a82615639565b604082019050919050565b600061458260148361504a565b915061458d82615688565b602082019050919050565b60006145a5602a8361504a565b91506145b0826156b1565b604082019050919050565b60006145c860238361504a565b91506145d382615700565b604082019050919050565b60006145eb60258361504a565b91506145f68261574f565b604082019050919050565b600061460e60188361504a565b91506146198261579e565b602082019050919050565b6000614631600c8361504a565b915061463c826157c7565b602082019050919050565b600061465460138361504a565b915061465f826157f0565b602082019050919050565b600061467760398361504a565b915061468282615819565b604082019050919050565b600061469a602b8361504a565b91506146a582615868565b604082019050919050565b60006146bd60238361504a565b91506146c8826158b7565b604082019050919050565b60006146e060088361504a565b91506146eb82615906565b602082019050919050565b600061470360268361504a565b915061470e8261592f565b604082019050919050565b600061472660208361504a565b91506147318261597e565b602082019050919050565b6000614749602f8361504a565b9150614754826159a7565b604082019050919050565b600061476c601a8361504a565b9150614777826159f6565b602082019050919050565b600061478f60328361504a565b915061479a82615a1f565b604082019050919050565b60006147b260178361504a565b91506147bd82615a6e565b602082019050919050565b60006147d560228361504a565b91506147e082615a97565b604082019050919050565b60006147f860338361504a565b915061480382615ae6565b604082019050919050565b600061481b600f8361504a565b915061482682615b35565b602082019050919050565b600061483e601d8361504a565b915061484982615b5e565b602082019050919050565b600061486160218361504a565b915061486c82615b87565b604082019050919050565b6000614884602e8361504a565b915061488f82615bd6565b604082019050919050565b60006148a7601f8361504a565b91506148b282615c25565b602082019050919050565b60006148ca602f8361504a565b91506148d582615c4e565b604082019050919050565b60006148ed60168361504a565b91506148f882615c9d565b602082019050919050565b6000614910602d8361504a565b915061491b82615cc6565b604082019050919050565b600061493360228361504a565b915061493e82615d15565b604082019050919050565b600061495660198361504a565b915061496182615d64565b602082019050919050565b600061497960118361504a565b915061498482615d8d565b602082019050919050565b61499881615285565b82525050565b6149a781615285565b82525050565b60006149b98284614381565b60148201915081905092915050565b60006149d48285614495565b91506149e08284614495565b91508190509392505050565b6000602082019050614a016000830184614372565b92915050565b6000608082019050614a1c6000830187614372565b614a296020830186614372565b614a36604083018561499e565b8181036060830152614a488184614423565b905095945050505050565b60006020820190508181036000830152614a6d8184614398565b905092915050565b6000602082019050614a8a60008301846143f6565b92915050565b6000602082019050614aa56000830184614405565b92915050565b6000602082019050614ac06000830184614414565b92915050565b60006020820190508181036000830152614ae0818461445c565b905092915050565b60006020820190508181036000830152614b01816144c6565b9050919050565b60006020820190508181036000830152614b21816144e9565b9050919050565b60006020820190508181036000830152614b418161450c565b9050919050565b60006020820190508181036000830152614b618161452f565b9050919050565b60006020820190508181036000830152614b8181614552565b9050919050565b60006020820190508181036000830152614ba181614575565b9050919050565b60006020820190508181036000830152614bc181614598565b9050919050565b60006020820190508181036000830152614be1816145bb565b9050919050565b60006020820190508181036000830152614c01816145de565b9050919050565b60006020820190508181036000830152614c2181614601565b9050919050565b60006020820190508181036000830152614c4181614624565b9050919050565b60006020820190508181036000830152614c6181614647565b9050919050565b60006020820190508181036000830152614c818161466a565b9050919050565b60006020820190508181036000830152614ca18161468d565b9050919050565b60006020820190508181036000830152614cc1816146b0565b9050919050565b60006020820190508181036000830152614ce1816146d3565b9050919050565b60006020820190508181036000830152614d01816146f6565b9050919050565b60006020820190508181036000830152614d2181614719565b9050919050565b60006020820190508181036000830152614d418161473c565b9050919050565b60006020820190508181036000830152614d618161475f565b9050919050565b60006020820190508181036000830152614d8181614782565b9050919050565b60006020820190508181036000830152614da1816147a5565b9050919050565b60006020820190508181036000830152614dc1816147c8565b9050919050565b60006020820190508181036000830152614de1816147eb565b9050919050565b60006020820190508181036000830152614e018161480e565b9050919050565b60006020820190508181036000830152614e2181614831565b9050919050565b60006020820190508181036000830152614e4181614854565b9050919050565b60006020820190508181036000830152614e6181614877565b9050919050565b60006020820190508181036000830152614e818161489a565b9050919050565b60006020820190508181036000830152614ea1816148bd565b9050919050565b60006020820190508181036000830152614ec1816148e0565b9050919050565b60006020820190508181036000830152614ee181614903565b9050919050565b60006020820190508181036000830152614f0181614926565b9050919050565b60006020820190508181036000830152614f2181614949565b9050919050565b60006020820190508181036000830152614f418161496c565b9050919050565b6000602082019050614f5d600083018461499e565b92915050565b6000614f6d614f7e565b9050614f79828261532d565b919050565b6000604051905090565b600067ffffffffffffffff821115614fa357614fa26154b8565b5b614fac82615505565b9050602081019050919050565b600067ffffffffffffffff821115614fd457614fd36154b8565b5b614fdd82615505565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061507182615249565b915061507c83615249565b9250826fffffffffffffffffffffffffffffffff038211156150a1576150a06153fc565b5b828201905092915050565b60006150b782615285565b91506150c283615285565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150f7576150f66153fc565b5b828201905092915050565b600061510d82615285565b915061511883615285565b9250826151285761512761542b565b5b828204905092915050565b600061513e82615285565b915061514983615285565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615182576151816153fc565b5b828202905092915050565b600061519882615249565b91506151a383615249565b9250828210156151b6576151b56153fc565b5b828203905092915050565b60006151cc82615285565b91506151d783615285565b9250828210156151ea576151e96153fc565b5b828203905092915050565b600061520082615265565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152bc5780820151818401526020810190506152a1565b838111156152cb576000848401525b50505050565b60006152dc82615285565b915060008214156152f0576152ef6153fc565b5b600182039050919050565b6000600282049050600182168061531357607f821691505b602082108114156153275761532661545a565b5b50919050565b61533682615505565b810181811067ffffffffffffffff82111715615355576153546154b8565b5b80604052505050565b600061536982615285565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561539c5761539b6153fc565b5b600182019050919050565b60006153b2826153b9565b9050919050565b60006153c482615516565b9050919050565b60006153d682615285565b91506153e183615285565b9250826153f1576153f061542b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f7264657273206973206e6f7420616374697665000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b7f5072656f72646572206d696e7420636c6f736564000000000000000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620546f6b656e7300000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473205072652d4f7264657273206c696d69740000000000000000600082015250565b7f4e6f207072656f72646572730000000000000000000000000000000000000000600082015250565b7f496e76616c6964204d65726b6c6550726f6f6600000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f207072656f726460008201527f6572730000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f496e636f72726563742066756e64730000000000000000000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f507265206d696e74206973206e6f742061637469766500000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766500000000000000600082015250565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b615dbf816151f5565b8114615dca57600080fd5b50565b615dd681615207565b8114615de157600080fd5b50565b615ded81615213565b8114615df857600080fd5b50565b615e048161521d565b8114615e0f57600080fd5b50565b615e1b81615285565b8114615e2657600080fd5b5056fea264697066735822122068b9881dfc4e777b01c6f37ebab9f9e9a1bb6f82b222c433c9b7eeee232fee4264736f6c63430008070033
Deployed Bytecode Sourcemap
40290:5603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22923:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24649:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26174:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25737:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45175:143;;;;;;;;;;;;;:::i;:::-;;35277:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21484:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40599:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27024:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22115:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40900:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40378:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40710:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27229:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44604:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43882:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21647:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43752:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40539:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44917:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24472:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40796:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23349:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;761:94;;;;;;;;;;;;;:::i;:::-;;43255:369;;;;;;;;;;;;;:::i;:::-;;44014:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45442:446;;;:::i;:::-;;538:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40760:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24804:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40672:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41230:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26442:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40427:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40482:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42292:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45027:140;;;;;;;;;;;;;:::i;:::-;;27449:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41038:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24965:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31864:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41676:608;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26779:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40837:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42915:332;;;;;;;;;;;;;:::i;:::-;;863:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45326:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40635:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22923:370;23050:4;23095:25;23080:40;;;:11;:40;;;;:99;;;;23146:33;23131:48;;;:11;:48;;;;23080:99;:160;;;;23205:35;23190:50;;;:11;:50;;;;23080:160;:207;;;;23251:36;23275:11;23251:23;:36::i;:::-;23080:207;23066:221;;22923:370;;;:::o;24649:94::-;24703:13;24732:5;24725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24649:94;:::o;26174:204::-;26242:7;26266:16;26274:7;26266;:16::i;:::-;26258:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26348:15;:24;26364:7;26348:24;;;;;;;;;;;;;;;;;;;;;26341:31;;26174:204;;;:::o;25737:379::-;25806:13;25822:24;25838:7;25822:15;:24::i;:::-;25806:40;;25867:5;25861:11;;:2;:11;;;;25853:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25952:5;25936:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25961:37;25978:5;25985:12;:10;:12::i;:::-;25961:16;:37::i;:::-;25936:62;25920:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:28;26091:2;26095:7;26104:5;26082:8;:28::i;:::-;25799:317;25737:379;;:::o;45175:143::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45243:4:::1;45231:9;;:16;;;;;;;;;;;;;;;;;;45273:5;45256:14;;:22;;;;;;;;;;;;;;;;;;45305:5;45287:15;;:23;;;;;;;;;;;;;;;;;;45175:143::o:0;35277:207::-;35420:6;35446:30;;;35439:37;;35277:207;;;;;;:::o;21484:94::-;21537:7;21560:12;;21553:19;;21484:94;:::o;40599:29::-;;;;:::o;27024:142::-;27132:28;27142:4;27148:2;27152:7;27132:9;:28::i;:::-;27024:142;;;:::o;22115:744::-;22224:7;22259:16;22269:5;22259:9;:16::i;:::-;22251:5;:24;22243:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22321:22;22346:13;:11;:13::i;:::-;22321:38;;22366:19;22396:25;22446:9;22441:350;22465:14;22461:1;:18;22441:350;;;22495:31;22529:11;:14;22541:1;22529:14;;;;;;;;;;;22495:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22582:1;22556:28;;:9;:14;;;:28;;;22552:89;;22617:9;:14;;;22597:34;;22552:89;22674:5;22653:26;;:17;:26;;;22649:135;;;22711:5;22696:11;:20;22692:59;;;22738:1;22731:8;;;;;;;;;22692:59;22761:13;;;;;:::i;:::-;;;;22649:135;22486:305;22481:3;;;;;:::i;:::-;;;;22441:350;;;;22797:56;;;;;;;;;;:::i;:::-;;;;;;;;22115:744;;;;;:::o;40900:26::-;;;;:::o;40378:42::-;40415:5;40378:42;:::o;40710:41::-;;;;:::o;27229:157::-;27341:39;27358:4;27364:2;27368:7;27341:39;;;;;;;;;;;;:16;:39::i;:::-;27229:157;;;:::o;44604:305::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44727:12:::1;;40415:5;44714:25;;;;:::i;:::-;44704:6;44688:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:51;;44680:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;44815:11;;44805:6;:21;;44797:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44879:22;44889:3;44894:6;44879:9;:22::i;:::-;44604:305:::0;;:::o;43882:120::-;43949:7;43976:8;:18;43985:8;43976:18;;;;;;;;;;;;;;;;43969:25;;43882:120;;;:::o;21647:177::-;21714:7;21746:13;:11;:13::i;:::-;21738:5;:21;21730:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21813:5;21806:12;;21647:177;;;:::o;43752:122::-;43820:7;43847:9;:19;43857:8;43847:19;;;;;;;;;;;;;;;;43840:26;;43752:122;;;:::o;40539:51::-;40580:10;40539:51;:::o;44917:102::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45004:7:::1;44988:13;:23;;;;;;;;;;;;:::i;:::-;;44917:102:::0;:::o;24472:118::-;24536:7;24559:20;24571:7;24559:11;:20::i;:::-;:25;;;24552:32;;24472:118;;;:::o;40796:34::-;;;;;;;;;;;;;:::o;23349:211::-;23413:7;23454:1;23437:19;;:5;:19;;;;23429:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23526:12;:19;23539:5;23526:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23518:36;;23511:43;;23349:211;;;:::o;761:94::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;826:21:::1;844:1;826:9;:21::i;:::-;761:94::o:0;43255:369::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;40415:5:::1;43317:13;:11;:13::i;:::-;:26;43309:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;43376:15;;;;;;;;;;;43375:16;43367:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43459:1;43435:9;:21;43445:10;43435:21;;;;;;;;;;;;;;;;:25;43427:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43488:44;43498:10;43510:9;:21;43520:10;43510:21;;;;;;;;;;;;;;;;43488:9;:44::i;:::-;43559:9;:21;43569:10;43559:21;;;;;;;;;;;;;;;;43543:12;;:37;;;;;;;:::i;:::-;;;;;;;;43615:1;43591:9;:21;43601:10;43591:21;;;;;;;;;;;;;;;:25;;;;37098:1:::0;38052:7;:22;;;;43255:369::o;44014:340::-;44075:16;44104:15;44122:17;44132:6;44122:9;:17::i;:::-;44104:35;;44150:25;44192:10;44178:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44150:53;;44218:6;44214:107;44234:10;44230:1;:14;44214:107;;;44279:30;44299:6;44307:1;44279:19;:30::i;:::-;44265:8;44274:1;44265:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44246:3;;;;;:::i;:::-;;;;44214:107;;;;44338:8;44331:15;;;;44014:340;;;:::o;45442:446::-;45489:10;45502:42;45489:55;;45562:15;;;;;;;;;;;45561:16;45553:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45633:7;:5;:7::i;:::-;45619:21;;:10;:21;;;:41;;;;45658:2;45644:16;;:10;:16;;;45619:41;45611:50;;;;;;45670:16;45719:2;45713:3;45689:21;:27;;;;:::i;:::-;:32;;;;:::i;:::-;45670:51;;45730:19;45776:8;45752:21;:32;;;;:::i;:::-;45730:54;;45809:2;45801:16;;:26;45818:8;45801:26;;;;;;;;;;;;;;;;;;;;;;;45793:35;;;;;;45853:7;:5;:7::i;:::-;45845:21;;:34;45867:11;45845:34;;;;;;;;;;;;;;;;;;;;;;;45837:43;;;;;;45480:408;;;45442:446::o;538:87::-;584:7;611:6;;;;;;;;;;;604:13;;538:87;:::o;40760:29::-;;;;;;;;;;;;;:::o;24804:98::-;24860:13;24889:7;24882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24804:98;:::o;40672:31::-;;;;:::o;41230:438::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;41307:9:::1;;;;;;;;;;;41299:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41404:12;;40415:5;41391:25;;;;:::i;:::-;41381:6;41365:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:51;;41357:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;41492:11;;41482:6;:21;;41474:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40466:9;41577:6;:21;;;;:::i;:::-;41564:9;:34;41556:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41629:31;41639:12;:10;:12::i;:::-;41653:6;41629:9;:31::i;:::-;37098:1:::0;38052:7;:22;;;;41230:438;:::o;26442:274::-;26545:12;:10;:12::i;:::-;26533:24;;:8;:24;;;;26525:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:8;26597:18;:32;26616:12;:10;:12::i;:::-;26597:32;;;;;;;;;;;;;;;:42;26630:8;26597:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26691:8;26662:48;;26677:12;:10;:12::i;:::-;26662:48;;;26701:8;26662:48;;;;;;:::i;:::-;;;;;;;;26442:274;;:::o;40427:48::-;40466:9;40427:48;:::o;40482:50::-;40522:10;40482:50;:::o;42292:615::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;40415:5:::1;42370:13;:11;:13::i;:::-;:26;42362:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42443:19;;42428:12;;:34;42420:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42510:15;;;;;;;;;;;42502:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42611:12;;40415:5;42598:25;;;;:::i;:::-;42588:6;42572:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:51;;42564:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42698:11;;42688:6;42664:9;:21;42674:10;42664:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;:45;;42656:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;40580:10;42781:6;:23;;;;:::i;:::-;42768:9;:36;42760:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42860:6;42835:9;:21;42845:10;42835:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;42893:6;42877:12;;:22;;;;;;;:::i;:::-;;;;;;;;37098:1:::0;38052:7;:22;;;;42292:615;:::o;45027:140::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45092:5:::1;45080:9;;:17;;;;;;;;;;;;;;;;;;45123:4;45106:14;;:21;;;;;;;;;;;;;;;;;;45154:5;45136:15;;:23;;;;;;;;;;;;;;;;;;45027:140::o:0;27449:311::-;27586:28;27596:4;27602:2;27606:7;27586:9;:28::i;:::-;27637:48;27660:4;27666:2;27670:7;27679:5;27637:22;:48::i;:::-;27621:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;27449:311;;;;:::o;41038:24::-;;;;:::o;24965:394::-;25063:13;25104:16;25112:7;25104;:16::i;:::-;25088:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25194:21;25218:10;:8;:10::i;:::-;25194:34;;25273:1;25255:7;25249:21;:25;:104;;;;;;;;;;;;;;;;;25310:7;25319:18;:7;:16;:18::i;:::-;25293:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25249:104;25235:118;;;24965:394;;;:::o;31864:43::-;;;;:::o;41676:608::-;37142:1;37740:7;;:19;;37732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37142:1;37873:7;:18;;;;41789:14:::1;;;;;;;;;;;41781:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41888:12;;40415:5;41875:25;;;;:::i;:::-;41865:6;41849:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:51;;41841:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;41989:8;:22;41998:12;:10;:12::i;:::-;41989:22;;;;;;;;;;;;;;;;41976:10;;:35;;;;:::i;:::-;41966:6;:45;;41958:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42058:35;42066:12;;42080;:10;:12::i;:::-;42058:7;:35::i;:::-;42050:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42165:6;40522:10;42149:22;;;;:::i;:::-;42136:9;:35;42128:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42228:6;42202:8;:22;42211:12;:10;:12::i;:::-;42202:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;42245:31;42255:12;:10;:12::i;:::-;42269:6;42245:9;:31::i;:::-;37098:1:::0;38052:7;:22;;;;41676:608;;;:::o;26779:186::-;26901:4;26924:18;:25;26943:5;26924:25;;;;;;;;;;;;;;;:35;26950:8;26924:35;;;;;;;;;;;;;;;;;;;;;;;;;26917:42;;26779:186;;;;:::o;40837:34::-;;;;;;;;;;;;;:::o;42915:332::-;42967:15;;;;;;;;;;;42959:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43053:1;43029:9;:21;43039:10;43029:21;;;;;;;;;;;;;;;;:25;43021:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43098:10;43090:24;;:64;40580:10;43115:9;:21;43125:10;43115:21;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;43090:64;;;;;;;;;;;;;;;;;;;;;;;43082:73;;;;;;43182:9;:21;43192:10;43182:21;;;;;;;;;;;;;;;;43166:12;;:37;;;;;;;:::i;:::-;;;;;;;;43238:1;43214:9;:21;43224:10;43214:21;;;;;;;;;;;;;;;:25;;;;42915:332::o;863:192::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;972:1:::1;952:22;;:8;:22;;;;944:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1028:19;1038:8;1028:9;:19::i;:::-;863:192:::0;:::o;45326:108::-;684:12;:10;:12::i;:::-;673:23;;:7;:5;:7::i;:::-;:23;;;665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45414:12:::1;45400:11;:26;;;;45326:108:::0;:::o;40635:30::-;;;;:::o;2881:157::-;2966:4;3005:25;2990:40;;;:11;:40;;;;2983:47;;2881:157;;;:::o;27999:105::-;28056:4;28086:12;;28076:7;:22;28069:29;;27999:105;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;31686:172::-;31810:2;31783:15;:24;31799:7;31783:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31844:7;31840:2;31824:28;;31833:5;31824:28;;;;;;;;;;;;31686:172;;;:::o;30051:1529::-;30148:35;30186:20;30198:7;30186:11;:20::i;:::-;30148:58;;30215:22;30257:13;:18;;;30241:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;30310:12;:10;:12::i;:::-;30286:36;;:20;30298:7;30286:11;:20::i;:::-;:36;;;30241:81;:142;;;;30333:50;30350:13;:18;;;30370:12;:10;:12::i;:::-;30333:16;:50::i;:::-;30241:142;30215:169;;30409:17;30393:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;30541:4;30519:26;;:13;:18;;;:26;;;30503:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:1;30616:16;;:2;:16;;;;30608:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30683:43;30705:4;30711:2;30715:7;30724:1;30683:21;:43::i;:::-;30783:49;30800:1;30804:7;30813:13;:18;;;30783:8;:49::i;:::-;30871:1;30841:12;:18;30854:4;30841:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30907:1;30879:12;:16;30892:2;30879:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30938:43;;;;;;;;30953:2;30938:43;;;;;;30964:15;30938:43;;;;;30915:11;:20;30927:7;30915:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31209:19;31241:1;31231:7;:11;;;;:::i;:::-;31209:33;;31294:1;31253:43;;:11;:24;31265:11;31253:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31249:236;;;31311:20;31319:11;31311:7;:20::i;:::-;31307:171;;;31371:97;;;;;;;;31398:13;:18;;;31371:97;;;;;;31429:13;:28;;;31371:97;;;;;31344:11;:24;31356:11;31344:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31307:171;31249:236;31517:7;31513:2;31498:27;;31507:4;31498:27;;;;;;;;;;;;31532:42;31553:4;31559:2;31563:7;31572:1;31532:20;:42::i;:::-;30141:1439;;;30051:1529;;;:::o;28110:98::-;28175:27;28185:2;28189:8;28175:27;;;;;;;;;;;;:9;:27::i;:::-;28110:98;;:::o;23812:606::-;23888:21;;:::i;:::-;23929:16;23937:7;23929;:16::i;:::-;23921:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24001:26;24049:12;24038:7;:23;24034:93;;24118:1;24103:12;24093:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24072:47;;24034:93;24140:12;24155:7;24140:22;;24135:212;24172:18;24164:4;:26;24135:212;;24209:31;24243:11;:17;24255:4;24243:17;;;;;;;;;;;24209:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24299:1;24273:28;;:9;:14;;;:28;;;24269:71;;24321:9;24314:16;;;;;;;24269:71;24200:147;24192:6;;;;;:::i;:::-;;;;24135:212;;;;24355:57;;;;;;;;;;:::i;:::-;;;;;;;;23812:606;;;;:::o;1063:173::-;1119:16;1138:6;;;;;;;;;;;1119:25;;1164:8;1155:6;;:17;;;;;;;;;;;;;;;;;;1219:8;1188:40;;1209:8;1188:40;;;;;;;;;;;;1108:128;1063:173;:::o;33401:690::-;33538:4;33555:15;:2;:13;;;:15::i;:::-;33551:535;;;33610:2;33594:36;;;33631:12;:10;:12::i;:::-;33645:4;33651:7;33660:5;33594:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33581:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33842:1;33825:6;:13;:18;33821:215;;;33858:61;;;;;;;;;;:::i;:::-;;;;;;;;33821:215;34004:6;33998:13;33989:6;33985:2;33981:15;33974:38;33581:464;33726:45;;;33716:55;;;:6;:55;;;;33709:62;;;;;33551:535;34074:4;34067:11;;33401:690;;;;;;;:::o;43632:112::-;43692:13;43723;43716:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43632:112;:::o;3135:534::-;3191:13;3232:1;3223:5;:10;3219:53;;;3250:10;;;;;;;;;;;;;;;;;;;;;3219:53;3282:12;3297:5;3282:20;;3313:14;3338:78;3353:1;3345:4;:9;3338:78;;3371:8;;;;;:::i;:::-;;;;3402:2;3394:10;;;;;:::i;:::-;;;3338:78;;;3426:19;3458:6;3448:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3426:39;;3476:154;3492:1;3483:5;:10;3476:154;;3520:1;3510:11;;;;;:::i;:::-;;;3587:2;3579:5;:10;;;;:::i;:::-;3566:2;:24;;;;:::i;:::-;3553:39;;3536:6;3543;3536:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3616:2;3607:11;;;;;:::i;:::-;;;3476:154;;;3654:6;3640:21;;;;;3135:534;;;;:::o;44362:230::-;44449:4;44466:12;44508:6;44491:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;44481:35;;;;;;44466:50;;44534;44553:11;;44534:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44566:11;;44579:4;44534:18;:50::i;:::-;44527:57;;;44362:230;;;;;:::o;34553:141::-;;;;;:::o;35080:140::-;;;;;:::o;28547:1272::-;28652:20;28675:12;;28652:35;;28716:1;28702:16;;:2;:16;;;;28694:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:21;28901:12;28893:7;:21::i;:::-;28892:22;28884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:12;28963:8;:24;;28955:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29035:61;29065:1;29069:2;29073:12;29087:8;29035:21;:61::i;:::-;29105:30;29138:12;:16;29151:2;29138:16;;;;;;;;;;;;;;;29105:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29180:119;;;;;;;;29230:8;29200:11;:19;;;:39;;;;:::i;:::-;29180:119;;;;;;29283:8;29248:11;:24;;;:44;;;;:::i;:::-;29180:119;;;;;29161:12;:16;29174:2;29161:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29334:43;;;;;;;;29349:2;29334:43;;;;;;29360:15;29334:43;;;;;29306:11;:25;29318:12;29306:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29386:20;29409:12;29386:35;;29435:9;29430:281;29454:8;29450:1;:12;29430:281;;;29508:12;29504:2;29483:38;;29500:1;29483:38;;;;;;;;;;;;29548:59;29579:1;29583:2;29587:12;29601:5;29548:22;:59::i;:::-;29530:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;29689:14;;;;;:::i;:::-;;;;29464:3;;;;;:::i;:::-;;;;29430:281;;;;29734:12;29719;:27;;;;29753:60;29782:1;29786:2;29790:12;29804:8;29753:20;:60::i;:::-;28645:1174;;;28547:1272;;;:::o;4508:198::-;4568:4;4587:12;4654:7;4642:20;4634:28;;4697:1;4690:4;:8;4683:15;;;4508:198;;;:::o;38824:190::-;38949:4;39002;38973:25;38986:5;38993:4;38973:12;:25::i;:::-;:33;38966:40;;38824:190;;;;;:::o;39376:675::-;39459:7;39479:20;39502:4;39479:27;;39522:9;39517:497;39541:5;:12;39537:1;:16;39517:497;;;39575:20;39598:5;39604:1;39598:8;;;;;;;;:::i;:::-;;;;;;;;39575:31;;39641:12;39625;:28;39621:382;;39768:42;39783:12;39797;39768:14;:42::i;:::-;39753:57;;39621:382;;;39945:42;39960:12;39974;39945:14;:42::i;:::-;39930:57;;39621:382;39560:454;39555:3;;;;;:::i;:::-;;;;39517:497;;;;40031:12;40024:19;;;39376:675;;;;:::o;40059:224::-;40127:13;40190:1;40184:4;40177:15;40219:1;40213:4;40206:15;40260:4;40254;40244:21;40235:30;;40059:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:329::-;6415:6;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6356:329;;;;:::o;6691:327::-;6749:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:119;;;6804:79;;:::i;:::-;6766:119;6924:1;6949:52;6993:7;6984:6;6973:9;6969:22;6949:52;:::i;:::-;6939:62;;6895:116;6691:327;;;;:::o;7024:349::-;7093:6;7142:2;7130:9;7121:7;7117:23;7113:32;7110:119;;;7148:79;;:::i;:::-;7110:119;7268:1;7293:63;7348:7;7339:6;7328:9;7324:22;7293:63;:::i;:::-;7283:73;;7239:127;7024:349;;;;:::o;7379:509::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7651:1;7640:9;7636:17;7623:31;7681:18;7673:6;7670:30;7667:117;;;7703:79;;:::i;:::-;7667:117;7808:63;7863:7;7854:6;7843:9;7839:22;7808:63;:::i;:::-;7798:73;;7594:287;7379:509;;;;:::o;7894:329::-;7953:6;8002:2;7990:9;7981:7;7977:23;7973:32;7970:119;;;8008:79;;:::i;:::-;7970:119;8128:1;8153:53;8198:7;8189:6;8178:9;8174:22;8153:53;:::i;:::-;8143:63;;8099:117;7894:329;;;;:::o;8229:704::-;8324:6;8332;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8670:2;8659:9;8655:18;8642:32;8701:18;8693:6;8690:30;8687:117;;;8723:79;;:::i;:::-;8687:117;8836:80;8908:7;8899:6;8888:9;8884:22;8836:80;:::i;:::-;8818:98;;;;8613:313;8229:704;;;;;:::o;8939:179::-;9008:10;9029:46;9071:3;9063:6;9029:46;:::i;:::-;9107:4;9102:3;9098:14;9084:28;;8939:179;;;;:::o;9124:118::-;9211:24;9229:5;9211:24;:::i;:::-;9206:3;9199:37;9124:118;;:::o;9248:157::-;9353:45;9373:24;9391:5;9373:24;:::i;:::-;9353:45;:::i;:::-;9348:3;9341:58;9248:157;;:::o;9441:732::-;9560:3;9589:54;9637:5;9589:54;:::i;:::-;9659:86;9738:6;9733:3;9659:86;:::i;:::-;9652:93;;9769:56;9819:5;9769:56;:::i;:::-;9848:7;9879:1;9864:284;9889:6;9886:1;9883:13;9864:284;;;9965:6;9959:13;9992:63;10051:3;10036:13;9992:63;:::i;:::-;9985:70;;10078:60;10131:6;10078:60;:::i;:::-;10068:70;;9924:224;9911:1;9908;9904:9;9899:14;;9864:284;;;9868:14;10164:3;10157:10;;9565:608;;;9441:732;;;;:::o;10179:109::-;10260:21;10275:5;10260:21;:::i;:::-;10255:3;10248:34;10179:109;;:::o;10294:118::-;10381:24;10399:5;10381:24;:::i;:::-;10376:3;10369:37;10294:118;;:::o;10418:115::-;10503:23;10520:5;10503:23;:::i;:::-;10498:3;10491:36;10418:115;;:::o;10539:360::-;10625:3;10653:38;10685:5;10653:38;:::i;:::-;10707:70;10770:6;10765:3;10707:70;:::i;:::-;10700:77;;10786:52;10831:6;10826:3;10819:4;10812:5;10808:16;10786:52;:::i;:::-;10863:29;10885:6;10863:29;:::i;:::-;10858:3;10854:39;10847:46;;10629:270;10539:360;;;;:::o;10905:364::-;10993:3;11021:39;11054:5;11021:39;:::i;:::-;11076:71;11140:6;11135:3;11076:71;:::i;:::-;11069:78;;11156:52;11201:6;11196:3;11189:4;11182:5;11178:16;11156:52;:::i;:::-;11233:29;11255:6;11233:29;:::i;:::-;11228:3;11224:39;11217:46;;10997:272;10905:364;;;;:::o;11275:377::-;11381:3;11409:39;11442:5;11409:39;:::i;:::-;11464:89;11546:6;11541:3;11464:89;:::i;:::-;11457:96;;11562:52;11607:6;11602:3;11595:4;11588:5;11584:16;11562:52;:::i;:::-;11639:6;11634:3;11630:16;11623:23;;11385:267;11275:377;;;;:::o;11658:366::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:365::-;17380:3;17401:66;17465:1;17460:3;17401:66;:::i;:::-;17394:73;;17476:93;17565:3;17476:93;:::i;:::-;17594:2;17589:3;17585:12;17578:19;;17238:365;;;:::o;17609:366::-;17751:3;17772:67;17836:2;17831:3;17772:67;:::i;:::-;17765:74;;17848:93;17937:3;17848:93;:::i;:::-;17966:2;17961:3;17957:12;17950:19;;17609:366;;;:::o;17981:::-;18123:3;18144:67;18208:2;18203:3;18144:67;:::i;:::-;18137:74;;18220:93;18309:3;18220:93;:::i;:::-;18338:2;18333:3;18329:12;18322:19;;17981:366;;;:::o;18353:::-;18495:3;18516:67;18580:2;18575:3;18516:67;:::i;:::-;18509:74;;18592:93;18681:3;18592:93;:::i;:::-;18710:2;18705:3;18701:12;18694:19;;18353:366;;;:::o;18725:::-;18867:3;18888:67;18952:2;18947:3;18888:67;:::i;:::-;18881:74;;18964:93;19053:3;18964:93;:::i;:::-;19082:2;19077:3;19073:12;19066:19;;18725:366;;;:::o;19097:::-;19239:3;19260:67;19324:2;19319:3;19260:67;:::i;:::-;19253:74;;19336:93;19425:3;19336:93;:::i;:::-;19454:2;19449:3;19445:12;19438:19;;19097:366;;;:::o;19469:::-;19611:3;19632:67;19696:2;19691:3;19632:67;:::i;:::-;19625:74;;19708:93;19797:3;19708:93;:::i;:::-;19826:2;19821:3;19817:12;19810:19;;19469:366;;;:::o;19841:::-;19983:3;20004:67;20068:2;20063:3;20004:67;:::i;:::-;19997:74;;20080:93;20169:3;20080:93;:::i;:::-;20198:2;20193:3;20189:12;20182:19;;19841:366;;;:::o;20213:::-;20355:3;20376:67;20440:2;20435:3;20376:67;:::i;:::-;20369:74;;20452:93;20541:3;20452:93;:::i;:::-;20570:2;20565:3;20561:12;20554:19;;20213:366;;;:::o;20585:::-;20727:3;20748:67;20812:2;20807:3;20748:67;:::i;:::-;20741:74;;20824:93;20913:3;20824:93;:::i;:::-;20942:2;20937:3;20933:12;20926:19;;20585:366;;;:::o;20957:::-;21099:3;21120:67;21184:2;21179:3;21120:67;:::i;:::-;21113:74;;21196:93;21285:3;21196:93;:::i;:::-;21314:2;21309:3;21305:12;21298:19;;20957:366;;;:::o;21329:::-;21471:3;21492:67;21556:2;21551:3;21492:67;:::i;:::-;21485:74;;21568:93;21657:3;21568:93;:::i;:::-;21686:2;21681:3;21677:12;21670:19;;21329:366;;;:::o;21701:::-;21843:3;21864:67;21928:2;21923:3;21864:67;:::i;:::-;21857:74;;21940:93;22029:3;21940:93;:::i;:::-;22058:2;22053:3;22049:12;22042:19;;21701:366;;;:::o;22073:::-;22215:3;22236:67;22300:2;22295:3;22236:67;:::i;:::-;22229:74;;22312:93;22401:3;22312:93;:::i;:::-;22430:2;22425:3;22421:12;22414:19;;22073:366;;;:::o;22445:::-;22587:3;22608:67;22672:2;22667:3;22608:67;:::i;:::-;22601:74;;22684:93;22773:3;22684:93;:::i;:::-;22802:2;22797:3;22793:12;22786:19;;22445:366;;;:::o;22817:::-;22959:3;22980:67;23044:2;23039:3;22980:67;:::i;:::-;22973:74;;23056:93;23145:3;23056:93;:::i;:::-;23174:2;23169:3;23165:12;23158:19;;22817:366;;;:::o;23189:::-;23331:3;23352:67;23416:2;23411:3;23352:67;:::i;:::-;23345:74;;23428:93;23517:3;23428:93;:::i;:::-;23546:2;23541:3;23537:12;23530:19;;23189:366;;;:::o;23561:::-;23703:3;23724:67;23788:2;23783:3;23724:67;:::i;:::-;23717:74;;23800:93;23889:3;23800:93;:::i;:::-;23918:2;23913:3;23909:12;23902:19;;23561:366;;;:::o;23933:::-;24075:3;24096:67;24160:2;24155:3;24096:67;:::i;:::-;24089:74;;24172:93;24261:3;24172:93;:::i;:::-;24290:2;24285:3;24281:12;24274:19;;23933:366;;;:::o;24305:::-;24447:3;24468:67;24532:2;24527:3;24468:67;:::i;:::-;24461:74;;24544:93;24633:3;24544:93;:::i;:::-;24662:2;24657:3;24653:12;24646:19;;24305:366;;;:::o;24677:108::-;24754:24;24772:5;24754:24;:::i;:::-;24749:3;24742:37;24677:108;;:::o;24791:118::-;24878:24;24896:5;24878:24;:::i;:::-;24873:3;24866:37;24791:118;;:::o;24915:256::-;25027:3;25042:75;25113:3;25104:6;25042:75;:::i;:::-;25142:2;25137:3;25133:12;25126:19;;25162:3;25155:10;;24915:256;;;;:::o;25177:435::-;25357:3;25379:95;25470:3;25461:6;25379:95;:::i;:::-;25372:102;;25491:95;25582:3;25573:6;25491:95;:::i;:::-;25484:102;;25603:3;25596:10;;25177:435;;;;;:::o;25618:222::-;25711:4;25749:2;25738:9;25734:18;25726:26;;25762:71;25830:1;25819:9;25815:17;25806:6;25762:71;:::i;:::-;25618:222;;;;:::o;25846:640::-;26041:4;26079:3;26068:9;26064:19;26056:27;;26093:71;26161:1;26150:9;26146:17;26137:6;26093:71;:::i;:::-;26174:72;26242:2;26231:9;26227:18;26218:6;26174:72;:::i;:::-;26256;26324:2;26313:9;26309:18;26300:6;26256:72;:::i;:::-;26375:9;26369:4;26365:20;26360:2;26349:9;26345:18;26338:48;26403:76;26474:4;26465:6;26403:76;:::i;:::-;26395:84;;25846:640;;;;;;;:::o;26492:373::-;26635:4;26673:2;26662:9;26658:18;26650:26;;26722:9;26716:4;26712:20;26708:1;26697:9;26693:17;26686:47;26750:108;26853:4;26844:6;26750:108;:::i;:::-;26742:116;;26492:373;;;;:::o;26871:210::-;26958:4;26996:2;26985:9;26981:18;26973:26;;27009:65;27071:1;27060:9;27056:17;27047:6;27009:65;:::i;:::-;26871:210;;;;:::o;27087:222::-;27180:4;27218:2;27207:9;27203:18;27195:26;;27231:71;27299:1;27288:9;27284:17;27275:6;27231:71;:::i;:::-;27087:222;;;;:::o;27315:218::-;27406:4;27444:2;27433:9;27429:18;27421:26;;27457:69;27523:1;27512:9;27508:17;27499:6;27457:69;:::i;:::-;27315:218;;;;:::o;27539:313::-;27652:4;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:78;27840:4;27831:6;27767:78;:::i;:::-;27759:86;;27539:313;;;;:::o;27858:419::-;28024:4;28062:2;28051:9;28047:18;28039:26;;28111:9;28105:4;28101:20;28097:1;28086:9;28082:17;28075:47;28139:131;28265:4;28139:131;:::i;:::-;28131:139;;27858:419;;;:::o;28283:::-;28449:4;28487:2;28476:9;28472:18;28464:26;;28536:9;28530:4;28526:20;28522:1;28511:9;28507:17;28500:47;28564:131;28690:4;28564:131;:::i;:::-;28556:139;;28283:419;;;:::o;28708:::-;28874:4;28912:2;28901:9;28897:18;28889:26;;28961:9;28955:4;28951:20;28947:1;28936:9;28932:17;28925:47;28989:131;29115:4;28989:131;:::i;:::-;28981:139;;28708:419;;;:::o;29133:::-;29299:4;29337:2;29326:9;29322:18;29314:26;;29386:9;29380:4;29376:20;29372:1;29361:9;29357:17;29350:47;29414:131;29540:4;29414:131;:::i;:::-;29406:139;;29133:419;;;:::o;29558:::-;29724:4;29762:2;29751:9;29747:18;29739:26;;29811:9;29805:4;29801:20;29797:1;29786:9;29782:17;29775:47;29839:131;29965:4;29839:131;:::i;:::-;29831:139;;29558:419;;;:::o;29983:::-;30149:4;30187:2;30176:9;30172:18;30164:26;;30236:9;30230:4;30226:20;30222:1;30211:9;30207:17;30200:47;30264:131;30390:4;30264:131;:::i;:::-;30256:139;;29983:419;;;:::o;30408:::-;30574:4;30612:2;30601:9;30597:18;30589:26;;30661:9;30655:4;30651:20;30647:1;30636:9;30632:17;30625:47;30689:131;30815:4;30689:131;:::i;:::-;30681:139;;30408:419;;;:::o;30833:::-;30999:4;31037:2;31026:9;31022:18;31014:26;;31086:9;31080:4;31076:20;31072:1;31061:9;31057:17;31050:47;31114:131;31240:4;31114:131;:::i;:::-;31106:139;;30833:419;;;:::o;31258:::-;31424:4;31462:2;31451:9;31447:18;31439:26;;31511:9;31505:4;31501:20;31497:1;31486:9;31482:17;31475:47;31539:131;31665:4;31539:131;:::i;:::-;31531:139;;31258:419;;;:::o;31683:::-;31849:4;31887:2;31876:9;31872:18;31864:26;;31936:9;31930:4;31926:20;31922:1;31911:9;31907:17;31900:47;31964:131;32090:4;31964:131;:::i;:::-;31956:139;;31683:419;;;:::o;32108:::-;32274:4;32312:2;32301:9;32297:18;32289:26;;32361:9;32355:4;32351:20;32347:1;32336:9;32332:17;32325:47;32389:131;32515:4;32389:131;:::i;:::-;32381:139;;32108:419;;;:::o;32533:::-;32699:4;32737:2;32726:9;32722:18;32714:26;;32786:9;32780:4;32776:20;32772:1;32761:9;32757:17;32750:47;32814:131;32940:4;32814:131;:::i;:::-;32806:139;;32533:419;;;:::o;32958:::-;33124:4;33162:2;33151:9;33147:18;33139:26;;33211:9;33205:4;33201:20;33197:1;33186:9;33182:17;33175:47;33239:131;33365:4;33239:131;:::i;:::-;33231:139;;32958:419;;;:::o;33383:::-;33549:4;33587:2;33576:9;33572:18;33564:26;;33636:9;33630:4;33626:20;33622:1;33611:9;33607:17;33600:47;33664:131;33790:4;33664:131;:::i;:::-;33656:139;;33383:419;;;:::o;33808:::-;33974:4;34012:2;34001:9;33997:18;33989:26;;34061:9;34055:4;34051:20;34047:1;34036:9;34032:17;34025:47;34089:131;34215:4;34089:131;:::i;:::-;34081:139;;33808:419;;;:::o;34233:::-;34399:4;34437:2;34426:9;34422:18;34414:26;;34486:9;34480:4;34476:20;34472:1;34461:9;34457:17;34450:47;34514:131;34640:4;34514:131;:::i;:::-;34506:139;;34233:419;;;:::o;34658:::-;34824:4;34862:2;34851:9;34847:18;34839:26;;34911:9;34905:4;34901:20;34897:1;34886:9;34882:17;34875:47;34939:131;35065:4;34939:131;:::i;:::-;34931:139;;34658:419;;;:::o;35083:::-;35249:4;35287:2;35276:9;35272:18;35264:26;;35336:9;35330:4;35326:20;35322:1;35311:9;35307:17;35300:47;35364:131;35490:4;35364:131;:::i;:::-;35356:139;;35083:419;;;:::o;35508:::-;35674:4;35712:2;35701:9;35697:18;35689:26;;35761:9;35755:4;35751:20;35747:1;35736:9;35732:17;35725:47;35789:131;35915:4;35789:131;:::i;:::-;35781:139;;35508:419;;;:::o;35933:::-;36099:4;36137:2;36126:9;36122:18;36114:26;;36186:9;36180:4;36176:20;36172:1;36161:9;36157:17;36150:47;36214:131;36340:4;36214:131;:::i;:::-;36206:139;;35933:419;;;:::o;36358:::-;36524:4;36562:2;36551:9;36547:18;36539:26;;36611:9;36605:4;36601:20;36597:1;36586:9;36582:17;36575:47;36639:131;36765:4;36639:131;:::i;:::-;36631:139;;36358:419;;;:::o;36783:::-;36949:4;36987:2;36976:9;36972:18;36964:26;;37036:9;37030:4;37026:20;37022:1;37011:9;37007:17;37000:47;37064:131;37190:4;37064:131;:::i;:::-;37056:139;;36783:419;;;:::o;37208:::-;37374:4;37412:2;37401:9;37397:18;37389:26;;37461:9;37455:4;37451:20;37447:1;37436:9;37432:17;37425:47;37489:131;37615:4;37489:131;:::i;:::-;37481:139;;37208:419;;;:::o;37633:::-;37799:4;37837:2;37826:9;37822:18;37814:26;;37886:9;37880:4;37876:20;37872:1;37861:9;37857:17;37850:47;37914:131;38040:4;37914:131;:::i;:::-;37906:139;;37633:419;;;:::o;38058:::-;38224:4;38262:2;38251:9;38247:18;38239:26;;38311:9;38305:4;38301:20;38297:1;38286:9;38282:17;38275:47;38339:131;38465:4;38339:131;:::i;:::-;38331:139;;38058:419;;;:::o;38483:::-;38649:4;38687:2;38676:9;38672:18;38664:26;;38736:9;38730:4;38726:20;38722:1;38711:9;38707:17;38700:47;38764:131;38890:4;38764:131;:::i;:::-;38756:139;;38483:419;;;:::o;38908:::-;39074:4;39112:2;39101:9;39097:18;39089:26;;39161:9;39155:4;39151:20;39147:1;39136:9;39132:17;39125:47;39189:131;39315:4;39189:131;:::i;:::-;39181:139;;38908:419;;;:::o;39333:::-;39499:4;39537:2;39526:9;39522:18;39514:26;;39586:9;39580:4;39576:20;39572:1;39561:9;39557:17;39550:47;39614:131;39740:4;39614:131;:::i;:::-;39606:139;;39333:419;;;:::o;39758:::-;39924:4;39962:2;39951:9;39947:18;39939:26;;40011:9;40005:4;40001:20;39997:1;39986:9;39982:17;39975:47;40039:131;40165:4;40039:131;:::i;:::-;40031:139;;39758:419;;;:::o;40183:::-;40349:4;40387:2;40376:9;40372:18;40364:26;;40436:9;40430:4;40426:20;40422:1;40411:9;40407:17;40400:47;40464:131;40590:4;40464:131;:::i;:::-;40456:139;;40183:419;;;:::o;40608:::-;40774:4;40812:2;40801:9;40797:18;40789:26;;40861:9;40855:4;40851:20;40847:1;40836:9;40832:17;40825:47;40889:131;41015:4;40889:131;:::i;:::-;40881:139;;40608:419;;;:::o;41033:::-;41199:4;41237:2;41226:9;41222:18;41214:26;;41286:9;41280:4;41276:20;41272:1;41261:9;41257:17;41250:47;41314:131;41440:4;41314:131;:::i;:::-;41306:139;;41033:419;;;:::o;41458:::-;41624:4;41662:2;41651:9;41647:18;41639:26;;41711:9;41705:4;41701:20;41697:1;41686:9;41682:17;41675:47;41739:131;41865:4;41739:131;:::i;:::-;41731:139;;41458:419;;;:::o;41883:::-;42049:4;42087:2;42076:9;42072:18;42064:26;;42136:9;42130:4;42126:20;42122:1;42111:9;42107:17;42100:47;42164:131;42290:4;42164:131;:::i;:::-;42156:139;;41883:419;;;:::o;42308:::-;42474:4;42512:2;42501:9;42497:18;42489:26;;42561:9;42555:4;42551:20;42547:1;42536:9;42532:17;42525:47;42589:131;42715:4;42589:131;:::i;:::-;42581:139;;42308:419;;;:::o;42733:222::-;42826:4;42864:2;42853:9;42849:18;42841:26;;42877:71;42945:1;42934:9;42930:17;42921:6;42877:71;:::i;:::-;42733:222;;;;:::o;42961:129::-;42995:6;43022:20;;:::i;:::-;43012:30;;43051:33;43079:4;43071:6;43051:33;:::i;:::-;42961:129;;;:::o;43096:75::-;43129:6;43162:2;43156:9;43146:19;;43096:75;:::o;43177:307::-;43238:4;43328:18;43320:6;43317:30;43314:56;;;43350:18;;:::i;:::-;43314:56;43388:29;43410:6;43388:29;:::i;:::-;43380:37;;43472:4;43466;43462:15;43454:23;;43177:307;;;:::o;43490:308::-;43552:4;43642:18;43634:6;43631:30;43628:56;;;43664:18;;:::i;:::-;43628:56;43702:29;43724:6;43702:29;:::i;:::-;43694:37;;43786:4;43780;43776:15;43768:23;;43490:308;;;:::o;43804:132::-;43871:4;43894:3;43886:11;;43924:4;43919:3;43915:14;43907:22;;43804:132;;;:::o;43942:114::-;44009:6;44043:5;44037:12;44027:22;;43942:114;;;:::o;44062:98::-;44113:6;44147:5;44141:12;44131:22;;44062:98;;;:::o;44166:99::-;44218:6;44252:5;44246:12;44236:22;;44166:99;;;:::o;44271:113::-;44341:4;44373;44368:3;44364:14;44356:22;;44271:113;;;:::o;44390:184::-;44489:11;44523:6;44518:3;44511:19;44563:4;44558:3;44554:14;44539:29;;44390:184;;;;:::o;44580:168::-;44663:11;44697:6;44692:3;44685:19;44737:4;44732:3;44728:14;44713:29;;44580:168;;;;:::o;44754:169::-;44838:11;44872:6;44867:3;44860:19;44912:4;44907:3;44903:14;44888:29;;44754:169;;;;:::o;44929:148::-;45031:11;45068:3;45053:18;;44929:148;;;;:::o;45083:273::-;45123:3;45142:20;45160:1;45142:20;:::i;:::-;45137:25;;45176:20;45194:1;45176:20;:::i;:::-;45171:25;;45298:1;45262:34;45258:42;45255:1;45252:49;45249:75;;;45304:18;;:::i;:::-;45249:75;45348:1;45345;45341:9;45334:16;;45083:273;;;;:::o;45362:305::-;45402:3;45421:20;45439:1;45421:20;:::i;:::-;45416:25;;45455:20;45473:1;45455:20;:::i;:::-;45450:25;;45609:1;45541:66;45537:74;45534:1;45531:81;45528:107;;;45615:18;;:::i;:::-;45528:107;45659:1;45656;45652:9;45645:16;;45362:305;;;;:::o;45673:185::-;45713:1;45730:20;45748:1;45730:20;:::i;:::-;45725:25;;45764:20;45782:1;45764:20;:::i;:::-;45759:25;;45803:1;45793:35;;45808:18;;:::i;:::-;45793:35;45850:1;45847;45843:9;45838:14;;45673:185;;;;:::o;45864:348::-;45904:7;45927:20;45945:1;45927:20;:::i;:::-;45922:25;;45961:20;45979:1;45961:20;:::i;:::-;45956:25;;46149:1;46081:66;46077:74;46074:1;46071:81;46066:1;46059:9;46052:17;46048:105;46045:131;;;46156:18;;:::i;:::-;46045:131;46204:1;46201;46197:9;46186:20;;45864:348;;;;:::o;46218:191::-;46258:4;46278:20;46296:1;46278:20;:::i;:::-;46273:25;;46312:20;46330:1;46312:20;:::i;:::-;46307:25;;46351:1;46348;46345:8;46342:34;;;46356:18;;:::i;:::-;46342:34;46401:1;46398;46394:9;46386:17;;46218:191;;;;:::o;46415:::-;46455:4;46475:20;46493:1;46475:20;:::i;:::-;46470:25;;46509:20;46527:1;46509:20;:::i;:::-;46504:25;;46548:1;46545;46542:8;46539:34;;;46553:18;;:::i;:::-;46539:34;46598:1;46595;46591:9;46583:17;;46415:191;;;;:::o;46612:96::-;46649:7;46678:24;46696:5;46678:24;:::i;:::-;46667:35;;46612:96;;;:::o;46714:90::-;46748:7;46791:5;46784:13;46777:21;46766:32;;46714:90;;;:::o;46810:77::-;46847:7;46876:5;46865:16;;46810:77;;;:::o;46893:149::-;46929:7;46969:66;46962:5;46958:78;46947:89;;46893:149;;;:::o;47048:118::-;47085:7;47125:34;47118:5;47114:46;47103:57;;47048:118;;;:::o;47172:126::-;47209:7;47249:42;47242:5;47238:54;47227:65;;47172:126;;;:::o;47304:77::-;47341:7;47370:5;47359:16;;47304:77;;;:::o;47387:154::-;47471:6;47466:3;47461;47448:30;47533:1;47524:6;47519:3;47515:16;47508:27;47387:154;;;:::o;47547:307::-;47615:1;47625:113;47639:6;47636:1;47633:13;47625:113;;;47724:1;47719:3;47715:11;47709:18;47705:1;47700:3;47696:11;47689:39;47661:2;47658:1;47654:10;47649:15;;47625:113;;;47756:6;47753:1;47750:13;47747:101;;;47836:1;47827:6;47822:3;47818:16;47811:27;47747:101;47596:258;47547:307;;;:::o;47860:171::-;47899:3;47922:24;47940:5;47922:24;:::i;:::-;47913:33;;47968:4;47961:5;47958:15;47955:41;;;47976:18;;:::i;:::-;47955:41;48023:1;48016:5;48012:13;48005:20;;47860:171;;;:::o;48037:320::-;48081:6;48118:1;48112:4;48108:12;48098:22;;48165:1;48159:4;48155:12;48186:18;48176:81;;48242:4;48234:6;48230:17;48220:27;;48176:81;48304:2;48296:6;48293:14;48273:18;48270:38;48267:84;;;48323:18;;:::i;:::-;48267:84;48088:269;48037:320;;;:::o;48363:281::-;48446:27;48468:4;48446:27;:::i;:::-;48438:6;48434:40;48576:6;48564:10;48561:22;48540:18;48528:10;48525:34;48522:62;48519:88;;;48587:18;;:::i;:::-;48519:88;48627:10;48623:2;48616:22;48406:238;48363:281;;:::o;48650:233::-;48689:3;48712:24;48730:5;48712:24;:::i;:::-;48703:33;;48758:66;48751:5;48748:77;48745:103;;;48828:18;;:::i;:::-;48745:103;48875:1;48868:5;48864:13;48857:20;;48650:233;;;:::o;48889:100::-;48928:7;48957:26;48977:5;48957:26;:::i;:::-;48946:37;;48889:100;;;:::o;48995:94::-;49034:7;49063:20;49077:5;49063:20;:::i;:::-;49052:31;;48995:94;;;:::o;49095:176::-;49127:1;49144:20;49162:1;49144:20;:::i;:::-;49139:25;;49178:20;49196:1;49178:20;:::i;:::-;49173:25;;49217:1;49207:35;;49222:18;;:::i;:::-;49207:35;49263:1;49260;49256:9;49251:14;;49095:176;;;;:::o;49277:180::-;49325:77;49322:1;49315:88;49422:4;49419:1;49412:15;49446:4;49443:1;49436:15;49463:180;49511:77;49508:1;49501:88;49608:4;49605:1;49598:15;49632:4;49629:1;49622:15;49649:180;49697:77;49694:1;49687:88;49794:4;49791:1;49784:15;49818:4;49815:1;49808:15;49835:180;49883:77;49880:1;49873:88;49980:4;49977:1;49970:15;50004:4;50001:1;49994:15;50021:180;50069:77;50066:1;50059:88;50166:4;50163:1;50156:15;50190:4;50187:1;50180:15;50207:117;50316:1;50313;50306:12;50330:117;50439:1;50436;50429:12;50453:117;50562:1;50559;50552:12;50576:117;50685:1;50682;50675:12;50699:117;50808:1;50805;50798:12;50822:117;50931:1;50928;50921:12;50945:102;50986:6;51037:2;51033:7;51028:2;51021:5;51017:14;51013:28;51003:38;;50945:102;;;:::o;51053:94::-;51086:8;51134:5;51130:2;51126:14;51105:35;;51053:94;;;:::o;51153:221::-;51293:34;51289:1;51281:6;51277:14;51270:58;51362:4;51357:2;51349:6;51345:15;51338:29;51153:221;:::o;51380:173::-;51520:25;51516:1;51508:6;51504:14;51497:49;51380:173;:::o;51559:225::-;51699:34;51695:1;51687:6;51683:14;51676:58;51768:8;51763:2;51755:6;51751:15;51744:33;51559:225;:::o;51790:229::-;51930:34;51926:1;51918:6;51914:14;51907:58;51999:12;51994:2;51986:6;51982:15;51975:37;51790:229;:::o;52025:224::-;52165:34;52161:1;52153:6;52149:14;52142:58;52234:7;52229:2;52221:6;52217:15;52210:32;52025:224;:::o;52255:170::-;52395:22;52391:1;52383:6;52379:14;52372:46;52255:170;:::o;52431:229::-;52571:34;52567:1;52559:6;52555:14;52548:58;52640:12;52635:2;52627:6;52623:15;52616:37;52431:229;:::o;52666:222::-;52806:34;52802:1;52794:6;52790:14;52783:58;52875:5;52870:2;52862:6;52858:15;52851:30;52666:222;:::o;52894:224::-;53034:34;53030:1;53022:6;53018:14;53011:58;53103:7;53098:2;53090:6;53086:15;53079:32;52894:224;:::o;53124:174::-;53264:26;53260:1;53252:6;53248:14;53241:50;53124:174;:::o;53304:162::-;53444:14;53440:1;53432:6;53428:14;53421:38;53304:162;:::o;53472:169::-;53612:21;53608:1;53600:6;53596:14;53589:45;53472:169;:::o;53647:244::-;53787:34;53783:1;53775:6;53771:14;53764:58;53856:27;53851:2;53843:6;53839:15;53832:52;53647:244;:::o;53897:230::-;54037:34;54033:1;54025:6;54021:14;54014:58;54106:13;54101:2;54093:6;54089:15;54082:38;53897:230;:::o;54133:222::-;54273:34;54269:1;54261:6;54257:14;54250:58;54342:5;54337:2;54329:6;54325:15;54318:30;54133:222;:::o;54361:158::-;54501:10;54497:1;54489:6;54485:14;54478:34;54361:158;:::o;54525:225::-;54665:34;54661:1;54653:6;54649:14;54642:58;54734:8;54729:2;54721:6;54717:15;54710:33;54525:225;:::o;54756:182::-;54896:34;54892:1;54884:6;54880:14;54873:58;54756:182;:::o;54944:234::-;55084:34;55080:1;55072:6;55068:14;55061:58;55153:17;55148:2;55140:6;55136:15;55129:42;54944:234;:::o;55184:176::-;55324:28;55320:1;55312:6;55308:14;55301:52;55184:176;:::o;55366:237::-;55506:34;55502:1;55494:6;55490:14;55483:58;55575:20;55570:2;55562:6;55558:15;55551:45;55366:237;:::o;55609:173::-;55749:25;55745:1;55737:6;55733:14;55726:49;55609:173;:::o;55788:221::-;55928:34;55924:1;55916:6;55912:14;55905:58;55997:4;55992:2;55984:6;55980:15;55973:29;55788:221;:::o;56015:238::-;56155:34;56151:1;56143:6;56139:14;56132:58;56224:21;56219:2;56211:6;56207:15;56200:46;56015:238;:::o;56259:165::-;56399:17;56395:1;56387:6;56383:14;56376:41;56259:165;:::o;56430:179::-;56570:31;56566:1;56558:6;56554:14;56547:55;56430:179;:::o;56615:220::-;56755:34;56751:1;56743:6;56739:14;56732:58;56824:3;56819:2;56811:6;56807:15;56800:28;56615:220;:::o;56841:233::-;56981:34;56977:1;56969:6;56965:14;56958:58;57050:16;57045:2;57037:6;57033:15;57026:41;56841:233;:::o;57080:181::-;57220:33;57216:1;57208:6;57204:14;57197:57;57080:181;:::o;57267:234::-;57407:34;57403:1;57395:6;57391:14;57384:58;57476:17;57471:2;57463:6;57459:15;57452:42;57267:234;:::o;57507:172::-;57647:24;57643:1;57635:6;57631:14;57624:48;57507:172;:::o;57685:232::-;57825:34;57821:1;57813:6;57809:14;57802:58;57894:15;57889:2;57881:6;57877:15;57870:40;57685:232;:::o;57923:221::-;58063:34;58059:1;58051:6;58047:14;58040:58;58132:4;58127:2;58119:6;58115:15;58108:29;57923:221;:::o;58150:175::-;58290:27;58286:1;58278:6;58274:14;58267:51;58150:175;:::o;58331:167::-;58471:19;58467:1;58459:6;58455:14;58448:43;58331:167;:::o;58504:122::-;58577:24;58595:5;58577:24;:::i;:::-;58570:5;58567:35;58557:63;;58616:1;58613;58606:12;58557:63;58504:122;:::o;58632:116::-;58702:21;58717:5;58702:21;:::i;:::-;58695:5;58692:32;58682:60;;58738:1;58735;58728:12;58682:60;58632:116;:::o;58754:122::-;58827:24;58845:5;58827:24;:::i;:::-;58820:5;58817:35;58807:63;;58866:1;58863;58856:12;58807:63;58754:122;:::o;58882:120::-;58954:23;58971:5;58954:23;:::i;:::-;58947:5;58944:34;58934:62;;58992:1;58989;58982:12;58934:62;58882:120;:::o;59008:122::-;59081:24;59099:5;59081:24;:::i;:::-;59074:5;59071:35;59061:63;;59120:1;59117;59110:12;59061:63;59008:122;:::o
Swarm Source
ipfs://68b9881dfc4e777b01c6f37ebab9f9e9a1bb6f82b222c433c9b7eeee232fee42
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.