Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
72 MESHTT1
Holders
54
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MESHTT1Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MESHTT1
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.11; /** * * * "The Mesh" by Takens Theorem * * Terms, conditions: Experimental, use at your own risk. Each token provided * as-is and as-available without any and all warranty. By using this contract * you accept sole responsibility for any and all transactions involving * The Mesh. * * */ /** * @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); } /** * @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; } /** * @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); } /** * @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; } } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. 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; } } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = ""; buffer[1] = ""; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } // adapted from tkeber solution: https://ethereum.stackexchange.com/a/8447 function toAsciiString(address x) internal pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(s); } function char(bytes1 b) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } // adapted from t-nicci solution https://ethereum.stackexchange.com/a/31470 function subString(string memory str, uint startIndex, uint endIndex) internal pure returns (string memory) { bytes memory strBytes = bytes(str); bytes memory result = new bytes(endIndex-startIndex); for(uint i = startIndex; i < endIndex; i++) { result[i-startIndex] = strBytes[i]; } return string(result); } function compareStrings(string memory a, string memory b) internal pure returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); } // nice solution: https://ethereum.stackexchange.com/questions/56319/how-to-convert-bytes32-to-string function toShortString(bytes32 _data) internal pure returns (string memory) { bytes memory _bytesContainer = new bytes(32); uint256 _charCount = 0; // loop through every element in bytes32 for (uint256 _bytesCounter = 0; _bytesCounter < 32; _bytesCounter++) { bytes1 _char = bytes1(bytes32(uint256(_data) * 2 ** (8 * _bytesCounter))); if (_char != 0) { _bytesContainer[_charCount] = _char; _charCount++; } } bytes memory _bytesContainerTrimmed = new bytes(_charCount); for (uint256 _charCounter = 0; _charCounter < _charCount; _charCounter++) { _bytesContainerTrimmed[_charCounter] = _bytesContainer[_charCounter]; } return string(_bytesContainerTrimmed); } } contract externalNft { function balanceOf(address owner) external view returns (uint256 balance) {} } /** * @title "The Mesh" by Takens Theorem contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract MESHTT1 is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint256 private MAX_SUPPLY = 72; function totalSupply() external view returns (uint256) { return MAX_SUPPLY; } string[] private romans = ["n","i","ii","iii","iv","v","vi","vii","viii","ix"]; uint256 public lastTokenMsg = 1; uint256 public lastMsgHeight = block.number; uint256 public curCharity = 0; uint256[] private theDims = [2,36,3,24,4,18,8,8,9,9,12,12,6,6]; string[] private theCols = ["#FF0000","#FF8B00","#E8FF00","#5DFF00","#00FF2E","#00FFB9", "#00B9FF","#002EFF","#5D00FF","#E800FF","#FF008B"]; string private svg_start = "<?xml version='1.0' encoding='UTF-8'?><svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='750' width='750' viewBox='0 0 4000 4000'><rect x='0' y='0' fill='#000000' width='4000' height='4000' />"; /************************************************ NODES = functions, information about individual tokens */ struct Node { uint256 tokenMsg; uint256 desiredCharity; // limited to 0-7 uint256 totMsgs; } function addNode(uint256 tokenId, uint256 charityId) private { Node memory node = Node(tokenId % 10, charityId, 0); nodes[tokenId] = node; } mapping (uint256 => Node) private nodes; // indexed 1, ..., n function viewNode(uint256 tokenId) external view returns (Node memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); return(nodes[tokenId]); } function makePost(uint256 tokenId, uint256 msgContent) external payable { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not owner nor approved"); require(msgContent < 10,"ERROR: message must be from 0 to 9"); require(msg.value >= 1000000000000000 && msg.value <= 50000000000000000, "ERROR: range 0.001 - 0.05 ETH required to post"); nodes[tokenId].tokenMsg = msgContent; nodes[tokenId].totMsgs++; lastTokenMsg = tokenId; lastMsgHeight = block.number; payable(charities[curCharity].addr).transfer(msg.value); // send to charity } /************************************************ CHARITY = posting requires small donation; "The Mesh" votes on which */ struct Charity { address addr; string name; uint256 votes; } function addCharity(address addr, string memory name) private { Charity memory charity = Charity(addr, name, 0); charities.push(charity); } Charity[] private charities; // indexed 0, ..., n - 1 function viewCharity(uint256 i) external view returns (Charity memory) { require(i < charities.length,"ERROR: out of bounds"); return(charities[i]); } function updateCharity() external { uint256 curMax = 0; uint256 curCharityId; for (uint256 i = 0; i < charities.length; i++) { if (charities[i].votes > curMax) { curMax = charities[i].votes; curCharityId = i; } } curCharity = curCharityId; } function voteCharity(uint256 tokenId, uint256 charityId) external { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not owner nor approved"); require(charityId < charities.length,"ERROR: charity ID must be 0 - 7"); charities[nodes[tokenId].desiredCharity].votes--; nodes[tokenId].desiredCharity = charityId; charities[charityId].votes++; } /************************************************ SVG drawing functions (line, element, text) */ function drawLn(uint256 x1,uint256 y1,uint256 x2,uint256 y2,string memory stroke) private pure returns (string memory) { return string(abi.encodePacked( "<line x1='",Strings.toString(x1), "' y1='",Strings.toString(y1), "' x2='",Strings.toString(x2), "' y2='",Strings.toString(y2), "' stroke='",stroke, "' stroke-width='15pt' />") ); } function drawEl(uint256 typ, uint256 x, uint256 y, uint256 sz, string memory stroke, string memory fill) private pure returns (string memory) { string memory output = ''; if (typ==0) { output = string(abi.encodePacked( "<circle cx='",Strings.toString(x), "' cy='",Strings.toString(y), "' r='",Strings.toString(sz), "' " )); } else { string memory sign_x = sz > x ? // control rects at edge string(abi.encodePacked('-',Strings.toString(sz - x))) : string(abi.encodePacked(Strings.toString(x - sz))); string memory sign_y = sz > y ? string(abi.encodePacked('-',Strings.toString(sz - y))) : string(abi.encodePacked(Strings.toString(y - sz))); output = string(abi.encodePacked( "<rect x='",sign_x, "' y='",sign_y, "' width='",Strings.toString(2*sz), "' height='",Strings.toString(2*sz), "' " )); } return(string(abi.encodePacked(output, "fill='",fill,"' stroke='",stroke,"' stroke-width='5pt' />"))); } function drawTxt(string memory txt, uint256 x, uint256 y, string memory stroke, string memory fill) private view returns (string memory) { return string(abi.encodePacked( "<text x='",Strings.toString(x), "' y='",Strings.toString(y), "' font-size='40pt' fill='",fill, c[1],stroke,"'>", txt,"</text>" )); } function xl(uint256 i, uint256 tokenId) private view returns (uint256) { uint256 ix = (lastMsgHeight + vl(1,tokenId)) % theDims.length; return((i-1) % theDims[ix] * 4000/theDims[ix] + 4000/theDims[ix]/2); } function yl(uint256 i, uint256 tokenId) private view returns (uint256) { uint256 ix = (lastMsgHeight + vl(1,tokenId)) % theDims.length; return((i - 1) / theDims[ix] * 4000/(MAX_SUPPLY/theDims[ix]) + 4000/(MAX_SUPPLY/theDims[ix])/2); } /************************************************ functions needed for graph */ function getNeighbors(uint256 tokenId) public view returns (uint256, uint256, uint256[] memory, uint256[] memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); (uint256 totToks, uint256 totProjs, uint256[] memory refOwn) = getNftBalance(ownerOf(tokenId)); uint256[] memory neighbors = new uint256[](_tokenIds.current()); uint256 ix = 0; for (uint i = 1; i <= _tokenIds.current(); i++) { (,, uint256[] memory compOwn) = getNftBalance(ownerOf(i)); for (uint j = 0; j < compOwn.length; j++) { if (compOwn[j]>0 && refOwn[j]>0) { neighbors[ix] = i; ix++; break; } } } return(totToks, totProjs, refOwn, neighbors); } function getNftBalance(address addr) public view returns (uint256, uint256, uint256[] memory) { uint256[] memory projCounts = new uint256[](5); // mainnet projCounts[0] = externalNft(0x06012c8cf97BEaD5deAe237070F9587f8E7A266d).balanceOf(addr); // CryptoKitties projCounts[1] = externalNft(0xFBeef911Dc5821886e1dda71586d90eD28174B7d).balanceOf(addr); // KnownOrigin projCounts[2] = externalNft(0x79986aF15539de2db9A5086382daEdA917A9CF0C).balanceOf(addr); // Cryptovoxels projCounts[3] = externalNft(0xF3E778F839934fC819cFA1040AabaCeCBA01e049).balanceOf(addr); // Avastars projCounts[4] = externalNft(0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270).balanceOf(addr); // Art Blocks uint256 totToks = 0; uint256 totProjs = 0; for (uint256 i = 0; i < projCounts.length; i++){ totToks = totToks + projCounts[i]; if (projCounts[i] > 0) { totProjs = totProjs + 1; } } return(totToks, totProjs, projCounts); } string ncp = 'WAIT'; string[] private c = ['', '']; function setStr(string memory val) external onlyOwner { require(bytes(ncp).length > 0, 'ERROR: Already configured'); if (bytes(c[0]).length == 0) { c[0] = val; } else if (bytes(c[1]).length == 0) { c[1] = val; } else if (bytes(ncp).length > 0) { ncp = val; } } /************************************************ general functions for The Mesh */ function renderDescription(uint256 tokenId) private view returns (string memory) { return string(abi.encodePacked("", "The crypto panopticon reveals.\\n\\n", "Last refreshed at block ", Strings.toString(block.number), "\\n\\n", c[0], Strings.toAsciiString(ownerOf(tokenId)))); } function mintNFT_n(uint256 n) public onlyOwner { require(_tokenIds.current() < MAX_SUPPLY,'ERROR: minting complete'); for (uint i = 0; i < n; i++) { if (_tokenIds.current() == MAX_SUPPLY) { // avoid accidental overring break; } _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); uint assignCharity = (block.number + i) % charities.length; charities[assignCharity].votes++; addNode(newItemId, assignCharity); _mint(msg.sender, newItemId); } } // raw svg function reveal(uint256 tokenId) public view returns (string memory) { require(bytes(ncp).length == 0, "ERROR: Misconfigured"); require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); (uint256 totToks, uint256 totProjs,, uint256[] memory neighbors) = getNeighbors(tokenId); string memory els = ''; string memory theCol; for (uint i = 1; i <= MAX_SUPPLY; i++) { theCol = string(abi.encodePacked(theCols[vl(i % (2*totProjs+1), tokenId) % theCols.length],"66")); els = string(abi.encodePacked(els, drawEl( (lastMsgHeight + vl(2,tokenId)) % 2, xl(i,tokenId), yl(i,tokenId), 50+(totToks+1)*30 > 700 ? 700 : 50+(totToks+1)*30, "#00000000",theCol ) )); } for (uint i = 0; i < neighbors.length; i++) { if (neighbors[i]>0 && neighbors[i]!=tokenId) { theCol = nodes[neighbors[i]].tokenMsg==nodes[tokenId].tokenMsg ? "#ffffffff" : "#ffffff44"; els = string(abi.encodePacked(els, drawEl( (lastMsgHeight + vl(2,tokenId)) % 2, xl(neighbors[i],tokenId), yl(neighbors[i],tokenId), 50,"#00000000",theCol ), drawLn( xl(tokenId,tokenId), yl(tokenId,tokenId), xl(neighbors[i],tokenId), yl(neighbors[i],tokenId), theCol ) )); } else if (neighbors[i]==0) { break; } } els = string(abi.encodePacked(els, drawEl( (lastMsgHeight + vl(2,tokenId)) % 2, xl(tokenId,tokenId),yl(tokenId,tokenId), 50+(totToks+1)*35 > 800 ? 800 : 50+(totToks+1)*35, "#00000000","#ffffff77" ) )); els = string(abi.encodePacked(els, drawEl( (lastMsgHeight + vl(2,tokenId)) % 2, xl(tokenId,tokenId),yl(tokenId,tokenId), 60, "#00000000","#000000" ) )); els = string(abi.encodePacked(els, drawTxt( romans[nodes[tokenId].tokenMsg],xl(tokenId,tokenId),yl(tokenId,tokenId)+13, "#ffffff","#ffffff" ) )); els = string(abi.encodePacked(els, drawEl( (lastMsgHeight + vl(2,tokenId)) % 2, xl(lastTokenMsg,tokenId),yl(lastTokenMsg,tokenId), 60, "#ffffff","#00000000" ) )); bytes memory _img = abi.encodePacked(svg_start,els, '</svg>' ); return string(_img); } // pseudorandom value function vl(uint256 i, uint256 tokenId) private view returns (uint256) { bytes20 baseContent = getRandBase(tokenId); return uint256(uint8(baseContent[i])); } // get random base for vl and other pseudorandom functions function getRandBase(uint256 tokenId) private view returns (bytes20) { return bytes20(keccak256(abi.encodePacked(ownerOf(tokenId), tokenId, lastMsgHeight))); } // attributes json for opensea function makeAttributes(uint256 tokenId) public view returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); (uint256 totToks, uint256 totProjs,, uint256[] memory neighbors) = getNeighbors(tokenId); uint256 degree = 0; for (uint i = 0; i < neighbors.length; i++) { if (neighbors[i]==0) { break; } else if (neighbors[i]!=tokenId) { degree++; } } string memory content = string(abi.encodePacked( '{"trait_type":"Charity Vote","value":"', charities[nodes[tokenId].desiredCharity].name, '"},', '{"trait_type":"Degree","value":', Strings.toString(degree), '},', '{"trait_type":"Message","value":"', Strings.toString(nodes[tokenId].tokenMsg), '"},', '{"trait_type":"Total Messages","value":', Strings.toString(nodes[tokenId].totMsgs), '},', '{"trait_type":"Balance","value":', Strings.toString(totToks), '},', '{"trait_type":"Variety","value":', Strings.toString(totProjs), '}' )); return content; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); bytes memory json = abi.encodePacked('{"name":"Node #',Strings.toString(tokenId), '", "description":"',renderDescription(tokenId), '", "attributes":[', makeAttributes(tokenId),']', ', "created_by":"Takens Theorem", "image":"', reveal(tokenId), '"}'); return string(abi.encodePacked('data:text/plain,', json)); } constructor() ERC721("The Mesh by Takens Theorem", "MESHTT1") { addCharity(0x542EFf118023cfF2821b24156a507a513Fe93539, "SENS"); addCharity(0xa18E7e408859BC1c742aA566D6aCc3F8fD5e7ffD, "Methuselah"); addCharity(0x095f1fD53A56C01c76A2a56B7273995Ce915d8C4, "EFF"); addCharity(0x338326660F32319E2B0Ad165fcF4a528c1994aCb, "Rainforest Foundation US"); addCharity(0xc7464dbcA260A8faF033460622B23467Df5AEA42, "GiveDirectly"); addCharity(0x7cF2eBb5Ca55A8bd671A020F8BDbAF07f60F26C1, "GiveWell"); addCharity(0xD3F81260a44A1df7A7269CF66Abd9c7e4f8CdcD1, "Heifer"); addCharity(0x633b7218644b83D57d90e7299039ebAb19698e9C, "UkraineDAO"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"curCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getNeighbors","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getNftBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMsgHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTokenMsg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"makeAttributes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"msgContent","type":"uint256"}],"name":"makePost","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"mintNFT_n","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reveal","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"string","name":"val","type":"string"}],"name":"setStr","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":"updateCharity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"viewCharity","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"votes","type":"uint256"}],"internalType":"struct MESHTT1.Charity","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"viewNode","outputs":[{"components":[{"internalType":"uint256","name":"tokenMsg","type":"uint256"},{"internalType":"uint256","name":"desiredCharity","type":"uint256"},{"internalType":"uint256","name":"totMsgs","type":"uint256"}],"internalType":"struct MESHTT1.Node","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"charityId","type":"uint256"}],"name":"voteCharity","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
604860085560016101c0818152603760f91b6101e0526080908152610200828152606960f81b6102205260a052600261024081815261696960f01b6102605260c05260036102808181526269696960e81b6102a05260e0526102c08281526134bb60f11b6102e05261010052610300938452603b60f91b610320526101209390935261034081815261766960f01b61036052610140526103809283526276696960e81b6103a0526101609290925260046103c0908152637669696960e01b6103e05261018052610440604052610400918252610d2f60f31b610420526101a091909152620000f290600990600a62000787565b506001600a5543600b556000600c908155604080516101c08101825260028152602460208201526003918101919091526018606082015260046080820152601260a0820152600860c0820181905260e0820152600961010082018190526101208201526101408101829052610160810191909152600661018082018190526101a08201526200018690600d90600e620007eb565b50604080516101a08101825260076101608201818152660234646303030360cc1b610180840152825282518084018452818152660234646384230360cc1b6020828101919091528084019190915283518085018552828152660234538464630360cc1b818301528385015283518085018552828152660233544464630360cc1b81830152606084015283518085018552828152662330304646324560c81b81830152608084015283518085018552828152662330304646423960c81b8183015260a08401528351808501855282815266119818211ca32360c91b8183015260c084015283518085018552828152661198181922a32360c91b8183015260e08401528351808501855282815266119aa21818232360c91b81830152610100840152835180850185528281526611a29c1818232360c91b8183015261012084015283518085019094529083526611a32318181c2160c91b90830152610140810191909152620002f890600e90600b6200083c565b5060405180610120016040528060e8815260200162004d2560e8913980516200032a91600f916020909101906200088e565b506040805180820190915260048082526315d0525560e21b602090920191825262000358916012916200088e565b5060408051606081018252600081830181815282528251602081810190945290815291810191909152620003919060139060026200090b565b503480156200039f57600080fd5b50604080518082018252601a81527f546865204d6573682062792054616b656e73205468656f72656d0000000000006020808301918252835180850190945260078452664d45534854543160c81b90840152815191929162000404916000916200088e565b5080516200041a9060019060208401906200088e565b50505060006200042f620006c560201b60201c565b600680546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620004bf73542eff118023cff2821b24156a507a513fe935396040518060400160405280600481526020016353454e5360e01b815250620006c960201b60201c565b6200050773a18e7e408859bc1c742aa566d6acc3f8fd5e7ffd6040518060400160405280600a81526020016909acae8d0eae6cad8c2d60b31b815250620006c960201b60201c565b6200054873095f1fd53a56c01c76a2a56b7273995ce915d8c46040518060400160405280600381526020016222a32360e91b815250620006c960201b60201c565b620005a373338326660f32319e2b0ad165fcf4a528c1994acb6040518060400160405280601881526020017f5261696e666f7265737420466f756e646174696f6e2055530000000000000000815250620006c960201b60201c565b620005ed73c7464dbca260a8faf033460622b23467df5aea426040518060400160405280600c81526020016b476976654469726563746c7960a01b815250620006c960201b60201c565b62000633737cf2ebb5ca55a8bd671a020f8bdbaf07f60f26c16040518060400160405280600881526020016711da5d9955d95b1b60c21b815250620006c960201b60201c565b6200067773d3f81260a44a1df7a7269cf66abd9c7e4f8cdcd1604051806040016040528060068152602001652432b4b332b960d11b815250620006c960201b60201c565b620006bf73633b7218644b83d57d90e7299039ebab19698e9c6040518060400160405280600a815260200169556b7261696e6544414f60b01b815250620006c960201b60201c565b62000a14565b3390565b604080516060810182526001600160a01b0384811682526020808301858152600094840185905260118054600181018255955283517f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68600390960295860180546001600160a01b031916919094161783555180519394859462000775937f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6990920192909101906200088e565b50604082015181600201555050505050565b828054828255906000526020600020908101928215620007d9579160200282015b82811115620007d95782518051620007c89184916020909101906200088e565b5091602001919060010190620007a8565b50620007e79291506200095d565b5090565b8280548282559060005260206000209081019282156200082e579160200282015b828111156200082e578251829060ff169055916020019190600101906200080c565b50620007e79291506200097e565b828054828255906000526020600020908101928215620007d9579160200282015b82811115620007d957825180516200087d9184916020909101906200088e565b50916020019190600101906200085d565b8280546200089c90620009d7565b90600052602060002090601f016020900481019282620008c057600085556200082e565b82601f10620008db57805160ff19168380011785556200082e565b828001600101855582156200082e579182015b828111156200082e578251825591602001919060010190620008ee565b828054828255906000526020600020908101928215620007d9579160200282015b82811115620007d957825180516200094c9184916020909101906200088e565b50916020019190600101906200092c565b80821115620007e757600062000974828262000995565b506001016200095d565b5b80821115620007e757600081556001016200097f565b508054620009a390620009d7565b6000825580601f10620009b4575050565b601f016020900490600052602060002090810190620009d491906200097e565b50565b600181811c90821680620009ec57607f821691505b6020821081141562000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b6143018062000a246000396000f3fe6080604052600436106101d85760003560e01c8063715018a611610102578063b88d4fde11610095578063c87b56dd11610064578063c87b56dd1461056d578063e5cef0281461058d578063e985e9c5146105ad578063f2fde38b146105cd57600080fd5b8063b88d4fde146104e9578063c2ca0ac514610509578063c378a5bb14610529578063c637954b1461053e57600080fd5b8063a229541f116100d1578063a229541f14610447578063a22cb4651461045a578063a6dfebae1461047a578063adf2cb57146104bc57600080fd5b8063715018a6146103cf57806388135088146103e45780638da5cb5b1461041457806395d89b411461043257600080fd5b806342842e0e1161017a5780634a42bbb2116101495780634a42bbb2146103595780636352211e1461036f57806365921e3a1461038f57806370a08231146103af57600080fd5b806342842e0e146102ed5780634489af1f1461030d578063459a03cd14610323578063486dcacb1461034357600080fd5b8063095ea7b3116101b6578063095ea7b31461026c57806318160ddd1461028e578063191347df146102ad57806323b872dd146102cd57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063081812fc14610234575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004613105565b6105ed565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b5061022761063f565b6040516102099190613181565b34801561024057600080fd5b5061025461024f366004613194565b6106d1565b6040516001600160a01b039091168152602001610209565b34801561027857600080fd5b5061028c6102873660046131c4565b61075e565b005b34801561029a57600080fd5b506008545b604051908152602001610209565b3480156102b957600080fd5b5061028c6102c836600461327a565b610874565b3480156102d957600080fd5b5061028c6102e83660046132c3565b6109d6565b3480156102f957600080fd5b5061028c6103083660046132c3565b610a07565b34801561031957600080fd5b5061029f600b5481565b34801561032f57600080fd5b5061022761033e366004613194565b610a22565b34801561034f57600080fd5b5061029f600c5481565b34801561036557600080fd5b5061029f600a5481565b34801561037b57600080fd5b5061025461038a366004613194565b610b89565b34801561039b57600080fd5b5061028c6103aa366004613194565b610c00565b3480156103bb57600080fd5b5061029f6103ca3660046132ff565b610d2f565b3480156103db57600080fd5b5061028c610db6565b3480156103f057600080fd5b506104046103ff366004613194565b610e2a565b6040516102099493929190613355565b34801561042057600080fd5b506006546001600160a01b0316610254565b34801561043e57600080fd5b50610227610f96565b61028c610455366004613391565b610fa5565b34801561046657600080fd5b5061028c6104753660046133b3565b611159565b34801561048657600080fd5b5061049a610495366004613194565b61121e565b6040805182518152602080840151908201529181015190820152606001610209565b3480156104c857600080fd5b506104dc6104d7366004613194565b6112a0565b60405161020991906133ef565b3480156104f557600080fd5b5061028c610504366004613433565b6113fb565b34801561051557600080fd5b50610227610524366004613194565b611432565b34801561053557600080fd5b5061028c611c42565b34801561054a57600080fd5b5061055e6105593660046132ff565b611cc1565b604051610209939291906134af565b34801561057957600080fd5b50610227610588366004613194565b612076565b34801561059957600080fd5b5061028c6105a8366004613391565b61210f565b3480156105b957600080fd5b506101fd6105c83660046134d7565b612243565b3480156105d957600080fd5b5061028c6105e83660046132ff565b612271565b60006001600160e01b031982166380ac58cd60e01b148061061e57506001600160e01b03198216635b5e139f60e01b145b8061063957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461064e9061350a565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061350a565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b60006106dc8261235c565b6107425760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061076982610b89565b9050806001600160a01b0316836001600160a01b031614156107d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610739565b336001600160a01b03821614806107f357506107f38133612243565b6108655760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610739565b61086f8383612379565b505050565b6006546001600160a01b0316331461089e5760405162461bcd60e51b815260040161073990613545565b6000601280546108ad9061350a565b9050116108fc5760405162461bcd60e51b815260206004820152601960248201527f4552524f523a20416c726561647920636f6e66696775726564000000000000006044820152606401610739565b60136000815481106109105761091061357a565b9060005260206000200180546109259061350a565b15159050610963578060136000815481106109425761094261357a565b90600052602060002001908051906020019061095f929190613056565b5050565b60136001815481106109775761097761357a565b90600052602060002001805461098c9061350a565b151590506109a9578060136001815481106109425761094261357a565b6000601280546109b89061350a565b905011156109d357805161095f906012906020840190613056565b50565b6109e033826123e7565b6109fc5760405162461bcd60e51b815260040161073990613590565b61086f8383836124b1565b61086f838383604051806020016040528060008152506113fb565b6060610a2d8261235c565b610a495760405162461bcd60e51b8152600401610739906135e1565b6000806000610a5785610e2a565b935050925092506000805b8251811015610ad257828181518110610a7d57610a7d61357a565b602002602001015160001415610a9257610ad2565b86838281518110610aa557610aa561357a565b602002602001015114610ac05781610abc81613648565b9250505b80610aca81613648565b915050610a62565b50600086815260106020526040812060010154601180549091908110610afa57610afa61357a565b9060005260206000209060030201600101610b1483612651565b600089815260106020526040902054610b2c90612651565b60008a815260106020526040902060020154610b4790612651565b610b5089612651565b610b5989612651565b604051602001610b6e96959493929190613719565b60408051601f19818403018152919052979650505050505050565b6000818152600260205260408120546001600160a01b0316806106395760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610739565b6006546001600160a01b03163314610c2a5760405162461bcd60e51b815260040161073990613545565b60085460075410610c7d5760405162461bcd60e51b815260206004820152601760248201527f4552524f523a206d696e74696e6720636f6d706c6574650000000000000000006044820152606401610739565b60005b8181101561095f576008546007541415610c98575050565b610ca6600780546001019055565b6000610cb160075490565b601154909150600090610cc484436138e8565b610cce9190613916565b905060118181548110610ce357610ce361357a565b600091825260208220600260039092020101805491610d0183613648565b9190505550610d10828261274f565b610d1a33836127a3565b50508080610d2790613648565b915050610c80565b60006001600160a01b038216610d9a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610739565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610de05760405162461bcd60e51b815260040161073990613545565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600080606080610e398561235c565b610e555760405162461bcd60e51b8152600401610739906135e1565b6000806000610e6661055989610b89565b9250925092506000610e7760075490565b67ffffffffffffffff811115610e8f57610e8f6131ee565b604051908082528060200260200182016040528015610eb8578160200160208202803683370190505b509050600060015b6007548111610f85576000610ed761055983610b89565b9250505060005b8151811015610f70576000828281518110610efb57610efb61357a565b6020026020010151118015610f2957506000868281518110610f1f57610f1f61357a565b6020026020010151115b15610f5e5782858581518110610f4157610f4161357a565b602090810291909101015283610f5681613648565b945050610f70565b80610f6881613648565b915050610ede565b50508080610f7d90613648565b915050610ec0565b509399929850909650945092505050565b60606001805461064e9061350a565b610fae8261235c565b610fca5760405162461bcd60e51b8152600401610739906135e1565b610fd5335b836123e7565b610ff15760405162461bcd60e51b81526004016107399061392a565b600a811061104c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a206d657373616765206d7573742062652066726f6d203020746f604482015261203960f01b6064820152608401610739565b66038d7ea4c68000341015801561106a575066b1a2bc2ec500003411155b6110cd5760405162461bcd60e51b815260206004820152602e60248201527f4552524f523a2072616e676520302e303031202d20302e30352045544820726560448201526d1c5d5a5c9959081d1bc81c1bdcdd60921b6064820152608401610739565b60008281526010602052604081208281556002018054916110ed83613648565b9091555050600a82905543600b55600c546011805490919081106111135761111361357a565b600091825260208220600390910201546040516001600160a01b03909116913480156108fc02929091818181858888f1935050505015801561086f573d6000803e3d6000fd5b6001600160a01b0382163314156111b25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610739565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124260405180606001604052806000815260200160008152602001600081525090565b61124b8261235c565b6112675760405162461bcd60e51b8152600401610739906135e1565b50600090815260106020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b6112cd604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60115482106113155760405162461bcd60e51b81526020600482015260146024820152734552524f523a206f7574206f6620626f756e647360601b6044820152606401610739565b601182815481106113285761132861357a565b6000918252602091829020604080516060810190915260039092020180546001600160a01b0316825260018101805492939192918401916113689061350a565b80601f01602080910402602001604051908101604052809291908181526020018280546113949061350a565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b505050505081526020016002820154815250509050919050565b61140433610fcf565b6114205760405162461bcd60e51b815260040161073990613590565b61142c848484846128d6565b50505050565b6060601280546114419061350a565b1590506114875760405162461bcd60e51b815260206004820152601460248201527311549493d48e88135a5cd8dbdb999a59dd5c995960621b6044820152606401610739565b6114908261235c565b6114ac5760405162461bcd60e51b8152600401610739906135e1565b60008060006114ba85610e2a565b6040805160208101909152600081529396509194509092506060905060015b600854811161164057600e805461150f6114f4886002613972565b6114ff9060016138e8565b6115099085613916565b8b612909565b6115199190613916565b815481106115295761152961357a565b906000526020600020016040516020016115439190613991565b60405160208183030381529060405291508261160b600261156560028c612909565b600b5461157291906138e8565b61157c9190613916565b611586848c612932565b611590858d612a08565b6102bc61159e8c60016138e8565b6115a990601e613972565b6115b49060326138e8565b116115df576115c48b60016138e8565b6115cf90601e613972565b6115da9060326138e8565b6115e3565b6102bc5b6040518060400160405280600981526020016802330303030303030360bc1b81525088612ad7565b60405160200161161c9291906139af565b6040516020818303038152906040529250808061163890613648565b9150506114d9565b5060005b83518110156118835760008482815181106116615761166161357a565b602002602001015111801561168f5750878482815181106116845761168461357a565b602002602001015114155b1561184a57600088815260106020819052604082205486519092908790859081106116bc576116bc61357a565b602002602001015181526020019081526020016000206000015414611702576040518060400160405280600981526020016808d999999999998d0d60ba1b815250611725565b6040518060400160405280600981526020016811b33333333333333360b91b8152505b9150826117bf600261173860028c612909565b600b5461174591906138e8565b61174f9190613916565b6117728785815181106117645761176461357a565b60200260200101518c612932565b6117958886815181106117875761178761357a565b60200260200101518d612a08565b60326040518060400160405280600981526020016802330303030303030360bc1b81525088612ad7565b6118226117cc8b8c612932565b6117d68c8d612a08565b6117f98987815181106117eb576117eb61357a565b60200260200101518e612932565b61181c8a888151811061180e5761180e61357a565b60200260200101518f612a08565b88612c7e565b604051602001611834939291906139de565b6040516020818303038152906040529250611871565b83818151811061185c5761185c61357a565b60200260200101516000141561187157611883565b8061187b81613648565b915050611644565b508161195c600261189560028b612909565b600b546118a291906138e8565b6118ac9190613916565b6118b68a8b612932565b6118c08b8c612a08565b6103206118ce8b60016138e8565b6118d9906023613972565b6118e49060326138e8565b1161190f576118f48a60016138e8565b6118ff906023613972565b61190a9060326138e8565b611913565b6103205b6040518060400160405280600981526020016802330303030303030360bc1b8152506040518060400160405280600981526020016823666666666666373760b81b815250612ad7565b60405160200161196d9291906139af565b604051602081830303815290604052915081611a03600261198f60028b612909565b600b5461199c91906138e8565b6119a69190613916565b6119b08a8b612932565b6119ba8b8c612a08565b603c6040518060400160405280600981526020016802330303030303030360bc1b815250604051806040016040528060078152602001660233030303030360cc1b815250612ad7565b604051602001611a149291906139af565b60408051601f19818403018152918152600089815260106020522054600980549294508492611b4392908110611a4c57611a4c61357a565b906000526020600020018054611a619061350a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d9061350a565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b5050505050611ae98a8b612932565b611af38b8c612a08565b611afe90600d6138e8565b6040518060400160405280600781526020016611b3333333333360c91b8152506040518060400160405280600781526020016611b3333333333360c91b815250612cd3565b604051602001611b549291906139af565b604051602081830303815290604052915081611bee6002611b7660028b612909565b600b54611b8391906138e8565b611b8d9190613916565b611b99600a548b612932565b611ba5600a548c612a08565b603c6040518060400160405280600781526020016611b3333333333360c91b8152506040518060400160405280600981526020016802330303030303030360bc1b815250612ad7565b604051602001611bff9291906139af565b60405160208183030381529060405291506000600f83604051602001611c26929190613a21565b60408051601f1981840301815291905298975050505050505050565b600080805b601154811015611cba578260118281548110611c6557611c6561357a565b9060005260206000209060030201600201541115611ca85760118181548110611c9057611c9061357a565b90600052602060002090600302016002015492508091505b80611cb281613648565b915050611c47565b50600c5550565b60408051600580825260c0820190925260009182916060918391906020820160a080368337019050506040516370a0823160e01b81526001600160a01b03871660048201529091507306012c8cf97bead5deae237070f9587f8e7a266d906370a0823190602401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613a57565b81600081518110611d7c57611d7c61357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273fbeef911dc5821886e1dda71586d90ed28174b7d906370a0823190602401602060405180830381865afa158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e039190613a57565b81600181518110611e1657611e1661357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b03861660048201527379986af15539de2db9a5086382daeda917a9cf0c906370a0823190602401602060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190613a57565b81600281518110611eb057611eb061357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273f3e778f839934fc819cfa1040aabacecba01e049906370a0823190602401602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613a57565b81600381518110611f4a57611f4a61357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270906370a0823190602401602060405180830381865afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd19190613a57565b81600481518110611fe457611fe461357a565b60200260200101818152505060008060005b8351811015612068578381815181106120115761201161357a565b60200260200101518361202491906138e8565b9250600084828151811061203a5761203a61357a565b60200260200101511115612056576120538260016138e8565b91505b8061206081613648565b915050611ff6565b509096909550909350915050565b60606120818261235c565b61209d5760405162461bcd60e51b8152600401610739906135e1565b60006120a883612651565b6120b184612d1d565b6120ba85610a22565b6120c386611432565b6040516020016120d69493929190613a70565b6040516020818303038152906040529050806040516020016120f89190613b7d565b604051602081830303815290604052915050919050565b6121188261235c565b6121345760405162461bcd60e51b8152600401610739906135e1565b61213d33610fcf565b6121595760405162461bcd60e51b81526004016107399061392a565b60115481106121aa5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a2063686172697479204944206d7573742062652030202d2037006044820152606401610739565b6000828152601060205260409020600101546011805490919081106121d1576121d161357a565b6000918252602082206002600390920201018054916121ef83613bb5565b90915550506000828152601060205260409020600101819055601180548290811061221c5761221c61357a565b60009182526020822060026003909202010180549161223a83613648565b91905055505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6006546001600160a01b0316331461229b5760405162461bcd60e51b815260040161073990613545565b6001600160a01b0381166123005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610739565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123ae82610b89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f28261235c565b6124535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610739565b600061245e83610b89565b9050806001600160a01b0316846001600160a01b031614806124995750836001600160a01b031661248e846106d1565b6001600160a01b0316145b806124a957506124a98185612243565b949350505050565b826001600160a01b03166124c482610b89565b6001600160a01b03161461252c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610739565b6001600160a01b03821661258e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610739565b612599600082612379565b6001600160a01b03831660009081526003602052604081208054600192906125c2908490613bcc565b90915550506001600160a01b03821660009081526003602052604081208054600192906125f09084906138e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6060816126755750506040805180820190915260018152600360fc1b602082015290565b8160005b811561269f578061268981613648565b91506126989050600a83613be3565b9150612679565b60008167ffffffffffffffff8111156126ba576126ba6131ee565b6040519080825280601f01601f1916602001820160405280156126e4576020820181803683370190505b5090505b84156124a9576126f9600183613bcc565b9150612706600a86613916565b6127119060306138e8565b60f81b8183815181106127265761272661357a565b60200101906001600160f81b031916908160001a905350612748600a86613be3565b94506126e8565b60006040518060600160405280600a856127699190613916565b8152602080820194909452600060409182018190529485526010845293849020815181559281015160018401559092015160029091015550565b6001600160a01b0382166127f95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610739565b6128028161235c565b1561284f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610739565b6001600160a01b03821660009081526003602052604081208054600192906128789084906138e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6128e18484846124b1565b6128ed84848484612d7f565b61142c5760405162461bcd60e51b815260040161073990613bf7565b60008061291583612e7d565b90508084601481106129295761292961357a565b1a949350505050565b600d546000908190612945600185612909565b600b5461295291906138e8565b61295c9190613916565b90506002600d82815481106129735761297361357a565b9060005260206000200154610fa061298b9190613be3565b6129959190613be3565b600d82815481106129a8576129a861357a565b9060005260206000200154600d83815481106129c6576129c661357a565b90600052602060002001546001876129de9190613bcc565b6129e89190613916565b6129f490610fa0613972565b6129fe9190613be3565b6124a991906138e8565b600d546000908190612a1b600185612909565b600b54612a2891906138e8565b612a329190613916565b90506002600d8281548110612a4957612a4961357a565b9060005260206000200154600854612a619190613be3565b612a6d90610fa0613be3565b612a779190613be3565b600d8281548110612a8a57612a8a61357a565b9060005260206000200154600854612aa29190613be3565b600d8381548110612ab557612ab561357a565b9060005260206000200154600187612acd9190613bcc565b6129e89190613be3565b60408051602081019091526000815260609087612b3157612af787612651565b612b0087612651565b612b0987612651565b604051602001612b1b93929190613c49565b6040516020818303038152906040529050612c4d565b6000878611612b7057612b4c612b47878a613bcc565b612651565b604051602001612b5c9190613cd8565b604051602081830303815290604052612b9d565b612b7d612b478988613bcc565b604051602001612b8d9190613cf4565b6040516020818303038152906040525b90506000878711612bd957612bb5612b47888a613bcc565b604051602001612bc59190613cd8565b604051602081830303815290604052612c06565b612be6612b478989613bcc565b604051602001612bf69190613cf4565b6040516020818303038152906040525b90508181612c18612b478a6002613972565b612c26612b478b6002613972565b604051602001612c399493929190613d1d565b604051602081830303815290604052925050505b808385604051602001612c6293929190613dd8565b6040516020818303038152906040529150509695505050505050565b6060612c8986612651565b612c9286612651565b612c9b86612651565b612ca486612651565b85604051602001612cb9959493929190613e6f565b604051602081830303815290604052905095945050505050565b6060612cde85612651565b612ce785612651565b836013600181548110612cfc57612cfc61357a565b90600052602060002001868a604051602001612cb996959493929190613f72565b6060612d2843612651565b6013600081548110612d3c57612d3c61357a565b90600052602060002001612d57612d5285610b89565b612ed4565b604051602001612d699392919061405d565b6040516020818303038152906040529050919050565b60006001600160a01b0384163b15612e7257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612dc39033908990889088906004016140f6565b6020604051808303816000875af1925050508015612dfe575060408051601f3d908101601f19168201909252612dfb91810190614133565b60015b612e58573d808015612e2c576040519150601f19603f3d011682016040523d82523d6000602084013e612e31565b606091505b508051612e505760405162461bcd60e51b815260040161073990613bf7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124a9565b506001949350505050565b6000612e8882610b89565b600b5460405160609290921b6bffffffffffffffffffffffff19166020830152603482018490526054820152607401604051602081830303815290604052805190602001209050919050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b6014811015613014576000612f11826013613bcc565b612f1c906008613972565b612f27906002614234565b612f3a906001600160a01b038716613be3565b60f81b9050600060108260f81c612f519190614240565b60f81b905060008160f81c6010612f689190614262565b8360f81c612f769190614283565b60f81b9050612f848261301b565b85612f90866002613972565b81518110612fa057612fa061357a565b60200101906001600160f81b031916908160001a905350612fc08161301b565b85612fcc866002613972565b612fd79060016138e8565b81518110612fe757612fe761357a565b60200101906001600160f81b031916908160001a905350505050808061300c90613648565b915050612efb565b5092915050565b6000600a60f883901c10156130425761303960f883901c60306142a6565b60f81b92915050565b61303960f883901c60576142a6565b919050565b8280546130629061350a565b90600052602060002090601f01602090048101928261308457600085556130ca565b82601f1061309d57805160ff19168380011785556130ca565b828001600101855582156130ca579182015b828111156130ca5782518255916020019190600101906130af565b506130d69291506130da565b5090565b5b808211156130d657600081556001016130db565b6001600160e01b0319811681146109d357600080fd5b60006020828403121561311757600080fd5b8135613122816130ef565b9392505050565b60005b8381101561314457818101518382015260200161312c565b8381111561142c5750506000910152565b6000815180845261316d816020860160208601613129565b601f01601f19169290920160200192915050565b6020815260006131226020830184613155565b6000602082840312156131a657600080fd5b5035919050565b80356001600160a01b038116811461305157600080fd5b600080604083850312156131d757600080fd5b6131e0836131ad565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561321f5761321f6131ee565b604051601f8501601f19908116603f01168101908282118183101715613247576132476131ee565b8160405280935085815286868601111561326057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561328c57600080fd5b813567ffffffffffffffff8111156132a357600080fd5b8201601f810184136132b457600080fd5b6124a984823560208401613204565b6000806000606084860312156132d857600080fd5b6132e1846131ad565b92506132ef602085016131ad565b9150604084013590509250925092565b60006020828403121561331157600080fd5b613122826131ad565b600081518084526020808501945080840160005b8381101561334a5781518752958201959082019060010161332e565b509495945050505050565b848152836020820152608060408201526000613374608083018561331a565b8281036060840152613386818561331a565b979650505050505050565b600080604083850312156133a457600080fd5b50508035926020909101359150565b600080604083850312156133c657600080fd5b6133cf836131ad565b9150602083013580151581146133e457600080fd5b809150509250929050565b602080825282516001600160a01b0316828201528201516060604083015260009061341d6080840182613155565b9050604084015160608401528091505092915050565b6000806000806080858703121561344957600080fd5b613452856131ad565b9350613460602086016131ad565b925060408501359150606085013567ffffffffffffffff81111561348357600080fd5b8501601f8101871361349457600080fd5b6134a387823560208401613204565b91505092959194509250565b8381528260208201526060604082015260006134ce606083018461331a565b95945050505050565b600080604083850312156134ea57600080fd5b6134f3836131ad565b9150613501602084016131ad565b90509250929050565b600181811c9082168061351e57607f821691505b6020821081141561353f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526031908201527f45524337323155524953746f726167653a2055524920717565727920666f72206040820152703737b732bc34b9ba32b73a103a37b5b2b760791b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561365c5761365c613632565b5060010190565b8054600090600181811c908083168061367d57607f831692505b602080841082141561369f57634e487b7160e01b600052602260045260246000fd5b8180156136b357600181146136c4576136f1565b60ff198616895284890196506136f1565b60008881526020902060005b868110156136e95781548b8201529085019083016136d0565b505084890196505b50505050505092915050565b6000815161370f818560208601613129565b9290920192915050565b7f7b2274726169745f74797065223a224368617269747920566f7465222c227661815265363ab2911d1160d11b6020820152600061375a6026830189613663565b62089f4b60ea1b81527f7b2274726169745f74797065223a22446567726565222c2276616c7565223a006003820152875161379c816022840160208c01613129565b611f4b60f21b602292909101918201527f7b2274726169745f74797065223a224d657373616765222c2276616c7565223a6024820152601160f91b604482015286516137ef816045840160208b01613129565b6138da6138cd6138c761389e61386161389861386f61386161385b61382260458b8d010162089f4b60ea1b815260030190565b7f7b2274726169745f74797065223a22546f74616c204d65737361676573222c228152663b30b63ab2911d60c91b602082015260270190565b8f6136fd565b611f4b60f21b815260020190565b7f7b2274726169745f74797065223a2242616c616e6365222c2276616c7565223a815260200190565b8b6136fd565b7f7b2274726169745f74797065223a2256617269657479222c2276616c7565223a815260200190565b876136fd565b607d60f81b815260010190565b9a9950505050505050505050565b600082198211156138fb576138fb613632565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261392557613925613900565b500690565b60208082526028908201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604082015267185c1c1c9bdd995960c21b606082015260800190565b600081600019048311821515161561398c5761398c613632565b500290565b600061399d8284613663565b611b1b60f11b81526002019392505050565b600083516139c1818460208801613129565b8351908301906139d5818360208801613129565b01949350505050565b600084516139f0818460208901613129565b845190830190613a04818360208901613129565b8451910190613a17818360208801613129565b0195945050505050565b6000613a2d8285613663565b8351613a3d818360208801613129565b651e17b9bb339f60d11b9101908152600601949350505050565b600060208284031215613a6957600080fd5b5051919050565b6e7b226e616d65223a224e6f6465202360881b81528451600090613a9b81600f850160208a01613129565b71111610113232b9b1b934b83a34b7b7111d1160711b600f918401918201528551613acd816021840160208a01613129565b70222c202261747472696275746573223a5b60781b602192909101918201528451613aff816032840160208901613129565b605d60f81b603292909101918201527f2c2022637265617465645f6279223a2254616b656e73205468656f72656d222c603382015269101134b6b0b3b2911d1160b11b60538201528351613b5a81605d840160208801613129565b613b71605d8284010161227d60f01b815260020190565b98975050505050505050565b6f19185d184e9d195e1d0bdc1b185a5b8b60821b815260008251613ba8816010850160208701613129565b9190910160100192915050565b600081613bc457613bc4613632565b506000190190565b600082821015613bde57613bde613632565b500390565b600082613bf257613bf2613900565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6b3c636972636c652063783d2760a01b815260008451613c7081600c850160208901613129565b65272063793d2760d01b600c918401918201528451613c96816012840160208901613129565b642720723d2760d81b601292909101918201528351613cbc816017840160208801613129565b61013960f51b6017929091019182015260190195945050505050565b60008251613cea818460208701613129565b9190910192915050565b602d60f81b815260008251613d10816001850160208701613129565b9190910160010192915050565b683c7265637420783d2760b81b815260008551613d41816009850160208a01613129565b642720793d2760d81b6009918401918201528551613d6681600e840160208a01613129565b68272077696474683d2760b81b600e92909101918201528451613d90816017840160208901613129565b6927206865696768743d2760b01b601792909101918201528351613dbb816021840160208801613129565b61013960f51b602192909101918201526023019695505050505050565b60008451613dea818460208901613129565b6566696c6c3d2760d01b9083019081528451613e0d816006840160208901613129565b6927207374726f6b653d2760b01b600692909101918201528351613e38816010840160208801613129565b7f27207374726f6b652d77696474683d2735707427202f3e0000000000000000006010929091019182015260270195945050505050565b693c6c696e652078313d2760b01b815260008651613e9481600a850160208b01613129565b65272079313d2760d01b600a918401918201528651613eba816010840160208b01613129565b65272078323d2760d01b601092909101918201528551613ee1816016840160208a01613129565b65272079323d2760d01b601692909101918201528451613f0881601c840160208901613129565b6927207374726f6b653d2760b01b601c92909101918201528351613f33816026840160208801613129565b613f656026828401017f27207374726f6b652d77696474683d273135707427202f3e0000000000000000815260180190565b9998505050505050505050565b683c7465787420783d2760b81b815260008751613f96816009850160208c01613129565b642720793d2760d81b6009918401918201528751613fbb81600e840160208c01613129565b7f2720666f6e742d73697a653d2734307074272066696c6c3d2700000000000000600e92909101918201528651613ff9816027840160208b01613129565b61400860278284010188613663565b915050845161401b818360208901613129565b61139f60f11b91019081528351614039816002840160208801613129565b661e17ba32bc3a1f60c91b6002929091019182015260090198975050505050505050565b7f5468652063727970746f2070616e6f707469636f6e2072657665616c732e5c6e8152612e3760f11b60208201527f4c6173742072656672657368656420617420626c6f636b2000000000000000006022820152600084516140c681603a850160208901613129565b632e372e3760e11b603a918401918201526140e4603e820186613663565b90508351613a17818360208801613129565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061412990830184613155565b9695505050505050565b60006020828403121561414557600080fd5b8151613122816130ef565b600181815b8085111561418b57816000190482111561417157614171613632565b8085161561417e57918102915b93841c9390800290614155565b509250929050565b6000826141a257506001610639565b816141af57506000610639565b81600181146141c557600281146141cf576141eb565b6001915050610639565b60ff8411156141e0576141e0613632565b50506001821b610639565b5060208310610133831016604e8410600b841016171561420e575081810a610639565b6142188383614150565b806000190482111561422c5761422c613632565b029392505050565b60006131228383614193565b600060ff83168061425357614253613900565b8060ff84160491505092915050565b600060ff821660ff84168160ff048111821515161561422c5761422c613632565b600060ff821660ff84168082101561429d5761429d613632565b90039392505050565b600060ff821660ff84168060ff038211156142c3576142c3613632565b01939250505056fea264697066735822122064b511421eaca61c72995a5d5b60a386018b0a1205144177f1e46bc1acf8093f64736f6c634300080b00333c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b27206865696768743d27373530272077696474683d27373530272076696577426f783d2730203020343030302034303030273e3c7265637420783d27302720793d2730272066696c6c3d2723303030303030272077696474683d273430303027206865696768743d273430303027202f3e
Deployed Bytecode
0x6080604052600436106101d85760003560e01c8063715018a611610102578063b88d4fde11610095578063c87b56dd11610064578063c87b56dd1461056d578063e5cef0281461058d578063e985e9c5146105ad578063f2fde38b146105cd57600080fd5b8063b88d4fde146104e9578063c2ca0ac514610509578063c378a5bb14610529578063c637954b1461053e57600080fd5b8063a229541f116100d1578063a229541f14610447578063a22cb4651461045a578063a6dfebae1461047a578063adf2cb57146104bc57600080fd5b8063715018a6146103cf57806388135088146103e45780638da5cb5b1461041457806395d89b411461043257600080fd5b806342842e0e1161017a5780634a42bbb2116101495780634a42bbb2146103595780636352211e1461036f57806365921e3a1461038f57806370a08231146103af57600080fd5b806342842e0e146102ed5780634489af1f1461030d578063459a03cd14610323578063486dcacb1461034357600080fd5b8063095ea7b3116101b6578063095ea7b31461026c57806318160ddd1461028e578063191347df146102ad57806323b872dd146102cd57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063081812fc14610234575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004613105565b6105ed565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b5061022761063f565b6040516102099190613181565b34801561024057600080fd5b5061025461024f366004613194565b6106d1565b6040516001600160a01b039091168152602001610209565b34801561027857600080fd5b5061028c6102873660046131c4565b61075e565b005b34801561029a57600080fd5b506008545b604051908152602001610209565b3480156102b957600080fd5b5061028c6102c836600461327a565b610874565b3480156102d957600080fd5b5061028c6102e83660046132c3565b6109d6565b3480156102f957600080fd5b5061028c6103083660046132c3565b610a07565b34801561031957600080fd5b5061029f600b5481565b34801561032f57600080fd5b5061022761033e366004613194565b610a22565b34801561034f57600080fd5b5061029f600c5481565b34801561036557600080fd5b5061029f600a5481565b34801561037b57600080fd5b5061025461038a366004613194565b610b89565b34801561039b57600080fd5b5061028c6103aa366004613194565b610c00565b3480156103bb57600080fd5b5061029f6103ca3660046132ff565b610d2f565b3480156103db57600080fd5b5061028c610db6565b3480156103f057600080fd5b506104046103ff366004613194565b610e2a565b6040516102099493929190613355565b34801561042057600080fd5b506006546001600160a01b0316610254565b34801561043e57600080fd5b50610227610f96565b61028c610455366004613391565b610fa5565b34801561046657600080fd5b5061028c6104753660046133b3565b611159565b34801561048657600080fd5b5061049a610495366004613194565b61121e565b6040805182518152602080840151908201529181015190820152606001610209565b3480156104c857600080fd5b506104dc6104d7366004613194565b6112a0565b60405161020991906133ef565b3480156104f557600080fd5b5061028c610504366004613433565b6113fb565b34801561051557600080fd5b50610227610524366004613194565b611432565b34801561053557600080fd5b5061028c611c42565b34801561054a57600080fd5b5061055e6105593660046132ff565b611cc1565b604051610209939291906134af565b34801561057957600080fd5b50610227610588366004613194565b612076565b34801561059957600080fd5b5061028c6105a8366004613391565b61210f565b3480156105b957600080fd5b506101fd6105c83660046134d7565b612243565b3480156105d957600080fd5b5061028c6105e83660046132ff565b612271565b60006001600160e01b031982166380ac58cd60e01b148061061e57506001600160e01b03198216635b5e139f60e01b145b8061063957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461064e9061350a565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061350a565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b60006106dc8261235c565b6107425760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061076982610b89565b9050806001600160a01b0316836001600160a01b031614156107d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610739565b336001600160a01b03821614806107f357506107f38133612243565b6108655760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610739565b61086f8383612379565b505050565b6006546001600160a01b0316331461089e5760405162461bcd60e51b815260040161073990613545565b6000601280546108ad9061350a565b9050116108fc5760405162461bcd60e51b815260206004820152601960248201527f4552524f523a20416c726561647920636f6e66696775726564000000000000006044820152606401610739565b60136000815481106109105761091061357a565b9060005260206000200180546109259061350a565b15159050610963578060136000815481106109425761094261357a565b90600052602060002001908051906020019061095f929190613056565b5050565b60136001815481106109775761097761357a565b90600052602060002001805461098c9061350a565b151590506109a9578060136001815481106109425761094261357a565b6000601280546109b89061350a565b905011156109d357805161095f906012906020840190613056565b50565b6109e033826123e7565b6109fc5760405162461bcd60e51b815260040161073990613590565b61086f8383836124b1565b61086f838383604051806020016040528060008152506113fb565b6060610a2d8261235c565b610a495760405162461bcd60e51b8152600401610739906135e1565b6000806000610a5785610e2a565b935050925092506000805b8251811015610ad257828181518110610a7d57610a7d61357a565b602002602001015160001415610a9257610ad2565b86838281518110610aa557610aa561357a565b602002602001015114610ac05781610abc81613648565b9250505b80610aca81613648565b915050610a62565b50600086815260106020526040812060010154601180549091908110610afa57610afa61357a565b9060005260206000209060030201600101610b1483612651565b600089815260106020526040902054610b2c90612651565b60008a815260106020526040902060020154610b4790612651565b610b5089612651565b610b5989612651565b604051602001610b6e96959493929190613719565b60408051601f19818403018152919052979650505050505050565b6000818152600260205260408120546001600160a01b0316806106395760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610739565b6006546001600160a01b03163314610c2a5760405162461bcd60e51b815260040161073990613545565b60085460075410610c7d5760405162461bcd60e51b815260206004820152601760248201527f4552524f523a206d696e74696e6720636f6d706c6574650000000000000000006044820152606401610739565b60005b8181101561095f576008546007541415610c98575050565b610ca6600780546001019055565b6000610cb160075490565b601154909150600090610cc484436138e8565b610cce9190613916565b905060118181548110610ce357610ce361357a565b600091825260208220600260039092020101805491610d0183613648565b9190505550610d10828261274f565b610d1a33836127a3565b50508080610d2790613648565b915050610c80565b60006001600160a01b038216610d9a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610739565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610de05760405162461bcd60e51b815260040161073990613545565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600080606080610e398561235c565b610e555760405162461bcd60e51b8152600401610739906135e1565b6000806000610e6661055989610b89565b9250925092506000610e7760075490565b67ffffffffffffffff811115610e8f57610e8f6131ee565b604051908082528060200260200182016040528015610eb8578160200160208202803683370190505b509050600060015b6007548111610f85576000610ed761055983610b89565b9250505060005b8151811015610f70576000828281518110610efb57610efb61357a565b6020026020010151118015610f2957506000868281518110610f1f57610f1f61357a565b6020026020010151115b15610f5e5782858581518110610f4157610f4161357a565b602090810291909101015283610f5681613648565b945050610f70565b80610f6881613648565b915050610ede565b50508080610f7d90613648565b915050610ec0565b509399929850909650945092505050565b60606001805461064e9061350a565b610fae8261235c565b610fca5760405162461bcd60e51b8152600401610739906135e1565b610fd5335b836123e7565b610ff15760405162461bcd60e51b81526004016107399061392a565b600a811061104c5760405162461bcd60e51b815260206004820152602260248201527f4552524f523a206d657373616765206d7573742062652066726f6d203020746f604482015261203960f01b6064820152608401610739565b66038d7ea4c68000341015801561106a575066b1a2bc2ec500003411155b6110cd5760405162461bcd60e51b815260206004820152602e60248201527f4552524f523a2072616e676520302e303031202d20302e30352045544820726560448201526d1c5d5a5c9959081d1bc81c1bdcdd60921b6064820152608401610739565b60008281526010602052604081208281556002018054916110ed83613648565b9091555050600a82905543600b55600c546011805490919081106111135761111361357a565b600091825260208220600390910201546040516001600160a01b03909116913480156108fc02929091818181858888f1935050505015801561086f573d6000803e3d6000fd5b6001600160a01b0382163314156111b25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610739565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61124260405180606001604052806000815260200160008152602001600081525090565b61124b8261235c565b6112675760405162461bcd60e51b8152600401610739906135e1565b50600090815260106020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b6112cd604051806060016040528060006001600160a01b0316815260200160608152602001600081525090565b60115482106113155760405162461bcd60e51b81526020600482015260146024820152734552524f523a206f7574206f6620626f756e647360601b6044820152606401610739565b601182815481106113285761132861357a565b6000918252602091829020604080516060810190915260039092020180546001600160a01b0316825260018101805492939192918401916113689061350a565b80601f01602080910402602001604051908101604052809291908181526020018280546113949061350a565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b505050505081526020016002820154815250509050919050565b61140433610fcf565b6114205760405162461bcd60e51b815260040161073990613590565b61142c848484846128d6565b50505050565b6060601280546114419061350a565b1590506114875760405162461bcd60e51b815260206004820152601460248201527311549493d48e88135a5cd8dbdb999a59dd5c995960621b6044820152606401610739565b6114908261235c565b6114ac5760405162461bcd60e51b8152600401610739906135e1565b60008060006114ba85610e2a565b6040805160208101909152600081529396509194509092506060905060015b600854811161164057600e805461150f6114f4886002613972565b6114ff9060016138e8565b6115099085613916565b8b612909565b6115199190613916565b815481106115295761152961357a565b906000526020600020016040516020016115439190613991565b60405160208183030381529060405291508261160b600261156560028c612909565b600b5461157291906138e8565b61157c9190613916565b611586848c612932565b611590858d612a08565b6102bc61159e8c60016138e8565b6115a990601e613972565b6115b49060326138e8565b116115df576115c48b60016138e8565b6115cf90601e613972565b6115da9060326138e8565b6115e3565b6102bc5b6040518060400160405280600981526020016802330303030303030360bc1b81525088612ad7565b60405160200161161c9291906139af565b6040516020818303038152906040529250808061163890613648565b9150506114d9565b5060005b83518110156118835760008482815181106116615761166161357a565b602002602001015111801561168f5750878482815181106116845761168461357a565b602002602001015114155b1561184a57600088815260106020819052604082205486519092908790859081106116bc576116bc61357a565b602002602001015181526020019081526020016000206000015414611702576040518060400160405280600981526020016808d999999999998d0d60ba1b815250611725565b6040518060400160405280600981526020016811b33333333333333360b91b8152505b9150826117bf600261173860028c612909565b600b5461174591906138e8565b61174f9190613916565b6117728785815181106117645761176461357a565b60200260200101518c612932565b6117958886815181106117875761178761357a565b60200260200101518d612a08565b60326040518060400160405280600981526020016802330303030303030360bc1b81525088612ad7565b6118226117cc8b8c612932565b6117d68c8d612a08565b6117f98987815181106117eb576117eb61357a565b60200260200101518e612932565b61181c8a888151811061180e5761180e61357a565b60200260200101518f612a08565b88612c7e565b604051602001611834939291906139de565b6040516020818303038152906040529250611871565b83818151811061185c5761185c61357a565b60200260200101516000141561187157611883565b8061187b81613648565b915050611644565b508161195c600261189560028b612909565b600b546118a291906138e8565b6118ac9190613916565b6118b68a8b612932565b6118c08b8c612a08565b6103206118ce8b60016138e8565b6118d9906023613972565b6118e49060326138e8565b1161190f576118f48a60016138e8565b6118ff906023613972565b61190a9060326138e8565b611913565b6103205b6040518060400160405280600981526020016802330303030303030360bc1b8152506040518060400160405280600981526020016823666666666666373760b81b815250612ad7565b60405160200161196d9291906139af565b604051602081830303815290604052915081611a03600261198f60028b612909565b600b5461199c91906138e8565b6119a69190613916565b6119b08a8b612932565b6119ba8b8c612a08565b603c6040518060400160405280600981526020016802330303030303030360bc1b815250604051806040016040528060078152602001660233030303030360cc1b815250612ad7565b604051602001611a149291906139af565b60408051601f19818403018152918152600089815260106020522054600980549294508492611b4392908110611a4c57611a4c61357a565b906000526020600020018054611a619061350a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d9061350a565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b5050505050611ae98a8b612932565b611af38b8c612a08565b611afe90600d6138e8565b6040518060400160405280600781526020016611b3333333333360c91b8152506040518060400160405280600781526020016611b3333333333360c91b815250612cd3565b604051602001611b549291906139af565b604051602081830303815290604052915081611bee6002611b7660028b612909565b600b54611b8391906138e8565b611b8d9190613916565b611b99600a548b612932565b611ba5600a548c612a08565b603c6040518060400160405280600781526020016611b3333333333360c91b8152506040518060400160405280600981526020016802330303030303030360bc1b815250612ad7565b604051602001611bff9291906139af565b60405160208183030381529060405291506000600f83604051602001611c26929190613a21565b60408051601f1981840301815291905298975050505050505050565b600080805b601154811015611cba578260118281548110611c6557611c6561357a565b9060005260206000209060030201600201541115611ca85760118181548110611c9057611c9061357a565b90600052602060002090600302016002015492508091505b80611cb281613648565b915050611c47565b50600c5550565b60408051600580825260c0820190925260009182916060918391906020820160a080368337019050506040516370a0823160e01b81526001600160a01b03871660048201529091507306012c8cf97bead5deae237070f9587f8e7a266d906370a0823190602401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613a57565b81600081518110611d7c57611d7c61357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273fbeef911dc5821886e1dda71586d90ed28174b7d906370a0823190602401602060405180830381865afa158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e039190613a57565b81600181518110611e1657611e1661357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b03861660048201527379986af15539de2db9a5086382daeda917a9cf0c906370a0823190602401602060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190613a57565b81600281518110611eb057611eb061357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273f3e778f839934fc819cfa1040aabacecba01e049906370a0823190602401602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613a57565b81600381518110611f4a57611f4a61357a565b60209081029190910101526040516370a0823160e01b81526001600160a01b038616600482015273a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270906370a0823190602401602060405180830381865afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd19190613a57565b81600481518110611fe457611fe461357a565b60200260200101818152505060008060005b8351811015612068578381815181106120115761201161357a565b60200260200101518361202491906138e8565b9250600084828151811061203a5761203a61357a565b60200260200101511115612056576120538260016138e8565b91505b8061206081613648565b915050611ff6565b509096909550909350915050565b60606120818261235c565b61209d5760405162461bcd60e51b8152600401610739906135e1565b60006120a883612651565b6120b184612d1d565b6120ba85610a22565b6120c386611432565b6040516020016120d69493929190613a70565b6040516020818303038152906040529050806040516020016120f89190613b7d565b604051602081830303815290604052915050919050565b6121188261235c565b6121345760405162461bcd60e51b8152600401610739906135e1565b61213d33610fcf565b6121595760405162461bcd60e51b81526004016107399061392a565b60115481106121aa5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a2063686172697479204944206d7573742062652030202d2037006044820152606401610739565b6000828152601060205260409020600101546011805490919081106121d1576121d161357a565b6000918252602082206002600390920201018054916121ef83613bb5565b90915550506000828152601060205260409020600101819055601180548290811061221c5761221c61357a565b60009182526020822060026003909202010180549161223a83613648565b91905055505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6006546001600160a01b0316331461229b5760405162461bcd60e51b815260040161073990613545565b6001600160a01b0381166123005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610739565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123ae82610b89565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f28261235c565b6124535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610739565b600061245e83610b89565b9050806001600160a01b0316846001600160a01b031614806124995750836001600160a01b031661248e846106d1565b6001600160a01b0316145b806124a957506124a98185612243565b949350505050565b826001600160a01b03166124c482610b89565b6001600160a01b03161461252c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610739565b6001600160a01b03821661258e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610739565b612599600082612379565b6001600160a01b03831660009081526003602052604081208054600192906125c2908490613bcc565b90915550506001600160a01b03821660009081526003602052604081208054600192906125f09084906138e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6060816126755750506040805180820190915260018152600360fc1b602082015290565b8160005b811561269f578061268981613648565b91506126989050600a83613be3565b9150612679565b60008167ffffffffffffffff8111156126ba576126ba6131ee565b6040519080825280601f01601f1916602001820160405280156126e4576020820181803683370190505b5090505b84156124a9576126f9600183613bcc565b9150612706600a86613916565b6127119060306138e8565b60f81b8183815181106127265761272661357a565b60200101906001600160f81b031916908160001a905350612748600a86613be3565b94506126e8565b60006040518060600160405280600a856127699190613916565b8152602080820194909452600060409182018190529485526010845293849020815181559281015160018401559092015160029091015550565b6001600160a01b0382166127f95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610739565b6128028161235c565b1561284f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610739565b6001600160a01b03821660009081526003602052604081208054600192906128789084906138e8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6128e18484846124b1565b6128ed84848484612d7f565b61142c5760405162461bcd60e51b815260040161073990613bf7565b60008061291583612e7d565b90508084601481106129295761292961357a565b1a949350505050565b600d546000908190612945600185612909565b600b5461295291906138e8565b61295c9190613916565b90506002600d82815481106129735761297361357a565b9060005260206000200154610fa061298b9190613be3565b6129959190613be3565b600d82815481106129a8576129a861357a565b9060005260206000200154600d83815481106129c6576129c661357a565b90600052602060002001546001876129de9190613bcc565b6129e89190613916565b6129f490610fa0613972565b6129fe9190613be3565b6124a991906138e8565b600d546000908190612a1b600185612909565b600b54612a2891906138e8565b612a329190613916565b90506002600d8281548110612a4957612a4961357a565b9060005260206000200154600854612a619190613be3565b612a6d90610fa0613be3565b612a779190613be3565b600d8281548110612a8a57612a8a61357a565b9060005260206000200154600854612aa29190613be3565b600d8381548110612ab557612ab561357a565b9060005260206000200154600187612acd9190613bcc565b6129e89190613be3565b60408051602081019091526000815260609087612b3157612af787612651565b612b0087612651565b612b0987612651565b604051602001612b1b93929190613c49565b6040516020818303038152906040529050612c4d565b6000878611612b7057612b4c612b47878a613bcc565b612651565b604051602001612b5c9190613cd8565b604051602081830303815290604052612b9d565b612b7d612b478988613bcc565b604051602001612b8d9190613cf4565b6040516020818303038152906040525b90506000878711612bd957612bb5612b47888a613bcc565b604051602001612bc59190613cd8565b604051602081830303815290604052612c06565b612be6612b478989613bcc565b604051602001612bf69190613cf4565b6040516020818303038152906040525b90508181612c18612b478a6002613972565b612c26612b478b6002613972565b604051602001612c399493929190613d1d565b604051602081830303815290604052925050505b808385604051602001612c6293929190613dd8565b6040516020818303038152906040529150509695505050505050565b6060612c8986612651565b612c9286612651565b612c9b86612651565b612ca486612651565b85604051602001612cb9959493929190613e6f565b604051602081830303815290604052905095945050505050565b6060612cde85612651565b612ce785612651565b836013600181548110612cfc57612cfc61357a565b90600052602060002001868a604051602001612cb996959493929190613f72565b6060612d2843612651565b6013600081548110612d3c57612d3c61357a565b90600052602060002001612d57612d5285610b89565b612ed4565b604051602001612d699392919061405d565b6040516020818303038152906040529050919050565b60006001600160a01b0384163b15612e7257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612dc39033908990889088906004016140f6565b6020604051808303816000875af1925050508015612dfe575060408051601f3d908101601f19168201909252612dfb91810190614133565b60015b612e58573d808015612e2c576040519150601f19603f3d011682016040523d82523d6000602084013e612e31565b606091505b508051612e505760405162461bcd60e51b815260040161073990613bf7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124a9565b506001949350505050565b6000612e8882610b89565b600b5460405160609290921b6bffffffffffffffffffffffff19166020830152603482018490526054820152607401604051602081830303815290604052805190602001209050919050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b6014811015613014576000612f11826013613bcc565b612f1c906008613972565b612f27906002614234565b612f3a906001600160a01b038716613be3565b60f81b9050600060108260f81c612f519190614240565b60f81b905060008160f81c6010612f689190614262565b8360f81c612f769190614283565b60f81b9050612f848261301b565b85612f90866002613972565b81518110612fa057612fa061357a565b60200101906001600160f81b031916908160001a905350612fc08161301b565b85612fcc866002613972565b612fd79060016138e8565b81518110612fe757612fe761357a565b60200101906001600160f81b031916908160001a905350505050808061300c90613648565b915050612efb565b5092915050565b6000600a60f883901c10156130425761303960f883901c60306142a6565b60f81b92915050565b61303960f883901c60576142a6565b919050565b8280546130629061350a565b90600052602060002090601f01602090048101928261308457600085556130ca565b82601f1061309d57805160ff19168380011785556130ca565b828001600101855582156130ca579182015b828111156130ca5782518255916020019190600101906130af565b506130d69291506130da565b5090565b5b808211156130d657600081556001016130db565b6001600160e01b0319811681146109d357600080fd5b60006020828403121561311757600080fd5b8135613122816130ef565b9392505050565b60005b8381101561314457818101518382015260200161312c565b8381111561142c5750506000910152565b6000815180845261316d816020860160208601613129565b601f01601f19169290920160200192915050565b6020815260006131226020830184613155565b6000602082840312156131a657600080fd5b5035919050565b80356001600160a01b038116811461305157600080fd5b600080604083850312156131d757600080fd5b6131e0836131ad565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561321f5761321f6131ee565b604051601f8501601f19908116603f01168101908282118183101715613247576132476131ee565b8160405280935085815286868601111561326057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561328c57600080fd5b813567ffffffffffffffff8111156132a357600080fd5b8201601f810184136132b457600080fd5b6124a984823560208401613204565b6000806000606084860312156132d857600080fd5b6132e1846131ad565b92506132ef602085016131ad565b9150604084013590509250925092565b60006020828403121561331157600080fd5b613122826131ad565b600081518084526020808501945080840160005b8381101561334a5781518752958201959082019060010161332e565b509495945050505050565b848152836020820152608060408201526000613374608083018561331a565b8281036060840152613386818561331a565b979650505050505050565b600080604083850312156133a457600080fd5b50508035926020909101359150565b600080604083850312156133c657600080fd5b6133cf836131ad565b9150602083013580151581146133e457600080fd5b809150509250929050565b602080825282516001600160a01b0316828201528201516060604083015260009061341d6080840182613155565b9050604084015160608401528091505092915050565b6000806000806080858703121561344957600080fd5b613452856131ad565b9350613460602086016131ad565b925060408501359150606085013567ffffffffffffffff81111561348357600080fd5b8501601f8101871361349457600080fd5b6134a387823560208401613204565b91505092959194509250565b8381528260208201526060604082015260006134ce606083018461331a565b95945050505050565b600080604083850312156134ea57600080fd5b6134f3836131ad565b9150613501602084016131ad565b90509250929050565b600181811c9082168061351e57607f821691505b6020821081141561353f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526031908201527f45524337323155524953746f726167653a2055524920717565727920666f72206040820152703737b732bc34b9ba32b73a103a37b5b2b760791b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561365c5761365c613632565b5060010190565b8054600090600181811c908083168061367d57607f831692505b602080841082141561369f57634e487b7160e01b600052602260045260246000fd5b8180156136b357600181146136c4576136f1565b60ff198616895284890196506136f1565b60008881526020902060005b868110156136e95781548b8201529085019083016136d0565b505084890196505b50505050505092915050565b6000815161370f818560208601613129565b9290920192915050565b7f7b2274726169745f74797065223a224368617269747920566f7465222c227661815265363ab2911d1160d11b6020820152600061375a6026830189613663565b62089f4b60ea1b81527f7b2274726169745f74797065223a22446567726565222c2276616c7565223a006003820152875161379c816022840160208c01613129565b611f4b60f21b602292909101918201527f7b2274726169745f74797065223a224d657373616765222c2276616c7565223a6024820152601160f91b604482015286516137ef816045840160208b01613129565b6138da6138cd6138c761389e61386161389861386f61386161385b61382260458b8d010162089f4b60ea1b815260030190565b7f7b2274726169745f74797065223a22546f74616c204d65737361676573222c228152663b30b63ab2911d60c91b602082015260270190565b8f6136fd565b611f4b60f21b815260020190565b7f7b2274726169745f74797065223a2242616c616e6365222c2276616c7565223a815260200190565b8b6136fd565b7f7b2274726169745f74797065223a2256617269657479222c2276616c7565223a815260200190565b876136fd565b607d60f81b815260010190565b9a9950505050505050505050565b600082198211156138fb576138fb613632565b500190565b634e487b7160e01b600052601260045260246000fd5b60008261392557613925613900565b500690565b60208082526028908201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604082015267185c1c1c9bdd995960c21b606082015260800190565b600081600019048311821515161561398c5761398c613632565b500290565b600061399d8284613663565b611b1b60f11b81526002019392505050565b600083516139c1818460208801613129565b8351908301906139d5818360208801613129565b01949350505050565b600084516139f0818460208901613129565b845190830190613a04818360208901613129565b8451910190613a17818360208801613129565b0195945050505050565b6000613a2d8285613663565b8351613a3d818360208801613129565b651e17b9bb339f60d11b9101908152600601949350505050565b600060208284031215613a6957600080fd5b5051919050565b6e7b226e616d65223a224e6f6465202360881b81528451600090613a9b81600f850160208a01613129565b71111610113232b9b1b934b83a34b7b7111d1160711b600f918401918201528551613acd816021840160208a01613129565b70222c202261747472696275746573223a5b60781b602192909101918201528451613aff816032840160208901613129565b605d60f81b603292909101918201527f2c2022637265617465645f6279223a2254616b656e73205468656f72656d222c603382015269101134b6b0b3b2911d1160b11b60538201528351613b5a81605d840160208801613129565b613b71605d8284010161227d60f01b815260020190565b98975050505050505050565b6f19185d184e9d195e1d0bdc1b185a5b8b60821b815260008251613ba8816010850160208701613129565b9190910160100192915050565b600081613bc457613bc4613632565b506000190190565b600082821015613bde57613bde613632565b500390565b600082613bf257613bf2613900565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6b3c636972636c652063783d2760a01b815260008451613c7081600c850160208901613129565b65272063793d2760d01b600c918401918201528451613c96816012840160208901613129565b642720723d2760d81b601292909101918201528351613cbc816017840160208801613129565b61013960f51b6017929091019182015260190195945050505050565b60008251613cea818460208701613129565b9190910192915050565b602d60f81b815260008251613d10816001850160208701613129565b9190910160010192915050565b683c7265637420783d2760b81b815260008551613d41816009850160208a01613129565b642720793d2760d81b6009918401918201528551613d6681600e840160208a01613129565b68272077696474683d2760b81b600e92909101918201528451613d90816017840160208901613129565b6927206865696768743d2760b01b601792909101918201528351613dbb816021840160208801613129565b61013960f51b602192909101918201526023019695505050505050565b60008451613dea818460208901613129565b6566696c6c3d2760d01b9083019081528451613e0d816006840160208901613129565b6927207374726f6b653d2760b01b600692909101918201528351613e38816010840160208801613129565b7f27207374726f6b652d77696474683d2735707427202f3e0000000000000000006010929091019182015260270195945050505050565b693c6c696e652078313d2760b01b815260008651613e9481600a850160208b01613129565b65272079313d2760d01b600a918401918201528651613eba816010840160208b01613129565b65272078323d2760d01b601092909101918201528551613ee1816016840160208a01613129565b65272079323d2760d01b601692909101918201528451613f0881601c840160208901613129565b6927207374726f6b653d2760b01b601c92909101918201528351613f33816026840160208801613129565b613f656026828401017f27207374726f6b652d77696474683d273135707427202f3e0000000000000000815260180190565b9998505050505050505050565b683c7465787420783d2760b81b815260008751613f96816009850160208c01613129565b642720793d2760d81b6009918401918201528751613fbb81600e840160208c01613129565b7f2720666f6e742d73697a653d2734307074272066696c6c3d2700000000000000600e92909101918201528651613ff9816027840160208b01613129565b61400860278284010188613663565b915050845161401b818360208901613129565b61139f60f11b91019081528351614039816002840160208801613129565b661e17ba32bc3a1f60c91b6002929091019182015260090198975050505050505050565b7f5468652063727970746f2070616e6f707469636f6e2072657665616c732e5c6e8152612e3760f11b60208201527f4c6173742072656672657368656420617420626c6f636b2000000000000000006022820152600084516140c681603a850160208901613129565b632e372e3760e11b603a918401918201526140e4603e820186613663565b90508351613a17818360208801613129565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061412990830184613155565b9695505050505050565b60006020828403121561414557600080fd5b8151613122816130ef565b600181815b8085111561418b57816000190482111561417157614171613632565b8085161561417e57918102915b93841c9390800290614155565b509250929050565b6000826141a257506001610639565b816141af57506000610639565b81600181146141c557600281146141cf576141eb565b6001915050610639565b60ff8411156141e0576141e0613632565b50506001821b610639565b5060208310610133831016604e8410600b841016171561420e575081810a610639565b6142188383614150565b806000190482111561422c5761422c613632565b029392505050565b60006131228383614193565b600060ff83168061425357614253613900565b8060ff84160491505092915050565b600060ff821660ff84168160ff048111821515161561422c5761422c613632565b600060ff821660ff84168082101561429d5761429d613632565b90039392505050565b600060ff821660ff84168060ff038211156142c3576142c3613632565b01939250505056fea264697066735822122064b511421eaca61c72995a5d5b60a386018b0a1205144177f1e46bc1acf8093f64736f6c634300080b0033
Deployed Bytecode Sourcemap
37931:16826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10589:292;;;;;;;;;;-1:-1:-1;10589:292:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;10589:292:0;;;;;;;;11521:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12981:221::-;;;;;;;;;;-1:-1:-1;12981:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1714:32:1;;;1696:51;;1684:2;1669:18;12981:221:0;1550:203:1;12518:397:0;;;;;;;;;;-1:-1:-1;12518:397:0;;;;;:::i;:::-;;:::i;:::-;;38097:91;;;;;;;;;;-1:-1:-1;38170:10:0;;38097:91;;;2341:25:1;;;2329:2;2314:18;38097:91:0;2195:177:1;46864:357:0;;;;;;;;;;-1:-1:-1;46864:357:0;;;;;:::i;:::-;;:::i;13871:305::-;;;;;;;;;;-1:-1:-1;13871:305:0;;;;;:::i;:::-;;:::i;14247:151::-;;;;;;;;;;-1:-1:-1;14247:151:0;;;;;:::i;:::-;;:::i;38326:43::-;;;;;;;;;;;;;;;;52089:1182;;;;;;;;;;-1:-1:-1;52089:1182:0;;;;;:::i;:::-;;:::i;38384:29::-;;;;;;;;;;;;;;;;38279:31;;;;;;;;;;;;;;;;11215:239;;;;;;;;;;-1:-1:-1;11215:239:0;;;;;:::i;:::-;;:::i;47696:611::-;;;;;;;;;;-1:-1:-1;47696:611:0;;;;;:::i;:::-;;:::i;10945:208::-;;;;;;;;;;-1:-1:-1;10945:208:0;;;;;:::i;:::-;;:::i;24060:148::-;;;;;;;;;;;;;:::i;44854:850::-;;;;;;;;;;-1:-1:-1;44854:850:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;23409:87::-;;;;;;;;;;-1:-1:-1;23482:6:0;;-1:-1:-1;;;;;23482:6:0;23409:87;;11690:104;;;;;;;;;;;;;:::i;39647:734::-;;;;;;:::i;:::-;;:::i;13274:295::-;;;;;;;;;;-1:-1:-1;13274:295:0;;;;;:::i;:::-;;:::i;39440:201::-;;;;;;;;;;-1:-1:-1;39440:201:0;;;;;:::i;:::-;;:::i;:::-;;;;5993:13:1;;5975:32;;6063:4;6051:17;;;6045:24;6023:20;;;6016:54;6114:17;;;6108:24;6086:20;;;6079:54;5963:2;5948:18;39440:201:0;5785:354:1;40881:173:0;;;;;;;;;;-1:-1:-1;40881:173:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14469:285::-;;;;;;;;;;-1:-1:-1;14469:285:0;;;;;:::i;:::-;;:::i;48331:3254::-;;;;;;;;;;-1:-1:-1;48331:3254:0;;;;;:::i;:::-;;:::i;41060:351::-;;;;;;;;;;;;;:::i;45713:1081::-;;;;;;;;;;-1:-1:-1;45713:1081:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;53279:756::-;;;;;;;;;;-1:-1:-1;53279:756:0;;;;;:::i;:::-;;:::i;41417:510::-;;;;;;;;;;-1:-1:-1;41417:510:0;;;;;:::i;:::-;;:::i;13640:164::-;;;;;;;;;;-1:-1:-1;13640:164:0;;;;;:::i;:::-;;:::i;24363:244::-;;;;;;;;;;-1:-1:-1;24363:244:0;;;;;:::i;:::-;;:::i;10589:292::-;10691:4;-1:-1:-1;;;;;;10715:40:0;;-1:-1:-1;;;10715:40:0;;:105;;-1:-1:-1;;;;;;;10772:48:0;;-1:-1:-1;;;10772:48:0;10715:105;:158;;;-1:-1:-1;;;;;;;;;;7184:40:0;;;10837:36;10708:165;10589:292;-1:-1:-1;;10589:292:0:o;11521:100::-;11575:13;11608:5;11601:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11521:100;:::o;12981:221::-;13057:7;13085:16;13093:7;13085;:16::i;:::-;13077:73;;;;-1:-1:-1;;;13077:73:0;;8607:2:1;13077:73:0;;;8589:21:1;8646:2;8626:18;;;8619:30;8685:34;8665:18;;;8658:62;-1:-1:-1;;;8736:18:1;;;8729:42;8788:19;;13077:73:0;;;;;;;;;-1:-1:-1;13170:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13170:24:0;;12981:221::o;12518:397::-;12599:13;12615:23;12630:7;12615:14;:23::i;:::-;12599:39;;12663:5;-1:-1:-1;;;;;12657:11:0;:2;-1:-1:-1;;;;;12657:11:0;;;12649:57;;;;-1:-1:-1;;;12649:57:0;;9020:2:1;12649:57:0;;;9002:21:1;9059:2;9039:18;;;9032:30;9098:34;9078:18;;;9071:62;-1:-1:-1;;;9149:18:1;;;9142:31;9190:19;;12649:57:0;8818:397:1;12649:57:0;7858:10;-1:-1:-1;;;;;12727:21:0;;;;:62;;-1:-1:-1;12752:37:0;12769:5;7858:10;13640:164;:::i;12752:37::-;12719:154;;;;-1:-1:-1;;;12719:154:0;;9422:2:1;12719:154:0;;;9404:21:1;9461:2;9441:18;;;9434:30;9500:34;9480:18;;;9473:62;9571:26;9551:18;;;9544:54;9615:19;;12719:154:0;9220:420:1;12719:154:0;12886:21;12895:2;12899:7;12886:8;:21::i;:::-;12588:327;12518:397;;:::o;46864:357::-;23482:6;;-1:-1:-1;;;;;23482:6:0;7858:10;23629:23;23621:68;;;;-1:-1:-1;;;23621:68:0;;;;;;;:::i;:::-;46957:1:::1;46943:3;46937:17;;;;;:::i;:::-;;;:21;46929:59;;;::::0;-1:-1:-1;;;46929:59:0;;10208:2:1;46929:59:0::1;::::0;::::1;10190:21:1::0;10247:2;10227:18;;;10220:30;10286:27;10266:18;;;10259:55;10331:18;;46929:59:0::1;10006:349:1::0;46929:59:0::1;47009:1;47011;47009:4;;;;;;;;:::i;:::-;;;;;;;;47003:18;;;;;:::i;:::-;:23:::0;46999:215:::1;::::0;-1:-1:-1;46999:215:0::1;;47050:3;47043:1;47045;47043:4;;;;;;;;:::i;:::-;;;;;;;;:10;;;;;;;;;;;;:::i;:::-;;46864:357:::0;:::o;46999:215::-:1;47081:1;47083;47081:4;;;;;;;;:::i;:::-;;;;;;;;47075:18;;;;;:::i;:::-;:23:::0;47071:143:::1;::::0;-1:-1:-1;47071:143:0::1;;47122:3;47115:1;47117;47115:4;;;;;;;;:::i;47071:143::-;47167:1;47153:3;47147:17;;;;;:::i;:::-;;;:21;47143:71;;;47185:9:::0;;::::1;::::0;:3:::1;::::0;:9:::1;::::0;::::1;::::0;::::1;:::i;47143:71::-;46864:357:::0;:::o;13871:305::-;14032:41;7858:10;14065:7;14032:18;:41::i;:::-;14024:103;;;;-1:-1:-1;;;14024:103:0;;;;;;;:::i;:::-;14140:28;14150:4;14156:2;14160:7;14140:9;:28::i;14247:151::-;14351:39;14368:4;14374:2;14378:7;14351:39;;;;;;;;;;;;:16;:39::i;52089:1182::-;52151:13;52187:16;52195:7;52187;:16::i;:::-;52179:78;;;;-1:-1:-1;;;52179:78:0;;;;;;;:::i;:::-;52275:15;52292:16;52311:26;52341:21;52354:7;52341:12;:21::i;:::-;52274:88;;;;;;;52373:14;52407:6;52402:207;52423:9;:16;52419:1;:20;52402:207;;;52465:9;52475:1;52465:12;;;;;;;;:::i;:::-;;;;;;;52479:1;52465:15;52461:137;;;52501:5;;52461:137;52546:7;52532:9;52542:1;52532:12;;;;;;;;:::i;:::-;;;;;;;:21;52528:70;;52574:8;;;;:::i;:::-;;;;52528:70;52441:3;;;;:::i;:::-;;;;52402:207;;;-1:-1:-1;52619:21:0;52734:14;;;:5;:14;;;;;:29;;;52724:9;:40;;:9;;52734:29;52724:40;;;;;;:::i;:::-;;;;;;;;;;;:45;;52826:24;52843:6;52826:16;:24::i;:::-;52926:14;;;;:5;:14;;;;;:23;52909:41;;:16;:41::i;:::-;53032:14;;;;:5;:14;;;;;:22;;;53015:40;;:16;:40::i;:::-;53112:25;53129:7;53112:16;:25::i;:::-;53194:26;53211:8;53194:16;:26::i;:::-;52650:586;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;52650:586:0;;;;;;;;;;52089:1182;-1:-1:-1;;;;;;;52089:1182:0:o;11215:239::-;11287:7;11323:16;;;:7;:16;;;;;;-1:-1:-1;;;;;11323:16:0;11358:19;11350:73;;;;-1:-1:-1;;;11350:73:0;;16762:2:1;11350:73:0;;;16744:21:1;16801:2;16781:18;;;16774:30;16840:34;16820:18;;;16813:62;-1:-1:-1;;;16891:18:1;;;16884:39;16940:19;;11350:73:0;16560:405:1;47696:611:0;23482:6;;-1:-1:-1;;;;;23482:6:0;7858:10;23629:23;23621:68;;;;-1:-1:-1;;;23621:68:0;;;;;;;:::i;:::-;47784:10:::1;::::0;47762:9:::1;8949:14:::0;47762:32:::1;47754:67;;;::::0;-1:-1:-1;;;47754:67:0;;17172:2:1;47754:67:0::1;::::0;::::1;17154:21:1::0;17211:2;17191:18;;;17184:30;17250:25;17230:18;;;17223:53;17293:18;;47754:67:0::1;16970:347:1::0;47754:67:0::1;47837:6;47832:468;47853:1;47849;:5;47832:468;;;47903:10;::::0;47880:9:::1;8949:14:::0;47880:33:::1;47876:108;;;47043:10;46864:357:::0;:::o;47876:108::-:1;47998:21;:9;9068:19:::0;;9086:1;9068:19;;;8979:127;47998:21:::1;48034:17;48054:19;:9;8949:14:::0;;8857:114;48054:19:::1;48132:9;:16:::0;48034:39;;-1:-1:-1;48090:18:0::1;::::0;48112:16:::1;48127:1:::0;48112:12:::1;:16;:::i;:::-;48111:37;;;;:::i;:::-;48090:58;;48163:9;48173:13;48163:24;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:30:::1;:24;::::0;;::::1;;:30;:32:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;48210:33;48218:9;48229:13;48210:7;:33::i;:::-;48260:28;48266:10;48278:9;48260:5;:28::i;:::-;47861:439;;47856:3;;;;;:::i;:::-;;;;47832:468;;10945:208:::0;11017:7;-1:-1:-1;;;;;11045:19:0;;11037:74;;;;-1:-1:-1;;;11037:74:0;;17906:2:1;11037:74:0;;;17888:21:1;17945:2;17925:18;;;17918:30;17984:34;17964:18;;;17957:62;-1:-1:-1;;;18035:18:1;;;18028:40;18085:19;;11037:74:0;17704:406:1;11037:74:0;-1:-1:-1;;;;;;11129:16:0;;;;;:9;:16;;;;;;;10945:208::o;24060:148::-;23482:6;;-1:-1:-1;;;;;23482:6:0;7858:10;23629:23;23621:68;;;;-1:-1:-1;;;23621:68:0;;;;;;;:::i;:::-;24151:6:::1;::::0;24130:40:::1;::::0;24167:1:::1;::::0;-1:-1:-1;;;;;24151:6:0::1;::::0;24130:40:::1;::::0;24167:1;;24130:40:::1;24181:6;:19:::0;;-1:-1:-1;;;;;;24181:19:0::1;::::0;;24060:148::o;44854:850::-;44914:7;44923;44932:16;44950;44987;44995:7;44987;:16::i;:::-;44979:78;;;;-1:-1:-1;;;44979:78:0;;;;;;;:::i;:::-;45069:15;45086:16;45104:23;45131:31;45145:16;45153:7;45145;:16::i;45131:31::-;45068:94;;;;;;45173:26;45216:19;:9;8949:14;;8857:114;45216:19;45202:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45202:34:0;-1:-1:-1;45173:63:0;-1:-1:-1;45247:10:0;45286:1;45272:370;45294:9;8949:14;45289:1;:24;45272:370;;45339:24;45367:25;45381:10;45389:1;45381:7;:10::i;45367:25::-;45335:57;;;;45412:6;45407:224;45428:7;:14;45424:1;:18;45407:224;;;45483:1;45472:7;45480:1;45472:10;;;;;;;;:::i;:::-;;;;;;;:12;:27;;;;;45498:1;45488:6;45495:1;45488:9;;;;;;;;:::i;:::-;;;;;;;:11;45472:27;45468:148;;;45540:1;45524:9;45534:2;45524:13;;;;;;;;:::i;:::-;;;;;;;;;;:17;45564:4;;;;:::i;:::-;;;;45591:5;;45468:148;45444:3;;;;:::i;:::-;;;;45407:224;;;;45320:322;45315:3;;;;;:::i;:::-;;;;45272:370;;;-1:-1:-1;45659:7:0;;45668:8;;-1:-1:-1;45678:6:0;;-1:-1:-1;45668:8:0;-1:-1:-1;44854:850:0;-1:-1:-1;;;44854:850:0:o;11690:104::-;11746:13;11779:7;11772:14;;;;;:::i;39647:734::-;39738:16;39746:7;39738;:16::i;:::-;39730:78;;;;-1:-1:-1;;;39730:78:0;;;;;;;:::i;:::-;39827:41;7858:10;39846:12;39860:7;39827:18;:41::i;:::-;39819:94;;;;-1:-1:-1;;;39819:94:0;;;;;;;:::i;:::-;39945:2;39932:10;:15;39924:61;;;;-1:-1:-1;;;39924:61:0;;18726:2:1;39924:61:0;;;18708:21:1;18765:2;18745:18;;;18738:30;18804:34;18784:18;;;18777:62;-1:-1:-1;;;18855:18:1;;;18848:32;18897:19;;39924:61:0;18524:398:1;39924:61:0;40017:16;40004:9;:29;;:63;;;;;40050:17;40037:9;:30;;40004:63;39996:136;;;;-1:-1:-1;;;39996:136:0;;19129:2:1;39996:136:0;;;19111:21:1;19168:2;19148:18;;;19141:30;19207:34;19187:18;;;19180:62;-1:-1:-1;;;19258:18:1;;;19251:44;19312:19;;39996:136:0;18927:410:1;39996:136:0;40145:14;;;;:5;:14;;;;;:36;;;40192:22;;:24;;;;;;:::i;:::-;;;;-1:-1:-1;;40227:12:0;:22;;;40276:12;40260:13;:28;40317:10;;40307:9;:21;;:9;;40317:10;40307:21;;;;;;:::i;:::-;;;;;;;;;;;;;:26;40299:55;;-1:-1:-1;;;;;40307:26:0;;;;40344:9;40299:55;;;;;40344:9;;40299:55;40307:21;40299:55;40344:9;40307:26;40299:55;;;;;;;;;;;;;;;;;;;13274:295;-1:-1:-1;;;;;13377:24:0;;7858:10;13377:24;;13369:62;;;;-1:-1:-1;;;13369:62:0;;19544:2:1;13369:62:0;;;19526:21:1;19583:2;19563:18;;;19556:30;19622:27;19602:18;;;19595:55;19667:18;;13369:62:0;19342:349:1;13369:62:0;7858:10;13444:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;13444:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;13444:53:0;;;;;;;;;;13513:48;;540:41:1;;;13444:42:0;;7858:10;13513:48;;513:18:1;13513:48:0;;;;;;;13274:295;;:::o;39440:201::-;39498:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;39498:11:0;39530:16;39538:7;39530;:16::i;:::-;39522:78;;;;-1:-1:-1;;;39522:78:0;;;;;;;:::i;:::-;-1:-1:-1;39618:14:0;;;;:5;:14;;;;;;;;;39611:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39440:201::o;40881:173::-;40936:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40936:14:0;40975:9;:16;40971:20;;40963:52;;;;-1:-1:-1;;;40963:52:0;;19898:2:1;40963:52:0;;;19880:21:1;19937:2;19917:18;;;19910:30;-1:-1:-1;;;19956:18:1;;;19949:50;20016:18;;40963:52:0;19696:344:1;40963:52:0;41033:9;41043:1;41033:12;;;;;;;;:::i;:::-;;;;;;;;;;41026:20;;;;;;;;;41033:12;;;;;41026:20;;-1:-1:-1;;;;;41026:20:0;;;;;;;;;;41033:12;;41026:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40881:173;;;:::o;14469:285::-;14601:41;7858:10;14620:12;7778:98;14601:41;14593:103;;;;-1:-1:-1;;;14593:103:0;;;;;;;:::i;:::-;14707:39;14721:4;14727:2;14731:7;14740:5;14707:13;:39::i;:::-;14469:285;;;;:::o;48331:3254::-;48385:13;48425:3;48419:17;;;;;:::i;:::-;:22;;-1:-1:-1;48411:55:0;;;;-1:-1:-1;;;48411:55:0;;20247:2:1;48411:55:0;;;20229:21:1;20286:2;20266:18;;;20259:30;-1:-1:-1;;;20305:18:1;;;20298:50;20365:18;;48411:55:0;20045:344:1;48411:55:0;48485:16;48493:7;48485;:16::i;:::-;48477:78;;;;-1:-1:-1;;;48477:78:0;;;;;;;:::i;:::-;48577:15;48594:16;48613:26;48643:21;48656:7;48643:12;:21::i;:::-;48693:22;;;;;;;;;:17;:22;;48576:88;;-1:-1:-1;48576:88:0;;-1:-1:-1;48576:88:0;;-1:-1:-1;48726:20:0;;-1:-1:-1;48781:1:0;48767:518;48789:10;;48784:1;:15;48767:518;;48854:7;48896:14;;48862:31;48870:10;48872:8;48870:1;:10;:::i;:::-;:12;;48881:1;48870:12;:::i;:::-;48865:18;;:1;:18;:::i;:::-;48885:7;48862:2;:31::i;:::-;:48;;;;:::i;:::-;48854:57;;;;;;;;:::i;:::-;;;;;;;;48837:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;48821:97;;48963:3;48985:268;49048:1;49031:13;49034:1;49036:7;49031:2;:13::i;:::-;49015;;:29;;;;:::i;:::-;49014:35;;;;:::i;:::-;49072:13;49075:1;49077:7;49072:2;:13::i;:::-;49108;49111:1;49113:7;49108:2;:13::i;:::-;49164:3;49148:9;:7;49156:1;49148:9;:::i;:::-;49147:14;;49159:2;49147:14;:::i;:::-;49144:17;;:2;:17;:::i;:::-;:23;:49;;49180:9;:7;49188:1;49180:9;:::i;:::-;49179:14;;49191:2;49179:14;:::i;:::-;49176:17;;:2;:17;:::i;:::-;49144:49;;;49170:3;49144:49;48985:268;;;;;;;;;;;;;-1:-1:-1;;;48985:268:0;;;49228:6;48985;:268::i;:::-;48946:322;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48933:336;;48801:3;;;;;:::i;:::-;;;;48767:518;;;;49302:6;49297:964;49318:9;:16;49314:1;:20;49297:964;;;49373:1;49360:9;49370:1;49360:12;;;;;;;;:::i;:::-;;;;;;;:14;:39;;;;;49392:7;49378:9;49388:1;49378:12;;;;;;;;:::i;:::-;;;;;;;:21;;49360:39;49356:894;;;49459:14;;;;:5;:14;;;;;;;:23;49435:12;;49459:23;;:14;49435:9;;49445:1;;49435:12;;;;;;:::i;:::-;;;;;;;49429:19;;;;;;;;;;;:28;;;:53;:81;;;;;;;;;;;;;;;-1:-1:-1;;;49429:81:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;49429:81:0;;;;49420:90;;49577:3;49603:241;49670:1;49653:13;49656:1;49658:7;49653:2;:13::i;:::-;49637;;:29;;;;:::i;:::-;49636:35;;;;:::i;:::-;49698:24;49701:9;49711:1;49701:12;;;;;;;;:::i;:::-;;;;;;;49714:7;49698:2;:24::i;:::-;49749;49752:9;49762:1;49752:12;;;;;;;;:::i;:::-;;;;;;;49765:7;49749:2;:24::i;:::-;49800:2;49603:241;;;;;;;;;;;;;-1:-1:-1;;;49603:241:0;;;49815:6;49603;:241::i;:::-;49867:256;49900:19;49903:7;49911;49900:2;:19::i;:::-;49946;49949:7;49957;49946:2;:19::i;:::-;49992:24;49995:9;50005:1;49995:12;;;;;;;;:::i;:::-;;;;;;;50008:7;49992:2;:24::i;:::-;50043;50046:9;50056:1;50046:12;;;;;;;;:::i;:::-;;;;;;;50059:7;50043:2;:24::i;:::-;50094:6;49867;:256::i;:::-;49560:602;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49547:616;;49356:894;;;50193:9;50203:1;50193:12;;;;;;;;:::i;:::-;;;;;;;50207:1;50193:15;50189:61;;;50229:5;;50189:61;49336:3;;;;:::i;:::-;;;;49297:964;;;;50311:3;50329:243;50388:1;50371:13;50374:1;50376:7;50371:2;:13::i;:::-;50355;;:29;;;;:::i;:::-;50354:35;;;;:::i;:::-;50408:19;50411:7;50419;50408:2;:19::i;:::-;50428;50431:7;50439;50428:2;:19::i;:::-;50486:3;50470:9;:7;50478:1;50470:9;:::i;:::-;50469:14;;50481:2;50469:14;:::i;:::-;50466:17;;:2;:17;:::i;:::-;:23;:49;;50502:9;:7;50510:1;50502:9;:::i;:::-;50501:14;;50513:2;50501:14;:::i;:::-;50498:17;;:2;:17;:::i;:::-;50466:49;;;50492:3;50466:49;50329:243;;;;;;;;;;;;;-1:-1:-1;;;50329:243:0;;;;;;;;;;;;;;;;-1:-1:-1;;;50329:243:0;;;:6;:243::i;:::-;50294:308;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50281:322;;50644:3;50662:194;50721:1;50704:13;50707:1;50709:7;50704:2;:13::i;:::-;50688;;:29;;;;:::i;:::-;50687:35;;;;:::i;:::-;50741:19;50744:7;50752;50741:2;:19::i;:::-;50761;50764:7;50772;50761:2;:19::i;:::-;50799:2;50662:194;;;;;;;;;;;;;-1:-1:-1;;;50662:194:0;;;;;;;;;;;;;;;;-1:-1:-1;;;50662:194:0;;;:6;:194::i;:::-;50627:259;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;50627:259:0;;;;;;;;;50979:14;;;;:5;50627:259;50979:14;;:23;50972:6;:31;;50627:259;;-1:-1:-1;50627:259:0;;50946:153;;50979:23;50972:31;;;;;;:::i;:::-;;;;;;;;50946:153;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51004:19;51007:7;51015;51004:2;:19::i;:::-;51024;51027:7;51035;51024:2;:19::i;:::-;:22;;51044:2;51024:22;:::i;:::-;50946:153;;;;;;;;;;;;;-1:-1:-1;;;50946:153:0;;;;;;;;;;;;;;;;-1:-1:-1;;;50946:153:0;;;:7;:153::i;:::-;50911:218;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50898:232;;51171:3;51189:204;51248:1;51231:13;51234:1;51236:7;51231:2;:13::i;:::-;51215;;:29;;;;:::i;:::-;51214:35;;;;:::i;:::-;51268:24;51271:12;;51284:7;51268:2;:24::i;:::-;51293;51296:12;;51309:7;51293:2;:24::i;:::-;51336:2;51189:204;;;;;;;;;;;;;-1:-1:-1;;;51189:204:0;;;;;;;;;;;;;;;;-1:-1:-1;;;51189:204:0;;;:6;:204::i;:::-;51154:269;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51141:283;;51453:17;51490:9;51500:3;51473:74;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;51473:74:0;;;;;;;;;;48331:3254;-1:-1:-1;;;;;;;;48331:3254:0:o;41060:351::-;41105:14;;;41165:203;41189:9;:16;41185:20;;41165:203;;;41252:6;41231:9;41241:1;41231:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;:27;41227:130;;;41288:9;41298:1;41288:12;;;;;;;;:::i;:::-;;;;;;;;;;;:18;;;41279:27;;41340:1;41325:16;;41227:130;41207:3;;;;:::i;:::-;;;;41165:203;;;-1:-1:-1;41378:10:0;:25;-1:-1:-1;41060:351:0:o;45713:1081::-;45849:16;;;45863:1;45849:16;;;;;;;;;45771:7;;;;45789:16;;45771:7;;45849:16;;;;;;;;;;;-1:-1:-1;;45914:71:0;;-1:-1:-1;;;45914:71:0;;-1:-1:-1;;;;;1714:32:1;;45914:71:0;;;1696:51:1;45819:46:0;;-1:-1:-1;45926:42:0;;45914:65;;1669:18:1;;45914:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45898:10;45909:1;45898:13;;;;;;;;:::i;:::-;;;;;;;;;;:87;46030:71;;-1:-1:-1;;;46030:71:0;;-1:-1:-1;;;;;1714:32:1;;46030:71:0;;;1696:51:1;46042:42:0;;46030:65;;1669:18:1;;46030:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46014:10;46025:1;46014:13;;;;;;;;:::i;:::-;;;;;;;;;;:87;46144:71;;-1:-1:-1;;;46144:71:0;;-1:-1:-1;;;;;1714:32:1;;46144:71:0;;;1696:51:1;46156:42:0;;46144:65;;1669:18:1;;46144:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46128:10;46139:1;46128:13;;;;;;;;:::i;:::-;;;;;;;;;;:87;46259:71;;-1:-1:-1;;;46259:71:0;;-1:-1:-1;;;;;1714:32:1;;46259:71:0;;;1696:51:1;46271:42:0;;46259:65;;1669:18:1;;46259:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46243:10;46254:1;46243:13;;;;;;;;:::i;:::-;;;;;;;;;;:87;46371:71;;-1:-1:-1;;;46371:71:0;;-1:-1:-1;;;;;1714:32:1;;46371:71:0;;;1696:51:1;46383:42:0;;46371:65;;1669:18:1;;46371:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46355:10;46366:1;46355:13;;;;;;;;:::i;:::-;;;;;;:87;;;;;46470:15;46500:16;46536:9;46531:206;46555:10;:17;46551:1;:21;46531:206;;;46613:10;46624:1;46613:13;;;;;;;;:::i;:::-;;;;;;;46603:7;:23;;;;:::i;:::-;46593:33;;46661:1;46645:10;46656:1;46645:13;;;;;;;;:::i;:::-;;;;;;;:17;46641:85;;;46694:12;:8;46705:1;46694:12;:::i;:::-;46683:23;;46641:85;46574:3;;;;:::i;:::-;;;;46531:206;;;-1:-1:-1;46756:7:0;;;;-1:-1:-1;46775:10:0;;-1:-1:-1;45713:1081:0;-1:-1:-1;;45713:1081:0:o;53279:756::-;53344:13;53378:16;53386:7;53378;:16::i;:::-;53370:78;;;;-1:-1:-1;;;53370:78:0;;;;;;;:::i;:::-;53469:17;53524:25;53541:7;53524:16;:25::i;:::-;53617:26;53635:7;53617:17;:26::i;:::-;53711:23;53726:7;53711:14;:23::i;:::-;53876:15;53883:7;53876:6;:15::i;:::-;53489:450;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53469:470;;54011:4;53974:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;53960:57;;;53279:756;;;:::o;41417:510::-;41502:16;41510:7;41502;:16::i;:::-;41494:78;;;;-1:-1:-1;;;41494:78:0;;;;;;;:::i;:::-;41591:41;7858:10;41610:12;7778:98;41591:41;41583:94;;;;-1:-1:-1;;;41583:94:0;;;;;;;:::i;:::-;41708:9;:16;41696:28;;41688:71;;;;-1:-1:-1;;;41688:71:0;;25503:2:1;41688:71:0;;;25485:21:1;25542:2;25522:18;;;25515:30;25581:33;25561:18;;;25554:61;25632:18;;41688:71:0;25301:355:1;41688:71:0;41782:14;;;;:5;:14;;;;;:29;;;41772:9;:40;;:9;;41782:29;41772:40;;;;;;:::i;:::-;;;;;;;;:46;:40;;;;;:46;:48;;;;;;:::i;:::-;;;;-1:-1:-1;;41831:14:0;;;;:5;:14;;;;;:29;;:41;;;41883:9;:20;;41863:9;;41883:20;;;;;;:::i;:::-;;;;;;;;:26;:20;;;;;:26;:28;;;;;;:::i;:::-;;;;;;41417:510;;:::o;13640:164::-;-1:-1:-1;;;;;13761:25:0;;;13737:4;13761:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;13640:164::o;24363:244::-;23482:6;;-1:-1:-1;;;;;23482:6:0;7858:10;23629:23;23621:68;;;;-1:-1:-1;;;23621:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24452:22:0;::::1;24444:73;;;::::0;-1:-1:-1;;;24444:73:0;;26004:2:1;24444:73:0::1;::::0;::::1;25986:21:1::0;26043:2;26023:18;;;26016:30;26082:34;26062:18;;;26055:62;-1:-1:-1;;;26133:18:1;;;26126:36;26179:19;;24444:73:0::1;25802:402:1::0;24444:73:0::1;24554:6;::::0;24533:38:::1;::::0;-1:-1:-1;;;;;24533:38:0;;::::1;::::0;24554:6:::1;::::0;24533:38:::1;::::0;24554:6:::1;::::0;24533:38:::1;24582:6;:17:::0;;-1:-1:-1;;;;;;24582:17:0::1;-1:-1:-1::0;;;;;24582:17:0;;;::::1;::::0;;;::::1;::::0;;24363:244::o;16221:127::-;16286:4;16310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16310:16:0;:30;;;16221:127::o;20106:174::-;20181:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;20181:29:0;-1:-1:-1;;;;;20181:29:0;;;;;;;;:24;;20235:23;20181:24;20235:14;:23::i;:::-;-1:-1:-1;;;;;20226:46:0;;;;;;;;;;;20106:174;;:::o;16515:348::-;16608:4;16633:16;16641:7;16633;:16::i;:::-;16625:73;;;;-1:-1:-1;;;16625:73:0;;26411:2:1;16625:73:0;;;26393:21:1;26450:2;26430:18;;;26423:30;26489:34;26469:18;;;26462:62;-1:-1:-1;;;26540:18:1;;;26533:42;26592:19;;16625:73:0;26209:408:1;16625:73:0;16709:13;16725:23;16740:7;16725:14;:23::i;:::-;16709:39;;16778:5;-1:-1:-1;;;;;16767:16:0;:7;-1:-1:-1;;;;;16767:16:0;;:51;;;;16811:7;-1:-1:-1;;;;;16787:31:0;:20;16799:7;16787:11;:20::i;:::-;-1:-1:-1;;;;;16787:31:0;;16767:51;:87;;;;16822:32;16839:5;16846:7;16822:16;:32::i;:::-;16759:96;16515:348;-1:-1:-1;;;;16515:348:0:o;19444:544::-;19569:4;-1:-1:-1;;;;;19542:31:0;:23;19557:7;19542:14;:23::i;:::-;-1:-1:-1;;;;;19542:31:0;;19534:85;;;;-1:-1:-1;;;19534:85:0;;26824:2:1;19534:85:0;;;26806:21:1;26863:2;26843:18;;;26836:30;26902:34;26882:18;;;26875:62;-1:-1:-1;;;26953:18:1;;;26946:39;27002:19;;19534:85:0;26622:405:1;19534:85:0;-1:-1:-1;;;;;19638:16:0;;19630:65;;;;-1:-1:-1;;;19630:65:0;;27234:2:1;19630:65:0;;;27216:21:1;27273:2;27253:18;;;27246:30;27312:34;27292:18;;;27285:62;-1:-1:-1;;;27363:18:1;;;27356:34;27407:19;;19630:65:0;27032:400:1;19630:65:0;19812:29;19829:1;19833:7;19812:8;:29::i;:::-;-1:-1:-1;;;;;19854:15:0;;;;;;:9;:15;;;;;:20;;19873:1;;19854:15;:20;;19873:1;;19854:20;:::i;:::-;;;;-1:-1:-1;;;;;;;19885:13:0;;;;;;:9;:13;;;;;:18;;19902:1;;19885:13;:18;;19902:1;;19885:18;:::i;:::-;;;;-1:-1:-1;;19914:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;19914:21:0;-1:-1:-1;;;;;19914:21:0;;;;;;;;;19953:27;;19914:16;;19953:27;;;;;;;19444:544;;;:::o;33599:723::-;33655:13;33876:10;33872:53;;-1:-1:-1;;33903:10:0;;;;;;;;;;;;-1:-1:-1;;;33903:10:0;;;;;33599:723::o;33872:53::-;33950:5;33935:12;33991:78;33998:9;;33991:78;;34024:8;;;;:::i;:::-;;-1:-1:-1;34047:10:0;;-1:-1:-1;34055:2:0;34047:10;;:::i;:::-;;;33991:78;;;34079:19;34111:6;34101:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34101:17:0;;34079:39;;34129:154;34136:10;;34129:154;;34163:11;34173:1;34163:11;;:::i;:::-;;-1:-1:-1;34232:10:0;34240:2;34232:5;:10;:::i;:::-;34219:24;;:2;:24;:::i;:::-;34206:39;;34189:6;34196;34189:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;34189:56:0;;;;;;;;-1:-1:-1;34260:11:0;34269:2;34260:11;;:::i;:::-;;;34129:154;;39204:163;39276:16;39295:32;;;;;;;;39310:2;39300:7;:12;;;;:::i;:::-;39295:32;;;;;;;;;;-1:-1:-1;39295:32:0;;;;;;;39338:14;;;:5;:14;;;;;;:21;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39204:163:0:o;18136:382::-;-1:-1:-1;;;;;18216:16:0;;18208:61;;;;-1:-1:-1;;;18208:61:0;;27894:2:1;18208:61:0;;;27876:21:1;;;27913:18;;;27906:30;27972:34;27952:18;;;27945:62;28024:18;;18208:61:0;27692:356:1;18208:61:0;18289:16;18297:7;18289;:16::i;:::-;18288:17;18280:58;;;;-1:-1:-1;;;18280:58:0;;28255:2:1;18280:58:0;;;28237:21:1;28294:2;28274:18;;;28267:30;28333;28313:18;;;28306:58;28381:18;;18280:58:0;28053:352:1;18280:58:0;-1:-1:-1;;;;;18409:13:0;;;;;;:9;:13;;;;;:18;;18426:1;;18409:13;:18;;18426:1;;18409:18;:::i;:::-;;;;-1:-1:-1;;18438:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;18438:21:0;-1:-1:-1;;;;;18438:21:0;;;;;;;;18477:33;;18438:16;;;18477:33;;18438:16;;18477:33;18136:382;;:::o;15636:272::-;15750:28;15760:4;15766:2;15770:7;15750:9;:28::i;:::-;15797:48;15820:4;15826:2;15830:7;15839:5;15797:22;:48::i;:::-;15789:111;;;;-1:-1:-1;;;15789:111:0;;;;;;;:::i;51620:180::-;51682:7;51702:19;51724:20;51736:7;51724:11;:20::i;:::-;51702:42;;51776:11;51788:1;51776:14;;;;;;;:::i;:::-;;;51620:180;-1:-1:-1;;;;51620:180:0:o;44187:257::-;44316:7;:14;44249:7;;;;44299:13;44302:1;44304:7;44299:2;:13::i;:::-;44283;;:29;;;;:::i;:::-;44282:48;;;;:::i;:::-;44269:61;;44434:1;44422:7;44430:2;44422:11;;;;;;;;:::i;:::-;;;;;;;;;44417:4;:16;;;;:::i;:::-;:18;;;;:::i;:::-;44389:7;44397:2;44389:11;;;;;;;;:::i;:::-;;;;;;;;;44356:7;44364:2;44356:11;;;;;;;;:::i;:::-;;;;;;;;;44351:1;44349;:3;;;;:::i;:::-;44348:19;;;;:::i;:::-;:40;;44384:4;44348:40;:::i;:::-;:52;;;;:::i;:::-;:87;;;;:::i;44450:285::-;44579:7;:14;44512:7;;;;44562:13;44565:1;44567:7;44562:2;:13::i;:::-;44546;;:29;;;;:::i;:::-;44545:48;;;;:::i;:::-;44532:61;;44725:1;44712:7;44720:2;44712:11;;;;;;;;:::i;:::-;;;;;;;;;44701:10;;:22;;;;:::i;:::-;44695:29;;:4;:29;:::i;:::-;:31;;;;:::i;:::-;44666:7;44674:2;44666:11;;;;;;;;:::i;:::-;;;;;;;;;44655:10;;:22;;;;:::i;:::-;44621:7;44629:2;44621:11;;;;;;;;:::i;:::-;;;;;;;;;44616:1;44612;:5;;;;:::i;:::-;44611:21;;;;:::i;42506:1273::-;42659:25;;;;;;;;;:20;:25;;42633:13;;42699:6;42695:944;;42788:19;42805:1;42788:16;:19::i;:::-;42835;42852:1;42835:16;:19::i;:::-;42881:20;42898:2;42881:16;:20::i;:::-;42738:201;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42722:218;;42695:944;;;42975:20;43003:1;42998:2;:6;:175;;43147:24;43164:6;43168:2;43164:1;:6;:::i;:::-;43147:16;:24::i;:::-;43130:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;42998:175;;;43077:24;43094:6;43099:1;43094:2;:6;:::i;43077:24::-;43056:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;42998:175;42975:198;;43188:20;43216:1;43211:2;:6;:151;;43336:24;43353:6;43357:2;43353:1;:6;:::i;43336:24::-;43319:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;43211:151;;;43266:24;43283:6;43288:1;43283:2;:6;:::i;43266:24::-;43245:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;43211:151;43188:174;-1:-1:-1;43440:6:0;43188:174;43510:22;43527:4;43529:2;43527:1;:4;:::i;43510:22::-;43564;43581:4;43583:2;43581:1;:4;:::i;43564:22::-;43393:231;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43377:248;;42960:679;;42695:944;43688:6;43718:4;43736:6;43671:98;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43657:114;;;42506:1273;;;;;;;;:::o;42063:435::-;42167:13;42251:20;42268:2;42251:16;:20::i;:::-;42295;42312:2;42295:16;:20::i;:::-;42339;42356:2;42339:16;:20::i;:::-;42383;42400:2;42383:16;:20::i;:::-;42431:6;42207:272;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42193:297;;42063:435;;;;;;;:::o;43787:392::-;43909:13;43992:19;44009:1;43992:16;:19::i;:::-;44034;44051:1;44034:16;:19::i;:::-;44096:4;44115:1;44117;44115:4;;;;;;;;:::i;:::-;;;;;;;;44120:6;44146:3;43949:221;;;;;;;;;;;;;:::i;47343:345::-;47409:13;47564:30;47581:12;47564:16;:30::i;:::-;47619:1;47621;47619:4;;;;;;;;:::i;:::-;;;;;;;;47638:39;47660:16;47668:7;47660;:16::i;:::-;47638:21;:39::i;:::-;47449:229;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47435:244;;47343:345;;;:::o;20845:843::-;20966:4;-1:-1:-1;;;;;20992:13:0;;26485:20;26524:8;20988:693;;21028:72;;-1:-1:-1;;;21028:72:0;;-1:-1:-1;;;;;21028:36:0;;;;;:72;;7858:10;;21079:4;;21085:7;;21094:5;;21028:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21028:72:0;;;;;;;;-1:-1:-1;;21028:72:0;;;;;;;;;;;;:::i;:::-;;;21024:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21274:13:0;;21270:341;;21317:60;;-1:-1:-1;;;21317:60:0;;;;;;;:::i;21270:341::-;21561:6;21555:13;21546:6;21542:2;21538:15;21531:38;21024:602;-1:-1:-1;;;;;;21151:55:0;-1:-1:-1;;;21151:55:0;;-1:-1:-1;21144:62:0;;20988:693;-1:-1:-1;21665:4:0;20845:843;;;;;;:::o;51872:173::-;51932:7;51994:16;52002:7;51994;:16::i;:::-;52021:13;;51977:58;;39581:2:1;39577:15;;;;-1:-1:-1;;39573:53:1;51977:58:0;;;39561:66:1;39643:12;;;39636:28;;;39680:12;;;39673:28;39717:12;;51977:58:0;;;;;;;;;;;;51967:69;;;;;;51952:85;;51872:173;;;:::o;35438:463::-;35538:13;;;35548:2;35538:13;;;35495;35538;;;;;;35521:14;;35538:13;;;;;;;;;;;-1:-1:-1;35538:13:0;35521:30;;35567:6;35562:305;35583:2;35579:1;:6;35562:305;;;35607:8;35658:6;35663:1;35658:2;:6;:::i;:::-;35655:10;;:1;:10;:::i;:::-;35651:15;;:1;:15;:::i;:::-;35631:36;;-1:-1:-1;;;;;35631:16:0;;:36;:::i;:::-;35618:51;;35607:62;;35684:9;35714:2;35709:1;35703:8;;:13;;;;:::i;:::-;35696:21;;35684:33;;35732:9;35773:2;35767:9;;35762:2;:14;;;;:::i;:::-;35757:1;35751:8;;:25;;;;:::i;:::-;35744:33;;35732:45;;35801:8;35806:2;35801:4;:8::i;:::-;35792:1;35794:3;35796:1;35794;:3;:::i;:::-;35792:6;;;;;;;;:::i;:::-;;;;:17;-1:-1:-1;;;;;35792:17:0;;;;;;;;;35835:8;35840:2;35835:4;:8::i;:::-;35824:1;35826:3;35828:1;35826;:3;:::i;:::-;:5;;35830:1;35826:5;:::i;:::-;35824:8;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;35824:19:0;;;;;;;;;35592:275;;;35587:3;;;;;:::i;:::-;;;;35562:305;;;-1:-1:-1;35891:1:0;35438:463;-1:-1:-1;;35438:463:0:o;35913:171::-;35960:8;35996:2;35985:8;;;;:13;35981:95;;;36014:15;:8;;;;36025:4;36014:15;:::i;:::-;36007:23;;;35913:171;-1:-1:-1;;35913:171:0:o;35981:95::-;36060:15;:8;;;;36071:4;36060:15;:::i;35981:95::-;35913:171;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:269::-;908:3;946:5;940:12;973:6;968:3;961:19;989:63;1045:6;1038:4;1033:3;1029:14;1022:4;1015:5;1011:16;989:63;:::i;:::-;1106:2;1085:15;-1:-1:-1;;1081:29:1;1072:39;;;;1113:4;1068:50;;855:269;-1:-1:-1;;855:269:1:o;1129:231::-;1278:2;1267:9;1260:21;1241:4;1298:56;1350:2;1339:9;1335:18;1327:6;1298:56;:::i;1365:180::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;-1:-1:-1;1516:23:1;;1365:180;-1:-1:-1;1365:180:1:o;1758:173::-;1826:20;;-1:-1:-1;;;;;1875:31:1;;1865:42;;1855:70;;1921:1;1918;1911:12;1936:254;2004:6;2012;2065:2;2053:9;2044:7;2040:23;2036:32;2033:52;;;2081:1;2078;2071:12;2033:52;2104:29;2123:9;2104:29;:::i;:::-;2094:39;2180:2;2165:18;;;;2152:32;;-1:-1:-1;;;1936:254:1:o;2377:127::-;2438:10;2433:3;2429:20;2426:1;2419:31;2469:4;2466:1;2459:15;2493:4;2490:1;2483:15;2509:632;2574:5;2604:18;2645:2;2637:6;2634:14;2631:40;;;2651:18;;:::i;:::-;2726:2;2720:9;2694:2;2780:15;;-1:-1:-1;;2776:24:1;;;2802:2;2772:33;2768:42;2756:55;;;2826:18;;;2846:22;;;2823:46;2820:72;;;2872:18;;:::i;:::-;2912:10;2908:2;2901:22;2941:6;2932:15;;2971:6;2963;2956:22;3011:3;3002:6;2997:3;2993:16;2990:25;2987:45;;;3028:1;3025;3018:12;2987:45;3078:6;3073:3;3066:4;3058:6;3054:17;3041:44;3133:1;3126:4;3117:6;3109;3105:19;3101:30;3094:41;;;;2509:632;;;;;:::o;3146:451::-;3215:6;3268:2;3256:9;3247:7;3243:23;3239:32;3236:52;;;3284:1;3281;3274:12;3236:52;3324:9;3311:23;3357:18;3349:6;3346:30;3343:50;;;3389:1;3386;3379:12;3343:50;3412:22;;3465:4;3457:13;;3453:27;-1:-1:-1;3443:55:1;;3494:1;3491;3484:12;3443:55;3517:74;3583:7;3578:2;3565:16;3560:2;3556;3552:11;3517:74;:::i;3602:328::-;3679:6;3687;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3787:29;3806:9;3787:29;:::i;:::-;3777:39;;3835:38;3869:2;3858:9;3854:18;3835:38;:::i;:::-;3825:48;;3920:2;3909:9;3905:18;3892:32;3882:42;;3602:328;;;;;:::o;3935:186::-;3994:6;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4086:29;4105:9;4086:29;:::i;4126:435::-;4179:3;4217:5;4211:12;4244:6;4239:3;4232:19;4270:4;4299:2;4294:3;4290:12;4283:19;;4336:2;4329:5;4325:14;4357:1;4367:169;4381:6;4378:1;4375:13;4367:169;;;4442:13;;4430:26;;4476:12;;;;4511:15;;;;4403:1;4396:9;4367:169;;;-1:-1:-1;4552:3:1;;4126:435;-1:-1:-1;;;;;4126:435:1:o;4566:609::-;4879:6;4868:9;4861:25;4922:6;4917:2;4906:9;4902:18;4895:34;4965:3;4960:2;4949:9;4945:18;4938:31;4842:4;4992:57;5044:3;5033:9;5029:19;5021:6;4992:57;:::i;:::-;5097:9;5089:6;5085:22;5080:2;5069:9;5065:18;5058:50;5125:44;5162:6;5154;5125:44;:::i;:::-;5117:52;4566:609;-1:-1:-1;;;;;;;4566:609:1:o;5180:248::-;5248:6;5256;5309:2;5297:9;5288:7;5284:23;5280:32;5277:52;;;5325:1;5322;5315:12;5277:52;-1:-1:-1;;5348:23:1;;;5418:2;5403:18;;;5390:32;;-1:-1:-1;5180:248:1:o;5433:347::-;5498:6;5506;5559:2;5547:9;5538:7;5534:23;5530:32;5527:52;;;5575:1;5572;5565:12;5527:52;5598:29;5617:9;5598:29;:::i;:::-;5588:39;;5677:2;5666:9;5662:18;5649:32;5724:5;5717:13;5710:21;5703:5;5700:32;5690:60;;5746:1;5743;5736:12;5690:60;5769:5;5759:15;;;5433:347;;;;;:::o;6144:526::-;6323:2;6305:21;;;6366:13;;-1:-1:-1;;;;;6362:39:1;6342:18;;;6335:67;6437:15;;6431:22;6489:4;6484:2;6469:18;;6462:32;-1:-1:-1;;6517:63:1;6575:3;6560:19;;6431:22;6517:63;:::i;:::-;6503:77;;6636:2;6628:6;6624:15;6618:22;6611:4;6600:9;6596:20;6589:52;6658:6;6650:14;;;6144:526;;;;:::o;6675:667::-;6770:6;6778;6786;6794;6847:3;6835:9;6826:7;6822:23;6818:33;6815:53;;;6864:1;6861;6854:12;6815:53;6887:29;6906:9;6887:29;:::i;:::-;6877:39;;6935:38;6969:2;6958:9;6954:18;6935:38;:::i;:::-;6925:48;;7020:2;7009:9;7005:18;6992:32;6982:42;;7075:2;7064:9;7060:18;7047:32;7102:18;7094:6;7091:30;7088:50;;;7134:1;7131;7124:12;7088:50;7157:22;;7210:4;7202:13;;7198:27;-1:-1:-1;7188:55:1;;7239:1;7236;7229:12;7188:55;7262:74;7328:7;7323:2;7310:16;7305:2;7301;7297:11;7262:74;:::i;:::-;7252:84;;;6675:667;;;;;;;:::o;7347:403::-;7582:6;7571:9;7564:25;7625:6;7620:2;7609:9;7605:18;7598:34;7668:2;7663;7652:9;7648:18;7641:30;7545:4;7688:56;7740:2;7729:9;7725:18;7717:6;7688:56;:::i;:::-;7680:64;7347:403;-1:-1:-1;;;;;7347:403:1:o;7755:260::-;7823:6;7831;7884:2;7872:9;7863:7;7859:23;7855:32;7852:52;;;7900:1;7897;7890:12;7852:52;7923:29;7942:9;7923:29;:::i;:::-;7913:39;;7971:38;8005:2;7994:9;7990:18;7971:38;:::i;:::-;7961:48;;7755:260;;;;;:::o;8020:380::-;8099:1;8095:12;;;;8142;;;8163:61;;8217:4;8209:6;8205:17;8195:27;;8163:61;8270:2;8262:6;8259:14;8239:18;8236:38;8233:161;;;8316:10;8311:3;8307:20;8304:1;8297:31;8351:4;8348:1;8341:15;8379:4;8376:1;8369:15;8233:161;;8020:380;;;:::o;9645:356::-;9847:2;9829:21;;;9866:18;;;9859:30;9925:34;9920:2;9905:18;;9898:62;9992:2;9977:18;;9645:356::o;10360:127::-;10421:10;10416:3;10412:20;10409:1;10402:31;10452:4;10449:1;10442:15;10476:4;10473:1;10466:15;10492:413;10694:2;10676:21;;;10733:2;10713:18;;;10706:30;10772:34;10767:2;10752:18;;10745:62;-1:-1:-1;;;10838:2:1;10823:18;;10816:47;10895:3;10880:19;;10492:413::o;10910:::-;11112:2;11094:21;;;11151:2;11131:18;;;11124:30;11190:34;11185:2;11170:18;;11163:62;-1:-1:-1;;;11256:2:1;11241:18;;11234:47;11313:3;11298:19;;10910:413::o;11328:127::-;11389:10;11384:3;11380:20;11377:1;11370:31;11420:4;11417:1;11410:15;11444:4;11441:1;11434:15;11460:135;11499:3;-1:-1:-1;;11520:17:1;;11517:43;;;11540:18;;:::i;:::-;-1:-1:-1;11587:1:1;11576:13;;11460:135::o;11726:973::-;11811:12;;11776:3;;11866:1;11886:18;;;;11939;;;;11966:61;;12020:4;12012:6;12008:17;11998:27;;11966:61;12046:2;12094;12086:6;12083:14;12063:18;12060:38;12057:161;;;12140:10;12135:3;12131:20;12128:1;12121:31;12175:4;12172:1;12165:15;12203:4;12200:1;12193:15;12057:161;12234:18;12261:104;;;;12379:1;12374:319;;;;12227:466;;12261:104;-1:-1:-1;;12294:24:1;;12282:37;;12339:16;;;;-1:-1:-1;12261:104:1;;12374:319;11673:1;11666:14;;;11710:4;11697:18;;12468:1;12482:165;12496:6;12493:1;12490:13;12482:165;;;12574:14;;12561:11;;;12554:35;12617:16;;;;12511:10;;12482:165;;;12486:3;;12676:6;12671:3;12667:16;12660:23;;12227:466;;;;;;;11726:973;;;;:::o;12836:185::-;12878:3;12916:5;12910:12;12931:52;12976:6;12971:3;12964:4;12957:5;12953:16;12931:52;:::i;:::-;12999:16;;;;;12836:185;-1:-1:-1;;12836:185:1:o;13866:2689::-;15476:66;15464:79;;-1:-1:-1;;;15568:2:1;15559:12;;15552:46;-1:-1:-1;15617:47:1;15660:2;15651:12;;15643:6;15617:47;:::i;:::-;-1:-1:-1;;;15673:28:1;;15729:66;15725:1;15717:10;;15710:86;15819:13;;15841:59;15819:13;15888:2;15880:11;;15875:2;15863:15;;15841:59;:::i;:::-;-1:-1:-1;;;15958:2:1;15919:15;;;;15950:11;;;15943:25;15997:66;15992:2;15984:11;;15977:87;-1:-1:-1;;;16088:2:1;16080:11;;16073:33;16131:13;;16153:61;16131:13;16200:2;16192:11;;16187:2;16175:15;;16153:61;:::i;:::-;16230:319;16260:288;16286:261;16316:230;16346:199;16372:172;16402:141;16432:110;16458:83;16483:57;16536:2;16525:8;16521:2;16517:17;16513:26;-1:-1:-1;;;12769:29:1;;12823:1;12814:11;;12704:127;16483:57;13218:66;13206:79;;-1:-1:-1;;;13310:2:1;13301:12;;13294:48;13367:2;13358:12;;13146:230;16458:83;16450:6;16432:110;:::i;:::-;-1:-1:-1;;;13091:17:1;;13133:1;13124:11;;13026:115;16402:141;13458:66;13446:79;;13550:2;13541:12;;13381:178;16372:172;16364:6;16346:199;:::i;16316:230::-;13641:66;13629:79;;13733:2;13724:12;;13564:178;16286:261;16278:6;16260:288;:::i;:::-;-1:-1:-1;;;13812:16:1;;13853:1;13844:11;;13747:114;16230:319;16223:326;13866:2689;-1:-1:-1;;;;;;;;;;13866:2689:1:o;17322:128::-;17362:3;17393:1;17389:6;17386:1;17383:13;17380:39;;;17399:18;;:::i;:::-;-1:-1:-1;17435:9:1;;17322:128::o;17455:127::-;17516:10;17511:3;17507:20;17504:1;17497:31;17547:4;17544:1;17537:15;17571:4;17568:1;17561:15;17587:112;17619:1;17645;17635:35;;17650:18;;:::i;:::-;-1:-1:-1;17684:9:1;;17587:112::o;18115:404::-;18317:2;18299:21;;;18356:2;18336:18;;;18329:30;18395:34;18390:2;18375:18;;18368:62;-1:-1:-1;;;18461:2:1;18446:18;;18439:38;18509:3;18494:19;;18115:404::o;20394:168::-;20434:7;20500:1;20496;20492:6;20488:14;20485:1;20482:21;20477:1;20470:9;20463:17;20459:45;20456:71;;;20507:18;;:::i;:::-;-1:-1:-1;20547:9:1;;20394:168::o;20567:352::-;20796:3;20824:38;20858:3;20850:6;20824:38;:::i;:::-;-1:-1:-1;;;20871:16:1;;20911:1;20903:10;;20567:352;-1:-1:-1;;;20567:352:1:o;20924:470::-;21103:3;21141:6;21135:13;21157:53;21203:6;21198:3;21191:4;21183:6;21179:17;21157:53;:::i;:::-;21273:13;;21232:16;;;;21295:57;21273:13;21232:16;21329:4;21317:17;;21295:57;:::i;:::-;21368:20;;20924:470;-1:-1:-1;;;;20924:470:1:o;21399:664::-;21626:3;21664:6;21658:13;21680:53;21726:6;21721:3;21714:4;21706:6;21702:17;21680:53;:::i;:::-;21796:13;;21755:16;;;;21818:57;21796:13;21755:16;21852:4;21840:17;;21818:57;:::i;:::-;21942:13;;21897:20;;;21964:57;21942:13;21897:20;21998:4;21986:17;;21964:57;:::i;:::-;22037:20;;21399:664;-1:-1:-1;;;;;21399:664:1:o;22068:544::-;22345:3;22373:38;22407:3;22399:6;22373:38;:::i;:::-;22440:6;22434:13;22456:52;22501:6;22497:2;22490:4;22482:6;22478:17;22456:52;:::i;:::-;-1:-1:-1;;;22530:15:1;;22554:23;;;22604:1;22593:13;;22068:544;-1:-1:-1;;;;22068:544:1:o;22617:184::-;22687:6;22740:2;22728:9;22719:7;22715:23;22711:32;22708:52;;;22756:1;22753;22746:12;22708:52;-1:-1:-1;22779:16:1;;22617:184;-1:-1:-1;22617:184:1:o;22936:1922::-;-1:-1:-1;;;23835:55:1;;23913:13;;23817:3;;23935:62;23913:13;23985:2;23976:12;;23969:4;23957:17;;23935:62;:::i;:::-;-1:-1:-1;;;24056:2:1;24016:16;;;24048:11;;;24041:69;24135:13;;24157:63;24135:13;24206:2;24198:11;;24191:4;24179:17;;24157:63;:::i;:::-;-1:-1:-1;;;24280:2:1;24239:17;;;;24272:11;;;24265:67;24357:13;;24379:63;24357:13;24428:2;24420:11;;24413:4;24401:17;;24379:63;:::i;:::-;-1:-1:-1;;;24502:2:1;24461:17;;;;24494:11;;;24487:24;24540:66;24535:2;24527:11;;24520:87;-1:-1:-1;;;24631:2:1;24623:11;;24616:53;24694:13;;24716:63;24694:13;24765:2;24757:11;;24750:4;24738:17;;24716:63;:::i;:::-;24795:57;24848:2;24837:8;24833:2;24829:17;24825:26;-1:-1:-1;;;22871:27:1;;22923:1;22914:11;;22806:125;24795:57;24788:64;22936:1922;-1:-1:-1;;;;;;;;22936:1922:1:o;24863:433::-;-1:-1:-1;;;25118:3:1;25111:31;25093:3;25171:6;25165:13;25187:62;25242:6;25237:2;25232:3;25228:12;25221:4;25213:6;25209:17;25187:62;:::i;:::-;25269:16;;;;25287:2;25265:25;;24863:433;-1:-1:-1;;24863:433:1:o;25661:136::-;25700:3;25728:5;25718:39;;25737:18;;:::i;:::-;-1:-1:-1;;;25773:18:1;;25661:136::o;27437:125::-;27477:4;27505:1;27502;27499:8;27496:34;;;27510:18;;:::i;:::-;-1:-1:-1;27547:9:1;;27437:125::o;27567:120::-;27607:1;27633;27623:35;;27638:18;;:::i;:::-;-1:-1:-1;27672:9:1;;27567:120::o;28410:414::-;28612:2;28594:21;;;28651:2;28631:18;;;28624:30;28690:34;28685:2;28670:18;;28663:62;-1:-1:-1;;;28756:2:1;28741:18;;28734:48;28814:3;28799:19;;28410:414::o;28829:1252::-;-1:-1:-1;;;29485:3:1;29478:27;29460:3;29534:6;29528:13;29550:62;29605:6;29600:2;29595:3;29591:12;29584:4;29576:6;29572:17;29550:62;:::i;:::-;-1:-1:-1;;;29671:2:1;29631:16;;;29663:11;;;29656:29;29710:13;;29732:63;29710:13;29781:2;29773:11;;29766:4;29754:17;;29732:63;:::i;:::-;-1:-1:-1;;;29855:2:1;29814:17;;;;29847:11;;;29840:28;29893:13;;29915:63;29893:13;29964:2;29956:11;;29949:4;29937:17;;29915:63;:::i;:::-;-1:-1:-1;;;30038:2:1;29997:17;;;;30030:11;;;30023:25;30072:2;30064:11;;28829:1252;-1:-1:-1;;;;;28829:1252:1:o;30086:276::-;30217:3;30255:6;30249:13;30271:53;30317:6;30312:3;30305:4;30297:6;30293:17;30271:53;:::i;:::-;30340:16;;;;;30086:276;-1:-1:-1;;30086:276:1:o;30367:418::-;-1:-1:-1;;;30624:3:1;30617:16;30599:3;30662:6;30656:13;30678:61;30732:6;30728:1;30723:3;30719:11;30712:4;30704:6;30700:17;30678:61;:::i;:::-;30759:16;;;;30777:1;30755:24;;30367:418;-1:-1:-1;;30367:418:1:o;30790:1587::-;-1:-1:-1;;;31595:3:1;31588:24;31570:3;31641:6;31635:13;31657:61;31711:6;31707:1;31702:3;31698:11;31691:4;31683:6;31679:17;31657:61;:::i;:::-;-1:-1:-1;;;31777:1:1;31737:16;;;31769:10;;;31762:27;31814:13;;31836:63;31814:13;31885:2;31877:11;;31870:4;31858:17;;31836:63;:::i;:::-;-1:-1:-1;;;31959:2:1;31918:17;;;;31951:11;;;31944:32;32001:13;;32023:63;32001:13;32072:2;32064:11;;32057:4;32045:17;;32023:63;:::i;:::-;-1:-1:-1;;;32146:2:1;32105:17;;;;32138:11;;;32131:33;32189:13;;32211:63;32189:13;32260:2;32252:11;;32245:4;32233:17;;32211:63;:::i;:::-;-1:-1:-1;;;32334:2:1;32293:17;;;;32326:11;;;32319:25;32368:2;32360:11;;30790:1587;-1:-1:-1;;;;;;30790:1587:1:o;32382:1133::-;32912:3;32950:6;32944:13;32966:53;33012:6;33007:3;33000:4;32992:6;32988:17;32966:53;:::i;:::-;-1:-1:-1;;;33041:16:1;;;33066:23;;;33114:13;;33136:65;33114:13;33188:1;33177:13;;33170:4;33158:17;;33136:65;:::i;:::-;-1:-1:-1;;;33264:1:1;33220:20;;;;33256:10;;;33249:32;33306:13;;33328:63;33306:13;33377:2;33369:11;;33362:4;33350:17;;33328:63;:::i;:::-;33456:25;33451:2;33410:17;;;;33443:11;;;33436:46;33506:2;33498:11;;32382:1133;-1:-1:-1;;;;;32382:1133:1:o;33663:1897::-;-1:-1:-1;;;34617:3:1;34610:25;34592:3;34664:6;34658:13;34680:62;34735:6;34730:2;34725:3;34721:12;34714:4;34706:6;34702:17;34680:62;:::i;:::-;-1:-1:-1;;;34801:2:1;34761:16;;;34793:11;;;34786:29;34840:13;;34862:63;34840:13;34911:2;34903:11;;34896:4;34884:17;;34862:63;:::i;:::-;-1:-1:-1;;;34985:2:1;34944:17;;;;34977:11;;;34970:29;35024:13;;35046:63;35024:13;35095:2;35087:11;;35080:4;35068:17;;35046:63;:::i;:::-;-1:-1:-1;;;35169:2:1;35128:17;;;;35161:11;;;35154:29;35208:13;;35230:63;35208:13;35279:2;35271:11;;35264:4;35252:17;;35230:63;:::i;:::-;-1:-1:-1;;;35353:2:1;35312:17;;;;35345:11;;;35338:33;35396:13;;35418:63;35396:13;35467:2;35459:11;;35452:4;35440:17;;35418:63;:::i;:::-;35497:57;35550:2;35539:8;35535:2;35531:17;35527:26;33597;33585:39;;33649:2;33640:12;;33520:138;35497:57;35490:64;33663:1897;-1:-1:-1;;;;;;;;;33663:1897:1:o;35565:1874::-;-1:-1:-1;;;36463:3:1;36456:24;36438:3;36509:6;36503:13;36525:61;36579:6;36575:1;36570:3;36566:11;36559:4;36551:6;36547:17;36525:61;:::i;:::-;-1:-1:-1;;;36645:1:1;36605:16;;;36637:10;;;36630:27;36682:13;;36704:63;36682:13;36753:2;36745:11;;36738:4;36726:17;;36704:63;:::i;:::-;36832:27;36827:2;36786:17;;;;36819:11;;;36812:48;36885:13;;36907:63;36885:13;36956:2;36948:11;;36941:4;36929:17;;36907:63;:::i;:::-;36989:61;37046:2;37035:8;37031:2;37027:17;37023:26;37015:6;36989:61;:::i;:::-;36979:71;;;37081:6;37075:13;37097:54;37142:8;37138:2;37131:4;37123:6;37119:17;37097:54;:::i;:::-;-1:-1:-1;;;37173:17:1;;37199:19;;;37243:13;;37265:65;37243:13;37317:1;37306:13;;37299:4;37287:17;;37265:65;:::i;:::-;-1:-1:-1;;;37393:1:1;37349:20;;;;37385:10;;;37378:29;37431:1;37423:10;;35565:1874;-1:-1:-1;;;;;;;;35565:1874:1:o;37444:1168::-;38102:35;38097:3;38090:48;-1:-1:-1;;;38163:2:1;38158:3;38154:12;38147:27;38204:26;38199:2;38194:3;38190:12;38183:48;38072:3;38260:6;38254:13;38276:60;38329:6;38324:2;38319:3;38315:12;38310:2;38302:6;38298:15;38276:60;:::i;:::-;-1:-1:-1;;;38395:2:1;38355:16;;;38387:11;;;38380:29;38428:46;38470:2;38462:11;;38454:6;38428:46;:::i;:::-;38418:56;;38505:6;38499:13;38521:52;38564:8;38560:2;38555;38547:6;38543:15;38521:52;:::i;38617:500::-;-1:-1:-1;;;;;38886:15:1;;;38868:34;;38938:15;;38933:2;38918:18;;38911:43;38985:2;38970:18;;38963:34;;;39033:3;39028:2;39013:18;;39006:31;;;38811:4;;39054:57;;39091:19;;39083:6;39054:57;:::i;:::-;39046:65;38617:500;-1:-1:-1;;;;;;38617:500:1:o;39122:249::-;39191:6;39244:2;39232:9;39223:7;39219:23;39215:32;39212:52;;;39260:1;39257;39250:12;39212:52;39292:9;39286:16;39311:30;39335:5;39311:30;:::i;39740:422::-;39829:1;39872:5;39829:1;39886:270;39907:7;39897:8;39894:21;39886:270;;;39966:4;39962:1;39958:6;39954:17;39948:4;39945:27;39942:53;;;39975:18;;:::i;:::-;40025:7;40015:8;40011:22;40008:55;;;40045:16;;;;40008:55;40124:22;;;;40084:15;;;;39886:270;;;39890:3;39740:422;;;;;:::o;40167:806::-;40216:5;40246:8;40236:80;;-1:-1:-1;40287:1:1;40301:5;;40236:80;40335:4;40325:76;;-1:-1:-1;40372:1:1;40386:5;;40325:76;40417:4;40435:1;40430:59;;;;40503:1;40498:130;;;;40410:218;;40430:59;40460:1;40451:10;;40474:5;;;40498:130;40535:3;40525:8;40522:17;40519:43;;;40542:18;;:::i;:::-;-1:-1:-1;;40598:1:1;40584:16;;40613:5;;40410:218;;40712:2;40702:8;40699:16;40693:3;40687:4;40684:13;40680:36;40674:2;40664:8;40661:16;40656:2;40650:4;40647:12;40643:35;40640:77;40637:159;;;-1:-1:-1;40749:19:1;;;40781:5;;40637:159;40828:34;40853:8;40847:4;40828:34;:::i;:::-;40898:6;40894:1;40890:6;40886:19;40877:7;40874:32;40871:58;;;40909:18;;:::i;:::-;40947:20;;40167:806;-1:-1:-1;;;40167:806:1:o;40978:131::-;41038:5;41067:36;41094:8;41088:4;41067:36;:::i;41114:165::-;41152:1;41186:4;41183:1;41179:12;41210:3;41200:37;;41217:18;;:::i;:::-;41269:3;41262:4;41259:1;41255:12;41251:22;41246:27;;;41114:165;;;;:::o;41284:238::-;41322:7;41362:4;41359:1;41355:12;41394:4;41391:1;41387:12;41454:3;41448:4;41444:14;41439:3;41436:23;41429:3;41422:11;41415:19;41411:49;41408:75;;;41463:18;;:::i;41527:195::-;41565:4;41602;41599:1;41595:12;41634:4;41631:1;41627:12;41659:3;41654;41651:12;41648:38;;;41666:18;;:::i;:::-;41703:13;;;41527:195;-1:-1:-1;;;41527:195:1:o;41727:204::-;41765:3;41801:4;41798:1;41794:12;41833:4;41830:1;41826:12;41868:3;41862:4;41858:14;41853:3;41850:23;41847:49;;;41876:18;;:::i;:::-;41912:13;;41727:204;-1:-1:-1;;;41727:204:1:o
Swarm Source
ipfs://64b511421eaca61c72995a5d5b60a386018b0a1205144177f1e46bc1acf8093f
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.