Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,242 BOREDSERS
Holders
352
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 BOREDSERSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BoredSers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-09 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.4; error BalanceQueryForZeroAddress(); error OwnerQueryForNonexistentToken(); error URIQueryForNonexistentToken(); error ApprovalToCurrentOwner(); error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error TransferToNonERC721ReceiverImplementer(); error MintToZeroAddress(); error MintZeroQuantity(); error TransferFromIncorrectOwner(); error TransferCallerNotOwnerNorApproved(); error TransferToZeroAddress(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // 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) internal _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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = 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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * 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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * 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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity >=0.7.0 <0.9.0; contract BoredSers is ERC721A, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.015 ether; uint256 public maxSupply = 5555; uint256 public maxMintAmountPerTx = 10; uint256 public freeMintAmount = 10; mapping(address => uint256) public addressMintedBalance; bool public paused = false; bool public revealed = false; constructor() ERC721A("BoredSers", "BOREDSERS") { setHiddenMetadataUri("ipfs://QmRzhKwS1pTCVy25kd4xZNU3jYjXZp39LBJU8HrdzHiEo6/hidden.json"); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } //function totalSupply() public view returns (uint256) { // return supply.current(); //} function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); if(supply.current() <= freeMintAmount) { require(_mintAmount <= 5, "Max of 5 free NFT's"); } if(supply.current() > freeMintAmount){ require(msg.value >= cost * _mintAmount, "Insufficient funds!"); } _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setFreeMintAmount(uint256 _freeMintAmount) public onlyOwner { freeMintAmount = _freeMintAmount; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { _safeMint(_receiver, _mintAmount); } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeMintAmount","type":"uint256"}],"name":"setFreeMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a90805190602001906200002b92919062000387565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200007992919062000387565b5066354a6ba7a18000600d556115b3600e55600a600f55600a6010556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff021916908315150217905550348015620000d857600080fd5b506040518060400160405280600981526020017f426f7265645365727300000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f424f52454453455253000000000000000000000000000000000000000000000081525081600290805190602001906200015d92919062000387565b5080600390805190602001906200017692919062000387565b5062000187620001df60201b60201c565b6000819055505050620001af620001a3620001e460201b60201c565b620001ec60201b60201c565b620001d96040518060800160405280604181526020016200466f60419139620002b260201b60201c565b6200051f565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c2620001e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e86200035d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000338906200045e565b60405180910390fd5b80600c90805190602001906200035992919062000387565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003959062000491565b90600052602060002090601f016020900481019282620003b9576000855562000405565b82601f10620003d457805160ff191683800117855562000405565b8280016001018555821562000405579182015b8281111562000404578251825591602001919060010190620003e7565b5b50905062000414919062000418565b5090565b5b808211156200043357600081600090555060010162000419565b5090565b60006200044660208362000480565b91506200045382620004f6565b602082019050919050565b60006020820190508181036000830152620004798162000437565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004aa57607f821691505b60208210811415620004c157620004c0620004c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614140806200052f6000396000f3fe6080604052600436106102305760003560e01c806362b99ad41161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb011461081a578063e0a8085314610845578063e985e9c51461086e578063efbd73f4146108ab578063f2fde38b146108d457610230565b8063a22cb46514610737578063a45ba8e714610760578063b071401b1461078b578063b88d4fde146107b4578063c87b56dd146107dd57610230565b80637f953a22116100f25780637f953a22146106715780638da5cb5b1461069a57806394354fd0146106c557806395d89b41146106f0578063a0712d681461071b57610230565b806362b99ad41461058c5780636352211e146105b757806370a08231146105f4578063715018a6146106315780637ec4a6591461064857610230565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104b95780634fdd43cb146104e2578063518302271461050b5780635503a0e8146105365780635c975abb1461056157610230565b806323b872dd146103e85780633a467e3d146104115780633ccfd60b1461043c57806342842e0e14610453578063438b63001461047c57610230565b806313faede61161020357806313faede61461030357806316ba10e01461032e57806316c38b3c1461035757806318160ddd1461038057806318cae269146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906133f6565b6108fd565b60405161026991906138e4565b60405180910390f35b34801561027e57600080fd5b506102876109df565b60405161029491906138ff565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613499565b610a71565b6040516102d1919061385b565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613389565b610aed565b005b34801561030f57600080fd5b50610318610bf8565b6040516103259190613a21565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613450565b610bfe565b005b34801561036357600080fd5b5061037e600480360381019061037991906133c9565b610c94565b005b34801561038c57600080fd5b50610395610d2d565b6040516103a29190613a21565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613206565b610d44565b6040516103df9190613a21565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613273565b610d5c565b005b34801561041d57600080fd5b50610426610d6c565b6040516104339190613a21565b60405180910390f35b34801561044857600080fd5b50610451610d72565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613273565b610e6e565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613206565b610e8e565b6040516104b091906138c2565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613499565b610f99565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613450565b61101f565b005b34801561051757600080fd5b506105206110b5565b60405161052d91906138e4565b60405180910390f35b34801561054257600080fd5b5061054b6110c8565b60405161055891906138ff565b60405180910390f35b34801561056d57600080fd5b50610576611156565b60405161058391906138e4565b60405180910390f35b34801561059857600080fd5b506105a1611169565b6040516105ae91906138ff565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613499565b6111f7565b6040516105eb919061385b565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613206565b61120d565b6040516106289190613a21565b60405180910390f35b34801561063d57600080fd5b506106466112dd565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613450565b611365565b005b34801561067d57600080fd5b5061069860048036038101906106939190613499565b6113fb565b005b3480156106a657600080fd5b506106af611481565b6040516106bc919061385b565b60405180910390f35b3480156106d157600080fd5b506106da6114ab565b6040516106e79190613a21565b60405180910390f35b3480156106fc57600080fd5b506107056114b1565b60405161071291906138ff565b60405180910390f35b61073560048036038101906107309190613499565b611543565b005b34801561074357600080fd5b5061075e60048036038101906107599190613349565b611707565b005b34801561076c57600080fd5b5061077561187f565b60405161078291906138ff565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613499565b61190d565b005b3480156107c057600080fd5b506107db60048036038101906107d691906132c6565b611993565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613499565b611a0f565b60405161081191906138ff565b60405180910390f35b34801561082657600080fd5b5061082f611b68565b60405161083c9190613a21565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906133c9565b611b6e565b005b34801561087a57600080fd5b5061089560048036038101906108909190613233565b611c07565b6040516108a291906138e4565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906134c6565b611c9b565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613206565b611dd1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ec9565b5b9050919050565b6060600280546109ee90613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90613d2a565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7c82611f33565b610ab2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af8826111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b60576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7f611f81565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bb15750610baf81610baa611f81565b611c07565b155b15610be8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf3838383611f89565b505050565b600d5481565b610c06611f81565b73ffffffffffffffffffffffffffffffffffffffff16610c24611481565b73ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613981565b60405180910390fd5b80600b9080519060200190610c90929190612fd7565b5050565b610c9c611f81565b73ffffffffffffffffffffffffffffffffffffffff16610cba611481565b73ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790613981565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610d3761203b565b6001546000540303905090565b60116020528060005260406000206000915090505481565b610d67838383612040565b505050565b60105481565b610d7a611f81565b73ffffffffffffffffffffffffffffffffffffffff16610d98611481565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590613981565b60405180910390fd5b6000610df8611481565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1b90613846565b60006040518083038185875af1925050503d8060008114610e58576040519150601f19603f3d011682016040523d82523d6000602084013e610e5d565b606091505b5050905080610e6b57600080fd5b50565b610e8983838360405180602001604052806000815250611993565b505050565b60606000610e9b8361120d565b905060008167ffffffffffffffff811115610eb957610eb8613ec3565b5b604051908082528060200260200182016040528015610ee75781602001602082028036833780820191505090505b50905060006001905060005b8381108015610f045750600e548211155b15610f8d576000610f14836111f7565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f795782848381518110610f5e57610f5d613e94565b5b6020026020010181815250508180610f7590613d8d565b9250505b8280610f8490613d8d565b93505050610ef3565b82945050505050919050565b610fa1611f81565b73ffffffffffffffffffffffffffffffffffffffff16610fbf611481565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613981565b60405180910390fd5b80600d8190555050565b611027611f81565b73ffffffffffffffffffffffffffffffffffffffff16611045611481565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613981565b60405180910390fd5b80600c90805190602001906110b1929190612fd7565b5050565b601260019054906101000a900460ff1681565b600b80546110d590613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461110190613d2a565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a805461117690613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546111a290613d2a565b80156111ef5780601f106111c4576101008083540402835291602001916111ef565b820191906000526020600020905b8154815290600101906020018083116111d257829003601f168201915b505050505081565b6000611202826124f6565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611275576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112e5611f81565b73ffffffffffffffffffffffffffffffffffffffff16611303611481565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613981565b60405180910390fd5b6113636000612785565b565b61136d611f81565b73ffffffffffffffffffffffffffffffffffffffff1661138b611481565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613981565b60405180910390fd5b80600a90805190602001906113f7929190612fd7565b5050565b611403611f81565b73ffffffffffffffffffffffffffffffffffffffff16611421611481565b73ffffffffffffffffffffffffffffffffffffffff1614611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90613981565b60405180910390fd5b8060108190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600380546114c090613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ec90613d2a565b80156115395780601f1061150e57610100808354040283529160200191611539565b820191906000526020600020905b81548152906001019060200180831161151c57829003601f168201915b5050505050905090565b806000811180156115565750600f548111155b611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90613941565b60405180910390fd5b600e54816115a3600961284b565b6115ad9190613b5f565b11156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906139e1565b60405180910390fd5b601260009054906101000a900460ff161561163e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611635906139a1565b60405180910390fd5b60105461164b600961284b565b11611695576005821115611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90613961565b60405180910390fd5b5b6010546116a2600961284b565b11156116f95781600d546116b69190613be6565b3410156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90613a01565b60405180910390fd5b5b6117033383612859565b5050565b61170f611f81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611774576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611781611f81565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661182e611f81565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187391906138e4565b60405180910390a35050565b600c805461188c90613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546118b890613d2a565b80156119055780601f106118da57610100808354040283529160200191611905565b820191906000526020600020905b8154815290600101906020018083116118e857829003601f168201915b505050505081565b611915611f81565b73ffffffffffffffffffffffffffffffffffffffff16611933611481565b73ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613981565b60405180910390fd5b80600f8190555050565b61199e848484612040565b6119bd8373ffffffffffffffffffffffffffffffffffffffff16612867565b80156119d257506119d08484848461287a565b155b15611a09576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a1a82611f33565b611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906139c1565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611b0757600c8054611a8290613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aae90613d2a565b8015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b50505050509050611b63565b6000611b116129da565b90506000815111611b315760405180602001604052806000815250611b5f565b80611b3b84612a6c565b600b604051602001611b4f93929190613815565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b76611f81565b73ffffffffffffffffffffffffffffffffffffffff16611b94611481565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190613981565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611cae5750600f548111155b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613941565b60405180910390fd5b600e5481611cfb600961284b565b611d059190613b5f565b1115611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d906139e1565b60405180910390fd5b611d4e611f81565b73ffffffffffffffffffffffffffffffffffffffff16611d6c611481565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990613981565b60405180910390fd5b611dcc8284612859565b505050565b611dd9611f81565b73ffffffffffffffffffffffffffffffffffffffff16611df7611481565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490613981565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490613921565b60405180910390fd5b611ec681612785565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f3e61203b565b11158015611f4d575060005482105b8015611f7a575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061204b826124f6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120b6576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166120d7611f81565b73ffffffffffffffffffffffffffffffffffffffff161480612106575061210585612100611f81565b611c07565b5b8061214b5750612114611f81565b73ffffffffffffffffffffffffffffffffffffffff1661213384610a71565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612184576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121eb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121f88585856001612bcd565b61220460008487611f89565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561248457600054821461248357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124ef8585856001612bd3565b5050505050565b6124fe61305d565b60008290508061250c61203b565b1115801561251b575060005481105b1561274e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161274c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612630578092505050612780565b5b60011561274b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612746578092505050612780565b612631565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6128638282612bd9565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a0611f81565b8786866040518563ffffffff1660e01b81526004016128c29493929190613876565b602060405180830381600087803b1580156128dc57600080fd5b505af192505050801561290d57506040513d601f19601f8201168201806040525081019061290a9190613423565b60015b612987573d806000811461293d576040519150601f19603f3d011682016040523d82523d6000602084013e612942565b606091505b5060008151141561297f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546129e990613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054612a1590613d2a565b8015612a625780601f10612a3757610100808354040283529160200191612a62565b820191906000526020600020905b815481529060010190602001808311612a4557829003601f168201915b5050505050905090565b60606000821415612ab4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bc8565b600082905060005b60008214612ae6578080612acf90613d8d565b915050600a82612adf9190613bb5565b9150612abc565b60008167ffffffffffffffff811115612b0257612b01613ec3565b5b6040519080825280601f01601f191660200182016040528015612b345781602001600182028036833780820191505090505b5090505b60008514612bc157600182612b4d9190613c40565b9150600a85612b5c9190613dd6565b6030612b689190613b5f565b60f81b818381518110612b7e57612b7d613e94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bba9190613bb5565b9450612b38565b8093505050505b919050565b50505050565b50505050565b612bf3828260405180602001604052806000815250612bf7565b5050565b612c048383836001612c09565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c76576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612cb1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbe6000868387612bcd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612e885750612e878773ffffffffffffffffffffffffffffffffffffffff16612867565b5b15612f4e575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612efd600088848060010195508861287a565b612f33576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612e8e578260005414612f4957600080fd5b612fba565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612f4f575b816000819055505050612fd06000868387612bd3565b5050505050565b828054612fe390613d2a565b90600052602060002090601f016020900481019282613005576000855561304c565b82601f1061301e57805160ff191683800117855561304c565b8280016001018555821561304c579182015b8281111561304b578251825591602001919060010190613030565b5b50905061305991906130a0565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156130b95760008160009055506001016130a1565b5090565b60006130d06130cb84613a61565b613a3c565b9050828152602081018484840111156130ec576130eb613ef7565b5b6130f7848285613ce8565b509392505050565b600061311261310d84613a92565b613a3c565b90508281526020810184848401111561312e5761312d613ef7565b5b613139848285613ce8565b509392505050565b600081359050613150816140ae565b92915050565b600081359050613165816140c5565b92915050565b60008135905061317a816140dc565b92915050565b60008151905061318f816140dc565b92915050565b600082601f8301126131aa576131a9613ef2565b5b81356131ba8482602086016130bd565b91505092915050565b600082601f8301126131d8576131d7613ef2565b5b81356131e88482602086016130ff565b91505092915050565b600081359050613200816140f3565b92915050565b60006020828403121561321c5761321b613f01565b5b600061322a84828501613141565b91505092915050565b6000806040838503121561324a57613249613f01565b5b600061325885828601613141565b925050602061326985828601613141565b9150509250929050565b60008060006060848603121561328c5761328b613f01565b5b600061329a86828701613141565b93505060206132ab86828701613141565b92505060406132bc868287016131f1565b9150509250925092565b600080600080608085870312156132e0576132df613f01565b5b60006132ee87828801613141565b94505060206132ff87828801613141565b9350506040613310878288016131f1565b925050606085013567ffffffffffffffff81111561333157613330613efc565b5b61333d87828801613195565b91505092959194509250565b600080604083850312156133605761335f613f01565b5b600061336e85828601613141565b925050602061337f85828601613156565b9150509250929050565b600080604083850312156133a05761339f613f01565b5b60006133ae85828601613141565b92505060206133bf858286016131f1565b9150509250929050565b6000602082840312156133df576133de613f01565b5b60006133ed84828501613156565b91505092915050565b60006020828403121561340c5761340b613f01565b5b600061341a8482850161316b565b91505092915050565b60006020828403121561343957613438613f01565b5b600061344784828501613180565b91505092915050565b60006020828403121561346657613465613f01565b5b600082013567ffffffffffffffff81111561348457613483613efc565b5b613490848285016131c3565b91505092915050565b6000602082840312156134af576134ae613f01565b5b60006134bd848285016131f1565b91505092915050565b600080604083850312156134dd576134dc613f01565b5b60006134eb858286016131f1565b92505060206134fc85828601613141565b9150509250929050565b600061351283836137f7565b60208301905092915050565b61352781613c74565b82525050565b600061353882613ae8565b6135428185613b16565b935061354d83613ac3565b8060005b8381101561357e5781516135658882613506565b975061357083613b09565b925050600181019050613551565b5085935050505092915050565b61359481613c86565b82525050565b60006135a582613af3565b6135af8185613b27565b93506135bf818560208601613cf7565b6135c881613f06565b840191505092915050565b60006135de82613afe565b6135e88185613b43565b93506135f8818560208601613cf7565b61360181613f06565b840191505092915050565b600061361782613afe565b6136218185613b54565b9350613631818560208601613cf7565b80840191505092915050565b6000815461364a81613d2a565b6136548186613b54565b9450600182166000811461366f5760018114613680576136b3565b60ff198316865281860193506136b3565b61368985613ad3565b60005b838110156136ab5781548189015260018201915060208101905061368c565b838801955050505b50505092915050565b60006136c9602683613b43565b91506136d482613f17565b604082019050919050565b60006136ec601483613b43565b91506136f782613f66565b602082019050919050565b600061370f601383613b43565b915061371a82613f8f565b602082019050919050565b6000613732602083613b43565b915061373d82613fb8565b602082019050919050565b6000613755601783613b43565b915061376082613fe1565b602082019050919050565b6000613778602f83613b43565b91506137838261400a565b604082019050919050565b600061379b600083613b38565b91506137a682614059565b600082019050919050565b60006137be601483613b43565b91506137c98261405c565b602082019050919050565b60006137e1601383613b43565b91506137ec82614085565b602082019050919050565b61380081613cde565b82525050565b61380f81613cde565b82525050565b6000613821828661360c565b915061382d828561360c565b9150613839828461363d565b9150819050949350505050565b60006138518261378e565b9150819050919050565b6000602082019050613870600083018461351e565b92915050565b600060808201905061388b600083018761351e565b613898602083018661351e565b6138a56040830185613806565b81810360608301526138b7818461359a565b905095945050505050565b600060208201905081810360008301526138dc818461352d565b905092915050565b60006020820190506138f9600083018461358b565b92915050565b6000602082019050818103600083015261391981846135d3565b905092915050565b6000602082019050818103600083015261393a816136bc565b9050919050565b6000602082019050818103600083015261395a816136df565b9050919050565b6000602082019050818103600083015261397a81613702565b9050919050565b6000602082019050818103600083015261399a81613725565b9050919050565b600060208201905081810360008301526139ba81613748565b9050919050565b600060208201905081810360008301526139da8161376b565b9050919050565b600060208201905081810360008301526139fa816137b1565b9050919050565b60006020820190508181036000830152613a1a816137d4565b9050919050565b6000602082019050613a366000830184613806565b92915050565b6000613a46613a57565b9050613a528282613d5c565b919050565b6000604051905090565b600067ffffffffffffffff821115613a7c57613a7b613ec3565b5b613a8582613f06565b9050602081019050919050565b600067ffffffffffffffff821115613aad57613aac613ec3565b5b613ab682613f06565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b6a82613cde565b9150613b7583613cde565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613baa57613ba9613e07565b5b828201905092915050565b6000613bc082613cde565b9150613bcb83613cde565b925082613bdb57613bda613e36565b5b828204905092915050565b6000613bf182613cde565b9150613bfc83613cde565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c3557613c34613e07565b5b828202905092915050565b6000613c4b82613cde565b9150613c5683613cde565b925082821015613c6957613c68613e07565b5b828203905092915050565b6000613c7f82613cbe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d15578082015181840152602081019050613cfa565b83811115613d24576000848401525b50505050565b60006002820490506001821680613d4257607f821691505b60208210811415613d5657613d55613e65565b5b50919050565b613d6582613f06565b810181811067ffffffffffffffff82111715613d8457613d83613ec3565b5b80604052505050565b6000613d9882613cde565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dcb57613dca613e07565b5b600182019050919050565b6000613de182613cde565b9150613dec83613cde565b925082613dfc57613dfb613e36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4d6178206f6620352066726565204e4654277300000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6140b781613c74565b81146140c257600080fd5b50565b6140ce81613c86565b81146140d957600080fd5b50565b6140e581613c92565b81146140f057600080fd5b50565b6140fc81613cde565b811461410757600080fd5b5056fea2646970667358221220afa50118549317bc0bf78a0ca1acd3b7a30caa90b6b73977bc32577ebe22837a64736f6c63430008070033697066733a2f2f516d527a684b775331705443567932356b6434785a4e55336a596a585a7033394c424a55384872647a4869456f362f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102305760003560e01c806362b99ad41161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb011461081a578063e0a8085314610845578063e985e9c51461086e578063efbd73f4146108ab578063f2fde38b146108d457610230565b8063a22cb46514610737578063a45ba8e714610760578063b071401b1461078b578063b88d4fde146107b4578063c87b56dd146107dd57610230565b80637f953a22116100f25780637f953a22146106715780638da5cb5b1461069a57806394354fd0146106c557806395d89b41146106f0578063a0712d681461071b57610230565b806362b99ad41461058c5780636352211e146105b757806370a08231146105f4578063715018a6146106315780637ec4a6591461064857610230565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104b95780634fdd43cb146104e2578063518302271461050b5780635503a0e8146105365780635c975abb1461056157610230565b806323b872dd146103e85780633a467e3d146104115780633ccfd60b1461043c57806342842e0e14610453578063438b63001461047c57610230565b806313faede61161020357806313faede61461030357806316ba10e01461032e57806316c38b3c1461035757806318160ddd1461038057806318cae269146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906133f6565b6108fd565b60405161026991906138e4565b60405180910390f35b34801561027e57600080fd5b506102876109df565b60405161029491906138ff565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613499565b610a71565b6040516102d1919061385b565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613389565b610aed565b005b34801561030f57600080fd5b50610318610bf8565b6040516103259190613a21565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613450565b610bfe565b005b34801561036357600080fd5b5061037e600480360381019061037991906133c9565b610c94565b005b34801561038c57600080fd5b50610395610d2d565b6040516103a29190613a21565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613206565b610d44565b6040516103df9190613a21565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613273565b610d5c565b005b34801561041d57600080fd5b50610426610d6c565b6040516104339190613a21565b60405180910390f35b34801561044857600080fd5b50610451610d72565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613273565b610e6e565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613206565b610e8e565b6040516104b091906138c2565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613499565b610f99565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613450565b61101f565b005b34801561051757600080fd5b506105206110b5565b60405161052d91906138e4565b60405180910390f35b34801561054257600080fd5b5061054b6110c8565b60405161055891906138ff565b60405180910390f35b34801561056d57600080fd5b50610576611156565b60405161058391906138e4565b60405180910390f35b34801561059857600080fd5b506105a1611169565b6040516105ae91906138ff565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613499565b6111f7565b6040516105eb919061385b565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613206565b61120d565b6040516106289190613a21565b60405180910390f35b34801561063d57600080fd5b506106466112dd565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613450565b611365565b005b34801561067d57600080fd5b5061069860048036038101906106939190613499565b6113fb565b005b3480156106a657600080fd5b506106af611481565b6040516106bc919061385b565b60405180910390f35b3480156106d157600080fd5b506106da6114ab565b6040516106e79190613a21565b60405180910390f35b3480156106fc57600080fd5b506107056114b1565b60405161071291906138ff565b60405180910390f35b61073560048036038101906107309190613499565b611543565b005b34801561074357600080fd5b5061075e60048036038101906107599190613349565b611707565b005b34801561076c57600080fd5b5061077561187f565b60405161078291906138ff565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613499565b61190d565b005b3480156107c057600080fd5b506107db60048036038101906107d691906132c6565b611993565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613499565b611a0f565b60405161081191906138ff565b60405180910390f35b34801561082657600080fd5b5061082f611b68565b60405161083c9190613a21565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906133c9565b611b6e565b005b34801561087a57600080fd5b5061089560048036038101906108909190613233565b611c07565b6040516108a291906138e4565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906134c6565b611c9b565b005b3480156108e057600080fd5b506108fb60048036038101906108f69190613206565b611dd1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ec9565b5b9050919050565b6060600280546109ee90613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90613d2a565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7c82611f33565b610ab2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af8826111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b60576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7f611f81565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bb15750610baf81610baa611f81565b611c07565b155b15610be8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf3838383611f89565b505050565b600d5481565b610c06611f81565b73ffffffffffffffffffffffffffffffffffffffff16610c24611481565b73ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190613981565b60405180910390fd5b80600b9080519060200190610c90929190612fd7565b5050565b610c9c611f81565b73ffffffffffffffffffffffffffffffffffffffff16610cba611481565b73ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790613981565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610d3761203b565b6001546000540303905090565b60116020528060005260406000206000915090505481565b610d67838383612040565b505050565b60105481565b610d7a611f81565b73ffffffffffffffffffffffffffffffffffffffff16610d98611481565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590613981565b60405180910390fd5b6000610df8611481565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1b90613846565b60006040518083038185875af1925050503d8060008114610e58576040519150601f19603f3d011682016040523d82523d6000602084013e610e5d565b606091505b5050905080610e6b57600080fd5b50565b610e8983838360405180602001604052806000815250611993565b505050565b60606000610e9b8361120d565b905060008167ffffffffffffffff811115610eb957610eb8613ec3565b5b604051908082528060200260200182016040528015610ee75781602001602082028036833780820191505090505b50905060006001905060005b8381108015610f045750600e548211155b15610f8d576000610f14836111f7565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f795782848381518110610f5e57610f5d613e94565b5b6020026020010181815250508180610f7590613d8d565b9250505b8280610f8490613d8d565b93505050610ef3565b82945050505050919050565b610fa1611f81565b73ffffffffffffffffffffffffffffffffffffffff16610fbf611481565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613981565b60405180910390fd5b80600d8190555050565b611027611f81565b73ffffffffffffffffffffffffffffffffffffffff16611045611481565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613981565b60405180910390fd5b80600c90805190602001906110b1929190612fd7565b5050565b601260019054906101000a900460ff1681565b600b80546110d590613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461110190613d2a565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a805461117690613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546111a290613d2a565b80156111ef5780601f106111c4576101008083540402835291602001916111ef565b820191906000526020600020905b8154815290600101906020018083116111d257829003601f168201915b505050505081565b6000611202826124f6565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611275576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112e5611f81565b73ffffffffffffffffffffffffffffffffffffffff16611303611481565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613981565b60405180910390fd5b6113636000612785565b565b61136d611f81565b73ffffffffffffffffffffffffffffffffffffffff1661138b611481565b73ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613981565b60405180910390fd5b80600a90805190602001906113f7929190612fd7565b5050565b611403611f81565b73ffffffffffffffffffffffffffffffffffffffff16611421611481565b73ffffffffffffffffffffffffffffffffffffffff1614611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90613981565b60405180910390fd5b8060108190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600380546114c090613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ec90613d2a565b80156115395780601f1061150e57610100808354040283529160200191611539565b820191906000526020600020905b81548152906001019060200180831161151c57829003601f168201915b5050505050905090565b806000811180156115565750600f548111155b611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c90613941565b60405180910390fd5b600e54816115a3600961284b565b6115ad9190613b5f565b11156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906139e1565b60405180910390fd5b601260009054906101000a900460ff161561163e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611635906139a1565b60405180910390fd5b60105461164b600961284b565b11611695576005821115611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90613961565b60405180910390fd5b5b6010546116a2600961284b565b11156116f95781600d546116b69190613be6565b3410156116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90613a01565b60405180910390fd5b5b6117033383612859565b5050565b61170f611f81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611774576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611781611f81565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661182e611f81565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187391906138e4565b60405180910390a35050565b600c805461188c90613d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546118b890613d2a565b80156119055780601f106118da57610100808354040283529160200191611905565b820191906000526020600020905b8154815290600101906020018083116118e857829003601f168201915b505050505081565b611915611f81565b73ffffffffffffffffffffffffffffffffffffffff16611933611481565b73ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613981565b60405180910390fd5b80600f8190555050565b61199e848484612040565b6119bd8373ffffffffffffffffffffffffffffffffffffffff16612867565b80156119d257506119d08484848461287a565b155b15611a09576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a1a82611f33565b611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906139c1565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611b0757600c8054611a8290613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aae90613d2a565b8015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b50505050509050611b63565b6000611b116129da565b90506000815111611b315760405180602001604052806000815250611b5f565b80611b3b84612a6c565b600b604051602001611b4f93929190613815565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b76611f81565b73ffffffffffffffffffffffffffffffffffffffff16611b94611481565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190613981565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611cae5750600f548111155b611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613941565b60405180910390fd5b600e5481611cfb600961284b565b611d059190613b5f565b1115611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d906139e1565b60405180910390fd5b611d4e611f81565b73ffffffffffffffffffffffffffffffffffffffff16611d6c611481565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db990613981565b60405180910390fd5b611dcc8284612859565b505050565b611dd9611f81565b73ffffffffffffffffffffffffffffffffffffffff16611df7611481565b73ffffffffffffffffffffffffffffffffffffffff1614611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490613981565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb490613921565b60405180910390fd5b611ec681612785565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f3e61203b565b11158015611f4d575060005482105b8015611f7a575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061204b826124f6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120b6576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166120d7611f81565b73ffffffffffffffffffffffffffffffffffffffff161480612106575061210585612100611f81565b611c07565b5b8061214b5750612114611f81565b73ffffffffffffffffffffffffffffffffffffffff1661213384610a71565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612184576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121eb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121f88585856001612bcd565b61220460008487611f89565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561248457600054821461248357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124ef8585856001612bd3565b5050505050565b6124fe61305d565b60008290508061250c61203b565b1115801561251b575060005481105b1561274e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161274c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612630578092505050612780565b5b60011561274b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612746578092505050612780565b612631565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6128638282612bd9565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a0611f81565b8786866040518563ffffffff1660e01b81526004016128c29493929190613876565b602060405180830381600087803b1580156128dc57600080fd5b505af192505050801561290d57506040513d601f19601f8201168201806040525081019061290a9190613423565b60015b612987573d806000811461293d576040519150601f19603f3d011682016040523d82523d6000602084013e612942565b606091505b5060008151141561297f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546129e990613d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054612a1590613d2a565b8015612a625780601f10612a3757610100808354040283529160200191612a62565b820191906000526020600020905b815481529060010190602001808311612a4557829003601f168201915b5050505050905090565b60606000821415612ab4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bc8565b600082905060005b60008214612ae6578080612acf90613d8d565b915050600a82612adf9190613bb5565b9150612abc565b60008167ffffffffffffffff811115612b0257612b01613ec3565b5b6040519080825280601f01601f191660200182016040528015612b345781602001600182028036833780820191505090505b5090505b60008514612bc157600182612b4d9190613c40565b9150600a85612b5c9190613dd6565b6030612b689190613b5f565b60f81b818381518110612b7e57612b7d613e94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bba9190613bb5565b9450612b38565b8093505050505b919050565b50505050565b50505050565b612bf3828260405180602001604052806000815250612bf7565b5050565b612c048383836001612c09565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c76576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612cb1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbe6000868387612bcd565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612e885750612e878773ffffffffffffffffffffffffffffffffffffffff16612867565b5b15612f4e575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612efd600088848060010195508861287a565b612f33576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612e8e578260005414612f4957600080fd5b612fba565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612f4f575b816000819055505050612fd06000868387612bd3565b5050505050565b828054612fe390613d2a565b90600052602060002090601f016020900481019282613005576000855561304c565b82601f1061301e57805160ff191683800117855561304c565b8280016001018555821561304c579182015b8281111561304b578251825591602001919060010190613030565b5b50905061305991906130a0565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156130b95760008160009055506001016130a1565b5090565b60006130d06130cb84613a61565b613a3c565b9050828152602081018484840111156130ec576130eb613ef7565b5b6130f7848285613ce8565b509392505050565b600061311261310d84613a92565b613a3c565b90508281526020810184848401111561312e5761312d613ef7565b5b613139848285613ce8565b509392505050565b600081359050613150816140ae565b92915050565b600081359050613165816140c5565b92915050565b60008135905061317a816140dc565b92915050565b60008151905061318f816140dc565b92915050565b600082601f8301126131aa576131a9613ef2565b5b81356131ba8482602086016130bd565b91505092915050565b600082601f8301126131d8576131d7613ef2565b5b81356131e88482602086016130ff565b91505092915050565b600081359050613200816140f3565b92915050565b60006020828403121561321c5761321b613f01565b5b600061322a84828501613141565b91505092915050565b6000806040838503121561324a57613249613f01565b5b600061325885828601613141565b925050602061326985828601613141565b9150509250929050565b60008060006060848603121561328c5761328b613f01565b5b600061329a86828701613141565b93505060206132ab86828701613141565b92505060406132bc868287016131f1565b9150509250925092565b600080600080608085870312156132e0576132df613f01565b5b60006132ee87828801613141565b94505060206132ff87828801613141565b9350506040613310878288016131f1565b925050606085013567ffffffffffffffff81111561333157613330613efc565b5b61333d87828801613195565b91505092959194509250565b600080604083850312156133605761335f613f01565b5b600061336e85828601613141565b925050602061337f85828601613156565b9150509250929050565b600080604083850312156133a05761339f613f01565b5b60006133ae85828601613141565b92505060206133bf858286016131f1565b9150509250929050565b6000602082840312156133df576133de613f01565b5b60006133ed84828501613156565b91505092915050565b60006020828403121561340c5761340b613f01565b5b600061341a8482850161316b565b91505092915050565b60006020828403121561343957613438613f01565b5b600061344784828501613180565b91505092915050565b60006020828403121561346657613465613f01565b5b600082013567ffffffffffffffff81111561348457613483613efc565b5b613490848285016131c3565b91505092915050565b6000602082840312156134af576134ae613f01565b5b60006134bd848285016131f1565b91505092915050565b600080604083850312156134dd576134dc613f01565b5b60006134eb858286016131f1565b92505060206134fc85828601613141565b9150509250929050565b600061351283836137f7565b60208301905092915050565b61352781613c74565b82525050565b600061353882613ae8565b6135428185613b16565b935061354d83613ac3565b8060005b8381101561357e5781516135658882613506565b975061357083613b09565b925050600181019050613551565b5085935050505092915050565b61359481613c86565b82525050565b60006135a582613af3565b6135af8185613b27565b93506135bf818560208601613cf7565b6135c881613f06565b840191505092915050565b60006135de82613afe565b6135e88185613b43565b93506135f8818560208601613cf7565b61360181613f06565b840191505092915050565b600061361782613afe565b6136218185613b54565b9350613631818560208601613cf7565b80840191505092915050565b6000815461364a81613d2a565b6136548186613b54565b9450600182166000811461366f5760018114613680576136b3565b60ff198316865281860193506136b3565b61368985613ad3565b60005b838110156136ab5781548189015260018201915060208101905061368c565b838801955050505b50505092915050565b60006136c9602683613b43565b91506136d482613f17565b604082019050919050565b60006136ec601483613b43565b91506136f782613f66565b602082019050919050565b600061370f601383613b43565b915061371a82613f8f565b602082019050919050565b6000613732602083613b43565b915061373d82613fb8565b602082019050919050565b6000613755601783613b43565b915061376082613fe1565b602082019050919050565b6000613778602f83613b43565b91506137838261400a565b604082019050919050565b600061379b600083613b38565b91506137a682614059565b600082019050919050565b60006137be601483613b43565b91506137c98261405c565b602082019050919050565b60006137e1601383613b43565b91506137ec82614085565b602082019050919050565b61380081613cde565b82525050565b61380f81613cde565b82525050565b6000613821828661360c565b915061382d828561360c565b9150613839828461363d565b9150819050949350505050565b60006138518261378e565b9150819050919050565b6000602082019050613870600083018461351e565b92915050565b600060808201905061388b600083018761351e565b613898602083018661351e565b6138a56040830185613806565b81810360608301526138b7818461359a565b905095945050505050565b600060208201905081810360008301526138dc818461352d565b905092915050565b60006020820190506138f9600083018461358b565b92915050565b6000602082019050818103600083015261391981846135d3565b905092915050565b6000602082019050818103600083015261393a816136bc565b9050919050565b6000602082019050818103600083015261395a816136df565b9050919050565b6000602082019050818103600083015261397a81613702565b9050919050565b6000602082019050818103600083015261399a81613725565b9050919050565b600060208201905081810360008301526139ba81613748565b9050919050565b600060208201905081810360008301526139da8161376b565b9050919050565b600060208201905081810360008301526139fa816137b1565b9050919050565b60006020820190508181036000830152613a1a816137d4565b9050919050565b6000602082019050613a366000830184613806565b92915050565b6000613a46613a57565b9050613a528282613d5c565b919050565b6000604051905090565b600067ffffffffffffffff821115613a7c57613a7b613ec3565b5b613a8582613f06565b9050602081019050919050565b600067ffffffffffffffff821115613aad57613aac613ec3565b5b613ab682613f06565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b6a82613cde565b9150613b7583613cde565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613baa57613ba9613e07565b5b828201905092915050565b6000613bc082613cde565b9150613bcb83613cde565b925082613bdb57613bda613e36565b5b828204905092915050565b6000613bf182613cde565b9150613bfc83613cde565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c3557613c34613e07565b5b828202905092915050565b6000613c4b82613cde565b9150613c5683613cde565b925082821015613c6957613c68613e07565b5b828203905092915050565b6000613c7f82613cbe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d15578082015181840152602081019050613cfa565b83811115613d24576000848401525b50505050565b60006002820490506001821680613d4257607f821691505b60208210811415613d5657613d55613e65565b5b50919050565b613d6582613f06565b810181811067ffffffffffffffff82111715613d8457613d83613ec3565b5b80604052505050565b6000613d9882613cde565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dcb57613dca613e07565b5b600182019050919050565b6000613de182613cde565b9150613dec83613cde565b925082613dfc57613dfb613e36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4d6178206f6620352066726565204e4654277300000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6140b781613c74565b81146140c257600080fd5b50565b6140ce81613c86565b81146140d957600080fd5b50565b6140e581613c92565b81146140f057600080fd5b50565b6140fc81613cde565b811461410757600080fd5b5056fea2646970667358221220afa50118549317bc0bf78a0ca1acd3b7a30caa90b6b73977bc32577ebe22837a64736f6c63430008070033
Deployed Bytecode Sourcemap
45944:4052:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28160:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31273:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32776:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32339:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46209:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49431:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49537:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27409:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46365:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33641:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46326:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49620:137;;;;;;;;;;;;;:::i;:::-;;33882:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47621:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48849:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49065:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46458:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46131:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46427:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46098:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31081:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28529:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6228:103;;;;;;;;;;;;;:::i;:::-;;49203:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49309:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5577:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46283:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31442:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47004:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33052:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46169:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48929:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34138:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48262:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46247:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48762:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33410:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47460:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28160:305;28262:4;28314:25;28299:40;;;:11;:40;;;;:105;;;;28371:33;28356:48;;;:11;:48;;;;28299:105;:158;;;;28421:36;28445:11;28421:23;:36::i;:::-;28299:158;28279:178;;28160:305;;;:::o;31273:100::-;31327:13;31360:5;31353:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:100;:::o;32776:204::-;32844:7;32869:16;32877:7;32869;:16::i;:::-;32864:64;;32894:34;;;;;;;;;;;;;;32864:64;32948:15;:24;32964:7;32948:24;;;;;;;;;;;;;;;;;;;;;32941:31;;32776:204;;;:::o;32339:371::-;32412:13;32428:24;32444:7;32428:15;:24::i;:::-;32412:40;;32473:5;32467:11;;:2;:11;;;32463:48;;;32487:24;;;;;;;;;;;;;;32463:48;32544:5;32528:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;32554:37;32571:5;32578:12;:10;:12::i;:::-;32554:16;:37::i;:::-;32553:38;32528:63;32524:138;;;32615:35;;;;;;;;;;;;;;32524:138;32674:28;32683:2;32687:7;32696:5;32674:8;:28::i;:::-;32401:309;32339:371;;:::o;46209:33::-;;;;:::o;49431:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49515:10:::1;49503:9;:22;;;;;;;;;;;;:::i;:::-;;49431:100:::0;:::o;49537:77::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49602:6:::1;49593;;:15;;;;;;;;;;;;;;;;;;49537:77:::0;:::o;27409:303::-;27453:7;27678:15;:13;:15::i;:::-;27663:12;;27647:13;;:28;:46;27640:53;;27409:303;:::o;46365:55::-;;;;;;;;;;;;;;;;;:::o;33641:170::-;33775:28;33785:4;33791:2;33795:7;33775:9;:28::i;:::-;33641:170;;;:::o;46326:34::-;;;;:::o;49620:137::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49665:7:::1;49686;:5;:7::i;:::-;49678:21;;49707;49678:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49664:69;;;49748:2;49740:11;;;::::0;::::1;;49657:100;49620:137::o:0;33882:185::-;34020:39;34037:4;34043:2;34047:7;34020:39;;;;;;;;;;;;:16;:39::i;:::-;33882:185;;;:::o;47621:635::-;47696:16;47724:23;47750:17;47760:6;47750:9;:17::i;:::-;47724:43;;47774:30;47821:15;47807:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47774:63;;47844:22;47869:1;47844:26;;47877:23;47913:309;47938:15;47920;:33;:64;;;;;47975:9;;47957:14;:27;;47920:64;47913:309;;;47995:25;48023:23;48031:14;48023:7;:23::i;:::-;47995:51;;48082:6;48061:27;;:17;:27;;;48057:131;;;48134:14;48101:13;48115:15;48101:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;48161:17;;;;;:::i;:::-;;;;48057:131;48198:16;;;;;:::i;:::-;;;;47986:236;47913:309;;;48237:13;48230:20;;;;;;47621:635;;;:::o;48849:74::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48912:5:::1;48905:4;:12;;;;48849:74:::0;:::o;49065:132::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49173:18:::1;49153:17;:38;;;;;;;;;;;;:::i;:::-;;49065:132:::0;:::o;46458:28::-;;;;;;;;;;;;;:::o;46131:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46427:26::-;;;;;;;;;;;;;:::o;46098:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31081:125::-;31145:7;31172:21;31185:7;31172:12;:21::i;:::-;:26;;;31165:33;;31081:125;;;:::o;28529:206::-;28593:7;28634:1;28617:19;;:5;:19;;;28613:60;;;28645:28;;;;;;;;;;;;;;28613:60;28699:12;:19;28712:5;28699:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28691:36;;28684:43;;28529:206;;;:::o;6228:103::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;49203:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49287:10:::1;49275:9;:22;;;;;;;;;;;;:::i;:::-;;49203:100:::0;:::o;49309:116::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49404:15:::1;49387:14;:32;;;;49309:116:::0;:::o;5577:87::-;5623:7;5650:6;;;;;;;;;;;5643:13;;5577:87;:::o;46283:38::-;;;;:::o;31442:104::-;31498:13;31531:7;31524:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31442:104;:::o;47004:448::-;47069:11;46733:1;46719:11;:15;:52;;;;;46753:18;;46738:11;:33;;46719:52;46711:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46849:9;;46834:11;46815:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;46807:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47098:6:::1;;;;;;;;;;;47097:7;47089:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47164:14;;47144:16;:6;:14;:16::i;:::-;:34;47141:130;;47232:1;47217:11;:16;;47209:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47141:130;47299:14;;47280:16;:6;:14;:16::i;:::-;:33;47277:127;;;47357:11;47350:4;;:18;;;;:::i;:::-;47337:9;:31;;47329:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47277:127;47412:34;47422:10;47434:11;47412:9;:34::i;:::-;47004:448:::0;;:::o;33052:287::-;33163:12;:10;:12::i;:::-;33151:24;;:8;:24;;;33147:54;;;33184:17;;;;;;;;;;;;;;33147:54;33259:8;33214:18;:32;33233:12;:10;:12::i;:::-;33214:32;;;;;;;;;;;;;;;:42;33247:8;33214:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33312:8;33283:48;;33298:12;:10;:12::i;:::-;33283:48;;;33322:8;33283:48;;;;;;:::i;:::-;;;;;;;;33052:287;;:::o;46169:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48929:130::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49034:19:::1;49013:18;:40;;;;48929:130:::0;:::o;34138:369::-;34305:28;34315:4;34321:2;34325:7;34305:9;:28::i;:::-;34348:15;:2;:13;;;:15::i;:::-;:76;;;;;34368:56;34399:4;34405:2;34409:7;34418:5;34368:30;:56::i;:::-;34367:57;34348:76;34344:156;;;34448:40;;;;;;;;;;;;;;34344:156;34138:369;;;;:::o;48262:494::-;48361:13;48402:17;48410:8;48402:7;:17::i;:::-;48386:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;48509:5;48497:17;;:8;;;;;;;;;;;:17;;;48493:64;;;48532:17;48525:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48493:64;48565:28;48596:10;:8;:10::i;:::-;48565:41;;48651:1;48626:14;48620:28;:32;:130;;;;;;;;;;;;;;;;;48688:14;48704:19;:8;:17;:19::i;:::-;48725:9;48671:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48620:130;48613:137;;;48262:494;;;;:::o;46247:31::-;;;;:::o;48762:81::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48831:6:::1;48820:8;;:17;;;;;;;;;;;;;;;;;;48762:81:::0;:::o;33410:164::-;33507:4;33531:18;:25;33550:5;33531:25;;;;;;;;;;;;;;;:35;33557:8;33531:35;;;;;;;;;;;;;;;;;;;;;;;;;33524:42;;33410:164;;;;:::o;47460:155::-;47546:11;46733:1;46719:11;:15;:52;;;;;46753:18;;46738:11;:33;;46719:52;46711:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46849:9;;46834:11;46815:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;46807:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5808:12:::1;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47576:33:::2;47586:9;47597:11;47576:9;:33::i;:::-;47460:155:::0;;;:::o;6486:201::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1:::1;6575:22;;:8;:22;;;;6567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;18009:157::-;18094:4;18133:25;18118:40;;;:11;:40;;;;18111:47;;18009:157;;;:::o;34762:174::-;34819:4;34862:7;34843:15;:13;:15::i;:::-;:26;;:53;;;;;34883:13;;34873:7;:23;34843:53;:85;;;;;34901:11;:20;34913:7;34901:20;;;;;;;;;;;:27;;;;;;;;;;;;34900:28;34843:85;34836:92;;34762:174;;;:::o;4301:98::-;4354:7;4381:10;4374:17;;4301:98;:::o;42919:196::-;43061:2;43034:15;:24;43050:7;43034:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43099:7;43095:2;43079:28;;43088:5;43079:28;;;;;;;;;;;;42919:196;;;:::o;27183:92::-;27239:7;27183:92;:::o;37862:2130::-;37977:35;38015:21;38028:7;38015:12;:21::i;:::-;37977:59;;38075:4;38053:26;;:13;:18;;;:26;;;38049:67;;38088:28;;;;;;;;;;;;;;38049:67;38129:22;38171:4;38155:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;38192:36;38209:4;38215:12;:10;:12::i;:::-;38192:16;:36::i;:::-;38155:73;:126;;;;38269:12;:10;:12::i;:::-;38245:36;;:20;38257:7;38245:11;:20::i;:::-;:36;;;38155:126;38129:153;;38300:17;38295:66;;38326:35;;;;;;;;;;;;;;38295:66;38390:1;38376:16;;:2;:16;;;38372:52;;;38401:23;;;;;;;;;;;;;;38372:52;38437:43;38459:4;38465:2;38469:7;38478:1;38437:21;:43::i;:::-;38545:35;38562:1;38566:7;38575:4;38545:8;:35::i;:::-;38906:1;38876:12;:18;38889:4;38876:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38950:1;38922:12;:16;38935:2;38922:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38968:31;39002:11;:20;39014:7;39002:20;;;;;;;;;;;38968:54;;39053:2;39037:8;:13;;;:18;;;;;;;;;;;;;;;;;;39103:15;39070:8;:23;;;:49;;;;;;;;;;;;;;;;;;39371:19;39403:1;39393:7;:11;39371:33;;39419:31;39453:11;:24;39465:11;39453:24;;;;;;;;;;;39419:58;;39521:1;39496:27;;:8;:13;;;;;;;;;;;;:27;;;39492:384;;;39706:13;;39691:11;:28;39687:174;;39760:4;39744:8;:13;;;:20;;;;;;;;;;;;;;;;;;39813:13;:28;;;39787:8;:23;;;:54;;;;;;;;;;;;;;;;;;39687:174;39492:384;38851:1036;;;39923:7;39919:2;39904:27;;39913:4;39904:27;;;;;;;;;;;;39942:42;39963:4;39969:2;39973:7;39982:1;39942:20;:42::i;:::-;37966:2026;;37862:2130;;;:::o;29910:1109::-;29972:21;;:::i;:::-;30006:12;30021:7;30006:22;;30089:4;30070:15;:13;:15::i;:::-;:23;;:47;;;;;30104:13;;30097:4;:20;30070:47;30066:886;;;30138:31;30172:11;:17;30184:4;30172:17;;;;;;;;;;;30138:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30213:9;:16;;;30208:729;;30284:1;30258:28;;:9;:14;;;:28;;;30254:101;;30322:9;30315:16;;;;;;30254:101;30657:261;30664:4;30657:261;;;30697:6;;;;;;;;30742:11;:17;30754:4;30742:17;;;;;;;;;;;30730:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30816:1;30790:28;;:9;:14;;;:28;;;30786:109;;30858:9;30851:16;;;;;;30786:109;30657:261;;;30208:729;30119:833;30066:886;30980:31;;;;;;;;;;;;;;29910:1109;;;;:::o;6847:191::-;6921:16;6940:6;;;;;;;;;;;6921:25;;6966:8;6957:6;;:17;;;;;;;;;;;;;;;;;;7021:8;6990:40;;7011:8;6990:40;;;;;;;;;;;;6910:128;6847:191;:::o;905:114::-;970:7;997;:14;;;990:21;;905:114;;;:::o;49763:120::-;49838:33;49848:9;49859:11;49838:9;:33::i;:::-;49763:120;;:::o;7865:387::-;7925:4;8133:12;8200:7;8188:20;8180:28;;8243:1;8236:4;:8;8229:15;;;7865:387;;;:::o;43607:667::-;43770:4;43807:2;43791:36;;;43828:12;:10;:12::i;:::-;43842:4;43848:7;43857:5;43791:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43787:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44042:1;44025:6;:13;:18;44021:235;;;44071:40;;;;;;;;;;;;;;44021:235;44214:6;44208:13;44199:6;44195:2;44191:15;44184:38;43787:480;43920:45;;;43910:55;;;:6;:55;;;;43903:62;;;43607:667;;;;;;:::o;49889:104::-;49949:13;49978:9;49971:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49889:104;:::o;1863:723::-;1919:13;2149:1;2140:5;:10;2136:53;;;2167:10;;;;;;;;;;;;;;;;;;;;;2136:53;2199:12;2214:5;2199:20;;2230:14;2255:78;2270:1;2262:4;:9;2255:78;;2288:8;;;;;:::i;:::-;;;;2319:2;2311:10;;;;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:39;;2393:154;2409:1;2400:5;:10;2393:154;;2437:1;2427:11;;;;;:::i;:::-;;;2504:2;2496:5;:10;;;;:::i;:::-;2483:2;:24;;;;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2533:2;2524:11;;;;;:::i;:::-;;;2393:154;;;2571:6;2557:21;;;;;1863:723;;;;:::o;44922:159::-;;;;;:::o;45740:158::-;;;;;:::o;34944:104::-;35013:27;35023:2;35027:8;35013:27;;;;;;;;;;;;:9;:27::i;:::-;34944:104;;:::o;35411:163::-;35534:32;35540:2;35544:8;35554:5;35561:4;35534:5;:32::i;:::-;35411:163;;;:::o;35833:1775::-;35972:20;35995:13;;35972:36;;36037:1;36023:16;;:2;:16;;;36019:48;;;36048:19;;;;;;;;;;;;;;36019:48;36094:1;36082:8;:13;36078:44;;;36104:18;;;;;;;;;;;;;;36078:44;36135:61;36165:1;36169:2;36173:12;36187:8;36135:21;:61::i;:::-;36508:8;36473:12;:16;36486:2;36473:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36572:8;36532:12;:16;36545:2;36532:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36631:2;36598:11;:25;36610:12;36598:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36698:15;36648:11;:25;36660:12;36648:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36731:20;36754:12;36731:35;;36781:11;36810:8;36795:12;:23;36781:37;;36839:4;:23;;;;;36847:15;:2;:13;;;:15::i;:::-;36839:23;36835:641;;;36883:314;36939:12;36935:2;36914:38;;36931:1;36914:38;;;;;;;;;;;;36980:69;37019:1;37023:2;37027:14;;;;;;37043:5;36980:30;:69::i;:::-;36975:174;;37085:40;;;;;;;;;;;;;;36975:174;37192:3;37176:12;:19;;36883:314;;37278:12;37261:13;;:29;37257:43;;37292:8;;;37257:43;36835:641;;;37341:120;37397:14;;;;;;37393:2;37372:40;;37389:1;37372:40;;;;;;;;;;;;37456:3;37440:12;:19;;37341:120;;36835:641;37506:12;37490:13;:28;;;;36448:1082;;37540:60;37569:1;37573:2;37577:12;37591:8;37540:20;:60::i;:::-;35961:1647;35833:1775;;;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:398::-;13544:3;13565:83;13646:1;13641:3;13565:83;:::i;:::-;13558:90;;13657:93;13746:3;13657:93;:::i;:::-;13775:1;13770:3;13766:11;13759:18;;13385:398;;;:::o;13789:366::-;13931:3;13952:67;14016:2;14011:3;13952:67;:::i;:::-;13945:74;;14028:93;14117:3;14028:93;:::i;:::-;14146:2;14141:3;14137:12;14130:19;;13789:366;;;:::o;14161:::-;14303:3;14324:67;14388:2;14383:3;14324:67;:::i;:::-;14317:74;;14400:93;14489:3;14400:93;:::i;:::-;14518:2;14513:3;14509:12;14502:19;;14161:366;;;:::o;14533:108::-;14610:24;14628:5;14610:24;:::i;:::-;14605:3;14598:37;14533:108;;:::o;14647:118::-;14734:24;14752:5;14734:24;:::i;:::-;14729:3;14722:37;14647:118;;:::o;14771:589::-;14996:3;15018:95;15109:3;15100:6;15018:95;:::i;:::-;15011:102;;15130:95;15221:3;15212:6;15130:95;:::i;:::-;15123:102;;15242:92;15330:3;15321:6;15242:92;:::i;:::-;15235:99;;15351:3;15344:10;;14771:589;;;;;;:::o;15366:379::-;15550:3;15572:147;15715:3;15572:147;:::i;:::-;15565:154;;15736:3;15729:10;;15366:379;;;:::o;15751:222::-;15844:4;15882:2;15871:9;15867:18;15859:26;;15895:71;15963:1;15952:9;15948:17;15939:6;15895:71;:::i;:::-;15751:222;;;;:::o;15979:640::-;16174:4;16212:3;16201:9;16197:19;16189:27;;16226:71;16294:1;16283:9;16279:17;16270:6;16226:71;:::i;:::-;16307:72;16375:2;16364:9;16360:18;16351:6;16307:72;:::i;:::-;16389;16457:2;16446:9;16442:18;16433:6;16389:72;:::i;:::-;16508:9;16502:4;16498:20;16493:2;16482:9;16478:18;16471:48;16536:76;16607:4;16598:6;16536:76;:::i;:::-;16528:84;;15979:640;;;;;;;:::o;16625:373::-;16768:4;16806:2;16795:9;16791:18;16783:26;;16855:9;16849:4;16845:20;16841:1;16830:9;16826:17;16819:47;16883:108;16986:4;16977:6;16883:108;:::i;:::-;16875:116;;16625:373;;;;:::o;17004:210::-;17091:4;17129:2;17118:9;17114:18;17106:26;;17142:65;17204:1;17193:9;17189:17;17180:6;17142:65;:::i;:::-;17004:210;;;;:::o;17220:313::-;17333:4;17371:2;17360:9;17356:18;17348:26;;17420:9;17414:4;17410:20;17406:1;17395:9;17391:17;17384:47;17448:78;17521:4;17512:6;17448:78;:::i;:::-;17440:86;;17220:313;;;;:::o;17539:419::-;17705:4;17743:2;17732:9;17728:18;17720:26;;17792:9;17786:4;17782:20;17778:1;17767:9;17763:17;17756:47;17820:131;17946:4;17820:131;:::i;:::-;17812:139;;17539:419;;;:::o;17964:::-;18130:4;18168:2;18157:9;18153:18;18145:26;;18217:9;18211:4;18207:20;18203:1;18192:9;18188:17;18181:47;18245:131;18371:4;18245:131;:::i;:::-;18237:139;;17964:419;;;:::o;18389:::-;18555:4;18593:2;18582:9;18578:18;18570:26;;18642:9;18636:4;18632:20;18628:1;18617:9;18613:17;18606:47;18670:131;18796:4;18670:131;:::i;:::-;18662:139;;18389:419;;;:::o;18814:::-;18980:4;19018:2;19007:9;19003:18;18995:26;;19067:9;19061:4;19057:20;19053:1;19042:9;19038:17;19031:47;19095:131;19221:4;19095:131;:::i;:::-;19087:139;;18814:419;;;:::o;19239:::-;19405:4;19443:2;19432:9;19428:18;19420:26;;19492:9;19486:4;19482:20;19478:1;19467:9;19463:17;19456:47;19520:131;19646:4;19520:131;:::i;:::-;19512:139;;19239:419;;;:::o;19664:::-;19830:4;19868:2;19857:9;19853:18;19845:26;;19917:9;19911:4;19907:20;19903:1;19892:9;19888:17;19881:47;19945:131;20071:4;19945:131;:::i;:::-;19937:139;;19664:419;;;:::o;20089:::-;20255:4;20293:2;20282:9;20278:18;20270:26;;20342:9;20336:4;20332:20;20328:1;20317:9;20313:17;20306:47;20370:131;20496:4;20370:131;:::i;:::-;20362:139;;20089:419;;;:::o;20514:::-;20680:4;20718:2;20707:9;20703:18;20695:26;;20767:9;20761:4;20757:20;20753:1;20742:9;20738:17;20731:47;20795:131;20921:4;20795:131;:::i;:::-;20787:139;;20514:419;;;:::o;20939:222::-;21032:4;21070:2;21059:9;21055:18;21047:26;;21083:71;21151:1;21140:9;21136:17;21127:6;21083:71;:::i;:::-;20939:222;;;;:::o;21167:129::-;21201:6;21228:20;;:::i;:::-;21218:30;;21257:33;21285:4;21277:6;21257:33;:::i;:::-;21167:129;;;:::o;21302:75::-;21335:6;21368:2;21362:9;21352:19;;21302:75;:::o;21383:307::-;21444:4;21534:18;21526:6;21523:30;21520:56;;;21556:18;;:::i;:::-;21520:56;21594:29;21616:6;21594:29;:::i;:::-;21586:37;;21678:4;21672;21668:15;21660:23;;21383:307;;;:::o;21696:308::-;21758:4;21848:18;21840:6;21837:30;21834:56;;;21870:18;;:::i;:::-;21834:56;21908:29;21930:6;21908:29;:::i;:::-;21900:37;;21992:4;21986;21982:15;21974:23;;21696:308;;;:::o;22010:132::-;22077:4;22100:3;22092:11;;22130:4;22125:3;22121:14;22113:22;;22010:132;;;:::o;22148:141::-;22197:4;22220:3;22212:11;;22243:3;22240:1;22233:14;22277:4;22274:1;22264:18;22256:26;;22148:141;;;:::o;22295:114::-;22362:6;22396:5;22390:12;22380:22;;22295:114;;;:::o;22415:98::-;22466:6;22500:5;22494:12;22484:22;;22415:98;;;:::o;22519:99::-;22571:6;22605:5;22599:12;22589:22;;22519:99;;;:::o;22624:113::-;22694:4;22726;22721:3;22717:14;22709:22;;22624:113;;;:::o;22743:184::-;22842:11;22876:6;22871:3;22864:19;22916:4;22911:3;22907:14;22892:29;;22743:184;;;;:::o;22933:168::-;23016:11;23050:6;23045:3;23038:19;23090:4;23085:3;23081:14;23066:29;;22933:168;;;;:::o;23107:147::-;23208:11;23245:3;23230:18;;23107:147;;;;:::o;23260:169::-;23344:11;23378:6;23373:3;23366:19;23418:4;23413:3;23409:14;23394:29;;23260:169;;;;:::o;23435:148::-;23537:11;23574:3;23559:18;;23435:148;;;;:::o;23589:305::-;23629:3;23648:20;23666:1;23648:20;:::i;:::-;23643:25;;23682:20;23700:1;23682:20;:::i;:::-;23677:25;;23836:1;23768:66;23764:74;23761:1;23758:81;23755:107;;;23842:18;;:::i;:::-;23755:107;23886:1;23883;23879:9;23872:16;;23589:305;;;;:::o;23900:185::-;23940:1;23957:20;23975:1;23957:20;:::i;:::-;23952:25;;23991:20;24009:1;23991:20;:::i;:::-;23986:25;;24030:1;24020:35;;24035:18;;:::i;:::-;24020:35;24077:1;24074;24070:9;24065:14;;23900:185;;;;:::o;24091:348::-;24131:7;24154:20;24172:1;24154:20;:::i;:::-;24149:25;;24188:20;24206:1;24188:20;:::i;:::-;24183:25;;24376:1;24308:66;24304:74;24301:1;24298:81;24293:1;24286:9;24279:17;24275:105;24272:131;;;24383:18;;:::i;:::-;24272:131;24431:1;24428;24424:9;24413:20;;24091:348;;;;:::o;24445:191::-;24485:4;24505:20;24523:1;24505:20;:::i;:::-;24500:25;;24539:20;24557:1;24539:20;:::i;:::-;24534:25;;24578:1;24575;24572:8;24569:34;;;24583:18;;:::i;:::-;24569:34;24628:1;24625;24621:9;24613:17;;24445:191;;;;:::o;24642:96::-;24679:7;24708:24;24726:5;24708:24;:::i;:::-;24697:35;;24642:96;;;:::o;24744:90::-;24778:7;24821:5;24814:13;24807:21;24796:32;;24744:90;;;:::o;24840:149::-;24876:7;24916:66;24909:5;24905:78;24894:89;;24840:149;;;:::o;24995:126::-;25032:7;25072:42;25065:5;25061:54;25050:65;;24995:126;;;:::o;25127:77::-;25164:7;25193:5;25182:16;;25127:77;;;:::o;25210:154::-;25294:6;25289:3;25284;25271:30;25356:1;25347:6;25342:3;25338:16;25331:27;25210:154;;;:::o;25370:307::-;25438:1;25448:113;25462:6;25459:1;25456:13;25448:113;;;25547:1;25542:3;25538:11;25532:18;25528:1;25523:3;25519:11;25512:39;25484:2;25481:1;25477:10;25472:15;;25448:113;;;25579:6;25576:1;25573:13;25570:101;;;25659:1;25650:6;25645:3;25641:16;25634:27;25570:101;25419:258;25370:307;;;:::o;25683:320::-;25727:6;25764:1;25758:4;25754:12;25744:22;;25811:1;25805:4;25801:12;25832:18;25822:81;;25888:4;25880:6;25876:17;25866:27;;25822:81;25950:2;25942:6;25939:14;25919:18;25916:38;25913:84;;;25969:18;;:::i;:::-;25913:84;25734:269;25683:320;;;:::o;26009:281::-;26092:27;26114:4;26092:27;:::i;:::-;26084:6;26080:40;26222:6;26210:10;26207:22;26186:18;26174:10;26171:34;26168:62;26165:88;;;26233:18;;:::i;:::-;26165:88;26273:10;26269:2;26262:22;26052:238;26009:281;;:::o;26296:233::-;26335:3;26358:24;26376:5;26358:24;:::i;:::-;26349:33;;26404:66;26397:5;26394:77;26391:103;;;26474:18;;:::i;:::-;26391:103;26521:1;26514:5;26510:13;26503:20;;26296:233;;;:::o;26535:176::-;26567:1;26584:20;26602:1;26584:20;:::i;:::-;26579:25;;26618:20;26636:1;26618:20;:::i;:::-;26613:25;;26657:1;26647:35;;26662:18;;:::i;:::-;26647:35;26703:1;26700;26696:9;26691:14;;26535:176;;;;:::o;26717:180::-;26765:77;26762:1;26755:88;26862:4;26859:1;26852:15;26886:4;26883:1;26876:15;26903:180;26951:77;26948:1;26941:88;27048:4;27045:1;27038:15;27072:4;27069:1;27062:15;27089:180;27137:77;27134:1;27127:88;27234:4;27231:1;27224:15;27258:4;27255:1;27248:15;27275:180;27323:77;27320:1;27313:88;27420:4;27417:1;27410:15;27444:4;27441:1;27434:15;27461:180;27509:77;27506:1;27499:88;27606:4;27603:1;27596:15;27630:4;27627:1;27620:15;27647:117;27756:1;27753;27746:12;27770:117;27879:1;27876;27869:12;27893:117;28002:1;27999;27992:12;28016:117;28125:1;28122;28115:12;28139:102;28180:6;28231:2;28227:7;28222:2;28215:5;28211:14;28207:28;28197:38;;28139:102;;;:::o;28247:225::-;28387:34;28383:1;28375:6;28371:14;28364:58;28456:8;28451:2;28443:6;28439:15;28432:33;28247:225;:::o;28478:170::-;28618:22;28614:1;28606:6;28602:14;28595:46;28478:170;:::o;28654:169::-;28794:21;28790:1;28782:6;28778:14;28771:45;28654:169;:::o;28829:182::-;28969:34;28965:1;28957:6;28953:14;28946:58;28829:182;:::o;29017:173::-;29157:25;29153:1;29145:6;29141:14;29134:49;29017:173;:::o;29196:234::-;29336:34;29332:1;29324:6;29320:14;29313:58;29405:17;29400:2;29392:6;29388:15;29381:42;29196:234;:::o;29436:114::-;;:::o;29556:170::-;29696:22;29692:1;29684:6;29680:14;29673:46;29556:170;:::o;29732:169::-;29872:21;29868:1;29860:6;29856:14;29849:45;29732:169;:::o;29907:122::-;29980:24;29998:5;29980:24;:::i;:::-;29973:5;29970:35;29960:63;;30019:1;30016;30009:12;29960:63;29907:122;:::o;30035:116::-;30105:21;30120:5;30105:21;:::i;:::-;30098:5;30095:32;30085:60;;30141:1;30138;30131:12;30085:60;30035:116;:::o;30157:120::-;30229:23;30246:5;30229:23;:::i;:::-;30222:5;30219:34;30209:62;;30267:1;30264;30257:12;30209:62;30157:120;:::o;30283:122::-;30356:24;30374:5;30356:24;:::i;:::-;30349:5;30346:35;30336:63;;30395:1;30392;30385:12;30336:63;30283:122;:::o
Swarm Source
ipfs://afa50118549317bc0bf78a0ca1acd3b7a30caa90b6b73977bc32577ebe22837a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.