Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BSCWinNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-13 */ pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/math/SafeMath.sol pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } function setOwnableConstructor() internal { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function proxyConstructor(string memory name_, string memory symbol_) internal { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract Proxiable { // Code position in storage is keccak256("PROXIABLE") = "0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7" function updateCodeAddress(address newAddress) internal { require( bytes32(0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7) == Proxiable(newAddress).proxiableUUID(), "Not compatible" ); assembly { // solium-disable-line sstore(0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7, newAddress) } } function proxiableUUID() public pure returns (bytes32) { return 0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7; } } contract LibraryLockDataLayout { bool public initialized = false; } contract LibraryLock is LibraryLockDataLayout { // Ensures no one can manipulate the Logic Contract once it is deployed. // PARITY WALLET HACK PREVENTION modifier delegatedOnly() { require(initialized == true, "The library is locked. No direct 'call' is allowed"); _; } function initialize() internal { initialized = true; } } contract DataLayout is LibraryLock { address public ownerCopy; address public bscWin; string public gateWay; uint256 public mintCost; mapping(uint256=> string) public CIDMappings; mapping(uint256=> bool) public luckyBullMapping; uint256 public _tokenIds; address public developmentManager; uint256 public mintLimit; uint256 public launchTime; bool public isLimiting; string public baseURI; mapping(address => bool) public mintWhitelist; bool public inWhitelistMode; } contract BSCWinNFT is ERC721Enumerable, DataLayout, Proxiable, Ownable { using SafeMath for uint256; constructor() ERC721("BSCWin Bulls", "BSCWIN") { setOwnableConstructor(); } receive() external payable { } function NFTConstructor(address _manager) public payable { require(!initialized); developmentManager = _manager; gateWay = "https://bscwin.mypinata.cloud/ipfs/"; proxyConstructor("BSCWin Bulls", "BSCWIN"); mintCost = 0.07 ether; mintLimit = 2000; launchTime = block.timestamp; setOwnableConstructor(); ownerCopy = owner(); initialize(); } function updateCode(address newCode) public onlyOwner delegatedOnly { updateCodeAddress(newCode); } function syncOwner() public { if (ownerCopy == msg.sender) { setOwnableConstructor(); } } function setMintWhitelist(address[] memory _addresses, bool direction) public onlyOwner { for(uint i; i < _addresses.length; i++) { mintWhitelist[_addresses[i]] = direction; } } function setWhitelistMode(bool _inWhitelistingOnly) public onlyOwner { inWhitelistMode = _inWhitelistingOnly; } function setMintLimit(uint256 limit) public onlyOwner { require(limit > _tokenIds, "Limit cannot be less than minted amount"); mintLimit = limit; } function setName(string memory _name, string memory _symbol) public onlyOwner { proxyConstructor(_name, _symbol); } function setIsLimiting(bool _direction) public onlyOwner { isLimiting = _direction; } function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } function checkLimit() public view returns(bool) { if (isLimiting) { if (block.timestamp.sub(launchTime) < 24 hours) { if (_tokenIds >= 1000) { return true; } } } else { return false; } } function setMintCost(uint256 cost) public onlyOwner { mintCost = cost; } function createNFTs(string memory CID, uint256 startID, uint256 endID) public onlyOwner { for(uint256 i = startID; i <= endID; i++) { CIDMappings[i] = CID; } } function createLuckyNFTs(string memory CID, uint256[] memory IDs) public onlyOwner { for(uint256 i; i < IDs.length; i++) { CIDMappings[IDs[i]] = CID; luckyBullMapping[IDs[i]] = true; } } function setBSCWinAddress(address _address) public onlyOwner { bscWin = _address; } function setDevelopmentManager(address manager) public onlyOwner { developmentManager = manager; } function setSpecificCID(uint256 _id, string memory _CID) public onlyOwner { CIDMappings[_id] = _CID; } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function tokenURI(uint256 tokenId) public view override returns (string memory) { //use tokenId to determine NFT level bytes memory tempEmptyStringTest = bytes(CIDMappings[tokenId]); string memory dynamicCID; if ((keccak256(abi.encodePacked((CIDMappings[tokenId]))) == keccak256(abi.encodePacked(("test")))) || (tempEmptyStringTest.length == 0)) { dynamicCID = CIDMappings[1000000000000000000]; } else { dynamicCID = CIDMappings[tokenId]; } string memory URI = string(abi.encodePacked(baseURI, dynamicCID, "/", uint2str(uint(tokenId)), ".json")); return URI; } function createNFT(uint amount, address claimer, bool ownerMint) public payable delegatedOnly { require(!checkLimit(), "Daily mint limit reached"); if (inWhitelistMode) { require(mintWhitelist[msg.sender], "Only whitelisted addresses can mint"); } if (!ownerMint) { require(amount > 0 && amount <= 10, "Invalid mint amount"); require(msg.value == mintCost.mul(amount), "Invalid message value"); } else { require(msg.sender == owner()); } for (uint256 i = 1; i <= amount; i++) { _tokenIds = _tokenIds.add(checkNextForLuckyBull(_tokenIds)); require(_tokenIds <= mintLimit, "Mint limit reached"); _mint(claimer, _tokenIds); } } function checkNextForLuckyBull(uint256 startID) internal returns(uint) { uint addAmount = 1; for (uint256 i; i < 10; i++) { if (luckyBullMapping[startID+addAmount]) { addAmount = addAmount+1; } else { return addAmount; } } } function createLuckyBulls(uint256[] memory IDs) public onlyOwner { for (uint256 i; i < IDs.length; i++) { luckyBullMapping[IDs[i]] = true; require(luckyBullMapping[IDs[i]], "Not a Lucky Bull"); _mint(msg.sender, IDs[i]); } } function claimHoldings() public { require(msg.sender == developmentManager, "Unauthorized claim"); payable(msg.sender).transfer(address(this).balance); } }
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":"uint256","name":"","type":"uint256"}],"name":"CIDMappings","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"NFTConstructor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_tokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bscWin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"IDs","type":"uint256[]"}],"name":"createLuckyBulls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"CID","type":"string"},{"internalType":"uint256[]","name":"IDs","type":"uint256[]"}],"name":"createLuckyNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bool","name":"ownerMint","type":"bool"}],"name":"createNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"CID","type":"string"},{"internalType":"uint256","name":"startID","type":"uint256"},{"internalType":"uint256","name":"endID","type":"uint256"}],"name":"createNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gateWay","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inWhitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isLimiting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"luckyBullMapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerCopy","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":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setBSCWinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"setDevelopmentManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_direction","type":"bool"}],"name":"setIsLimiting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"direction","type":"bool"}],"name":"setMintWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_CID","type":"string"}],"name":"setSpecificCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inWhitelistingOnly","type":"bool"}],"name":"setWhitelistMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCode","type":"address"}],"name":"updateCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600c81526020017f42534357696e2042756c6c7300000000000000000000000000000000000000008152506040518060400160405280600681526020017f42534357494e00000000000000000000000000000000000000000000000000008152508160009080519060200190620000b1929190620001f3565b508060019080519060200190620000ca929190620001f3565b505050620000ed620000e16200010360201b60201c565b6200010b60201b60201c565b620000fd620001d160201b60201c565b62000308565b600033905090565b6000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001f1620001e56200010360201b60201c565b6200010b60201b60201c565b565b8280546200020190620002a3565b90600052602060002090601f01602090048101928262000225576000855562000271565b82601f106200024057805160ff191683800117855562000271565b8280016001018555821562000271579182015b828111156200027057825182559160200191906001019062000253565b5b50905062000280919062000284565b5090565b5b808211156200029f57600081600090555060010162000285565b5090565b60006002820490506001821680620002bc57607f821691505b60208210811415620002d357620002d2620002d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615fec80620003186000396000f3fe6080604052600436106103395760003560e01c80636c0360eb116101ab578063996517cf116100f7578063c3c1865f11610095578063e78e3ac81161006f578063e78e3ac814610be3578063e985e9c514610c0c578063e9cea2fb14610c49578063f2fde38b14610c7257610340565b8063c3c1865f14610b66578063c87b56dd14610b8f578063e683029014610bcc57610340565b8063aa46a400116100d1578063aa46a40014610abc578063b88d4fde14610ae7578063bdb4b84814610b10578063c3a2710114610b3b57610340565b8063996517cf14610a3f5780639e6a1d7d14610a6a578063a22cb46514610a9357610340565b8063790ca413116101645780638a53ffff1161013e5780638a53ffff146109975780638a8f6d8e146109c05780638da5cb5b146109e957806395d89b4114610a1457610340565b8063790ca4131461091a5780638545f4ea1461094557806388eca5161461096e57610340565b80636c0360eb146108175780636f3d02e1146108425780636f66adb51461087f57806370a08231146108aa578063715018a6146108e75780637188897a146108fe57610340565b80632593626c116102855780635052ab3c1161022357806356f4720d116101fd57806356f4720d1461075b5780635759ed89146107865780635c707f07146107b15780636352211e146107da57610340565b80635052ab3c146106dc57806352d1902d1461070757806355f804b31461073257610340565b8063425bc1e91161025f578063425bc1e91461062457806342842e0e1461064d57806346951954146106765780634f6ccce71461069f57610340565b80632593626c146105a0578063293d6987146105bc5780632f745c59146105e757610340565b80630ba84e85116102f2578063158ef93e116102cc578063158ef93e146104f657806318160ddd146105215780631fd314e31461054c57806323b872dd1461057757610340565b80630ba84e85146104795780630c598fc5146104b657806312c6081b146104cd57610340565b806301ffc9a714610345578063054807e01461038257806306fdde03146103bf578063081812fc146103ea578063095ea7b3146104275780630a190db61461045057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c600480360381019061036791906145af565b610c9b565b6040516103799190614edf565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a491906147b1565b610d15565b6040516103b69190614edf565b60405180910390f35b3480156103cb57600080fd5b506103d4610d35565b6040516103e19190614f15565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906147b1565b610dc7565b60405161041e9190614e78565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614470565b610e4c565b005b34801561045c57600080fd5b50610477600480360381019061047291906142ed565b610f64565b005b34801561048557600080fd5b506104a0600480360381019061049b91906142ed565b611024565b6040516104ad9190614edf565b60405180910390f35b3480156104c257600080fd5b506104cb611044565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614652565b6110a5565b005b34801561050257600080fd5b5061050b6111cd565b6040516105189190614edf565b60405180910390f35b34801561052d57600080fd5b506105366111e0565b6040516105439190615297565b60405180910390f35b34801561055857600080fd5b506105616111ed565b60405161056e9190614e78565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061435a565b611213565b005b6105ba60048036038101906105b591906142ed565b611273565b005b3480156105c857600080fd5b506105d16113ea565b6040516105de9190614edf565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190614470565b6113fd565b60405161061b9190615297565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614555565b6114a2565b005b34801561065957600080fd5b50610674600480360381019061066f919061435a565b61153b565b005b34801561068257600080fd5b5061069d600480360381019061069891906142ed565b61155b565b005b3480156106ab57600080fd5b506106c660048036038101906106c191906147b1565b611639565b6040516106d39190615297565b60405180910390f35b3480156106e857600080fd5b506106f16116aa565b6040516106fe9190614e78565b60405180910390f35b34801561071357600080fd5b5061071c6116d0565b6040516107299190614efa565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614609565b6116fb565b005b34801561076757600080fd5b50610770611791565b60405161077d9190614edf565b60405180910390f35b34801561079257600080fd5b5061079b6117ee565b6040516107a89190614edf565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d391906146ca565b611801565b005b3480156107e657600080fd5b5061080160048036038101906107fc91906147b1565b61188b565b60405161080e9190614e78565b60405180910390f35b34801561082357600080fd5b5061082c61193d565b6040516108399190614f15565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906147b1565b6119cb565b6040516108769190614f15565b60405180910390f35b34801561088b57600080fd5b50610894611a6b565b6040516108a19190614e78565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906142ed565b611a91565b6040516108de9190615297565b60405180910390f35b3480156108f357600080fd5b506108fc611b49565b005b610918600480360381019061091391906147de565b611bd1565b005b34801561092657600080fd5b5061092f611ea0565b60405161093c9190615297565b60405180910390f35b34801561095157600080fd5b5061096c600480360381019061096791906147b1565b611ea6565b005b34801561097a57600080fd5b50610995600480360381019061099091906144b0565b611f2c565b005b3480156109a357600080fd5b506109be60048036038101906109b99190614831565b61203d565b005b3480156109cc57600080fd5b506109e760048036038101906109e291906142ed565b6120e5565b005b3480156109f557600080fd5b506109fe6121a5565b604051610a0b9190614e78565b60405180910390f35b348015610a2057600080fd5b50610a296121cf565b604051610a369190614f15565b60405180910390f35b348015610a4b57600080fd5b50610a54612261565b604051610a619190615297565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c91906147b1565b612267565b005b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614430565b612331565b005b348015610ac857600080fd5b50610ad16124b2565b604051610ade9190615297565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906143ad565b6124b8565b005b348015610b1c57600080fd5b50610b2561251a565b604051610b329190615297565b60405180910390f35b348015610b4757600080fd5b50610b50612520565b604051610b5d9190614f15565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b88919061450c565b6125ae565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb191906147b1565b612731565b604051610bc39190614f15565b60405180910390f35b348015610bd857600080fd5b50610be16129cb565b005b348015610bef57600080fd5b50610c0a6004803603810190610c059190614555565b612aa4565b005b348015610c1857600080fd5b50610c336004803603810190610c2e919061431a565b612b3d565b604051610c409190614edf565b60405180910390f35b348015610c5557600080fd5b50610c706004803603810190610c6b9190614742565b612bd1565b005b348015610c7e57600080fd5b50610c996004803603810190610c9491906142ed565b612c9b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0e5750610d0d82612d93565b5b9050919050565b600f6020528060005260406000206000915054906101000a900460ff1681565b606060008054610d4490615602565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7090615602565b8015610dbd5780601f10610d9257610100808354040283529160200191610dbd565b820191906000526020600020905b815481529060010190602001808311610da057829003601f168201915b5050505050905090565b6000610dd282612e75565b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890615137565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e578261188b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906151b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee7612ee1565b73ffffffffffffffffffffffffffffffffffffffff161480610f165750610f1581610f10612ee1565b612b3d565b5b610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c906150b7565b60405180910390fd5b610f5f8383612ee9565b505050565b610f6c612ee1565b73ffffffffffffffffffffffffffffffffffffffff16610f8a6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790615157565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110a3576110a2612fa2565b5b565b6110ad612ee1565b73ffffffffffffffffffffffffffffffffffffffff166110cb6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890615157565b60405180910390fd5b60005b81518110156111c85782600e60008484815181106111455761114461576a565b5b60200260200101518152602001908152602001600020908051906020019061116e929190613fb0565b506001600f60008484815181106111885761118761576a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c090615665565b915050611124565b505050565b600a60009054906101000a900460ff1681565b6000600880549050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122461121e612ee1565b82612fb4565b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906151d7565b60405180910390fd5b61126e838383613092565b505050565b600a60009054906101000a900460ff161561128d57600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060238152602001615f9460239139600c90805190602001906112fc929190613fb0565b506113716040518060400160405280600c81526020017f42534357696e2042756c6c7300000000000000000000000000000000000000008152506040518060400160405280600681526020017f42534357494e00000000000000000000000000000000000000000000000000008152506132ee565b66f8b0a10e470000600d819055506107d060128190555042601381905550611397612fa2565b61139f6121a5565b600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506113e7613320565b50565b601760009054906101000a900460ff1681565b600061140883611a91565b8210611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614f77565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6114aa612ee1565b73ffffffffffffffffffffffffffffffffffffffff166114c86121a5565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590615157565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b611556838383604051806020016040528060008152506124b8565b505050565b611563612ee1565b73ffffffffffffffffffffffffffffffffffffffff166115816121a5565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90615157565b60405180910390fd5b60011515600a60009054906101000a900460ff1615151461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490615277565b60405180910390fd5b6116368161333d565b50565b60006116436111e0565b8210611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90615217565b60405180910390fd5b600882815481106116985761169761576a565b5b90600052602060002001549050919050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b611703612ee1565b73ffffffffffffffffffffffffffffffffffffffff166117216121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90615157565b60405180910390fd5b806015908051906020019061178d929190613fb0565b5050565b6000601460009054906101000a900460ff16156117e157620151806117c16013544261344590919063ffffffff16565b10156117dc576103e8601054106117db57600190506117eb565b5b6117ea565b600090506117eb565b5b90565b601460009054906101000a900460ff1681565b611809612ee1565b73ffffffffffffffffffffffffffffffffffffffff166118276121a5565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490615157565b60405180910390fd5b61188782826132ee565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b906150f7565b60405180910390fd5b80915050919050565b6015805461194a90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461197690615602565b80156119c35780601f10611998576101008083540402835291602001916119c3565b820191906000526020600020905b8154815290600101906020018083116119a657829003601f168201915b505050505081565b600e60205280600052604060002060009150905080546119ea90615602565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1690615602565b8015611a635780601f10611a3857610100808354040283529160200191611a63565b820191906000526020600020905b815481529060010190602001808311611a4657829003601f168201915b505050505081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906150d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b51612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611b6f6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90615157565b60405180910390fd5b611bcf600061345b565b565b60011515600a60009054906101000a900460ff16151514611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90615277565b60405180910390fd5b611c2f611791565b15611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690615057565b60405180910390fd5b601760009054906101000a900460ff1615611d1157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790615197565b60405180910390fd5b5b80611dc157600083118015611d275750600a8311155b611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d906151f7565b60405180910390fd5b611d7b83600d5461352190919063ffffffff16565b3414611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390615257565b60405180910390fd5b611e01565b611dc96121a5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0057600080fd5b5b6000600190505b838111611e9a57611e2e611e1d601054613537565b6010546135b490919063ffffffff16565b6010819055506012546010541115611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290614f37565b60405180910390fd5b611e87836010546135ca565b8080611e9290615665565b915050611e08565b50505050565b60135481565b611eae612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611ecc6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990615157565b60405180910390fd5b80600d8190555050565b611f34612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611f526121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90615157565b60405180910390fd5b60005b8251811015612038578160166000858481518110611fcc57611fcb61576a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061203090615665565b915050611fab565b505050565b612045612ee1565b73ffffffffffffffffffffffffffffffffffffffff166120636121a5565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090615157565b60405180910390fd5b80600e600084815260200190815260200160002090805190602001906120e0929190613fb0565b505050565b6120ed612ee1565b73ffffffffffffffffffffffffffffffffffffffff1661210b6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890615157565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546121de90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461220a90615602565b80156122575780601f1061222c57610100808354040283529160200191612257565b820191906000526020600020905b81548152906001019060200180831161223a57829003601f168201915b5050505050905090565b60125481565b61226f612ee1565b73ffffffffffffffffffffffffffffffffffffffff1661228d6121a5565b73ffffffffffffffffffffffffffffffffffffffff16146122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90615157565b60405180910390fd5b6010548111612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90615037565b60405180910390fd5b8060128190555050565b612339612ee1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90615017565b60405180910390fd5b80600560006123b4612ee1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612461612ee1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a69190614edf565b60405180910390a35050565b60105481565b6124c96124c3612ee1565b83612fb4565b612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff906151d7565b60405180910390fd5b61251484848484613798565b50505050565b600d5481565b600c805461252d90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461255990615602565b80156125a65780601f1061257b576101008083540402835291602001916125a6565b820191906000526020600020905b81548152906001019060200180831161258957829003601f168201915b505050505081565b6125b6612ee1565b73ffffffffffffffffffffffffffffffffffffffff166125d46121a5565b73ffffffffffffffffffffffffffffffffffffffff161461262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190615157565b60405180910390fd5b60005b815181101561272d576001600f600084848151811061264f5761264e61576a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600f60008383815181106126935761269261576a565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff166126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90615097565b60405180910390fd5b61271a3383838151811061270d5761270c61576a565b5b60200260200101516135ca565b808061272590615665565b91505061262d565b5050565b60606000600e6000848152602001908152602001600020805461275390615602565b80601f016020809104026020016040519081016040528092919081815260200182805461277f90615602565b80156127cc5780601f106127a1576101008083540402835291602001916127cc565b820191906000526020600020905b8154815290600101906020018083116127af57829003601f168201915b5050505050905060606040516020016127e490614e63565b60405160208183030381529060405280519060200120600e600086815260200190815260200160002060405160200161281d9190614e05565b604051602081830303815290604052805190602001201480612840575060008251145b156128f057600e6000670de0b6b3a76400008152602001908152602001600020805461286b90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461289790615602565b80156128e45780601f106128b9576101008083540402835291602001916128e4565b820191906000526020600020905b8154815290600101906020018083116128c757829003601f168201915b5050505050905061298f565b600e6000858152602001908152602001600020805461290e90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461293a90615602565b80156129875780601f1061295c57610100808354040283529160200191612987565b820191906000526020600020905b81548152906001019060200180831161296a57829003601f168201915b505050505090505b600060158261299d876137f4565b6040516020016129af93929190614e1c565b6040516020818303038152906040529050809350505050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290615237565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612aa1573d6000803e3d6000fd5b50565b612aac612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612aca6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615157565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612bd9612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612bf76121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490615157565b60405180910390fd5b60008290505b818111612c955783600e60008381526020019081526020016000209080519060200190612c81929190613fb0565b508080612c8d90615665565b915050612c53565b50505050565b612ca3612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612cc16121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90615157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7e90614fb7565b60405180910390fd5b612d908161345b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e5e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e6e5750612e6d8261397d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f5c8361188b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612fb2612fad612ee1565b61345b565b565b6000612fbf82612e75565b612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590615077565b60405180910390fd5b60006130098361188b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061307857508373ffffffffffffffffffffffffffffffffffffffff1661306084610dc7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061308957506130888185612b3d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130b28261188b565b73ffffffffffffffffffffffffffffffffffffffff1614613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff90615177565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316f90614ff7565b60405180910390fd5b6131838383836139e7565b61318e600082612ee9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131de9190615501565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461323591906153e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160009080519060200190613304929190613fb0565b50806001908051906020019061331b929190613fb0565b505050565b6001600a60006101000a81548160ff021916908315150217905550565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561338357600080fd5b505afa158015613397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bb9190614582565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b1461341f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341690614f57565b60405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b600081836134539190615501565b905092915050565b6000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361352f91906154a7565b905092915050565b6000806001905060005b600a8110156135ac57600f6000838661355a91906153e9565b815260200190815260200160002060009054906101000a900460ff161561358f5760018261358891906153e9565b9150613599565b81925050506135af565b80806135a490615665565b915050613541565b50505b919050565b600081836135c291906153e9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561363a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363190615117565b60405180910390fd5b61364381612e75565b15613683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367a90614fd7565b60405180910390fd5b61368f600083836139e7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136df91906153e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6137a3848484613092565b6137af84848484613afb565b6137ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e590614f97565b60405180910390fd5b50505050565b6060600082141561383c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613978565b600082905060005b6000821461386e57808061385790615665565b915050600a826138679190615476565b9150613844565b60008167ffffffffffffffff81111561388a57613889615799565b5b6040519080825280601f01601f1916602001820160405280156138bc5781602001600182028036833780820191505090505b50905060008290505b60008614613970576001816138da9190615501565b90506000600a80886138ec9190615476565b6138f691906154a7565b876139019190615501565b603061390d919061543f565b905060008160f81b90508084848151811061392b5761392a61576a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886139679190615476565b975050506138c5565b819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6139f2838383613c92565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a3557613a3081613c97565b613a74565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a7357613a728382613ce0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ab757613ab281613e4d565b613af6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613af557613af48282613f1e565b5b5b505050565b6000613b1c8473ffffffffffffffffffffffffffffffffffffffff16613f9d565b15613c85578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b45612ee1565b8786866040518563ffffffff1660e01b8152600401613b679493929190614e93565b602060405180830381600087803b158015613b8157600080fd5b505af1925050508015613bb257506040513d601f19601f82011682018060405250810190613baf91906145dc565b60015b613c35573d8060008114613be2576040519150601f19603f3d011682016040523d82523d6000602084013e613be7565b606091505b50600081511415613c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2490614f97565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c8a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ced84611a91565b613cf79190615501565b9050600060076000848152602001908152602001600020549050818114613ddc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e619190615501565b9050600060096000848152602001908152602001600020549050600060088381548110613e9157613e9061576a565b5b906000526020600020015490508060088381548110613eb357613eb261576a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f0257613f0161573b565b5b6001900381819060005260206000200160009055905550505050565b6000613f2983611a91565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613fbc90615602565b90600052602060002090601f016020900481019282613fde5760008555614025565b82601f10613ff757805160ff1916838001178555614025565b82800160010185558215614025579182015b82811115614024578251825591602001919060010190614009565b5b5090506140329190614036565b5090565b5b8082111561404f576000816000905550600101614037565b5090565b6000614066614061846152d7565b6152b2565b90508083825260208201905082856020860282011115614089576140886157cd565b5b60005b858110156140b9578161409f88826141b7565b84526020840193506020830192505060018101905061408c565b5050509392505050565b60006140d66140d184615303565b6152b2565b905080838252602082019050828560208602820111156140f9576140f86157cd565b5b60005b85811015614129578161410f88826142d8565b8452602084019350602083019250506001810190506140fc565b5050509392505050565b60006141466141418461532f565b6152b2565b905082815260208101848484011115614162576141616157d2565b5b61416d8482856155c0565b509392505050565b600061418861418384615360565b6152b2565b9050828152602081018484840111156141a4576141a36157d2565b5b6141af8482856155c0565b509392505050565b6000813590506141c681615f20565b92915050565b600082601f8301126141e1576141e06157c8565b5b81356141f1848260208601614053565b91505092915050565b600082601f83011261420f5761420e6157c8565b5b813561421f8482602086016140c3565b91505092915050565b60008135905061423781615f37565b92915050565b60008151905061424c81615f4e565b92915050565b60008135905061426181615f65565b92915050565b60008151905061427681615f65565b92915050565b600082601f830112614291576142906157c8565b5b81356142a1848260208601614133565b91505092915050565b600082601f8301126142bf576142be6157c8565b5b81356142cf848260208601614175565b91505092915050565b6000813590506142e781615f7c565b92915050565b600060208284031215614303576143026157dc565b5b6000614311848285016141b7565b91505092915050565b60008060408385031215614331576143306157dc565b5b600061433f858286016141b7565b9250506020614350858286016141b7565b9150509250929050565b600080600060608486031215614373576143726157dc565b5b6000614381868287016141b7565b9350506020614392868287016141b7565b92505060406143a3868287016142d8565b9150509250925092565b600080600080608085870312156143c7576143c66157dc565b5b60006143d5878288016141b7565b94505060206143e6878288016141b7565b93505060406143f7878288016142d8565b925050606085013567ffffffffffffffff811115614418576144176157d7565b5b6144248782880161427c565b91505092959194509250565b60008060408385031215614447576144466157dc565b5b6000614455858286016141b7565b925050602061446685828601614228565b9150509250929050565b60008060408385031215614487576144866157dc565b5b6000614495858286016141b7565b92505060206144a6858286016142d8565b9150509250929050565b600080604083850312156144c7576144c66157dc565b5b600083013567ffffffffffffffff8111156144e5576144e46157d7565b5b6144f1858286016141cc565b925050602061450285828601614228565b9150509250929050565b600060208284031215614522576145216157dc565b5b600082013567ffffffffffffffff8111156145405761453f6157d7565b5b61454c848285016141fa565b91505092915050565b60006020828403121561456b5761456a6157dc565b5b600061457984828501614228565b91505092915050565b600060208284031215614598576145976157dc565b5b60006145a68482850161423d565b91505092915050565b6000602082840312156145c5576145c46157dc565b5b60006145d384828501614252565b91505092915050565b6000602082840312156145f2576145f16157dc565b5b600061460084828501614267565b91505092915050565b60006020828403121561461f5761461e6157dc565b5b600082013567ffffffffffffffff81111561463d5761463c6157d7565b5b614649848285016142aa565b91505092915050565b60008060408385031215614669576146686157dc565b5b600083013567ffffffffffffffff811115614687576146866157d7565b5b614693858286016142aa565b925050602083013567ffffffffffffffff8111156146b4576146b36157d7565b5b6146c0858286016141fa565b9150509250929050565b600080604083850312156146e1576146e06157dc565b5b600083013567ffffffffffffffff8111156146ff576146fe6157d7565b5b61470b858286016142aa565b925050602083013567ffffffffffffffff81111561472c5761472b6157d7565b5b614738858286016142aa565b9150509250929050565b60008060006060848603121561475b5761475a6157dc565b5b600084013567ffffffffffffffff811115614779576147786157d7565b5b614785868287016142aa565b9350506020614796868287016142d8565b92505060406147a7868287016142d8565b9150509250925092565b6000602082840312156147c7576147c66157dc565b5b60006147d5848285016142d8565b91505092915050565b6000806000606084860312156147f7576147f66157dc565b5b6000614805868287016142d8565b9350506020614816868287016141b7565b925050604061482786828701614228565b9150509250925092565b60008060408385031215614848576148476157dc565b5b6000614856858286016142d8565b925050602083013567ffffffffffffffff811115614877576148766157d7565b5b614883858286016142aa565b9150509250929050565b61489681615535565b82525050565b6148a581615547565b82525050565b6148b481615553565b82525050565b60006148c5826153a6565b6148cf81856153bc565b93506148df8185602086016155cf565b6148e8816157e1565b840191505092915050565b60006148fe826153b1565b61490881856153cd565b93506149188185602086016155cf565b614921816157e1565b840191505092915050565b6000614937826153b1565b61494181856153de565b93506149518185602086016155cf565b80840191505092915050565b6000815461496a81615602565b61497481866153de565b9450600182166000811461498f57600181146149a0576149d3565b60ff198316865281860193506149d3565b6149a985615391565b60005b838110156149cb578154818901526001820191506020810190506149ac565b838801955050505b50505092915050565b60006149e96012836153cd565b91506149f4826157f2565b602082019050919050565b6000614a0c600e836153cd565b9150614a178261581b565b602082019050919050565b6000614a2f602b836153cd565b9150614a3a82615844565b604082019050919050565b6000614a526032836153cd565b9150614a5d82615893565b604082019050919050565b6000614a756026836153cd565b9150614a80826158e2565b604082019050919050565b6000614a98601c836153cd565b9150614aa382615931565b602082019050919050565b6000614abb6024836153cd565b9150614ac68261595a565b604082019050919050565b6000614ade6019836153cd565b9150614ae9826159a9565b602082019050919050565b6000614b016027836153cd565b9150614b0c826159d2565b604082019050919050565b6000614b246018836153cd565b9150614b2f82615a21565b602082019050919050565b6000614b47602c836153cd565b9150614b5282615a4a565b604082019050919050565b6000614b6a6010836153cd565b9150614b7582615a99565b602082019050919050565b6000614b8d6038836153cd565b9150614b9882615ac2565b604082019050919050565b6000614bb0602a836153cd565b9150614bbb82615b11565b604082019050919050565b6000614bd36029836153cd565b9150614bde82615b60565b604082019050919050565b6000614bf66020836153cd565b9150614c0182615baf565b602082019050919050565b6000614c19602c836153cd565b9150614c2482615bd8565b604082019050919050565b6000614c3c6005836153de565b9150614c4782615c27565b600582019050919050565b6000614c5f6020836153cd565b9150614c6a82615c50565b602082019050919050565b6000614c826004836153de565b9150614c8d82615c79565b600482019050919050565b6000614ca56029836153cd565b9150614cb082615ca2565b604082019050919050565b6000614cc86023836153cd565b9150614cd382615cf1565b604082019050919050565b6000614ceb6021836153cd565b9150614cf682615d40565b604082019050919050565b6000614d0e6031836153cd565b9150614d1982615d8f565b604082019050919050565b6000614d316013836153cd565b9150614d3c82615dde565b602082019050919050565b6000614d54602c836153cd565b9150614d5f82615e07565b604082019050919050565b6000614d776012836153cd565b9150614d8282615e56565b602082019050919050565b6000614d9a6015836153cd565b9150614da582615e7f565b602082019050919050565b6000614dbd6001836153de565b9150614dc882615ea8565b600182019050919050565b6000614de06032836153cd565b9150614deb82615ed1565b604082019050919050565b614dff816155a9565b82525050565b6000614e11828461495d565b915081905092915050565b6000614e28828661495d565b9150614e34828561492c565b9150614e3f82614db0565b9150614e4b828461492c565b9150614e5682614c2f565b9150819050949350505050565b6000614e6e82614c75565b9150819050919050565b6000602082019050614e8d600083018461488d565b92915050565b6000608082019050614ea8600083018761488d565b614eb5602083018661488d565b614ec26040830185614df6565b8181036060830152614ed481846148ba565b905095945050505050565b6000602082019050614ef4600083018461489c565b92915050565b6000602082019050614f0f60008301846148ab565b92915050565b60006020820190508181036000830152614f2f81846148f3565b905092915050565b60006020820190508181036000830152614f50816149dc565b9050919050565b60006020820190508181036000830152614f70816149ff565b9050919050565b60006020820190508181036000830152614f9081614a22565b9050919050565b60006020820190508181036000830152614fb081614a45565b9050919050565b60006020820190508181036000830152614fd081614a68565b9050919050565b60006020820190508181036000830152614ff081614a8b565b9050919050565b6000602082019050818103600083015261501081614aae565b9050919050565b6000602082019050818103600083015261503081614ad1565b9050919050565b6000602082019050818103600083015261505081614af4565b9050919050565b6000602082019050818103600083015261507081614b17565b9050919050565b6000602082019050818103600083015261509081614b3a565b9050919050565b600060208201905081810360008301526150b081614b5d565b9050919050565b600060208201905081810360008301526150d081614b80565b9050919050565b600060208201905081810360008301526150f081614ba3565b9050919050565b6000602082019050818103600083015261511081614bc6565b9050919050565b6000602082019050818103600083015261513081614be9565b9050919050565b6000602082019050818103600083015261515081614c0c565b9050919050565b6000602082019050818103600083015261517081614c52565b9050919050565b6000602082019050818103600083015261519081614c98565b9050919050565b600060208201905081810360008301526151b081614cbb565b9050919050565b600060208201905081810360008301526151d081614cde565b9050919050565b600060208201905081810360008301526151f081614d01565b9050919050565b6000602082019050818103600083015261521081614d24565b9050919050565b6000602082019050818103600083015261523081614d47565b9050919050565b6000602082019050818103600083015261525081614d6a565b9050919050565b6000602082019050818103600083015261527081614d8d565b9050919050565b6000602082019050818103600083015261529081614dd3565b9050919050565b60006020820190506152ac6000830184614df6565b92915050565b60006152bc6152cd565b90506152c88282615634565b919050565b6000604051905090565b600067ffffffffffffffff8211156152f2576152f1615799565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561531e5761531d615799565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561534a57615349615799565b5b615353826157e1565b9050602081019050919050565b600067ffffffffffffffff82111561537b5761537a615799565b5b615384826157e1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006153f4826155a9565b91506153ff836155a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615434576154336156ae565b5b828201905092915050565b600061544a826155b3565b9150615455836155b3565b92508260ff0382111561546b5761546a6156ae565b5b828201905092915050565b6000615481826155a9565b915061548c836155a9565b92508261549c5761549b6156dd565b5b828204905092915050565b60006154b2826155a9565b91506154bd836155a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154f6576154f56156ae565b5b828202905092915050565b600061550c826155a9565b9150615517836155a9565b92508282101561552a576155296156ae565b5b828203905092915050565b600061554082615589565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156155ed5780820151818401526020810190506155d2565b838111156155fc576000848401525b50505050565b6000600282049050600182168061561a57607f821691505b6020821081141561562e5761562d61570c565b5b50919050565b61563d826157e1565b810181811067ffffffffffffffff8211171561565c5761565b615799565b5b80604052505050565b6000615670826155a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156a3576156a26156ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e74206c696d697420726561636865640000000000000000000000000000600082015250565b7f4e6f7420636f6d70617469626c65000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4c696d69742063616e6e6f74206265206c657373207468616e206d696e74656460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f4461696c79206d696e74206c696d697420726561636865640000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742061204c75636b792042756c6c00000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792077686974656c6973746564206164647265737365732063616e206d60008201527f696e740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f556e617574686f72697a656420636c61696d0000000000000000000000000000600082015250565b7f496e76616c6964206d6573736167652076616c75650000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b7f546865206c696272617279206973206c6f636b65642e204e6f2064697265637460008201527f202763616c6c2720697320616c6c6f7765640000000000000000000000000000602082015250565b615f2981615535565b8114615f3457600080fd5b50565b615f4081615547565b8114615f4b57600080fd5b50565b615f5781615553565b8114615f6257600080fd5b50565b615f6e8161555d565b8114615f7957600080fd5b50565b615f85816155a9565b8114615f9057600080fd5b5056fe68747470733a2f2f62736377696e2e6d7970696e6174612e636c6f75642f697066732fa2646970667358221220d7159defc22b300feda9d4f78872897d4808b08ee35d785ab595be9bd56ae3ab64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103395760003560e01c80636c0360eb116101ab578063996517cf116100f7578063c3c1865f11610095578063e78e3ac81161006f578063e78e3ac814610be3578063e985e9c514610c0c578063e9cea2fb14610c49578063f2fde38b14610c7257610340565b8063c3c1865f14610b66578063c87b56dd14610b8f578063e683029014610bcc57610340565b8063aa46a400116100d1578063aa46a40014610abc578063b88d4fde14610ae7578063bdb4b84814610b10578063c3a2710114610b3b57610340565b8063996517cf14610a3f5780639e6a1d7d14610a6a578063a22cb46514610a9357610340565b8063790ca413116101645780638a53ffff1161013e5780638a53ffff146109975780638a8f6d8e146109c05780638da5cb5b146109e957806395d89b4114610a1457610340565b8063790ca4131461091a5780638545f4ea1461094557806388eca5161461096e57610340565b80636c0360eb146108175780636f3d02e1146108425780636f66adb51461087f57806370a08231146108aa578063715018a6146108e75780637188897a146108fe57610340565b80632593626c116102855780635052ab3c1161022357806356f4720d116101fd57806356f4720d1461075b5780635759ed89146107865780635c707f07146107b15780636352211e146107da57610340565b80635052ab3c146106dc57806352d1902d1461070757806355f804b31461073257610340565b8063425bc1e91161025f578063425bc1e91461062457806342842e0e1461064d57806346951954146106765780634f6ccce71461069f57610340565b80632593626c146105a0578063293d6987146105bc5780632f745c59146105e757610340565b80630ba84e85116102f2578063158ef93e116102cc578063158ef93e146104f657806318160ddd146105215780631fd314e31461054c57806323b872dd1461057757610340565b80630ba84e85146104795780630c598fc5146104b657806312c6081b146104cd57610340565b806301ffc9a714610345578063054807e01461038257806306fdde03146103bf578063081812fc146103ea578063095ea7b3146104275780630a190db61461045057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c600480360381019061036791906145af565b610c9b565b6040516103799190614edf565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a491906147b1565b610d15565b6040516103b69190614edf565b60405180910390f35b3480156103cb57600080fd5b506103d4610d35565b6040516103e19190614f15565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906147b1565b610dc7565b60405161041e9190614e78565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614470565b610e4c565b005b34801561045c57600080fd5b50610477600480360381019061047291906142ed565b610f64565b005b34801561048557600080fd5b506104a0600480360381019061049b91906142ed565b611024565b6040516104ad9190614edf565b60405180910390f35b3480156104c257600080fd5b506104cb611044565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614652565b6110a5565b005b34801561050257600080fd5b5061050b6111cd565b6040516105189190614edf565b60405180910390f35b34801561052d57600080fd5b506105366111e0565b6040516105439190615297565b60405180910390f35b34801561055857600080fd5b506105616111ed565b60405161056e9190614e78565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061435a565b611213565b005b6105ba60048036038101906105b591906142ed565b611273565b005b3480156105c857600080fd5b506105d16113ea565b6040516105de9190614edf565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190614470565b6113fd565b60405161061b9190615297565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614555565b6114a2565b005b34801561065957600080fd5b50610674600480360381019061066f919061435a565b61153b565b005b34801561068257600080fd5b5061069d600480360381019061069891906142ed565b61155b565b005b3480156106ab57600080fd5b506106c660048036038101906106c191906147b1565b611639565b6040516106d39190615297565b60405180910390f35b3480156106e857600080fd5b506106f16116aa565b6040516106fe9190614e78565b60405180910390f35b34801561071357600080fd5b5061071c6116d0565b6040516107299190614efa565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614609565b6116fb565b005b34801561076757600080fd5b50610770611791565b60405161077d9190614edf565b60405180910390f35b34801561079257600080fd5b5061079b6117ee565b6040516107a89190614edf565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d391906146ca565b611801565b005b3480156107e657600080fd5b5061080160048036038101906107fc91906147b1565b61188b565b60405161080e9190614e78565b60405180910390f35b34801561082357600080fd5b5061082c61193d565b6040516108399190614f15565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906147b1565b6119cb565b6040516108769190614f15565b60405180910390f35b34801561088b57600080fd5b50610894611a6b565b6040516108a19190614e78565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906142ed565b611a91565b6040516108de9190615297565b60405180910390f35b3480156108f357600080fd5b506108fc611b49565b005b610918600480360381019061091391906147de565b611bd1565b005b34801561092657600080fd5b5061092f611ea0565b60405161093c9190615297565b60405180910390f35b34801561095157600080fd5b5061096c600480360381019061096791906147b1565b611ea6565b005b34801561097a57600080fd5b50610995600480360381019061099091906144b0565b611f2c565b005b3480156109a357600080fd5b506109be60048036038101906109b99190614831565b61203d565b005b3480156109cc57600080fd5b506109e760048036038101906109e291906142ed565b6120e5565b005b3480156109f557600080fd5b506109fe6121a5565b604051610a0b9190614e78565b60405180910390f35b348015610a2057600080fd5b50610a296121cf565b604051610a369190614f15565b60405180910390f35b348015610a4b57600080fd5b50610a54612261565b604051610a619190615297565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c91906147b1565b612267565b005b348015610a9f57600080fd5b50610aba6004803603810190610ab59190614430565b612331565b005b348015610ac857600080fd5b50610ad16124b2565b604051610ade9190615297565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906143ad565b6124b8565b005b348015610b1c57600080fd5b50610b2561251a565b604051610b329190615297565b60405180910390f35b348015610b4757600080fd5b50610b50612520565b604051610b5d9190614f15565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b88919061450c565b6125ae565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb191906147b1565b612731565b604051610bc39190614f15565b60405180910390f35b348015610bd857600080fd5b50610be16129cb565b005b348015610bef57600080fd5b50610c0a6004803603810190610c059190614555565b612aa4565b005b348015610c1857600080fd5b50610c336004803603810190610c2e919061431a565b612b3d565b604051610c409190614edf565b60405180910390f35b348015610c5557600080fd5b50610c706004803603810190610c6b9190614742565b612bd1565b005b348015610c7e57600080fd5b50610c996004803603810190610c9491906142ed565b612c9b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d0e5750610d0d82612d93565b5b9050919050565b600f6020528060005260406000206000915054906101000a900460ff1681565b606060008054610d4490615602565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7090615602565b8015610dbd5780601f10610d9257610100808354040283529160200191610dbd565b820191906000526020600020905b815481529060010190602001808311610da057829003601f168201915b5050505050905090565b6000610dd282612e75565b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890615137565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e578261188b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906151b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee7612ee1565b73ffffffffffffffffffffffffffffffffffffffff161480610f165750610f1581610f10612ee1565b612b3d565b5b610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c906150b7565b60405180910390fd5b610f5f8383612ee9565b505050565b610f6c612ee1565b73ffffffffffffffffffffffffffffffffffffffff16610f8a6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790615157565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110a3576110a2612fa2565b5b565b6110ad612ee1565b73ffffffffffffffffffffffffffffffffffffffff166110cb6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890615157565b60405180910390fd5b60005b81518110156111c85782600e60008484815181106111455761114461576a565b5b60200260200101518152602001908152602001600020908051906020019061116e929190613fb0565b506001600f60008484815181106111885761118761576a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c090615665565b915050611124565b505050565b600a60009054906101000a900460ff1681565b6000600880549050905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122461121e612ee1565b82612fb4565b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906151d7565b60405180910390fd5b61126e838383613092565b505050565b600a60009054906101000a900460ff161561128d57600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060238152602001615f9460239139600c90805190602001906112fc929190613fb0565b506113716040518060400160405280600c81526020017f42534357696e2042756c6c7300000000000000000000000000000000000000008152506040518060400160405280600681526020017f42534357494e00000000000000000000000000000000000000000000000000008152506132ee565b66f8b0a10e470000600d819055506107d060128190555042601381905550611397612fa2565b61139f6121a5565b600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506113e7613320565b50565b601760009054906101000a900460ff1681565b600061140883611a91565b8210611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614f77565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6114aa612ee1565b73ffffffffffffffffffffffffffffffffffffffff166114c86121a5565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590615157565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b611556838383604051806020016040528060008152506124b8565b505050565b611563612ee1565b73ffffffffffffffffffffffffffffffffffffffff166115816121a5565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90615157565b60405180910390fd5b60011515600a60009054906101000a900460ff1615151461162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490615277565b60405180910390fd5b6116368161333d565b50565b60006116436111e0565b8210611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90615217565b60405180910390fd5b600882815481106116985761169761576a565b5b90600052602060002001549050919050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b611703612ee1565b73ffffffffffffffffffffffffffffffffffffffff166117216121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90615157565b60405180910390fd5b806015908051906020019061178d929190613fb0565b5050565b6000601460009054906101000a900460ff16156117e157620151806117c16013544261344590919063ffffffff16565b10156117dc576103e8601054106117db57600190506117eb565b5b6117ea565b600090506117eb565b5b90565b601460009054906101000a900460ff1681565b611809612ee1565b73ffffffffffffffffffffffffffffffffffffffff166118276121a5565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490615157565b60405180910390fd5b61188782826132ee565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b906150f7565b60405180910390fd5b80915050919050565b6015805461194a90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461197690615602565b80156119c35780601f10611998576101008083540402835291602001916119c3565b820191906000526020600020905b8154815290600101906020018083116119a657829003601f168201915b505050505081565b600e60205280600052604060002060009150905080546119ea90615602565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1690615602565b8015611a635780601f10611a3857610100808354040283529160200191611a63565b820191906000526020600020905b815481529060010190602001808311611a4657829003601f168201915b505050505081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906150d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b51612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611b6f6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90615157565b60405180910390fd5b611bcf600061345b565b565b60011515600a60009054906101000a900460ff16151514611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90615277565b60405180910390fd5b611c2f611791565b15611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690615057565b60405180910390fd5b601760009054906101000a900460ff1615611d1157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790615197565b60405180910390fd5b5b80611dc157600083118015611d275750600a8311155b611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d906151f7565b60405180910390fd5b611d7b83600d5461352190919063ffffffff16565b3414611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390615257565b60405180910390fd5b611e01565b611dc96121a5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e0057600080fd5b5b6000600190505b838111611e9a57611e2e611e1d601054613537565b6010546135b490919063ffffffff16565b6010819055506012546010541115611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290614f37565b60405180910390fd5b611e87836010546135ca565b8080611e9290615665565b915050611e08565b50505050565b60135481565b611eae612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611ecc6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990615157565b60405180910390fd5b80600d8190555050565b611f34612ee1565b73ffffffffffffffffffffffffffffffffffffffff16611f526121a5565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90615157565b60405180910390fd5b60005b8251811015612038578160166000858481518110611fcc57611fcb61576a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061203090615665565b915050611fab565b505050565b612045612ee1565b73ffffffffffffffffffffffffffffffffffffffff166120636121a5565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090615157565b60405180910390fd5b80600e600084815260200190815260200160002090805190602001906120e0929190613fb0565b505050565b6120ed612ee1565b73ffffffffffffffffffffffffffffffffffffffff1661210b6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890615157565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546121de90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461220a90615602565b80156122575780601f1061222c57610100808354040283529160200191612257565b820191906000526020600020905b81548152906001019060200180831161223a57829003601f168201915b5050505050905090565b60125481565b61226f612ee1565b73ffffffffffffffffffffffffffffffffffffffff1661228d6121a5565b73ffffffffffffffffffffffffffffffffffffffff16146122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90615157565b60405180910390fd5b6010548111612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90615037565b60405180910390fd5b8060128190555050565b612339612ee1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90615017565b60405180910390fd5b80600560006123b4612ee1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612461612ee1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a69190614edf565b60405180910390a35050565b60105481565b6124c96124c3612ee1565b83612fb4565b612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff906151d7565b60405180910390fd5b61251484848484613798565b50505050565b600d5481565b600c805461252d90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461255990615602565b80156125a65780601f1061257b576101008083540402835291602001916125a6565b820191906000526020600020905b81548152906001019060200180831161258957829003601f168201915b505050505081565b6125b6612ee1565b73ffffffffffffffffffffffffffffffffffffffff166125d46121a5565b73ffffffffffffffffffffffffffffffffffffffff161461262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190615157565b60405180910390fd5b60005b815181101561272d576001600f600084848151811061264f5761264e61576a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600f60008383815181106126935761269261576a565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff166126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90615097565b60405180910390fd5b61271a3383838151811061270d5761270c61576a565b5b60200260200101516135ca565b808061272590615665565b91505061262d565b5050565b60606000600e6000848152602001908152602001600020805461275390615602565b80601f016020809104026020016040519081016040528092919081815260200182805461277f90615602565b80156127cc5780601f106127a1576101008083540402835291602001916127cc565b820191906000526020600020905b8154815290600101906020018083116127af57829003601f168201915b5050505050905060606040516020016127e490614e63565b60405160208183030381529060405280519060200120600e600086815260200190815260200160002060405160200161281d9190614e05565b604051602081830303815290604052805190602001201480612840575060008251145b156128f057600e6000670de0b6b3a76400008152602001908152602001600020805461286b90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461289790615602565b80156128e45780601f106128b9576101008083540402835291602001916128e4565b820191906000526020600020905b8154815290600101906020018083116128c757829003601f168201915b5050505050905061298f565b600e6000858152602001908152602001600020805461290e90615602565b80601f016020809104026020016040519081016040528092919081815260200182805461293a90615602565b80156129875780601f1061295c57610100808354040283529160200191612987565b820191906000526020600020905b81548152906001019060200180831161296a57829003601f168201915b505050505090505b600060158261299d876137f4565b6040516020016129af93929190614e1c565b6040516020818303038152906040529050809350505050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290615237565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612aa1573d6000803e3d6000fd5b50565b612aac612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612aca6121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615157565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612bd9612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612bf76121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490615157565b60405180910390fd5b60008290505b818111612c955783600e60008381526020019081526020016000209080519060200190612c81929190613fb0565b508080612c8d90615665565b915050612c53565b50505050565b612ca3612ee1565b73ffffffffffffffffffffffffffffffffffffffff16612cc16121a5565b73ffffffffffffffffffffffffffffffffffffffff1614612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90615157565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7e90614fb7565b60405180910390fd5b612d908161345b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e5e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e6e5750612e6d8261397d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f5c8361188b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612fb2612fad612ee1565b61345b565b565b6000612fbf82612e75565b612ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff590615077565b60405180910390fd5b60006130098361188b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061307857508373ffffffffffffffffffffffffffffffffffffffff1661306084610dc7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061308957506130888185612b3d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130b28261188b565b73ffffffffffffffffffffffffffffffffffffffff1614613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff90615177565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316f90614ff7565b60405180910390fd5b6131838383836139e7565b61318e600082612ee9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131de9190615501565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461323591906153e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160009080519060200190613304929190613fb0565b50806001908051906020019061331b929190613fb0565b505050565b6001600a60006101000a81548160ff021916908315150217905550565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561338357600080fd5b505afa158015613397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bb9190614582565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b1461341f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341690614f57565b60405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b600081836134539190615501565b905092915050565b6000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361352f91906154a7565b905092915050565b6000806001905060005b600a8110156135ac57600f6000838661355a91906153e9565b815260200190815260200160002060009054906101000a900460ff161561358f5760018261358891906153e9565b9150613599565b81925050506135af565b80806135a490615665565b915050613541565b50505b919050565b600081836135c291906153e9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561363a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363190615117565b60405180910390fd5b61364381612e75565b15613683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367a90614fd7565b60405180910390fd5b61368f600083836139e7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136df91906153e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6137a3848484613092565b6137af84848484613afb565b6137ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e590614f97565b60405180910390fd5b50505050565b6060600082141561383c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613978565b600082905060005b6000821461386e57808061385790615665565b915050600a826138679190615476565b9150613844565b60008167ffffffffffffffff81111561388a57613889615799565b5b6040519080825280601f01601f1916602001820160405280156138bc5781602001600182028036833780820191505090505b50905060008290505b60008614613970576001816138da9190615501565b90506000600a80886138ec9190615476565b6138f691906154a7565b876139019190615501565b603061390d919061543f565b905060008160f81b90508084848151811061392b5761392a61576a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886139679190615476565b975050506138c5565b819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6139f2838383613c92565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a3557613a3081613c97565b613a74565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a7357613a728382613ce0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ab757613ab281613e4d565b613af6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613af557613af48282613f1e565b5b5b505050565b6000613b1c8473ffffffffffffffffffffffffffffffffffffffff16613f9d565b15613c85578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b45612ee1565b8786866040518563ffffffff1660e01b8152600401613b679493929190614e93565b602060405180830381600087803b158015613b8157600080fd5b505af1925050508015613bb257506040513d601f19601f82011682018060405250810190613baf91906145dc565b60015b613c35573d8060008114613be2576040519150601f19603f3d011682016040523d82523d6000602084013e613be7565b606091505b50600081511415613c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2490614f97565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c8a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ced84611a91565b613cf79190615501565b9050600060076000848152602001908152602001600020549050818114613ddc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e619190615501565b9050600060096000848152602001908152602001600020549050600060088381548110613e9157613e9061576a565b5b906000526020600020015490508060088381548110613eb357613eb261576a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613f0257613f0161573b565b5b6001900381819060005260206000200160009055905550505050565b6000613f2983611a91565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613fbc90615602565b90600052602060002090601f016020900481019282613fde5760008555614025565b82601f10613ff757805160ff1916838001178555614025565b82800160010185558215614025579182015b82811115614024578251825591602001919060010190614009565b5b5090506140329190614036565b5090565b5b8082111561404f576000816000905550600101614037565b5090565b6000614066614061846152d7565b6152b2565b90508083825260208201905082856020860282011115614089576140886157cd565b5b60005b858110156140b9578161409f88826141b7565b84526020840193506020830192505060018101905061408c565b5050509392505050565b60006140d66140d184615303565b6152b2565b905080838252602082019050828560208602820111156140f9576140f86157cd565b5b60005b85811015614129578161410f88826142d8565b8452602084019350602083019250506001810190506140fc565b5050509392505050565b60006141466141418461532f565b6152b2565b905082815260208101848484011115614162576141616157d2565b5b61416d8482856155c0565b509392505050565b600061418861418384615360565b6152b2565b9050828152602081018484840111156141a4576141a36157d2565b5b6141af8482856155c0565b509392505050565b6000813590506141c681615f20565b92915050565b600082601f8301126141e1576141e06157c8565b5b81356141f1848260208601614053565b91505092915050565b600082601f83011261420f5761420e6157c8565b5b813561421f8482602086016140c3565b91505092915050565b60008135905061423781615f37565b92915050565b60008151905061424c81615f4e565b92915050565b60008135905061426181615f65565b92915050565b60008151905061427681615f65565b92915050565b600082601f830112614291576142906157c8565b5b81356142a1848260208601614133565b91505092915050565b600082601f8301126142bf576142be6157c8565b5b81356142cf848260208601614175565b91505092915050565b6000813590506142e781615f7c565b92915050565b600060208284031215614303576143026157dc565b5b6000614311848285016141b7565b91505092915050565b60008060408385031215614331576143306157dc565b5b600061433f858286016141b7565b9250506020614350858286016141b7565b9150509250929050565b600080600060608486031215614373576143726157dc565b5b6000614381868287016141b7565b9350506020614392868287016141b7565b92505060406143a3868287016142d8565b9150509250925092565b600080600080608085870312156143c7576143c66157dc565b5b60006143d5878288016141b7565b94505060206143e6878288016141b7565b93505060406143f7878288016142d8565b925050606085013567ffffffffffffffff811115614418576144176157d7565b5b6144248782880161427c565b91505092959194509250565b60008060408385031215614447576144466157dc565b5b6000614455858286016141b7565b925050602061446685828601614228565b9150509250929050565b60008060408385031215614487576144866157dc565b5b6000614495858286016141b7565b92505060206144a6858286016142d8565b9150509250929050565b600080604083850312156144c7576144c66157dc565b5b600083013567ffffffffffffffff8111156144e5576144e46157d7565b5b6144f1858286016141cc565b925050602061450285828601614228565b9150509250929050565b600060208284031215614522576145216157dc565b5b600082013567ffffffffffffffff8111156145405761453f6157d7565b5b61454c848285016141fa565b91505092915050565b60006020828403121561456b5761456a6157dc565b5b600061457984828501614228565b91505092915050565b600060208284031215614598576145976157dc565b5b60006145a68482850161423d565b91505092915050565b6000602082840312156145c5576145c46157dc565b5b60006145d384828501614252565b91505092915050565b6000602082840312156145f2576145f16157dc565b5b600061460084828501614267565b91505092915050565b60006020828403121561461f5761461e6157dc565b5b600082013567ffffffffffffffff81111561463d5761463c6157d7565b5b614649848285016142aa565b91505092915050565b60008060408385031215614669576146686157dc565b5b600083013567ffffffffffffffff811115614687576146866157d7565b5b614693858286016142aa565b925050602083013567ffffffffffffffff8111156146b4576146b36157d7565b5b6146c0858286016141fa565b9150509250929050565b600080604083850312156146e1576146e06157dc565b5b600083013567ffffffffffffffff8111156146ff576146fe6157d7565b5b61470b858286016142aa565b925050602083013567ffffffffffffffff81111561472c5761472b6157d7565b5b614738858286016142aa565b9150509250929050565b60008060006060848603121561475b5761475a6157dc565b5b600084013567ffffffffffffffff811115614779576147786157d7565b5b614785868287016142aa565b9350506020614796868287016142d8565b92505060406147a7868287016142d8565b9150509250925092565b6000602082840312156147c7576147c66157dc565b5b60006147d5848285016142d8565b91505092915050565b6000806000606084860312156147f7576147f66157dc565b5b6000614805868287016142d8565b9350506020614816868287016141b7565b925050604061482786828701614228565b9150509250925092565b60008060408385031215614848576148476157dc565b5b6000614856858286016142d8565b925050602083013567ffffffffffffffff811115614877576148766157d7565b5b614883858286016142aa565b9150509250929050565b61489681615535565b82525050565b6148a581615547565b82525050565b6148b481615553565b82525050565b60006148c5826153a6565b6148cf81856153bc565b93506148df8185602086016155cf565b6148e8816157e1565b840191505092915050565b60006148fe826153b1565b61490881856153cd565b93506149188185602086016155cf565b614921816157e1565b840191505092915050565b6000614937826153b1565b61494181856153de565b93506149518185602086016155cf565b80840191505092915050565b6000815461496a81615602565b61497481866153de565b9450600182166000811461498f57600181146149a0576149d3565b60ff198316865281860193506149d3565b6149a985615391565b60005b838110156149cb578154818901526001820191506020810190506149ac565b838801955050505b50505092915050565b60006149e96012836153cd565b91506149f4826157f2565b602082019050919050565b6000614a0c600e836153cd565b9150614a178261581b565b602082019050919050565b6000614a2f602b836153cd565b9150614a3a82615844565b604082019050919050565b6000614a526032836153cd565b9150614a5d82615893565b604082019050919050565b6000614a756026836153cd565b9150614a80826158e2565b604082019050919050565b6000614a98601c836153cd565b9150614aa382615931565b602082019050919050565b6000614abb6024836153cd565b9150614ac68261595a565b604082019050919050565b6000614ade6019836153cd565b9150614ae9826159a9565b602082019050919050565b6000614b016027836153cd565b9150614b0c826159d2565b604082019050919050565b6000614b246018836153cd565b9150614b2f82615a21565b602082019050919050565b6000614b47602c836153cd565b9150614b5282615a4a565b604082019050919050565b6000614b6a6010836153cd565b9150614b7582615a99565b602082019050919050565b6000614b8d6038836153cd565b9150614b9882615ac2565b604082019050919050565b6000614bb0602a836153cd565b9150614bbb82615b11565b604082019050919050565b6000614bd36029836153cd565b9150614bde82615b60565b604082019050919050565b6000614bf66020836153cd565b9150614c0182615baf565b602082019050919050565b6000614c19602c836153cd565b9150614c2482615bd8565b604082019050919050565b6000614c3c6005836153de565b9150614c4782615c27565b600582019050919050565b6000614c5f6020836153cd565b9150614c6a82615c50565b602082019050919050565b6000614c826004836153de565b9150614c8d82615c79565b600482019050919050565b6000614ca56029836153cd565b9150614cb082615ca2565b604082019050919050565b6000614cc86023836153cd565b9150614cd382615cf1565b604082019050919050565b6000614ceb6021836153cd565b9150614cf682615d40565b604082019050919050565b6000614d0e6031836153cd565b9150614d1982615d8f565b604082019050919050565b6000614d316013836153cd565b9150614d3c82615dde565b602082019050919050565b6000614d54602c836153cd565b9150614d5f82615e07565b604082019050919050565b6000614d776012836153cd565b9150614d8282615e56565b602082019050919050565b6000614d9a6015836153cd565b9150614da582615e7f565b602082019050919050565b6000614dbd6001836153de565b9150614dc882615ea8565b600182019050919050565b6000614de06032836153cd565b9150614deb82615ed1565b604082019050919050565b614dff816155a9565b82525050565b6000614e11828461495d565b915081905092915050565b6000614e28828661495d565b9150614e34828561492c565b9150614e3f82614db0565b9150614e4b828461492c565b9150614e5682614c2f565b9150819050949350505050565b6000614e6e82614c75565b9150819050919050565b6000602082019050614e8d600083018461488d565b92915050565b6000608082019050614ea8600083018761488d565b614eb5602083018661488d565b614ec26040830185614df6565b8181036060830152614ed481846148ba565b905095945050505050565b6000602082019050614ef4600083018461489c565b92915050565b6000602082019050614f0f60008301846148ab565b92915050565b60006020820190508181036000830152614f2f81846148f3565b905092915050565b60006020820190508181036000830152614f50816149dc565b9050919050565b60006020820190508181036000830152614f70816149ff565b9050919050565b60006020820190508181036000830152614f9081614a22565b9050919050565b60006020820190508181036000830152614fb081614a45565b9050919050565b60006020820190508181036000830152614fd081614a68565b9050919050565b60006020820190508181036000830152614ff081614a8b565b9050919050565b6000602082019050818103600083015261501081614aae565b9050919050565b6000602082019050818103600083015261503081614ad1565b9050919050565b6000602082019050818103600083015261505081614af4565b9050919050565b6000602082019050818103600083015261507081614b17565b9050919050565b6000602082019050818103600083015261509081614b3a565b9050919050565b600060208201905081810360008301526150b081614b5d565b9050919050565b600060208201905081810360008301526150d081614b80565b9050919050565b600060208201905081810360008301526150f081614ba3565b9050919050565b6000602082019050818103600083015261511081614bc6565b9050919050565b6000602082019050818103600083015261513081614be9565b9050919050565b6000602082019050818103600083015261515081614c0c565b9050919050565b6000602082019050818103600083015261517081614c52565b9050919050565b6000602082019050818103600083015261519081614c98565b9050919050565b600060208201905081810360008301526151b081614cbb565b9050919050565b600060208201905081810360008301526151d081614cde565b9050919050565b600060208201905081810360008301526151f081614d01565b9050919050565b6000602082019050818103600083015261521081614d24565b9050919050565b6000602082019050818103600083015261523081614d47565b9050919050565b6000602082019050818103600083015261525081614d6a565b9050919050565b6000602082019050818103600083015261527081614d8d565b9050919050565b6000602082019050818103600083015261529081614dd3565b9050919050565b60006020820190506152ac6000830184614df6565b92915050565b60006152bc6152cd565b90506152c88282615634565b919050565b6000604051905090565b600067ffffffffffffffff8211156152f2576152f1615799565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561531e5761531d615799565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561534a57615349615799565b5b615353826157e1565b9050602081019050919050565b600067ffffffffffffffff82111561537b5761537a615799565b5b615384826157e1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006153f4826155a9565b91506153ff836155a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615434576154336156ae565b5b828201905092915050565b600061544a826155b3565b9150615455836155b3565b92508260ff0382111561546b5761546a6156ae565b5b828201905092915050565b6000615481826155a9565b915061548c836155a9565b92508261549c5761549b6156dd565b5b828204905092915050565b60006154b2826155a9565b91506154bd836155a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154f6576154f56156ae565b5b828202905092915050565b600061550c826155a9565b9150615517836155a9565b92508282101561552a576155296156ae565b5b828203905092915050565b600061554082615589565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156155ed5780820151818401526020810190506155d2565b838111156155fc576000848401525b50505050565b6000600282049050600182168061561a57607f821691505b6020821081141561562e5761562d61570c565b5b50919050565b61563d826157e1565b810181811067ffffffffffffffff8211171561565c5761565b615799565b5b80604052505050565b6000615670826155a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156a3576156a26156ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e74206c696d697420726561636865640000000000000000000000000000600082015250565b7f4e6f7420636f6d70617469626c65000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4c696d69742063616e6e6f74206265206c657373207468616e206d696e74656460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f4461696c79206d696e74206c696d697420726561636865640000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742061204c75636b792042756c6c00000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792077686974656c6973746564206164647265737365732063616e206d60008201527f696e740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f556e617574686f72697a656420636c61696d0000000000000000000000000000600082015250565b7f496e76616c6964206d6573736167652076616c75650000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b7f546865206c696272617279206973206c6f636b65642e204e6f2064697265637460008201527f202763616c6c2720697320616c6c6f7765640000000000000000000000000000602082015250565b615f2981615535565b8114615f3457600080fd5b50565b615f4081615547565b8114615f4b57600080fd5b50565b615f5781615553565b8114615f6257600080fd5b50565b615f6e8161555d565b8114615f7957600080fd5b50565b615f85816155a9565b8114615f9057600080fd5b5056fe68747470733a2f2f62736377696e2e6d7970696e6174612e636c6f75642f697066732fa2646970667358221220d7159defc22b300feda9d4f78872897d4808b08ee35d785ab595be9bd56ae3ab64736f6c63430008070033
Deployed Bytecode Sourcemap
54379:6033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46484:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54034:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34376:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35935:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35458:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57257:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54291:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55232:125;;;;;;;;;;;;;:::i;:::-;;56901:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53395:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47124:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53897:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36825:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54655:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46792:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55594:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37235:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55096:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47314:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53866:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53205:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56165:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56275:313;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54228:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55913:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34070:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54257:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53983:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54125:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33800:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31319:94;;;;;;;;;;;;;:::i;:::-;;58761:804;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54196:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56600:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55369:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57377:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57148:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30668:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34545:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54165:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55731:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36228:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54088:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37491:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53953:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53925:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59918:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58086:663;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60216:176;;;;;;;;;;;;;:::i;:::-;;56054:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36594:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56694:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31568:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46484:224;46586:4;46625:35;46610:50;;;:11;:50;;;;:90;;;;46664:36;46688:11;46664:23;:36::i;:::-;46610:90;46603:97;;46484:224;;;:::o;54034:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;34376:100::-;34430:13;34463:5;34456:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34376:100;:::o;35935:221::-;36011:7;36039:16;36047:7;36039;:16::i;:::-;36031:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36124:15;:24;36140:7;36124:24;;;;;;;;;;;;;;;;;;;;;36117:31;;35935:221;;;:::o;35458:411::-;35539:13;35555:23;35570:7;35555:14;:23::i;:::-;35539:39;;35603:5;35597:11;;:2;:11;;;;35589:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35697:5;35681:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35706:37;35723:5;35730:12;:10;:12::i;:::-;35706:16;:37::i;:::-;35681:62;35659:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;35840:21;35849:2;35853:7;35840:8;:21::i;:::-;35528:341;35458:411;;:::o;57257:112::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57354:7:::1;57333:18;;:28;;;;;;;;;;;;;;;;;;57257:112:::0;:::o;54291:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;55232:125::-;55288:10;55275:23;;:9;;;;;;;;;;;:23;;;55271:79;;;55315:23;:21;:23::i;:::-;55271:79;55232:125::o;56901:235::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56999:9:::1;56995:134;57014:3;:10;57010:1;:14;56995:134;;;57068:3;57046:11;:19;57058:3;57062:1;57058:6;;;;;;;;:::i;:::-;;;;;;;;57046:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;57113:4;57086:16;:24;57103:3;57107:1;57103:6;;;;;;;;:::i;:::-;;;;;;;;57086:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;57026:3;;;;;:::i;:::-;;;;56995:134;;;;56901:235:::0;;:::o;53395:31::-;;;;;;;;;;;;;:::o;47124:113::-;47185:7;47212:10;:17;;;;47205:24;;47124:113;:::o;53897:21::-;;;;;;;;;;;;;:::o;36825:339::-;37020:41;37039:12;:10;:12::i;:::-;37053:7;37020:18;:41::i;:::-;37012:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37128:28;37138:4;37144:2;37148:7;37128:9;:28::i;:::-;36825:339;;;:::o;54655:433::-;54732:11;;;;;;;;;;;54731:12;54723:21;;;;;;54776:8;54755:18;;:29;;;;;;;;;;;;;;;;;;54795:47;;;;;;;;;;;;;;;;;:7;:47;;;;;;;;;;;;:::i;:::-;;54853:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;:42::i;:::-;54917:10;54906:8;:21;;;;54950:4;54938:9;:16;;;;54978:15;54965:10;:28;;;;55004:23;:21;:23::i;:::-;55050:7;:5;:7::i;:::-;55038:9;;:19;;;;;;;;;;;;;;;;;;55068:12;:10;:12::i;:::-;54655:433;:::o;54343:27::-;;;;;;;;;;;;;:::o;46792:256::-;46889:7;46925:23;46942:5;46925:16;:23::i;:::-;46917:5;:31;46909:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47014:12;:19;47027:5;47014:19;;;;;;;;;;;;;;;:26;47034:5;47014:26;;;;;;;;;;;;47007:33;;46792:256;;;;:::o;55594:125::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55692:19:::1;55674:15;;:37;;;;;;;;;;;;;;;;;;55594:125:::0;:::o;37235:185::-;37373:39;37390:4;37396:2;37400:7;37373:39;;;;;;;;;;;;:16;:39::i;:::-;37235:185;;;:::o;55096:124::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53664:4:::1;53649:19;;:11;;;;;;;;;;;:19;;;53641:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;55176:26:::2;55194:7;55176:17;:26::i;:::-;55096:124:::0;:::o;47314:233::-;47389:7;47425:30;:28;:30::i;:::-;47417:5;:38;47409:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;47522:10;47533:5;47522:17;;;;;;;;:::i;:::-;;;;;;;;;;47515:24;;47314:233;;;:::o;53866:24::-;;;;;;;;;;;;;:::o;53205:147::-;53251:7;53278:66;53271:73;;;;53205:147;:::o;56165:98::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56247:8:::1;56237:7;:18;;;;;;;;;;;;:::i;:::-;;56165:98:::0;:::o;56275:313::-;56317:4;56338:10;;;;;;;;;;;56334:247;;;56403:8;56369:31;56389:10;;56369:15;:19;;:31;;;;:::i;:::-;:42;56365:159;;;56449:4;56436:9;;:17;56432:77;;56485:4;56478:11;;;;56432:77;56365:159;56334:247;;;56564:5;56557:12;;;;56334:247;56275:313;;:::o;54228:22::-;;;;;;;;;;;;;:::o;55913:129::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56002:32:::1;56019:5;56026:7;56002:16;:32::i;:::-;55913:129:::0;;:::o;34070:239::-;34142:7;34162:13;34178:7;:16;34186:7;34178:16;;;;;;;;;;;;;;;;;;;;;34162:32;;34230:1;34213:19;;:5;:19;;;;34205:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:5;34289:12;;;34070:239;;;:::o;54257:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53983:44::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54125:33::-;;;;;;;;;;;;;:::o;33800:208::-;33872:7;33917:1;33900:19;;:5;:19;;;;33892:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33984:9;:16;33994:5;33984:16;;;;;;;;;;;;;;;;33977:23;;33800:208;;;:::o;31319:94::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:21:::1;31402:1;31384:9;:21::i;:::-;31319:94::o:0;58761:804::-;53664:4;53649:19;;:11;;;;;;;;;;;:19;;;53641:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;58875:12:::1;:10;:12::i;:::-;58874:13;58866:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;58931:15;;;;;;;;;;;58927:121;;;58971:13;:25;58985:10;58971:25;;;;;;;;;;;;;;;;;;;;;;;;;58963:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;58927:121;59063:9;59058:246;;59106:1;59097:6;:10;:26;;;;;59121:2;59111:6;:12;;59097:26;59089:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;59183:20;59196:6;59183:8;;:12;;:20;;;;:::i;:::-;59170:9;:33;59162:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;59058:246;;;59284:7;:5;:7::i;:::-;59270:21;;:10;:21;;;59262:30;;;::::0;::::1;;59058:246;59329:9;59341:1;59329:13;;59324:232;59349:6;59344:1;:11;59324:232;;59389:47;59403:32;59425:9;;59403:21;:32::i;:::-;59389:9;;:13;;:47;;;;:::i;:::-;59377:9;:59;;;;59472:9;;59459;;:22;;59451:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;59519:25;59525:7;59534:9;;59519:5;:25::i;:::-;59357:3;;;;;:::i;:::-;;;;59324:232;;;;58761:804:::0;;;:::o;54196:25::-;;;;:::o;56600:86::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56674:4:::1;56663:8;:15;;;;56600:86:::0;:::o;55369:213::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55472:6:::1;55468:107;55484:10;:17;55480:1;:21;55468:107;;;55554:9;55523:13;:28;55537:10;55548:1;55537:13;;;;;;;;:::i;:::-;;;;;;;;55523:28;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;55503:3;;;;;:::i;:::-;;;;55468:107;;;;55369:213:::0;;:::o;57377:116::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57481:4:::1;57462:11;:16;57474:3;57462:16;;;;;;;;;;;:23;;;;;;;;;;;;:::i;:::-;;57377:116:::0;;:::o;57148:97::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57229:8:::1;57220:6;;:17;;;;;;;;;;;;;;;;;;57148:97:::0;:::o;30668:87::-;30714:7;30741:6;;;;;;;;;;;30734:13;;30668:87;:::o;34545:104::-;34601:13;34634:7;34627:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34545:104;:::o;54165:24::-;;;;:::o;55731:170::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55812:9:::1;;55804:5;:17;55796:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;55888:5;55876:9;:17;;;;55731:170:::0;:::o;36228:295::-;36343:12;:10;:12::i;:::-;36331:24;;:8;:24;;;;36323:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36443:8;36398:18;:32;36417:12;:10;:12::i;:::-;36398:32;;;;;;;;;;;;;;;:42;36431:8;36398:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36496:8;36467:48;;36482:12;:10;:12::i;:::-;36467:48;;;36506:8;36467:48;;;;;;:::i;:::-;;;;;;;;36228:295;;:::o;54088:24::-;;;;:::o;37491:328::-;37666:41;37685:12;:10;:12::i;:::-;37699:7;37666:18;:41::i;:::-;37658:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37772:39;37786:4;37792:2;37796:7;37805:5;37772:13;:39::i;:::-;37491:328;;;;:::o;53953:23::-;;;;:::o;53925:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59918:286::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59999:9:::1;59994:203;60014:3;:10;60010:1;:14;59994:203;;;60073:4;60046:16;:24;60063:3;60067:1;60063:6;;;;;;;;:::i;:::-;;;;;;;;60046:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;60100:16;:24;60117:3;60121:1;60117:6;;;;;;;;:::i;:::-;;;;;;;;60100:24;;;;;;;;;;;;;;;;;;;;;60092:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;60160:25;60166:10;60178:3;60182:1;60178:6;;;;;;;;:::i;:::-;;;;;;;;60160:5;:25::i;:::-;60026:3;;;;;:::i;:::-;;;;59994:203;;;;59918:286:::0;:::o;58086:663::-;58151:13;58223:32;58264:11;:20;58276:7;58264:20;;;;;;;;;;;58223:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58296:24;58401:26;;;;;;;:::i;:::-;;;;;;;;;;;;;58391:37;;;;;;58364:11;:20;58376:7;58364:20;;;;;;;;;;;58346:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;58336:51;;;;;;:92;58335:131;;;;58464:1;58434:19;:26;:31;58335:131;58331:275;;;58496:11;:32;58508:19;58496:32;;;;;;;;;;;58483:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58331:275;;;58574:11;:20;58586:7;58574:20;;;;;;;;;;;58561:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58331:275;58616:17;58660:7;58669:10;58686:23;58700:7;58686:8;:23::i;:::-;58643:76;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58616:104;;58738:3;58731:10;;;;;58086:663;;;:::o;60216:176::-;60281:18;;;;;;;;;;;60267:32;;:10;:32;;;60259:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;60341:10;60333:28;;:51;60362:21;60333:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60216:176::o;56054:99::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56135:10:::1;56122;;:23;;;;;;;;;;;;;;;;;;56054:99:::0;:::o;36594:164::-;36691:4;36715:18;:25;36734:5;36715:25;;;;;;;;;;;;;;;:35;36741:8;36715:35;;;;;;;;;;;;;;;;;;;;;;;;;36708:42;;36594:164;;;;:::o;56694:195::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56797:9:::1;56809:7;56797:19;;56793:89;56823:5;56818:1;:10;56793:89;;56867:3;56850:11;:14;56862:1;56850:14;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;56830:3;;;;;:::i;:::-;;;;56793:89;;;;56694:195:::0;;;:::o;31568:192::-;30899:12;:10;:12::i;:::-;30888:23;;:7;:5;:7::i;:::-;:23;;;30880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31677:1:::1;31657:22;;:8;:22;;;;31649:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31733:19;31743:8;31733:9;:19::i;:::-;31568:192:::0;:::o;33431:305::-;33533:4;33585:25;33570:40;;;:11;:40;;;;:105;;;;33642:33;33627:48;;;:11;:48;;;;33570:105;:158;;;;33692:36;33716:11;33692:23;:36::i;:::-;33570:158;33550:178;;33431:305;;;:::o;39329:127::-;39394:4;39446:1;39418:30;;:7;:16;39426:7;39418:16;;;;;;;;;;;;;;;;;;;;;:30;;;;39411:37;;39329:127;;;:::o;17298:98::-;17351:7;17378:10;17371:17;;17298:98;:::o;43311:174::-;43413:2;43386:15;:24;43402:7;43386:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43469:7;43465:2;43431:46;;43440:23;43455:7;43440:14;:23::i;:::-;43431:46;;;;;;;;;;;;43311:174;;:::o;30503:84::-;30556:23;30566:12;:10;:12::i;:::-;30556:9;:23::i;:::-;30503:84::o;39623:348::-;39716:4;39741:16;39749:7;39741;:16::i;:::-;39733:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39817:13;39833:23;39848:7;39833:14;:23::i;:::-;39817:39;;39886:5;39875:16;;:7;:16;;;:51;;;;39919:7;39895:31;;:20;39907:7;39895:11;:20::i;:::-;:31;;;39875:51;:87;;;;39930:32;39947:5;39954:7;39930:16;:32::i;:::-;39875:87;39867:96;;;39623:348;;;;:::o;42615:578::-;42774:4;42747:31;;:23;42762:7;42747:14;:23::i;:::-;:31;;;42739:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42857:1;42843:16;;:2;:16;;;;42835:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42913:39;42934:4;42940:2;42944:7;42913:20;:39::i;:::-;43017:29;43034:1;43038:7;43017:8;:29::i;:::-;43078:1;43059:9;:15;43069:4;43059:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;43107:1;43090:9;:13;43100:2;43090:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;43138:2;43119:7;:16;43127:7;43119:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43177:7;43173:2;43158:27;;43167:4;43158:27;;;;;;;;;;;;42615:578;;;:::o;33220:139::-;33318:5;33310;:13;;;;;;;;;;;;:::i;:::-;;33344:7;33334;:17;;;;;;;;;;;;:::i;:::-;;33220:139;;:::o;53749:68::-;53805:4;53791:11;;:18;;;;;;;;;;;;;;;;;;53749:68::o;52790:409::-;52968:10;52958:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52887:66;52879:75;;:116;52857:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;53170:10;53102:66;53095:86;52790:409;:::o;3202:98::-;3260:7;3291:1;3287;:5;;;;:::i;:::-;3280:12;;3202:98;;;;:::o;31768:173::-;31824:16;31843:6;;;;;;;;;;;31824:25;;31869:8;31860:6;;:17;;;;;;;;;;;;;;;;;;31924:8;31893:40;;31914:8;31893:40;;;;;;;;;;;;31813:128;31768:173;:::o;3559:98::-;3617:7;3648:1;3644;:5;;;;:::i;:::-;3637:12;;3559:98;;;;:::o;59577:329::-;59642:4;59659:14;59676:1;59659:18;;59693:9;59688:211;59708:2;59704:1;:6;59688:211;;;59736:16;:35;59761:9;59753:7;:17;;;;:::i;:::-;59736:35;;;;;;;;;;;;;;;;;;;;;59732:156;;;59814:1;59804:9;:11;;;;:::i;:::-;59792:23;;59732:156;;;59863:9;59856:16;;;;;;59732:156;59712:3;;;;;:::i;:::-;;;;59688:211;;;;59648:258;59577:329;;;;:::o;2821:98::-;2879:7;2910:1;2906;:5;;;;:::i;:::-;2899:12;;2821:98;;;;:::o;41307:382::-;41401:1;41387:16;;:2;:16;;;;41379:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41460:16;41468:7;41460;:16::i;:::-;41459:17;41451:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41522:45;41551:1;41555:2;41559:7;41522:20;:45::i;:::-;41597:1;41580:9;:13;41590:2;41580:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41628:2;41609:7;:16;41617:7;41609:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41673:7;41669:2;41648:33;;41665:1;41648:33;;;;;;;;;;;;41307:382;;:::o;38701:315::-;38858:28;38868:4;38874:2;38878:7;38858:9;:28::i;:::-;38905:48;38928:4;38934:2;38938:7;38947:5;38905:22;:48::i;:::-;38897:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;38701:315;;;;:::o;57505:573::-;57555:27;57605:1;57599:2;:7;57595:50;;;57623:10;;;;;;;;;;;;;;;;;;;;;57595:50;57655:6;57664:2;57655:11;;57677:8;57696:69;57708:1;57703;:6;57696:69;;57726:5;;;;;:::i;:::-;;;;57751:2;57746:7;;;;;:::i;:::-;;;57696:69;;;57775:17;57805:3;57795:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57775:34;;57820:6;57829:3;57820:12;;57843:198;57856:1;57850:2;:7;57843:198;;57880:1;57878;:3;;;;:::i;:::-;57874:7;;57896:10;57936:2;57931;57926;:7;;;;:::i;:::-;:12;;;;:::i;:::-;57921:2;:17;;;;:::i;:::-;57910:2;:29;;;;:::i;:::-;57896:44;;57955:9;57974:4;57967:12;;57955:24;;58004:2;57994:4;57999:1;57994:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;58027:2;58021:8;;;;;:::i;:::-;;;57859:182;;57843:198;;;58065:4;58051:19;;;;;;57505:573;;;;:::o;14439:157::-;14524:4;14563:25;14548:40;;;:11;:40;;;;14541:47;;14439:157;;;:::o;48160:589::-;48304:45;48331:4;48337:2;48341:7;48304:26;:45::i;:::-;48382:1;48366:18;;:4;:18;;;48362:187;;;48401:40;48433:7;48401:31;:40::i;:::-;48362:187;;;48471:2;48463:10;;:4;:10;;;48459:90;;48490:47;48523:4;48529:7;48490:32;:47::i;:::-;48459:90;48362:187;48577:1;48563:16;;:2;:16;;;48559:183;;;48596:45;48633:7;48596:36;:45::i;:::-;48559:183;;;48669:4;48663:10;;:2;:10;;;48659:83;;48690:40;48718:2;48722:7;48690:27;:40::i;:::-;48659:83;48559:183;48160:589;;;:::o;44050:799::-;44205:4;44226:15;:2;:13;;;:15::i;:::-;44222:620;;;44278:2;44262:36;;;44299:12;:10;:12::i;:::-;44313:4;44319:7;44328:5;44262:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44258:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44521:1;44504:6;:13;:18;44500:272;;;44547:60;;;;;;;;;;:::i;:::-;;;;;;;;44500:272;44722:6;44716:13;44707:6;44703:2;44699:15;44692:38;44258:529;44395:41;;;44385:51;;;:6;:51;;;;44378:58;;;;;44222:620;44826:4;44819:11;;44050:799;;;;;;;:::o;45421:126::-;;;;:::o;49472:164::-;49576:10;:17;;;;49549:15;:24;49565:7;49549:24;;;;;;;;;;;:44;;;;49604:10;49620:7;49604:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49472:164;:::o;50263:988::-;50529:22;50579:1;50554:22;50571:4;50554:16;:22::i;:::-;:26;;;;:::i;:::-;50529:51;;50591:18;50612:17;:26;50630:7;50612:26;;;;;;;;;;;;50591:47;;50759:14;50745:10;:28;50741:328;;50790:19;50812:12;:18;50825:4;50812:18;;;;;;;;;;;;;;;:34;50831:14;50812:34;;;;;;;;;;;;50790:56;;50896:11;50863:12;:18;50876:4;50863:18;;;;;;;;;;;;;;;:30;50882:10;50863:30;;;;;;;;;;;:44;;;;51013:10;50980:17;:30;50998:11;50980:30;;;;;;;;;;;:43;;;;50775:294;50741:328;51165:17;:26;51183:7;51165:26;;;;;;;;;;;51158:33;;;51209:12;:18;51222:4;51209:18;;;;;;;;;;;;;;;:34;51228:14;51209:34;;;;;;;;;;;51202:41;;;50344:907;;50263:988;;:::o;51546:1079::-;51799:22;51844:1;51824:10;:17;;;;:21;;;;:::i;:::-;51799:46;;51856:18;51877:15;:24;51893:7;51877:24;;;;;;;;;;;;51856:45;;52228:19;52250:10;52261:14;52250:26;;;;;;;;:::i;:::-;;;;;;;;;;52228:48;;52314:11;52289:10;52300;52289:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52425:10;52394:15;:28;52410:11;52394:28;;;;;;;;;;;:41;;;;52566:15;:24;52582:7;52566:24;;;;;;;;;;;52559:31;;;52601:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51617:1008;;;51546:1079;:::o;49050:221::-;49135:14;49152:20;49169:2;49152:16;:20::i;:::-;49135:37;;49210:7;49183:12;:16;49196:2;49183:16;;;;;;;;;;;;;;;:24;49200:6;49183:24;;;;;;;;;;;:34;;;;49257:6;49228:17;:26;49246:7;49228:26;;;;;;;;;;;:35;;;;49124:147;49050:221;;:::o;20540:387::-;20600:4;20808:12;20875:7;20863:20;20855:28;;20918:1;20911:4;:8;20904:15;;;20540:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:143::-;3458:5;3489:6;3483:13;3474:22;;3505:33;3532:5;3505:33;:::i;:::-;3401:143;;;;:::o;3550:137::-;3595:5;3633:6;3620:20;3611:29;;3649:32;3675:5;3649:32;:::i;:::-;3550:137;;;;:::o;3693:141::-;3749:5;3780:6;3774:13;3765:22;;3796:32;3822:5;3796:32;:::i;:::-;3693:141;;;;:::o;3853:338::-;3908:5;3957:3;3950:4;3942:6;3938:17;3934:27;3924:122;;3965:79;;:::i;:::-;3924:122;4082:6;4069:20;4107:78;4181:3;4173:6;4166:4;4158:6;4154:17;4107:78;:::i;:::-;4098:87;;3914:277;3853:338;;;;:::o;4211:340::-;4267:5;4316:3;4309:4;4301:6;4297:17;4293:27;4283:122;;4324:79;;:::i;:::-;4283:122;4441:6;4428:20;4466:79;4541:3;4533:6;4526:4;4518:6;4514:17;4466:79;:::i;:::-;4457:88;;4273:278;4211:340;;;;:::o;4557:139::-;4603:5;4641:6;4628:20;4619:29;;4657:33;4684:5;4657:33;:::i;:::-;4557:139;;;;:::o;4702:329::-;4761:6;4810:2;4798:9;4789:7;4785:23;4781:32;4778:119;;;4816:79;;:::i;:::-;4778:119;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;4702:329;;;;:::o;5037:474::-;5105:6;5113;5162:2;5150:9;5141:7;5137:23;5133:32;5130:119;;;5168:79;;:::i;:::-;5130:119;5288:1;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5259:117;5415:2;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5386:118;5037:474;;;;;:::o;5517:619::-;5594:6;5602;5610;5659:2;5647:9;5638:7;5634:23;5630:32;5627:119;;;5665:79;;:::i;:::-;5627:119;5785:1;5810:53;5855:7;5846:6;5835:9;5831:22;5810:53;:::i;:::-;5800:63;;5756:117;5912:2;5938:53;5983:7;5974:6;5963:9;5959:22;5938:53;:::i;:::-;5928:63;;5883:118;6040:2;6066:53;6111:7;6102:6;6091:9;6087:22;6066:53;:::i;:::-;6056:63;;6011:118;5517:619;;;;;:::o;6142:943::-;6237:6;6245;6253;6261;6310:3;6298:9;6289:7;6285:23;6281:33;6278:120;;;6317:79;;:::i;:::-;6278:120;6437:1;6462:53;6507:7;6498:6;6487:9;6483:22;6462:53;:::i;:::-;6452:63;;6408:117;6564:2;6590:53;6635:7;6626:6;6615:9;6611:22;6590:53;:::i;:::-;6580:63;;6535:118;6692:2;6718:53;6763:7;6754:6;6743:9;6739:22;6718:53;:::i;:::-;6708:63;;6663:118;6848:2;6837:9;6833:18;6820:32;6879:18;6871:6;6868:30;6865:117;;;6901:79;;:::i;:::-;6865:117;7006:62;7060:7;7051:6;7040:9;7036:22;7006:62;:::i;:::-;6996:72;;6791:287;6142:943;;;;;;;:::o;7091:468::-;7156:6;7164;7213:2;7201:9;7192:7;7188:23;7184:32;7181:119;;;7219:79;;:::i;:::-;7181:119;7339:1;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7310:117;7466:2;7492:50;7534:7;7525:6;7514:9;7510:22;7492:50;:::i;:::-;7482:60;;7437:115;7091:468;;;;;:::o;7565:474::-;7633:6;7641;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7943:2;7969:53;8014:7;8005:6;7994:9;7990:22;7969:53;:::i;:::-;7959:63;;7914:118;7565:474;;;;;:::o;8045:678::-;8135:6;8143;8192:2;8180:9;8171:7;8167:23;8163:32;8160:119;;;8198:79;;:::i;:::-;8160:119;8346:1;8335:9;8331:17;8318:31;8376:18;8368:6;8365:30;8362:117;;;8398:79;;:::i;:::-;8362:117;8503:78;8573:7;8564:6;8553:9;8549:22;8503:78;:::i;:::-;8493:88;;8289:302;8630:2;8656:50;8698:7;8689:6;8678:9;8674:22;8656:50;:::i;:::-;8646:60;;8601:115;8045:678;;;;;:::o;8729:539::-;8813:6;8862:2;8850:9;8841:7;8837:23;8833:32;8830:119;;;8868:79;;:::i;:::-;8830:119;9016:1;9005:9;9001:17;8988:31;9046:18;9038:6;9035:30;9032:117;;;9068:79;;:::i;:::-;9032:117;9173:78;9243:7;9234:6;9223:9;9219:22;9173:78;:::i;:::-;9163:88;;8959:302;8729:539;;;;:::o;9274:323::-;9330:6;9379:2;9367:9;9358:7;9354:23;9350:32;9347:119;;;9385:79;;:::i;:::-;9347:119;9505:1;9530:50;9572:7;9563:6;9552:9;9548:22;9530:50;:::i;:::-;9520:60;;9476:114;9274:323;;;;:::o;9603:351::-;9673:6;9722:2;9710:9;9701:7;9697:23;9693:32;9690:119;;;9728:79;;:::i;:::-;9690:119;9848:1;9873:64;9929:7;9920:6;9909:9;9905:22;9873:64;:::i;:::-;9863:74;;9819:128;9603:351;;;;:::o;9960:327::-;10018:6;10067:2;10055:9;10046:7;10042:23;10038:32;10035:119;;;10073:79;;:::i;:::-;10035:119;10193:1;10218:52;10262:7;10253:6;10242:9;10238:22;10218:52;:::i;:::-;10208:62;;10164:116;9960:327;;;;:::o;10293:349::-;10362:6;10411:2;10399:9;10390:7;10386:23;10382:32;10379:119;;;10417:79;;:::i;:::-;10379:119;10537:1;10562:63;10617:7;10608:6;10597:9;10593:22;10562:63;:::i;:::-;10552:73;;10508:127;10293:349;;;;:::o;10648:509::-;10717:6;10766:2;10754:9;10745:7;10741:23;10737:32;10734:119;;;10772:79;;:::i;:::-;10734:119;10920:1;10909:9;10905:17;10892:31;10950:18;10942:6;10939:30;10936:117;;;10972:79;;:::i;:::-;10936:117;11077:63;11132:7;11123:6;11112:9;11108:22;11077:63;:::i;:::-;11067:73;;10863:287;10648:509;;;;:::o;11163:864::-;11266:6;11274;11323:2;11311:9;11302:7;11298:23;11294:32;11291:119;;;11329:79;;:::i;:::-;11291:119;11477:1;11466:9;11462:17;11449:31;11507:18;11499:6;11496:30;11493:117;;;11529:79;;:::i;:::-;11493:117;11634:63;11689:7;11680:6;11669:9;11665:22;11634:63;:::i;:::-;11624:73;;11420:287;11774:2;11763:9;11759:18;11746:32;11805:18;11797:6;11794:30;11791:117;;;11827:79;;:::i;:::-;11791:117;11932:78;12002:7;11993:6;11982:9;11978:22;11932:78;:::i;:::-;11922:88;;11717:303;11163:864;;;;;:::o;12033:834::-;12121:6;12129;12178:2;12166:9;12157:7;12153:23;12149:32;12146:119;;;12184:79;;:::i;:::-;12146:119;12332:1;12321:9;12317:17;12304:31;12362:18;12354:6;12351:30;12348:117;;;12384:79;;:::i;:::-;12348:117;12489:63;12544:7;12535:6;12524:9;12520:22;12489:63;:::i;:::-;12479:73;;12275:287;12629:2;12618:9;12614:18;12601:32;12660:18;12652:6;12649:30;12646:117;;;12682:79;;:::i;:::-;12646:117;12787:63;12842:7;12833:6;12822:9;12818:22;12787:63;:::i;:::-;12777:73;;12572:288;12033:834;;;;;:::o;12873:799::-;12960:6;12968;12976;13025:2;13013:9;13004:7;13000:23;12996:32;12993:119;;;13031:79;;:::i;:::-;12993:119;13179:1;13168:9;13164:17;13151:31;13209:18;13201:6;13198:30;13195:117;;;13231:79;;:::i;:::-;13195:117;13336:63;13391:7;13382:6;13371:9;13367:22;13336:63;:::i;:::-;13326:73;;13122:287;13448:2;13474:53;13519:7;13510:6;13499:9;13495:22;13474:53;:::i;:::-;13464:63;;13419:118;13576:2;13602:53;13647:7;13638:6;13627:9;13623:22;13602:53;:::i;:::-;13592:63;;13547:118;12873:799;;;;;:::o;13678:329::-;13737:6;13786:2;13774:9;13765:7;13761:23;13757:32;13754:119;;;13792:79;;:::i;:::-;13754:119;13912:1;13937:53;13982:7;13973:6;13962:9;13958:22;13937:53;:::i;:::-;13927:63;;13883:117;13678:329;;;;:::o;14013:613::-;14087:6;14095;14103;14152:2;14140:9;14131:7;14127:23;14123:32;14120:119;;;14158:79;;:::i;:::-;14120:119;14278:1;14303:53;14348:7;14339:6;14328:9;14324:22;14303:53;:::i;:::-;14293:63;;14249:117;14405:2;14431:53;14476:7;14467:6;14456:9;14452:22;14431:53;:::i;:::-;14421:63;;14376:118;14533:2;14559:50;14601:7;14592:6;14581:9;14577:22;14559:50;:::i;:::-;14549:60;;14504:115;14013:613;;;;;:::o;14632:654::-;14710:6;14718;14767:2;14755:9;14746:7;14742:23;14738:32;14735:119;;;14773:79;;:::i;:::-;14735:119;14893:1;14918:53;14963:7;14954:6;14943:9;14939:22;14918:53;:::i;:::-;14908:63;;14864:117;15048:2;15037:9;15033:18;15020:32;15079:18;15071:6;15068:30;15065:117;;;15101:79;;:::i;:::-;15065:117;15206:63;15261:7;15252:6;15241:9;15237:22;15206:63;:::i;:::-;15196:73;;14991:288;14632:654;;;;;:::o;15292:118::-;15379:24;15397:5;15379:24;:::i;:::-;15374:3;15367:37;15292:118;;:::o;15416:109::-;15497:21;15512:5;15497:21;:::i;:::-;15492:3;15485:34;15416:109;;:::o;15531:118::-;15618:24;15636:5;15618:24;:::i;:::-;15613:3;15606:37;15531:118;;:::o;15655:360::-;15741:3;15769:38;15801:5;15769:38;:::i;:::-;15823:70;15886:6;15881:3;15823:70;:::i;:::-;15816:77;;15902:52;15947:6;15942:3;15935:4;15928:5;15924:16;15902:52;:::i;:::-;15979:29;16001:6;15979:29;:::i;:::-;15974:3;15970:39;15963:46;;15745:270;15655:360;;;;:::o;16021:364::-;16109:3;16137:39;16170:5;16137:39;:::i;:::-;16192:71;16256:6;16251:3;16192:71;:::i;:::-;16185:78;;16272:52;16317:6;16312:3;16305:4;16298:5;16294:16;16272:52;:::i;:::-;16349:29;16371:6;16349:29;:::i;:::-;16344:3;16340:39;16333:46;;16113:272;16021:364;;;;:::o;16391:377::-;16497:3;16525:39;16558:5;16525:39;:::i;:::-;16580:89;16662:6;16657:3;16580:89;:::i;:::-;16573:96;;16678:52;16723:6;16718:3;16711:4;16704:5;16700:16;16678:52;:::i;:::-;16755:6;16750:3;16746:16;16739:23;;16501:267;16391:377;;;;:::o;16798:845::-;16901:3;16938:5;16932:12;16967:36;16993:9;16967:36;:::i;:::-;17019:89;17101:6;17096:3;17019:89;:::i;:::-;17012:96;;17139:1;17128:9;17124:17;17155:1;17150:137;;;;17301:1;17296:341;;;;17117:520;;17150:137;17234:4;17230:9;17219;17215:25;17210:3;17203:38;17270:6;17265:3;17261:16;17254:23;;17150:137;;17296:341;17363:38;17395:5;17363:38;:::i;:::-;17423:1;17437:154;17451:6;17448:1;17445:13;17437:154;;;17525:7;17519:14;17515:1;17510:3;17506:11;17499:35;17575:1;17566:7;17562:15;17551:26;;17473:4;17470:1;17466:12;17461:17;;17437:154;;;17620:6;17615:3;17611:16;17604:23;;17303:334;;17117:520;;16905:738;;16798:845;;;;:::o;17649:366::-;17791:3;17812:67;17876:2;17871:3;17812:67;:::i;:::-;17805:74;;17888:93;17977:3;17888:93;:::i;:::-;18006:2;18001:3;17997:12;17990:19;;17649:366;;;:::o;18021:::-;18163:3;18184:67;18248:2;18243:3;18184:67;:::i;:::-;18177:74;;18260:93;18349:3;18260:93;:::i;:::-;18378:2;18373:3;18369:12;18362:19;;18021:366;;;:::o;18393:::-;18535:3;18556:67;18620:2;18615:3;18556:67;:::i;:::-;18549:74;;18632:93;18721:3;18632:93;:::i;:::-;18750:2;18745:3;18741:12;18734:19;;18393:366;;;:::o;18765:::-;18907:3;18928:67;18992:2;18987:3;18928:67;:::i;:::-;18921:74;;19004:93;19093:3;19004:93;:::i;:::-;19122:2;19117:3;19113:12;19106:19;;18765:366;;;:::o;19137:::-;19279:3;19300:67;19364:2;19359:3;19300:67;:::i;:::-;19293:74;;19376:93;19465:3;19376:93;:::i;:::-;19494:2;19489:3;19485:12;19478:19;;19137:366;;;:::o;19509:::-;19651:3;19672:67;19736:2;19731:3;19672:67;:::i;:::-;19665:74;;19748:93;19837:3;19748:93;:::i;:::-;19866:2;19861:3;19857:12;19850:19;;19509:366;;;:::o;19881:::-;20023:3;20044:67;20108:2;20103:3;20044:67;:::i;:::-;20037:74;;20120:93;20209:3;20120:93;:::i;:::-;20238:2;20233:3;20229:12;20222:19;;19881:366;;;:::o;20253:::-;20395:3;20416:67;20480:2;20475:3;20416:67;:::i;:::-;20409:74;;20492:93;20581:3;20492:93;:::i;:::-;20610:2;20605:3;20601:12;20594:19;;20253:366;;;:::o;20625:::-;20767:3;20788:67;20852:2;20847:3;20788:67;:::i;:::-;20781:74;;20864:93;20953:3;20864:93;:::i;:::-;20982:2;20977:3;20973:12;20966:19;;20625:366;;;:::o;20997:::-;21139:3;21160:67;21224:2;21219:3;21160:67;:::i;:::-;21153:74;;21236:93;21325:3;21236:93;:::i;:::-;21354:2;21349:3;21345:12;21338:19;;20997:366;;;:::o;21369:::-;21511:3;21532:67;21596:2;21591:3;21532:67;:::i;:::-;21525:74;;21608:93;21697:3;21608:93;:::i;:::-;21726:2;21721:3;21717:12;21710:19;;21369:366;;;:::o;21741:::-;21883:3;21904:67;21968:2;21963:3;21904:67;:::i;:::-;21897:74;;21980:93;22069:3;21980:93;:::i;:::-;22098:2;22093:3;22089:12;22082:19;;21741:366;;;:::o;22113:::-;22255:3;22276:67;22340:2;22335:3;22276:67;:::i;:::-;22269:74;;22352:93;22441:3;22352:93;:::i;:::-;22470:2;22465:3;22461:12;22454:19;;22113:366;;;:::o;22485:::-;22627:3;22648:67;22712:2;22707:3;22648:67;:::i;:::-;22641:74;;22724:93;22813:3;22724:93;:::i;:::-;22842:2;22837:3;22833:12;22826:19;;22485:366;;;:::o;22857:::-;22999:3;23020:67;23084:2;23079:3;23020:67;:::i;:::-;23013:74;;23096:93;23185:3;23096:93;:::i;:::-;23214:2;23209:3;23205:12;23198:19;;22857:366;;;:::o;23229:::-;23371:3;23392:67;23456:2;23451:3;23392:67;:::i;:::-;23385:74;;23468:93;23557:3;23468:93;:::i;:::-;23586:2;23581:3;23577:12;23570:19;;23229:366;;;:::o;23601:::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:400::-;24133:3;24154:84;24236:1;24231:3;24154:84;:::i;:::-;24147:91;;24247:93;24336:3;24247:93;:::i;:::-;24365:1;24360:3;24356:11;24349:18;;23973:400;;;:::o;24379:366::-;24521:3;24542:67;24606:2;24601:3;24542:67;:::i;:::-;24535:74;;24618:93;24707:3;24618:93;:::i;:::-;24736:2;24731:3;24727:12;24720:19;;24379:366;;;:::o;24751:400::-;24911:3;24932:84;25014:1;25009:3;24932:84;:::i;:::-;24925:91;;25025:93;25114:3;25025:93;:::i;:::-;25143:1;25138:3;25134:11;25127:18;;24751:400;;;:::o;25157:366::-;25299:3;25320:67;25384:2;25379:3;25320:67;:::i;:::-;25313:74;;25396:93;25485:3;25396:93;:::i;:::-;25514:2;25509:3;25505:12;25498:19;;25157:366;;;:::o;25529:::-;25671:3;25692:67;25756:2;25751:3;25692:67;:::i;:::-;25685:74;;25768:93;25857:3;25768:93;:::i;:::-;25886:2;25881:3;25877:12;25870:19;;25529:366;;;:::o;25901:::-;26043:3;26064:67;26128:2;26123:3;26064:67;:::i;:::-;26057:74;;26140:93;26229:3;26140:93;:::i;:::-;26258:2;26253:3;26249:12;26242:19;;25901:366;;;:::o;26273:::-;26415:3;26436:67;26500:2;26495:3;26436:67;:::i;:::-;26429:74;;26512:93;26601:3;26512:93;:::i;:::-;26630:2;26625:3;26621:12;26614:19;;26273:366;;;:::o;26645:::-;26787:3;26808:67;26872:2;26867:3;26808:67;:::i;:::-;26801:74;;26884:93;26973:3;26884:93;:::i;:::-;27002:2;26997:3;26993:12;26986:19;;26645:366;;;:::o;27017:::-;27159:3;27180:67;27244:2;27239:3;27180:67;:::i;:::-;27173:74;;27256:93;27345:3;27256:93;:::i;:::-;27374:2;27369:3;27365:12;27358:19;;27017:366;;;:::o;27389:::-;27531:3;27552:67;27616:2;27611:3;27552:67;:::i;:::-;27545:74;;27628:93;27717:3;27628:93;:::i;:::-;27746:2;27741:3;27737:12;27730:19;;27389:366;;;:::o;27761:::-;27903:3;27924:67;27988:2;27983:3;27924:67;:::i;:::-;27917:74;;28000:93;28089:3;28000:93;:::i;:::-;28118:2;28113:3;28109:12;28102:19;;27761:366;;;:::o;28133:400::-;28293:3;28314:84;28396:1;28391:3;28314:84;:::i;:::-;28307:91;;28407:93;28496:3;28407:93;:::i;:::-;28525:1;28520:3;28516:11;28509:18;;28133:400;;;:::o;28539:366::-;28681:3;28702:67;28766:2;28761:3;28702:67;:::i;:::-;28695:74;;28778:93;28867:3;28778:93;:::i;:::-;28896:2;28891:3;28887:12;28880:19;;28539:366;;;:::o;28911:118::-;28998:24;29016:5;28998:24;:::i;:::-;28993:3;28986:37;28911:118;;:::o;29035:269::-;29164:3;29186:92;29274:3;29265:6;29186:92;:::i;:::-;29179:99;;29295:3;29288:10;;29035:269;;;;:::o;29310:1121::-;29737:3;29759:92;29847:3;29838:6;29759:92;:::i;:::-;29752:99;;29868:95;29959:3;29950:6;29868:95;:::i;:::-;29861:102;;29980:148;30124:3;29980:148;:::i;:::-;29973:155;;30145:95;30236:3;30227:6;30145:95;:::i;:::-;30138:102;;30257:148;30401:3;30257:148;:::i;:::-;30250:155;;30422:3;30415:10;;29310:1121;;;;;;:::o;30437:381::-;30622:3;30644:148;30788:3;30644:148;:::i;:::-;30637:155;;30809:3;30802:10;;30437:381;;;:::o;30824:222::-;30917:4;30955:2;30944:9;30940:18;30932:26;;30968:71;31036:1;31025:9;31021:17;31012:6;30968:71;:::i;:::-;30824:222;;;;:::o;31052:640::-;31247:4;31285:3;31274:9;31270:19;31262:27;;31299:71;31367:1;31356:9;31352:17;31343:6;31299:71;:::i;:::-;31380:72;31448:2;31437:9;31433:18;31424:6;31380:72;:::i;:::-;31462;31530:2;31519:9;31515:18;31506:6;31462:72;:::i;:::-;31581:9;31575:4;31571:20;31566:2;31555:9;31551:18;31544:48;31609:76;31680:4;31671:6;31609:76;:::i;:::-;31601:84;;31052:640;;;;;;;:::o;31698:210::-;31785:4;31823:2;31812:9;31808:18;31800:26;;31836:65;31898:1;31887:9;31883:17;31874:6;31836:65;:::i;:::-;31698:210;;;;:::o;31914:222::-;32007:4;32045:2;32034:9;32030:18;32022:26;;32058:71;32126:1;32115:9;32111:17;32102:6;32058:71;:::i;:::-;31914:222;;;;:::o;32142:313::-;32255:4;32293:2;32282:9;32278:18;32270:26;;32342:9;32336:4;32332:20;32328:1;32317:9;32313:17;32306:47;32370:78;32443:4;32434:6;32370:78;:::i;:::-;32362:86;;32142:313;;;;:::o;32461:419::-;32627:4;32665:2;32654:9;32650:18;32642:26;;32714:9;32708:4;32704:20;32700:1;32689:9;32685:17;32678:47;32742:131;32868:4;32742:131;:::i;:::-;32734:139;;32461:419;;;:::o;32886:::-;33052:4;33090:2;33079:9;33075:18;33067:26;;33139:9;33133:4;33129:20;33125:1;33114:9;33110:17;33103:47;33167:131;33293:4;33167:131;:::i;:::-;33159:139;;32886:419;;;:::o;33311:::-;33477:4;33515:2;33504:9;33500:18;33492:26;;33564:9;33558:4;33554:20;33550:1;33539:9;33535:17;33528:47;33592:131;33718:4;33592:131;:::i;:::-;33584:139;;33311:419;;;:::o;33736:::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33736:419;;;:::o;34161:::-;34327:4;34365:2;34354:9;34350:18;34342:26;;34414:9;34408:4;34404:20;34400:1;34389:9;34385:17;34378:47;34442:131;34568:4;34442:131;:::i;:::-;34434:139;;34161:419;;;:::o;34586:::-;34752:4;34790:2;34779:9;34775:18;34767:26;;34839:9;34833:4;34829:20;34825:1;34814:9;34810:17;34803:47;34867:131;34993:4;34867:131;:::i;:::-;34859:139;;34586:419;;;:::o;35011:::-;35177:4;35215:2;35204:9;35200:18;35192:26;;35264:9;35258:4;35254:20;35250:1;35239:9;35235:17;35228:47;35292:131;35418:4;35292:131;:::i;:::-;35284:139;;35011:419;;;:::o;35436:::-;35602:4;35640:2;35629:9;35625:18;35617:26;;35689:9;35683:4;35679:20;35675:1;35664:9;35660:17;35653:47;35717:131;35843:4;35717:131;:::i;:::-;35709:139;;35436:419;;;:::o;35861:::-;36027:4;36065:2;36054:9;36050:18;36042:26;;36114:9;36108:4;36104:20;36100:1;36089:9;36085:17;36078:47;36142:131;36268:4;36142:131;:::i;:::-;36134:139;;35861:419;;;:::o;36286:::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36286:419;;;:::o;36711:::-;36877:4;36915:2;36904:9;36900:18;36892:26;;36964:9;36958:4;36954:20;36950:1;36939:9;36935:17;36928:47;36992:131;37118:4;36992:131;:::i;:::-;36984:139;;36711:419;;;:::o;37136:::-;37302:4;37340:2;37329:9;37325:18;37317:26;;37389:9;37383:4;37379:20;37375:1;37364:9;37360:17;37353:47;37417:131;37543:4;37417:131;:::i;:::-;37409:139;;37136:419;;;:::o;37561:::-;37727:4;37765:2;37754:9;37750:18;37742:26;;37814:9;37808:4;37804:20;37800:1;37789:9;37785:17;37778:47;37842:131;37968:4;37842:131;:::i;:::-;37834:139;;37561:419;;;:::o;37986:::-;38152:4;38190:2;38179:9;38175:18;38167:26;;38239:9;38233:4;38229:20;38225:1;38214:9;38210:17;38203:47;38267:131;38393:4;38267:131;:::i;:::-;38259:139;;37986:419;;;:::o;38411:::-;38577:4;38615:2;38604:9;38600:18;38592:26;;38664:9;38658:4;38654:20;38650:1;38639:9;38635:17;38628:47;38692:131;38818:4;38692:131;:::i;:::-;38684:139;;38411:419;;;:::o;38836:::-;39002:4;39040:2;39029:9;39025:18;39017:26;;39089:9;39083:4;39079:20;39075:1;39064:9;39060:17;39053:47;39117:131;39243:4;39117:131;:::i;:::-;39109:139;;38836:419;;;:::o;39261:::-;39427:4;39465:2;39454:9;39450:18;39442:26;;39514:9;39508:4;39504:20;39500:1;39489:9;39485:17;39478:47;39542:131;39668:4;39542:131;:::i;:::-;39534:139;;39261:419;;;:::o;39686:::-;39852:4;39890:2;39879:9;39875:18;39867:26;;39939:9;39933:4;39929:20;39925:1;39914:9;39910:17;39903:47;39967:131;40093:4;39967:131;:::i;:::-;39959:139;;39686:419;;;:::o;40111:::-;40277:4;40315:2;40304:9;40300:18;40292:26;;40364:9;40358:4;40354:20;40350:1;40339:9;40335:17;40328:47;40392:131;40518:4;40392:131;:::i;:::-;40384:139;;40111:419;;;:::o;40536:::-;40702:4;40740:2;40729:9;40725:18;40717:26;;40789:9;40783:4;40779:20;40775:1;40764:9;40760:17;40753:47;40817:131;40943:4;40817:131;:::i;:::-;40809:139;;40536:419;;;:::o;40961:::-;41127:4;41165:2;41154:9;41150:18;41142:26;;41214:9;41208:4;41204:20;41200:1;41189:9;41185:17;41178:47;41242:131;41368:4;41242:131;:::i;:::-;41234:139;;40961:419;;;:::o;41386:::-;41552:4;41590:2;41579:9;41575:18;41567:26;;41639:9;41633:4;41629:20;41625:1;41614:9;41610:17;41603:47;41667:131;41793:4;41667:131;:::i;:::-;41659:139;;41386:419;;;:::o;41811:::-;41977:4;42015:2;42004:9;42000:18;41992:26;;42064:9;42058:4;42054:20;42050:1;42039:9;42035:17;42028:47;42092:131;42218:4;42092:131;:::i;:::-;42084:139;;41811:419;;;:::o;42236:::-;42402:4;42440:2;42429:9;42425:18;42417:26;;42489:9;42483:4;42479:20;42475:1;42464:9;42460:17;42453:47;42517:131;42643:4;42517:131;:::i;:::-;42509:139;;42236:419;;;:::o;42661:::-;42827:4;42865:2;42854:9;42850:18;42842:26;;42914:9;42908:4;42904:20;42900:1;42889:9;42885:17;42878:47;42942:131;43068:4;42942:131;:::i;:::-;42934:139;;42661:419;;;:::o;43086:::-;43252:4;43290:2;43279:9;43275:18;43267:26;;43339:9;43333:4;43329:20;43325:1;43314:9;43310:17;43303:47;43367:131;43493:4;43367:131;:::i;:::-;43359:139;;43086:419;;;:::o;43511:::-;43677:4;43715:2;43704:9;43700:18;43692:26;;43764:9;43758:4;43754:20;43750:1;43739:9;43735:17;43728:47;43792:131;43918:4;43792:131;:::i;:::-;43784:139;;43511:419;;;:::o;43936:222::-;44029:4;44067:2;44056:9;44052:18;44044:26;;44080:71;44148:1;44137:9;44133:17;44124:6;44080:71;:::i;:::-;43936:222;;;;:::o;44164:129::-;44198:6;44225:20;;:::i;:::-;44215:30;;44254:33;44282:4;44274:6;44254:33;:::i;:::-;44164:129;;;:::o;44299:75::-;44332:6;44365:2;44359:9;44349:19;;44299:75;:::o;44380:311::-;44457:4;44547:18;44539:6;44536:30;44533:56;;;44569:18;;:::i;:::-;44533:56;44619:4;44611:6;44607:17;44599:25;;44679:4;44673;44669:15;44661:23;;44380:311;;;:::o;44697:::-;44774:4;44864:18;44856:6;44853:30;44850:56;;;44886:18;;:::i;:::-;44850:56;44936:4;44928:6;44924:17;44916:25;;44996:4;44990;44986:15;44978:23;;44697:311;;;:::o;45014:307::-;45075:4;45165:18;45157:6;45154:30;45151:56;;;45187:18;;:::i;:::-;45151:56;45225:29;45247:6;45225:29;:::i;:::-;45217:37;;45309:4;45303;45299:15;45291:23;;45014:307;;;:::o;45327:308::-;45389:4;45479:18;45471:6;45468:30;45465:56;;;45501:18;;:::i;:::-;45465:56;45539:29;45561:6;45539:29;:::i;:::-;45531:37;;45623:4;45617;45613:15;45605:23;;45327:308;;;:::o;45641:141::-;45690:4;45713:3;45705:11;;45736:3;45733:1;45726:14;45770:4;45767:1;45757:18;45749:26;;45641:141;;;:::o;45788:98::-;45839:6;45873:5;45867:12;45857:22;;45788:98;;;:::o;45892:99::-;45944:6;45978:5;45972:12;45962:22;;45892:99;;;:::o;45997:168::-;46080:11;46114:6;46109:3;46102:19;46154:4;46149:3;46145:14;46130:29;;45997:168;;;;:::o;46171:169::-;46255:11;46289:6;46284:3;46277:19;46329:4;46324:3;46320:14;46305:29;;46171:169;;;;:::o;46346:148::-;46448:11;46485:3;46470:18;;46346:148;;;;:::o;46500:305::-;46540:3;46559:20;46577:1;46559:20;:::i;:::-;46554:25;;46593:20;46611:1;46593:20;:::i;:::-;46588:25;;46747:1;46679:66;46675:74;46672:1;46669:81;46666:107;;;46753:18;;:::i;:::-;46666:107;46797:1;46794;46790:9;46783:16;;46500:305;;;;:::o;46811:237::-;46849:3;46868:18;46884:1;46868:18;:::i;:::-;46863:23;;46900:18;46916:1;46900:18;:::i;:::-;46895:23;;46990:1;46984:4;46980:12;46977:1;46974:19;46971:45;;;46996:18;;:::i;:::-;46971:45;47040:1;47037;47033:9;47026:16;;46811:237;;;;:::o;47054:185::-;47094:1;47111:20;47129:1;47111:20;:::i;:::-;47106:25;;47145:20;47163:1;47145:20;:::i;:::-;47140:25;;47184:1;47174:35;;47189:18;;:::i;:::-;47174:35;47231:1;47228;47224:9;47219:14;;47054:185;;;;:::o;47245:348::-;47285:7;47308:20;47326:1;47308:20;:::i;:::-;47303:25;;47342:20;47360:1;47342:20;:::i;:::-;47337:25;;47530:1;47462:66;47458:74;47455:1;47452:81;47447:1;47440:9;47433:17;47429:105;47426:131;;;47537:18;;:::i;:::-;47426:131;47585:1;47582;47578:9;47567:20;;47245:348;;;;:::o;47599:191::-;47639:4;47659:20;47677:1;47659:20;:::i;:::-;47654:25;;47693:20;47711:1;47693:20;:::i;:::-;47688:25;;47732:1;47729;47726:8;47723:34;;;47737:18;;:::i;:::-;47723:34;47782:1;47779;47775:9;47767:17;;47599:191;;;;:::o;47796:96::-;47833:7;47862:24;47880:5;47862:24;:::i;:::-;47851:35;;47796:96;;;:::o;47898:90::-;47932:7;47975:5;47968:13;47961:21;47950:32;;47898:90;;;:::o;47994:77::-;48031:7;48060:5;48049:16;;47994:77;;;:::o;48077:149::-;48113:7;48153:66;48146:5;48142:78;48131:89;;48077:149;;;:::o;48232:126::-;48269:7;48309:42;48302:5;48298:54;48287:65;;48232:126;;;:::o;48364:77::-;48401:7;48430:5;48419:16;;48364:77;;;:::o;48447:86::-;48482:7;48522:4;48515:5;48511:16;48500:27;;48447:86;;;:::o;48539:154::-;48623:6;48618:3;48613;48600:30;48685:1;48676:6;48671:3;48667:16;48660:27;48539:154;;;:::o;48699:307::-;48767:1;48777:113;48791:6;48788:1;48785:13;48777:113;;;48876:1;48871:3;48867:11;48861:18;48857:1;48852:3;48848:11;48841:39;48813:2;48810:1;48806:10;48801:15;;48777:113;;;48908:6;48905:1;48902:13;48899:101;;;48988:1;48979:6;48974:3;48970:16;48963:27;48899:101;48748:258;48699:307;;;:::o;49012:320::-;49056:6;49093:1;49087:4;49083:12;49073:22;;49140:1;49134:4;49130:12;49161:18;49151:81;;49217:4;49209:6;49205:17;49195:27;;49151:81;49279:2;49271:6;49268:14;49248:18;49245:38;49242:84;;;49298:18;;:::i;:::-;49242:84;49063:269;49012:320;;;:::o;49338:281::-;49421:27;49443:4;49421:27;:::i;:::-;49413:6;49409:40;49551:6;49539:10;49536:22;49515:18;49503:10;49500:34;49497:62;49494:88;;;49562:18;;:::i;:::-;49494:88;49602:10;49598:2;49591:22;49381:238;49338:281;;:::o;49625:233::-;49664:3;49687:24;49705:5;49687:24;:::i;:::-;49678:33;;49733:66;49726:5;49723:77;49720:103;;;49803:18;;:::i;:::-;49720:103;49850:1;49843:5;49839:13;49832:20;;49625:233;;;:::o;49864:180::-;49912:77;49909:1;49902:88;50009:4;50006:1;49999:15;50033:4;50030:1;50023:15;50050:180;50098:77;50095:1;50088:88;50195:4;50192:1;50185:15;50219:4;50216:1;50209:15;50236:180;50284:77;50281:1;50274:88;50381:4;50378:1;50371:15;50405:4;50402:1;50395:15;50422:180;50470:77;50467:1;50460:88;50567:4;50564:1;50557:15;50591:4;50588:1;50581:15;50608:180;50656:77;50653:1;50646:88;50753:4;50750:1;50743:15;50777:4;50774:1;50767:15;50794:180;50842:77;50839:1;50832:88;50939:4;50936:1;50929:15;50963:4;50960:1;50953:15;50980:117;51089:1;51086;51079:12;51103:117;51212:1;51209;51202:12;51226:117;51335:1;51332;51325:12;51349:117;51458:1;51455;51448:12;51472:117;51581:1;51578;51571:12;51595:102;51636:6;51687:2;51683:7;51678:2;51671:5;51667:14;51663:28;51653:38;;51595:102;;;:::o;51703:168::-;51843:20;51839:1;51831:6;51827:14;51820:44;51703:168;:::o;51877:164::-;52017:16;52013:1;52005:6;52001:14;51994:40;51877:164;:::o;52047:230::-;52187:34;52183:1;52175:6;52171:14;52164:58;52256:13;52251:2;52243:6;52239:15;52232:38;52047:230;:::o;52283:237::-;52423:34;52419:1;52411:6;52407:14;52400:58;52492:20;52487:2;52479:6;52475:15;52468:45;52283:237;:::o;52526:225::-;52666:34;52662:1;52654:6;52650:14;52643:58;52735:8;52730:2;52722:6;52718:15;52711:33;52526:225;:::o;52757:178::-;52897:30;52893:1;52885:6;52881:14;52874:54;52757:178;:::o;52941:223::-;53081:34;53077:1;53069:6;53065:14;53058:58;53150:6;53145:2;53137:6;53133:15;53126:31;52941:223;:::o;53170:175::-;53310:27;53306:1;53298:6;53294:14;53287:51;53170:175;:::o;53351:226::-;53491:34;53487:1;53479:6;53475:14;53468:58;53560:9;53555:2;53547:6;53543:15;53536:34;53351:226;:::o;53583:174::-;53723:26;53719:1;53711:6;53707:14;53700:50;53583:174;:::o;53763:231::-;53903:34;53899:1;53891:6;53887:14;53880:58;53972:14;53967:2;53959:6;53955:15;53948:39;53763:231;:::o;54000:166::-;54140:18;54136:1;54128:6;54124:14;54117:42;54000:166;:::o;54172:243::-;54312:34;54308:1;54300:6;54296:14;54289:58;54381:26;54376:2;54368:6;54364:15;54357:51;54172:243;:::o;54421:229::-;54561:34;54557:1;54549:6;54545:14;54538:58;54630:12;54625:2;54617:6;54613:15;54606:37;54421:229;:::o;54656:228::-;54796:34;54792:1;54784:6;54780:14;54773:58;54865:11;54860:2;54852:6;54848:15;54841:36;54656:228;:::o;54890:182::-;55030:34;55026:1;55018:6;55014:14;55007:58;54890:182;:::o;55078:231::-;55218:34;55214:1;55206:6;55202:14;55195:58;55287:14;55282:2;55274:6;55270:15;55263:39;55078:231;:::o;55315:155::-;55455:7;55451:1;55443:6;55439:14;55432:31;55315:155;:::o;55476:182::-;55616:34;55612:1;55604:6;55600:14;55593:58;55476:182;:::o;55664:154::-;55804:6;55800:1;55792:6;55788:14;55781:30;55664:154;:::o;55824:228::-;55964:34;55960:1;55952:6;55948:14;55941:58;56033:11;56028:2;56020:6;56016:15;56009:36;55824:228;:::o;56058:222::-;56198:34;56194:1;56186:6;56182:14;56175:58;56267:5;56262:2;56254:6;56250:15;56243:30;56058:222;:::o;56286:220::-;56426:34;56422:1;56414:6;56410:14;56403:58;56495:3;56490:2;56482:6;56478:15;56471:28;56286:220;:::o;56512:236::-;56652:34;56648:1;56640:6;56636:14;56629:58;56721:19;56716:2;56708:6;56704:15;56697:44;56512:236;:::o;56754:169::-;56894:21;56890:1;56882:6;56878:14;56871:45;56754:169;:::o;56929:231::-;57069:34;57065:1;57057:6;57053:14;57046:58;57138:14;57133:2;57125:6;57121:15;57114:39;56929:231;:::o;57166:168::-;57306:20;57302:1;57294:6;57290:14;57283:44;57166:168;:::o;57340:171::-;57480:23;57476:1;57468:6;57464:14;57457:47;57340:171;:::o;57517:151::-;57657:3;57653:1;57645:6;57641:14;57634:27;57517:151;:::o;57674:237::-;57814:34;57810:1;57802:6;57798:14;57791:58;57883:20;57878:2;57870:6;57866:15;57859:45;57674:237;:::o;57917:122::-;57990:24;58008:5;57990:24;:::i;:::-;57983:5;57980:35;57970:63;;58029:1;58026;58019:12;57970:63;57917:122;:::o;58045:116::-;58115:21;58130:5;58115:21;:::i;:::-;58108:5;58105:32;58095:60;;58151:1;58148;58141:12;58095:60;58045:116;:::o;58167:122::-;58240:24;58258:5;58240:24;:::i;:::-;58233:5;58230:35;58220:63;;58279:1;58276;58269:12;58220:63;58167:122;:::o;58295:120::-;58367:23;58384:5;58367:23;:::i;:::-;58360:5;58357:34;58347:62;;58405:1;58402;58395:12;58347:62;58295:120;:::o;58421:122::-;58494:24;58512:5;58494:24;:::i;:::-;58487:5;58484:35;58474:63;;58533:1;58530;58523:12;58474:63;58421:122;:::o
Swarm Source
ipfs://d7159defc22b300feda9d4f78872897d4808b08ee35d785ab595be9bd56ae3ab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.