Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 10 from a total of 10 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Destroy | 14106079 | 1507 days ago | IN | 0 ETH | 0.00374203 | ||||
| Free Reroll | 14106074 | 1507 days ago | IN | 0 ETH | 0.00568221 | ||||
| Withdraw | 14106043 | 1507 days ago | IN | 0 ETH | 0.00253159 | ||||
| Withdraw | 14106042 | 1507 days ago | IN | 0 ETH | 0.00247533 | ||||
| Transfer From | 14106026 | 1507 days ago | IN | 0 ETH | 0.0060768 | ||||
| Mint | 14106014 | 1507 days ago | IN | 0.07 ETH | 0.00544138 | ||||
| Pre Release Mint | 14105976 | 1507 days ago | IN | 0 ETH | 0.00527492 | ||||
| Set Base URI | 14105949 | 1507 days ago | IN | 0 ETH | 0.00536928 | ||||
| Pre Release Mint | 14105772 | 1507 days ago | IN | 0 ETH | 0.00726401 | ||||
| Set Starting Tim... | 14105772 | 1507 days ago | IN | 0 ETH | 0.00141687 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x1b3d1e6bf01a88fd0163f8ef2aab8e75a42aeaab8455ea0c67f97c4b5c3ae54b
Contract Name:
Genesis_Voxmon
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-01-30
*/
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)
pragma solidity ^0.8.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_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: contracts/Voxmon2.sol
//Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721
/**
* @title Genesis Voxmon Contract
*/
/*
██╗ ██╗ ██████╗ ██╗ ██╗███╗ ███╗ ██████╗ ███╗ ██╗
██║ ██║██╔═══██╗╚██╗██╔╝████╗ ████║██╔═══██╗████╗ ██║
██║ ██║██║ ██║ ╚███╔╝ ██╔████╔██║██║ ██║██╔██╗ ██║
╚██╗ ██╔╝██║ ██║ ██╔██╗ ██║╚██╔╝██║██║ ██║██║╚██╗██║
╚████╔╝ ╚██████╔╝██╔╝ ██╗██║ ╚═╝ ██║╚██████╔╝██║ ╚████║
╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
*/
pragma solidity ^0.8.0;
//
contract Genesis_Voxmon is ERC721, Ownable {
using Counters for Counters.Counter;
/*
* Global Data space
*/
// This is live supply for clarity because our re-roll mechanism causes one token to be burned
// and a new one to be generated. So some tokens may have a higher tokenId than 10,000
uint16 public constant MAX_SUPPLY = 10000;
Counters.Counter private _tokensMinted;
// count the number of rerolls so we can add to tokensMinted and get new global metadata ID during reroll
Counters.Counter private _tokensRerolled;
uint public constant MINT_COST = 70000000 gwei; // 0.07 ether
uint public constant REROLL_COST = 30000000 gwei; // 0.03 ether
struct RoyaltyInfo {
address receiver;
uint96 royaltyFraction;
}
RoyaltyInfo public defaultRoyaltyInfo;
mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;
// to avoid rarity sniping this will initially be a centralized domain
// and later updated to IPFS
string public __baseURI = "https://voxmon.io/token/";
// this will let us differentiate that a token has been locked for 3D art visually
string public __lockedBaseURI = "https://voxmon.io/locked/";
// time delay for public minting
// unix epoch time
uint256 public startingTime;
uint256 public artStartTime;
mapping (uint256 => address) internal tokenIdToOwner;
// As a reward to the early community, some members will get a number of free re-rolls
mapping (address => uint16) internal remainingRerolls;
// As a reward to the early community, some members will get free Voxmon
mapping (address => uint16) internal remainingPreReleaseMints;
// keep track of Voxmon which are currently undergoing transformation (staked)
mapping (uint256 => bool) internal tokenIdToFrozenForArt;
// since people can reroll their and we don't want to change the tokenId each time
// we need a mapping to know what metadata to pull from the global set
mapping (uint256 => uint256) internal tokenIdToMetadataId;
event artRequestedEvent(address indexed requestor, uint256 tokenId);
event rerollEvent(address indexed requestor, uint256 tokenId, uint256 newMetadataId);
event mintEvent(address indexed recipient, uint256 tokenId, uint256 metadataId);
// replace these test addresses with real addresses before mint
address[] votedWL = [
0x4f4EE78b653f0cd2df05a1Fb9c6c2cB2B632d7AA,
0x5CeDFAE9629fdD41AE7dD25ff64656165526262A,
0x0b83B35F90F46d3435D492D7189e179839743770,
0xF6bD73C1bF387568e2097A813Aa1e833Ca8e7e8C,
0x5A44e7863945A72c32C3C2288a955f4B5BE42F22,
0x3d8c9E263C24De09C7868E1ABA151cAEe3E77219,
0x7c4D0a5FC1AeA24d2Bd0285Dd37a352b6795b78B,
0xBe18dECE562dC6Ec1ff5d7eda7FdA4f755964481
];
address[] earlyDiscordWL = [
0x4f4EE78b653f0cd2df05a1Fb9c6c2cB2B632d7AA,
0x5CeDFAE9629fdD41AE7dD25ff64656165526262A,
0x0b83B35F90F46d3435D492D7189e179839743770,
0xF6bD73C1bF387568e2097A813Aa1e833Ca8e7e8C,
0x5A44e7863945A72c32C3C2288a955f4B5BE42F22,
0x3d8c9E263C24De09C7868E1ABA151cAEe3E77219,
0x7c4D0a5FC1AeA24d2Bd0285Dd37a352b6795b78B,
0xBe18dECE562dC6Ec1ff5d7eda7FdA4f755964481
];
address[] foundingMemberWL = [
0x4f4EE78b653f0cd2df05a1Fb9c6c2cB2B632d7AA,
0x5CeDFAE9629fdD41AE7dD25ff64656165526262A,
0x0b83B35F90F46d3435D492D7189e179839743770,
0xF6bD73C1bF387568e2097A813Aa1e833Ca8e7e8C,
0x5A44e7863945A72c32C3C2288a955f4B5BE42F22,
0x3d8c9E263C24De09C7868E1ABA151cAEe3E77219,
0x7c4D0a5FC1AeA24d2Bd0285Dd37a352b6795b78B,
0xBe18dECE562dC6Ec1ff5d7eda7FdA4f755964481
];
constructor(address payable addr) ERC721("Genesis Voxmon", "VOXMN") {
// setup freebies for people who voted on site
for(uint i = 0; i < votedWL.length; i++) {
remainingRerolls[votedWL[i]] = 10;
}
// setup freebies for people who were active in discord
for(uint i = 0; i < earlyDiscordWL.length; i++) {
remainingRerolls[earlyDiscordWL[i]] = 10;
remainingPreReleaseMints[earlyDiscordWL[i]] = 1;
}
// setup freebies for people who were founding members
for(uint i = 0; i < foundingMemberWL.length; i++) {
remainingRerolls[foundingMemberWL[i]] = 25;
remainingPreReleaseMints[foundingMemberWL[i]] = 5;
}
// setup starting blocknumber (mint date)
// Friday Feb 4th 6pm pst
startingTime = 1644177600;
artStartTime = 1649228400;
// setup royalty address
defaultRoyaltyInfo = RoyaltyInfo(addr, 1000);
}
/*
* Priviledged functions
*/
// update the baseURI of all tokens
// initially to prevent rarity sniping all tokens metadata will come from a cnetralized domain
// and we'll upddate this to IPFS once the mint finishes
function setBaseURI(string calldata uri) external onlyOwner {
__baseURI = uri;
}
// upcate the locked baseURI just like the other one
function setLockedBaseURI(string calldata uri) external onlyOwner {
__lockedBaseURI = uri;
}
// allow us to change the mint date for testing and incase of error
function setStartingTime(uint256 newStartTime) external onlyOwner {
startingTime = newStartTime;
}
// allow us to change the mint date for testing and incase of error
function setArtStartingTime(uint256 newArtStartTime) external onlyOwner {
artStartTime = newArtStartTime;
}
// Withdraw funds in contract
function withdraw(uint _amount) external onlyOwner {
// for security, can only be sent to owner (or should we allow anyone to withdraw?)
address payable receiver = payable(owner());
receiver.transfer(_amount);
}
// value / 10000 (basis points)
function updateDefaultRoyalty(address newAddr, uint96 newPerc) external onlyOwner {
defaultRoyaltyInfo.receiver = newAddr;
defaultRoyaltyInfo.royaltyFraction = newPerc;
}
function updateRoyaltyInfoForToken(uint256 _tokenId, address _receiver, uint96 _amountBasis) external onlyOwner {
require(_amountBasis <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
require(_receiver != address(0), "ERC2981: invalid parameters");
_tokenRoyaltyInfo[_tokenId] = RoyaltyInfo(_receiver, _amountBasis);
}
/*
* Helper Functions
*/
function _baseURI() internal view virtual override returns (string memory) {
return __baseURI;
}
function _lockedBaseURI() internal view returns (string memory) {
return __lockedBaseURI;
}
function supportsInterface(bytes4 interfaceId) public view virtual override (ERC721) returns (bool) {
return ERC721.supportsInterface(interfaceId);
}
// see if minting is still possible
function _isTokenAvailable() internal view returns (bool) {
return _tokensMinted.current() < MAX_SUPPLY;
}
// used for royalty fraction
function _feeDenominator() internal pure virtual returns (uint96) {
return 10000;
}
/*
* Public View Function
*/
// concatenate the baseURI with the tokenId
function tokenURI(uint256 tokenId) public view virtual override returns(string memory) {
require(_exists(tokenId), "token does not exist");
if (tokenIdToFrozenForArt[tokenId]) {
string memory lockedBaseURI = _lockedBaseURI();
return bytes(lockedBaseURI).length > 0 ? string(abi.encodePacked(lockedBaseURI, Strings.toString(tokenIdToMetadataId[tokenId]))) : "";
}
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenIdToMetadataId[tokenId]))) : "";
}
function getTotalMinted() external view returns (uint256) {
return _tokensMinted.current();
}
function getTotalRerolls() external view returns (uint256) {
return _tokensRerolled.current();
}
// tokenURIs increment with both mints and rerolls
// we use this function in our backend api to avoid trait sniping
function getTotalTokenURIs() external view returns (uint256) {
return _tokensRerolled.current() + _tokensMinted.current();
}
function tokenHasRequested3DArt(uint256 tokenId) external view returns (bool) {
return tokenIdToFrozenForArt[tokenId];
}
function getRemainingRerollsForAddress(address addr) external view returns (uint16) {
return remainingRerolls[addr];
}
function getRemainingPreReleaseMintsForAddress(address addr) external view returns (uint16) {
return remainingPreReleaseMints[addr];
}
function getMetadataIdForTokenId(uint256 tokenId) external view returns (uint256) {
return tokenIdToMetadataId[tokenId];
}
function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) {
RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];
if (royalty.receiver == address(0)) {
royalty = defaultRoyaltyInfo;
}
uint256 _royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();
return (royalty.receiver, _royaltyAmount);
}
/*
* Public Functions
*/
// Used to request a 3D body for your voxmon
// Freezes transfers re-rolling a voxmon
function request3DArt(uint256 tokenId) external {
require(block.timestamp >= artStartTime, "you cannot freeze your Voxmon yet");
require(ownerOf(tokenId) == msg.sender, "you must own this token to request Art");
require(tokenIdToFrozenForArt[tokenId] == false, "art has already been requested for that Voxmon");
tokenIdToFrozenForArt[tokenId] = true;
emit artRequestedEvent(msg.sender, tokenId);
}
/*
* Payable Functions
*/
// Mint a Voxmon
// Cost is 0.07 ether
function mint(address recipient) payable public returns (uint256) {
require(_isTokenAvailable(), "max live supply reached, to get a new Voxmon you\'ll need to reroll an old one");
require(msg.value >= MINT_COST, "not enough ether, minting costs 0.07 ether");
require(block.timestamp >= startingTime, "public mint hasn\'t started yet");
_tokensMinted.increment();
uint256 newTokenId = _tokensMinted.current();
uint256 metadataId = _tokensMinted.current() + _tokensRerolled.current();
_mint(recipient, newTokenId);
tokenIdToMetadataId[newTokenId] = metadataId;
emit mintEvent(recipient, newTokenId, metadataId);
return newTokenId;
}
// Mint multiple Voxmon
// Cost is 0.07 ether per Voxmon
function mint(address recipient, uint256 numberToMint) payable public returns (uint256[] memory) {
require(numberToMint > 0);
require(numberToMint <= 10, "max 10 voxmons per transaction");
require(msg.value >= MINT_COST * numberToMint);
uint256[] memory tokenIdsMinted = new uint256[](numberToMint);
for(uint i = 0; i < numberToMint; i++) {
tokenIdsMinted[i] = mint(recipient);
}
return tokenIdsMinted;
}
// Mint a free Voxmon
function preReleaseMint(address recipient) public returns (uint256) {
require(remainingPreReleaseMints[msg.sender] > 0, "you have 0 remaining pre-release mints");
remainingPreReleaseMints[msg.sender] = remainingPreReleaseMints[msg.sender] - 1;
require(_isTokenAvailable(), "max live supply reached, to get a new Voxmon you\'ll need to reroll an old one");
_tokensMinted.increment();
uint256 newTokenId = _tokensMinted.current();
uint256 metadataId = _tokensMinted.current() + _tokensRerolled.current();
_mint(recipient, newTokenId);
tokenIdToMetadataId[newTokenId] = metadataId;
emit mintEvent(recipient, newTokenId, metadataId);
return newTokenId;
}
// Mint multiple free Voxmon
function preReleaseMint(address recipient, uint256 numberToMint) public returns (uint256[] memory) {
require(remainingPreReleaseMints[msg.sender] >= numberToMint, "You don\'t have enough remaining pre-release mints");
uint256[] memory tokenIdsMinted = new uint256[](numberToMint);
for(uint i = 0; i < numberToMint; i++) {
tokenIdsMinted[i] = preReleaseMint(recipient);
}
return tokenIdsMinted;
}
// Re-Roll a Voxmon
// Cost is 0.01 ether
function reroll(uint256 tokenId) payable public returns (uint256) {
require(ownerOf(tokenId) == msg.sender, "you must own this token to reroll");
require(msg.value >= REROLL_COST, "not enough ether, rerolling costs 0.03 ether");
require(tokenIdToFrozenForArt[tokenId] == false, "this token is frozen");
_tokensRerolled.increment();
uint256 newMetadataId = _tokensMinted.current() + _tokensRerolled.current();
tokenIdToMetadataId[tokenId] = newMetadataId;
emit rerollEvent(msg.sender, tokenId, newMetadataId);
return newMetadataId;
}
// Re-Roll a Voxmon
// Cost is 0.01 ether
function freeReroll(uint256 tokenId) public returns (uint256) {
require(remainingRerolls[msg.sender] > 0, "you have 0 remaining free rerolls");
remainingRerolls[msg.sender] = remainingRerolls[msg.sender] - 1;
require(ownerOf(tokenId) == msg.sender, "you must own the token to reroll");
require(tokenIdToFrozenForArt[tokenId] == false, "this token is frozen");
_tokensRerolled.increment();
uint256 newMetadataId = _tokensMinted.current() + _tokensRerolled.current();
tokenIdToMetadataId[tokenId] = newMetadataId;
emit rerollEvent(msg.sender, tokenId, newMetadataId);
return newMetadataId;
}
// Only to be used for test contracts
// remove this from the final contract
function destroy() public onlyOwner {
address payable addr = payable(owner());
selfdestruct(addr);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"artRequestedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"metadataId","type":"uint256"}],"name":"mintEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMetadataId","type":"uint256"}],"name":"rerollEvent","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REROLL_COST","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":"__lockedBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"artStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultRoyaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"royaltyFraction","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"freeReroll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMetadataIdForTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getRemainingPreReleaseMintsForAddress","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getRemainingRerollsForAddress","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRerolls","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTokenURIs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"numberToMint","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"preReleaseMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"numberToMint","type":"uint256"}],"name":"preReleaseMint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"request3DArt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reroll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newArtStartTime","type":"uint256"}],"name":"setArtStartingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setLockedBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStartTime","type":"uint256"}],"name":"setStartingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenHasRequested3DArt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newAddr","type":"address"},{"internalType":"uint96","name":"newPerc","type":"uint96"}],"name":"updateDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_amountBasis","type":"uint96"}],"name":"updateRoyaltyInfoForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060400160405280601881526020017f68747470733a2f2f766f786d6f6e2e696f2f746f6b656e2f0000000000000000815250600b90805190602001906200005192919062000da7565b506040518060400160405280601981526020017f68747470733a2f2f766f786d6f6e2e696f2f6c6f636b65642f00000000000000815250600c90805190602001906200009f92919062000da7565b50604051806101000160405280734f4ee78b653f0cd2df05a1fb9c6c2cb2b632d7aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735cedfae9629fdd41ae7dd25ff64656165526262a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730b83b35f90f46d3435d492d7189e17983974377073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f6bd73c1bf387568e2097a813aa1e833ca8e7e8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735a44e7863945a72c32c3c2288a955f4b5be42f2273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001733d8c9e263c24de09c7868e1aba151caee3e7721973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737c4d0a5fc1aea24d2bd0285dd37a352b6795b78b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173be18dece562dc6ec1ff5d7eda7fda4f75596448173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506014906008620002ec92919062000e38565b50604051806101000160405280734f4ee78b653f0cd2df05a1fb9c6c2cb2b632d7aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735cedfae9629fdd41ae7dd25ff64656165526262a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730b83b35f90f46d3435d492d7189e17983974377073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f6bd73c1bf387568e2097a813aa1e833ca8e7e8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735a44e7863945a72c32c3c2288a955f4b5be42f2273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001733d8c9e263c24de09c7868e1aba151caee3e7721973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737c4d0a5fc1aea24d2bd0285dd37a352b6795b78b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173be18dece562dc6ec1ff5d7eda7fda4f75596448173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060159060086200053992919062000e38565b50604051806101000160405280734f4ee78b653f0cd2df05a1fb9c6c2cb2b632d7aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735cedfae9629fdd41ae7dd25ff64656165526262a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730b83b35f90f46d3435d492d7189e17983974377073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173f6bd73c1bf387568e2097a813aa1e833ca8e7e8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735a44e7863945a72c32c3c2288a955f4b5be42f2273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001733d8c9e263c24de09c7868e1aba151caee3e7721973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737c4d0a5fc1aea24d2bd0285dd37a352b6795b78b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173be18dece562dc6ec1ff5d7eda7fda4f75596448173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060169060086200078692919062000e38565b503480156200079457600080fd5b50604051620069c9380380620069c98339818101604052810190620007ba919062000efd565b6040518060400160405280600e81526020017f47656e6573697320566f786d6f6e0000000000000000000000000000000000008152506040518060400160405280600581526020017f564f584d4e00000000000000000000000000000000000000000000000000000081525081600090805190602001906200083e92919062000da7565b5080600190805190602001906200085792919062000da7565b5050506200087a6200086e62000cd960201b60201c565b62000ce160201b60201c565b60005b6014805490508110156200093d57600a6010600060148481548110620008a857620008a76200104f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508080620009349062000fa3565b9150506200087d565b5060005b60158054905081101562000a9d57600a60106000601584815481106200096c576200096b6200104f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506001601160006015848154811062000a085762000a076200104f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550808062000a949062000fa3565b91505062000941565b5060005b60168054905081101562000bfd576019601060006016848154811062000acc5762000acb6200104f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506005601160006016848154811062000b685762000b676200104f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550808062000bf49062000fa3565b91505062000aa1565b5063620028c0600d8190555063624d3a70600e8190555060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020016103e86bffffffffffffffffffffffff16815250600960008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050506200109d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000db59062000f6d565b90600052602060002090601f01602090048101928262000dd9576000855562000e25565b82601f1062000df457805160ff191683800117855562000e25565b8280016001018555821562000e25579182015b8281111562000e2457825182559160200191906001019062000e07565b5b50905062000e34919062000ec7565b5090565b82805482825590600052602060002090810192821562000eb4579160200282015b8281111562000eb35782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000e59565b5b50905062000ec3919062000ec7565b5090565b5b8082111562000ee257600081600090555060010162000ec8565b5090565b60008151905062000ef78162001083565b92915050565b60006020828403121562000f165762000f156200107e565b5b600062000f268482850162000ee6565b91505092915050565b600062000f3c8262000f43565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000f8657607f821691505b6020821081141562000f9d5762000f9c62001020565b5b50919050565b600062000fb08262000f63565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000fe65762000fe562000ff1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6200108e8162000f2f565b81146200109a57600080fd5b50565b61591c80620010ad6000396000f3fe6080604052600436106102875760003560e01c80635f303ae01161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c5146109f2578063f2fde38b14610a2f578063fb99325d14610a58578063fe8a8a6214610a95578063fee8c41514610ad2578063ff34be5214610b0f57610287565b8063b88d4fde146108e4578063c662e4811461090d578063c87b56dd14610938578063d5039a4e14610975578063d691e43c146109a0578063e6b22ba4146109c957610287565b8063715018a611610113578063715018a6146107fa578063805ffcc71461081157806383197ef01461084e5780638da5cb5b1461086557806395d89b4114610890578063a22cb465146108bb57610287565b80635f303ae0146106d15780636352211e146106fc578063656d636c146107395780636a627842146107625780636e34a4821461079257806370a08231146107bd57610287565b80632a55205a116101fe57806340c10f19116101b757806340c10f19146105be57806342842e0e146105ee57806352e693a6146106175780635487e9ca1461065457806355f804b31461067d5780635ddf9601146106a657610287565b80632a55205a1461049b5780632e1a7d4d146104d9578063310077671461050257806332cb6b0c1461053f57806339518b5e1461056a5780633f52e5891461059557610287565b80630ca1c5c9116102505780630ca1c5c9146103975780630e0fd9e7146103c25780631132a587146103eb5780631c19c215146104165780631eb821ed1461044657806323b872dd1461047257610287565b8062d58d011461028c57806301ffc9a7146102c957806306fdde0314610306578063081812fc14610331578063095ea7b31461036e575b600080fd5b34801561029857600080fd5b506102b360048036038101906102ae9190613c23565b610b3a565b6040516102c09190614ab7565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613e26565b610d7f565b6040516102fd919061465f565b60405180910390f35b34801561031257600080fd5b5061031b610d91565b604051610328919061467a565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613ecd565b610e23565b6040516103659190614584565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613da6565b610ea8565b005b3480156103a357600080fd5b506103ac610fc0565b6040516103b99190614ab7565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613ecd565b610fd1565b005b3480156103f757600080fd5b50610400611170565b60405161040d9190614ab7565b60405180910390f35b610430600480360381019061042b9190613ecd565b61117b565b60405161043d9190614ab7565b60405180910390f35b34801561045257600080fd5b5061045b611341565b604051610469929190614614565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613c90565b61138b565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613f4d565b6113eb565b6040516104d09291906145eb565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613ecd565b6115d6565b005b34801561050e57600080fd5b5061052960048036038101906105249190613c23565b6116a9565b6040516105369190614a9c565b60405180910390f35b34801561054b57600080fd5b50610554611700565b6040516105619190614a9c565b60405180910390f35b34801561057657600080fd5b5061057f611706565b60405161058c9190614ab7565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613ecd565b61170c565b005b6105d860048036038101906105d39190613da6565b611792565b6040516105e5919061463d565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613c90565b6118a2565b005b34801561062357600080fd5b5061063e60048036038101906106399190613ecd565b6118c2565b60405161064b919061465f565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190613e80565b6118ec565b005b34801561068957600080fd5b506106a4600480360381019061069f9190613e80565b61197e565b005b3480156106b257600080fd5b506106bb611a10565b6040516106c89190614ab7565b60405180910390f35b3480156106dd57600080fd5b506106e6611a16565b6040516106f3919061467a565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613ecd565b611aa4565b6040516107309190614584565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613efa565b611b56565b005b61077c60048036038101906107779190613c23565b611d7a565b6040516107899190614ab7565b60405180910390f35b34801561079e57600080fd5b506107a7611f08565b6040516107b4919061467a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613c23565b611f96565b6040516107f19190614ab7565b60405180910390f35b34801561080657600080fd5b5061080f61204e565b005b34801561081d57600080fd5b5061083860048036038101906108339190613da6565b6120d6565b604051610845919061463d565b60405180910390f35b34801561085a57600080fd5b5061086361220a565b005b34801561087157600080fd5b5061087a6122ab565b6040516108879190614584565b60405180910390f35b34801561089c57600080fd5b506108a56122d5565b6040516108b2919061467a565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613d66565b612367565b005b3480156108f057600080fd5b5061090b60048036038101906109069190613ce3565b61237d565b005b34801561091957600080fd5b506109226123df565b60405161092f9190614ab7565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613ecd565b6123ea565b60405161096c919061467a565b60405180910390f35b34801561098157600080fd5b5061098a61253b565b6040516109979190614ab7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190613de6565b61254c565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613ecd565b612644565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613c50565b6126ca565b604051610a26919061465f565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613c23565b61275e565b005b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613c23565b612856565b604051610a8c9190614a9c565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613ecd565b6128ad565b604051610ac99190614ab7565b60405180910390f35b348015610ade57600080fd5b50610af96004803603810190610af49190613ecd565b612b6f565b604051610b069190614ab7565b60405180910390f35b348015610b1b57600080fd5b50610b24612b8c565b604051610b319190614ab7565b60405180910390f35b600080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906146bc565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff16610c299190614cae565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610c8a612bb1565b610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc09061499c565b60405180910390fd5b610cd36007612bca565b6000610cdf6007612be0565b90506000610ced6008612be0565b610cf76007612be0565b610d019190614bcd565b9050610d0d8483612bee565b8060136000848152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9670c8b300c38cd3db8d3f9429dd902e67f418c4dd193e2497f06d20efc795608383604051610d6d929190614ad2565b60405180910390a28192505050919050565b6000610d8a82612dbc565b9050919050565b606060008054610da090614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcc90614df2565b8015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e2e82612e9e565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e64906148fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eb382611aa4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906149bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f43612f0a565b73ffffffffffffffffffffffffffffffffffffffff161480610f725750610f7181610f6c612f0a565b6126ca565b5b610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061483c565b60405180910390fd5b610fbb8383612f12565b505050565b6000610fcc6007612be0565b905090565b600e54421015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906147fc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661103682611aa4565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110839061473c565b60405180910390fd5b600015156012600083815260200190815260200160002060009054906101000a900460ff161515146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea906147bc565b60405180910390fd5b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f0e450f2a6c42e90846c4dda8bdb9982c3ffb54e1d986f0b57fd5feef7d6c1ccd826040516111659190614ab7565b60405180910390a250565b666a94d74f43000081565b60003373ffffffffffffffffffffffffffffffffffffffff1661119d83611aa4565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea906148bc565b60405180910390fd5b666a94d74f43000034101561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490614a1c565b60405180910390fd5b600015156012600084815260200190815260200160002060009054906101000a900460ff161515146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b9061497c565b60405180910390fd5b6112ae6008612bca565b60006112ba6008612be0565b6112c46007612be0565b6112ce9190614bcd565b90508060136000858152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f91696ceff949070d1dedc79748f824f868af2606b48b4c20f83d39e865e5e60c8483604051611330929190614ad2565b60405180910390a280915050919050565b60098060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046bffffffffffffffffffffffff16905082565b61139c611396612f0a565b82612fcb565b6113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906149fc565b60405180910390fd5b6113e68383836130a9565b505050565b6000806000600a60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156115815760096040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b600061158b613305565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866115b79190614c54565b6115c19190614c23565b90508160000151819350935050509250929050565b6115de612f0a565b73ffffffffffffffffffffffffffffffffffffffff166115fc6122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061491c565b60405180910390fd5b600061165c6122ab565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156116a4573d6000803e3d6000fd5b505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b61271081565b600d5481565b611714612f0a565b73ffffffffffffffffffffffffffffffffffffffff166117326122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f9061491c565b60405180910390fd5b80600d8190555050565b6060600082116117a157600080fd5b600a8211156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061495c565b60405180910390fd5b8166f8b0a10e4700006117f89190614c54565b34101561180457600080fd5b60008267ffffffffffffffff8111156118205761181f614f8b565b5b60405190808252806020026020018201604052801561184e5781602001602082028036833780820191505090505b50905060005b838110156118975761186585611d7a565b82828151811061187857611877614f5c565b5b602002602001018181525050808061188f90614e55565b915050611854565b508091505092915050565b6118bd8383836040518060200160405280600081525061237d565b505050565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6118f4612f0a565b73ffffffffffffffffffffffffffffffffffffffff166119126122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061491c565b60405180910390fd5b8181600c9190611979929190613a3c565b505050565b611986612f0a565b73ffffffffffffffffffffffffffffffffffffffff166119a46122ab565b73ffffffffffffffffffffffffffffffffffffffff16146119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f19061491c565b60405180910390fd5b8181600b9190611a0b929190613a3c565b505050565b600e5481565b600c8054611a2390614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f90614df2565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b449061487c565b60405180910390fd5b80915050919050565b611b5e612f0a565b73ffffffffffffffffffffffffffffffffffffffff16611b7c6122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc99061491c565b60405180910390fd5b611bda613305565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90614a3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f9061469c565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000611d84612bb1565b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061499c565b60405180910390fd5b66f8b0a10e470000341015611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e04906149dc565b60405180910390fd5b600d54421015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499061481c565b60405180910390fd5b611e5c6007612bca565b6000611e686007612be0565b90506000611e766008612be0565b611e806007612be0565b611e8a9190614bcd565b9050611e968483612bee565b8060136000848152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9670c8b300c38cd3db8d3f9429dd902e67f418c4dd193e2497f06d20efc795608383604051611ef6929190614ad2565b60405180910390a28192505050919050565b600b8054611f1590614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4190614df2565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe9061485c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612056612f0a565b73ffffffffffffffffffffffffffffffffffffffff166120746122ab565b73ffffffffffffffffffffffffffffffffffffffff16146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c19061491c565b60405180910390fd5b6120d4600061330f565b565b606081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff16101561216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390614a5c565b60405180910390fd5b60008267ffffffffffffffff81111561218857612187614f8b565b5b6040519080825280602002602001820160405280156121b65781602001602082028036833780820191505090505b50905060005b838110156121ff576121cd85610b3a565b8282815181106121e0576121df614f5c565b5b60200260200101818152505080806121f790614e55565b9150506121bc565b508091505092915050565b612212612f0a565b73ffffffffffffffffffffffffffffffffffffffff166122306122ab565b73ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d9061491c565b60405180910390fd5b60006122906122ab565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546122e490614df2565b80601f016020809104026020016040519081016040528092919081815260200182805461231090614df2565b801561235d5780601f106123325761010080835404028352916020019161235d565b820191906000526020600020905b81548152906001019060200180831161234057829003601f168201915b5050505050905090565b612379612372612f0a565b83836133d5565b5050565b61238e612388612f0a565b83612fcb565b6123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c4906149fc565b60405180910390fd5b6123d984848484613542565b50505050565b66f8b0a10e47000081565b60606123f582612e9e565b612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90614a7c565b60405180910390fd5b6012600083815260200190815260200160002060009054906101000a900460ff16156124ca57600061246461359e565b9050600081511161248457604051806020016040528060008152506124c2565b806124a16013600086815260200190815260200160002054613630565b6040516020016124b2929190614560565b6040516020818303038152906040525b915050612536565b60006124d4613791565b905060008151116124f45760405180602001604052806000815250612532565b806125116013600086815260200190815260200160002054613630565b604051602001612522929190614560565b6040516020818303038152906040525b9150505b919050565b60006125476008612be0565b905090565b612554612f0a565b73ffffffffffffffffffffffffffffffffffffffff166125726122ab565b73ffffffffffffffffffffffffffffffffffffffff16146125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061491c565b60405180910390fd5b81600960000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050565b61264c612f0a565b73ffffffffffffffffffffffffffffffffffffffff1661266a6122ab565b73ffffffffffffffffffffffffffffffffffffffff16146126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b79061491c565b60405180910390fd5b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612766612f0a565b73ffffffffffffffffffffffffffffffffffffffff166127846122ab565b73ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d19061491c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561284a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128419061471c565b60405180910390fd5b6128538161330f565b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b600080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906146fc565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661299c9190614cae565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16612a1583611aa4565b73ffffffffffffffffffffffffffffffffffffffff1614612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a629061489c565b60405180910390fd5b600015156012600084815260200190815260200160002060009054906101000a900460ff16151514612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac99061497c565b60405180910390fd5b612adc6008612bca565b6000612ae86008612be0565b612af26007612be0565b612afc9190614bcd565b90508060136000858152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f91696ceff949070d1dedc79748f824f868af2606b48b4c20f83d39e865e5e60c8483604051612b5e929190614ad2565b60405180910390a280915050919050565b600060136000838152602001908152602001600020549050919050565b6000612b986007612be0565b612ba26008612be0565b612bac9190614bcd565b905090565b600061271061ffff16612bc46007612be0565b10905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c55906148dc565b60405180910390fd5b612c6781612e9e565b15612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e9061475c565b60405180910390fd5b612cb360008383613823565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d039190614bcd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e975750612e9682613828565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f8583611aa4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fd682612e9e565b613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c906147dc565b60405180910390fd5b600061302083611aa4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061308f57508373ffffffffffffffffffffffffffffffffffffffff1661307784610e23565b73ffffffffffffffffffffffffffffffffffffffff16145b806130a0575061309f81856126ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130c982611aa4565b73ffffffffffffffffffffffffffffffffffffffff161461311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131169061493c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131869061477c565b60405180910390fd5b61319a838383613823565b6131a5600082612f12565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131f59190614ce2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324c9190614bcd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612710905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343b9061479c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613535919061465f565b60405180910390a3505050565b61354d8484846130a9565b61355984848484613892565b613598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358f906146dc565b60405180910390fd5b50505050565b6060600c80546135ad90614df2565b80601f01602080910402602001604051908101604052809291908181526020018280546135d990614df2565b80156136265780601f106135fb57610100808354040283529160200191613626565b820191906000526020600020905b81548152906001019060200180831161360957829003601f168201915b5050505050905090565b60606000821415613678576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061378c565b600082905060005b600082146136aa57808061369390614e55565b915050600a826136a39190614c23565b9150613680565b60008167ffffffffffffffff8111156136c6576136c5614f8b565b5b6040519080825280601f01601f1916602001820160405280156136f85781602001600182028036833780820191505090505b5090505b60008514613785576001826137119190614ce2565b9150600a856137209190614e9e565b603061372c9190614bcd565b60f81b81838151811061374257613741614f5c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561377e9190614c23565b94506136fc565b8093505050505b919050565b6060600b80546137a090614df2565b80601f01602080910402602001604051908101604052809291908181526020018280546137cc90614df2565b80156138195780601f106137ee57610100808354040283529160200191613819565b820191906000526020600020905b8154815290600101906020018083116137fc57829003601f168201915b5050505050905090565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006138b38473ffffffffffffffffffffffffffffffffffffffff16613a29565b15613a1c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138dc612f0a565b8786866040518563ffffffff1660e01b81526004016138fe949392919061459f565b602060405180830381600087803b15801561391857600080fd5b505af192505050801561394957506040513d601f19601f820116820180604052508101906139469190613e53565b60015b6139cc573d8060008114613979576040519150601f19603f3d011682016040523d82523d6000602084013e61397e565b606091505b506000815114156139c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139bb906146dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a21565b600190505b949350505050565b600080823b905060008111915050919050565b828054613a4890614df2565b90600052602060002090601f016020900481019282613a6a5760008555613ab1565b82601f10613a8357803560ff1916838001178555613ab1565b82800160010185558215613ab1579182015b82811115613ab0578235825591602001919060010190613a95565b5b509050613abe9190613ac2565b5090565b5b80821115613adb576000816000905550600101613ac3565b5090565b6000613af2613aed84614b20565b614afb565b905082815260208101848484011115613b0e57613b0d614fc9565b5b613b19848285614db0565b509392505050565b600081359050613b3081615873565b92915050565b600081359050613b458161588a565b92915050565b600081359050613b5a816158a1565b92915050565b600081519050613b6f816158a1565b92915050565b600082601f830112613b8a57613b89614fbf565b5b8135613b9a848260208601613adf565b91505092915050565b60008083601f840112613bb957613bb8614fbf565b5b8235905067ffffffffffffffff811115613bd657613bd5614fba565b5b602083019150836001820283011115613bf257613bf1614fc4565b5b9250929050565b600081359050613c08816158b8565b92915050565b600081359050613c1d816158cf565b92915050565b600060208284031215613c3957613c38614fd3565b5b6000613c4784828501613b21565b91505092915050565b60008060408385031215613c6757613c66614fd3565b5b6000613c7585828601613b21565b9250506020613c8685828601613b21565b9150509250929050565b600080600060608486031215613ca957613ca8614fd3565b5b6000613cb786828701613b21565b9350506020613cc886828701613b21565b9250506040613cd986828701613bf9565b9150509250925092565b60008060008060808587031215613cfd57613cfc614fd3565b5b6000613d0b87828801613b21565b9450506020613d1c87828801613b21565b9350506040613d2d87828801613bf9565b925050606085013567ffffffffffffffff811115613d4e57613d4d614fce565b5b613d5a87828801613b75565b91505092959194509250565b60008060408385031215613d7d57613d7c614fd3565b5b6000613d8b85828601613b21565b9250506020613d9c85828601613b36565b9150509250929050565b60008060408385031215613dbd57613dbc614fd3565b5b6000613dcb85828601613b21565b9250506020613ddc85828601613bf9565b9150509250929050565b60008060408385031215613dfd57613dfc614fd3565b5b6000613e0b85828601613b21565b9250506020613e1c85828601613c0e565b9150509250929050565b600060208284031215613e3c57613e3b614fd3565b5b6000613e4a84828501613b4b565b91505092915050565b600060208284031215613e6957613e68614fd3565b5b6000613e7784828501613b60565b91505092915050565b60008060208385031215613e9757613e96614fd3565b5b600083013567ffffffffffffffff811115613eb557613eb4614fce565b5b613ec185828601613ba3565b92509250509250929050565b600060208284031215613ee357613ee2614fd3565b5b6000613ef184828501613bf9565b91505092915050565b600080600060608486031215613f1357613f12614fd3565b5b6000613f2186828701613bf9565b9350506020613f3286828701613b21565b9250506040613f4386828701613c0e565b9150509250925092565b60008060408385031215613f6457613f63614fd3565b5b6000613f7285828601613bf9565b9250506020613f8385828601613bf9565b9150509250929050565b6000613f998383614533565b60208301905092915050565b613fae81614d16565b82525050565b6000613fbf82614b61565b613fc98185614b8f565b9350613fd483614b51565b8060005b83811015614005578151613fec8882613f8d565b9750613ff783614b82565b925050600181019050613fd8565b5085935050505092915050565b61401b81614d28565b82525050565b600061402c82614b6c565b6140368185614ba0565b9350614046818560208601614dbf565b61404f81614fd8565b840191505092915050565b600061406582614b77565b61406f8185614bb1565b935061407f818560208601614dbf565b61408881614fd8565b840191505092915050565b600061409e82614b77565b6140a88185614bc2565b93506140b8818560208601614dbf565b80840191505092915050565b60006140d1601b83614bb1565b91506140dc82614fe9565b602082019050919050565b60006140f4602683614bb1565b91506140ff82615012565b604082019050919050565b6000614117603283614bb1565b915061412282615061565b604082019050919050565b600061413a602183614bb1565b9150614145826150b0565b604082019050919050565b600061415d602683614bb1565b9150614168826150ff565b604082019050919050565b6000614180602683614bb1565b915061418b8261514e565b604082019050919050565b60006141a3601c83614bb1565b91506141ae8261519d565b602082019050919050565b60006141c6602483614bb1565b91506141d1826151c6565b604082019050919050565b60006141e9601983614bb1565b91506141f482615215565b602082019050919050565b600061420c602e83614bb1565b91506142178261523e565b604082019050919050565b600061422f602c83614bb1565b915061423a8261528d565b604082019050919050565b6000614252602183614bb1565b915061425d826152dc565b604082019050919050565b6000614275601e83614bb1565b91506142808261532b565b602082019050919050565b6000614298603883614bb1565b91506142a382615354565b604082019050919050565b60006142bb602a83614bb1565b91506142c6826153a3565b604082019050919050565b60006142de602983614bb1565b91506142e9826153f2565b604082019050919050565b6000614301602083614bb1565b915061430c82615441565b602082019050919050565b6000614324602183614bb1565b915061432f8261546a565b604082019050919050565b6000614347602083614bb1565b9150614352826154b9565b602082019050919050565b600061436a602c83614bb1565b9150614375826154e2565b604082019050919050565b600061438d602083614bb1565b915061439882615531565b602082019050919050565b60006143b0602983614bb1565b91506143bb8261555a565b604082019050919050565b60006143d3601e83614bb1565b91506143de826155a9565b602082019050919050565b60006143f6601483614bb1565b9150614401826155d2565b602082019050919050565b6000614419604d83614bb1565b9150614424826155fb565b606082019050919050565b600061443c602183614bb1565b915061444782615670565b604082019050919050565b600061445f602a83614bb1565b915061446a826156bf565b604082019050919050565b6000614482603183614bb1565b915061448d8261570e565b604082019050919050565b60006144a5602c83614bb1565b91506144b08261575d565b604082019050919050565b60006144c8602a83614bb1565b91506144d3826157ac565b604082019050919050565b60006144eb603183614bb1565b91506144f6826157fb565b604082019050919050565b600061450e601483614bb1565b91506145198261584a565b602082019050919050565b61452d81614d60565b82525050565b61453c81614d8e565b82525050565b61454b81614d8e565b82525050565b61455a81614d98565b82525050565b600061456c8285614093565b91506145788284614093565b91508190509392505050565b60006020820190506145996000830184613fa5565b92915050565b60006080820190506145b46000830187613fa5565b6145c16020830186613fa5565b6145ce6040830185614542565b81810360608301526145e08184614021565b905095945050505050565b60006040820190506146006000830185613fa5565b61460d6020830184614542565b9392505050565b60006040820190506146296000830185613fa5565b6146366020830184614551565b9392505050565b600060208201905081810360008301526146578184613fb4565b905092915050565b60006020820190506146746000830184614012565b92915050565b60006020820190508181036000830152614694818461405a565b905092915050565b600060208201905081810360008301526146b5816140c4565b9050919050565b600060208201905081810360008301526146d5816140e7565b9050919050565b600060208201905081810360008301526146f58161410a565b9050919050565b600060208201905081810360008301526147158161412d565b9050919050565b6000602082019050818103600083015261473581614150565b9050919050565b6000602082019050818103600083015261475581614173565b9050919050565b6000602082019050818103600083015261477581614196565b9050919050565b60006020820190508181036000830152614795816141b9565b9050919050565b600060208201905081810360008301526147b5816141dc565b9050919050565b600060208201905081810360008301526147d5816141ff565b9050919050565b600060208201905081810360008301526147f581614222565b9050919050565b6000602082019050818103600083015261481581614245565b9050919050565b6000602082019050818103600083015261483581614268565b9050919050565b600060208201905081810360008301526148558161428b565b9050919050565b60006020820190508181036000830152614875816142ae565b9050919050565b60006020820190508181036000830152614895816142d1565b9050919050565b600060208201905081810360008301526148b5816142f4565b9050919050565b600060208201905081810360008301526148d581614317565b9050919050565b600060208201905081810360008301526148f58161433a565b9050919050565b600060208201905081810360008301526149158161435d565b9050919050565b6000602082019050818103600083015261493581614380565b9050919050565b60006020820190508181036000830152614955816143a3565b9050919050565b60006020820190508181036000830152614975816143c6565b9050919050565b60006020820190508181036000830152614995816143e9565b9050919050565b600060208201905081810360008301526149b58161440c565b9050919050565b600060208201905081810360008301526149d58161442f565b9050919050565b600060208201905081810360008301526149f581614452565b9050919050565b60006020820190508181036000830152614a1581614475565b9050919050565b60006020820190508181036000830152614a3581614498565b9050919050565b60006020820190508181036000830152614a55816144bb565b9050919050565b60006020820190508181036000830152614a75816144de565b9050919050565b60006020820190508181036000830152614a9581614501565b9050919050565b6000602082019050614ab16000830184614524565b92915050565b6000602082019050614acc6000830184614542565b92915050565b6000604082019050614ae76000830185614542565b614af46020830184614542565b9392505050565b6000614b05614b16565b9050614b118282614e24565b919050565b6000604051905090565b600067ffffffffffffffff821115614b3b57614b3a614f8b565b5b614b4482614fd8565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bd882614d8e565b9150614be383614d8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1857614c17614ecf565b5b828201905092915050565b6000614c2e82614d8e565b9150614c3983614d8e565b925082614c4957614c48614efe565b5b828204905092915050565b6000614c5f82614d8e565b9150614c6a83614d8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ca357614ca2614ecf565b5b828202905092915050565b6000614cb982614d60565b9150614cc483614d60565b925082821015614cd757614cd6614ecf565b5b828203905092915050565b6000614ced82614d8e565b9150614cf883614d8e565b925082821015614d0b57614d0a614ecf565b5b828203905092915050565b6000614d2182614d6e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ddd578082015181840152602081019050614dc2565b83811115614dec576000848401525b50505050565b60006002820490506001821680614e0a57607f821691505b60208210811415614e1e57614e1d614f2d565b5b50919050565b614e2d82614fd8565b810181811067ffffffffffffffff82111715614e4c57614e4b614f8b565b5b80604052505050565b6000614e6082614d8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9357614e92614ecf565b5b600182019050919050565b6000614ea982614d8e565b9150614eb483614d8e565b925082614ec457614ec3614efe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243323938313a20696e76616c696420706172616d65746572730000000000600082015250565b7f796f75206861766520302072656d61696e696e67207072652d72656c6561736560008201527f206d696e74730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f796f75206861766520302072656d61696e696e672066726565207265726f6c6c60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f796f75206d757374206f776e207468697320746f6b656e20746f20726571756560008201527f7374204172740000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6172742068617320616c7265616479206265656e20726571756573746564206660008201527f6f72207468617420566f786d6f6e000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f752063616e6e6f7420667265657a6520796f757220566f786d6f6e20796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206861736e27742073746172746564207965740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f796f75206d757374206f776e2074686520746f6b656e20746f207265726f6c6c600082015250565b7f796f75206d757374206f776e207468697320746f6b656e20746f207265726f6c60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f6d617820313020766f786d6f6e7320706572207472616e73616374696f6e0000600082015250565b7f7468697320746f6b656e2069732066726f7a656e000000000000000000000000600082015250565b7f6d6178206c69766520737570706c7920726561636865642c20746f206765742060008201527f61206e657720566f786d6f6e20796f75276c6c206e65656420746f207265726f60208201527f6c6c20616e206f6c64206f6e6500000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c206d696e74696e6720636f7374732060008201527f302e303720657468657200000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c207265726f6c6c696e6720636f737460008201527f7320302e30332065746865720000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f7567682072656d61696e696e672060008201527f7072652d72656c65617365206d696e7473000000000000000000000000000000602082015250565b7f746f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b61587c81614d16565b811461588757600080fd5b50565b61589381614d28565b811461589e57600080fd5b50565b6158aa81614d34565b81146158b557600080fd5b50565b6158c181614d8e565b81146158cc57600080fd5b50565b6158d881614d98565b81146158e357600080fd5b5056fea2646970667358221220e5ee05307ff4409d952776a7039c05b61b79b09dd35ad2b4240ae5cf173d94e664736f6c634300080700330000000000000000000000005a44e7863945a72c32c3c2288a955f4b5be42f22
Deployed Bytecode
0x6080604052600436106102875760003560e01c80635f303ae01161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c5146109f2578063f2fde38b14610a2f578063fb99325d14610a58578063fe8a8a6214610a95578063fee8c41514610ad2578063ff34be5214610b0f57610287565b8063b88d4fde146108e4578063c662e4811461090d578063c87b56dd14610938578063d5039a4e14610975578063d691e43c146109a0578063e6b22ba4146109c957610287565b8063715018a611610113578063715018a6146107fa578063805ffcc71461081157806383197ef01461084e5780638da5cb5b1461086557806395d89b4114610890578063a22cb465146108bb57610287565b80635f303ae0146106d15780636352211e146106fc578063656d636c146107395780636a627842146107625780636e34a4821461079257806370a08231146107bd57610287565b80632a55205a116101fe57806340c10f19116101b757806340c10f19146105be57806342842e0e146105ee57806352e693a6146106175780635487e9ca1461065457806355f804b31461067d5780635ddf9601146106a657610287565b80632a55205a1461049b5780632e1a7d4d146104d9578063310077671461050257806332cb6b0c1461053f57806339518b5e1461056a5780633f52e5891461059557610287565b80630ca1c5c9116102505780630ca1c5c9146103975780630e0fd9e7146103c25780631132a587146103eb5780631c19c215146104165780631eb821ed1461044657806323b872dd1461047257610287565b8062d58d011461028c57806301ffc9a7146102c957806306fdde0314610306578063081812fc14610331578063095ea7b31461036e575b600080fd5b34801561029857600080fd5b506102b360048036038101906102ae9190613c23565b610b3a565b6040516102c09190614ab7565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613e26565b610d7f565b6040516102fd919061465f565b60405180910390f35b34801561031257600080fd5b5061031b610d91565b604051610328919061467a565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613ecd565b610e23565b6040516103659190614584565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613da6565b610ea8565b005b3480156103a357600080fd5b506103ac610fc0565b6040516103b99190614ab7565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613ecd565b610fd1565b005b3480156103f757600080fd5b50610400611170565b60405161040d9190614ab7565b60405180910390f35b610430600480360381019061042b9190613ecd565b61117b565b60405161043d9190614ab7565b60405180910390f35b34801561045257600080fd5b5061045b611341565b604051610469929190614614565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613c90565b61138b565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613f4d565b6113eb565b6040516104d09291906145eb565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190613ecd565b6115d6565b005b34801561050e57600080fd5b5061052960048036038101906105249190613c23565b6116a9565b6040516105369190614a9c565b60405180910390f35b34801561054b57600080fd5b50610554611700565b6040516105619190614a9c565b60405180910390f35b34801561057657600080fd5b5061057f611706565b60405161058c9190614ab7565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613ecd565b61170c565b005b6105d860048036038101906105d39190613da6565b611792565b6040516105e5919061463d565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613c90565b6118a2565b005b34801561062357600080fd5b5061063e60048036038101906106399190613ecd565b6118c2565b60405161064b919061465f565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190613e80565b6118ec565b005b34801561068957600080fd5b506106a4600480360381019061069f9190613e80565b61197e565b005b3480156106b257600080fd5b506106bb611a10565b6040516106c89190614ab7565b60405180910390f35b3480156106dd57600080fd5b506106e6611a16565b6040516106f3919061467a565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613ecd565b611aa4565b6040516107309190614584565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613efa565b611b56565b005b61077c60048036038101906107779190613c23565b611d7a565b6040516107899190614ab7565b60405180910390f35b34801561079e57600080fd5b506107a7611f08565b6040516107b4919061467a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613c23565b611f96565b6040516107f19190614ab7565b60405180910390f35b34801561080657600080fd5b5061080f61204e565b005b34801561081d57600080fd5b5061083860048036038101906108339190613da6565b6120d6565b604051610845919061463d565b60405180910390f35b34801561085a57600080fd5b5061086361220a565b005b34801561087157600080fd5b5061087a6122ab565b6040516108879190614584565b60405180910390f35b34801561089c57600080fd5b506108a56122d5565b6040516108b2919061467a565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190613d66565b612367565b005b3480156108f057600080fd5b5061090b60048036038101906109069190613ce3565b61237d565b005b34801561091957600080fd5b506109226123df565b60405161092f9190614ab7565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613ecd565b6123ea565b60405161096c919061467a565b60405180910390f35b34801561098157600080fd5b5061098a61253b565b6040516109979190614ab7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190613de6565b61254c565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613ecd565b612644565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613c50565b6126ca565b604051610a26919061465f565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613c23565b61275e565b005b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613c23565b612856565b604051610a8c9190614a9c565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613ecd565b6128ad565b604051610ac99190614ab7565b60405180910390f35b348015610ade57600080fd5b50610af96004803603810190610af49190613ecd565b612b6f565b604051610b069190614ab7565b60405180910390f35b348015610b1b57600080fd5b50610b24612b8c565b604051610b319190614ab7565b60405180910390f35b600080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906146bc565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff16610c299190614cae565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610c8a612bb1565b610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc09061499c565b60405180910390fd5b610cd36007612bca565b6000610cdf6007612be0565b90506000610ced6008612be0565b610cf76007612be0565b610d019190614bcd565b9050610d0d8483612bee565b8060136000848152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9670c8b300c38cd3db8d3f9429dd902e67f418c4dd193e2497f06d20efc795608383604051610d6d929190614ad2565b60405180910390a28192505050919050565b6000610d8a82612dbc565b9050919050565b606060008054610da090614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcc90614df2565b8015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e2e82612e9e565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e64906148fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eb382611aa4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b906149bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f43612f0a565b73ffffffffffffffffffffffffffffffffffffffff161480610f725750610f7181610f6c612f0a565b6126ca565b5b610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa89061483c565b60405180910390fd5b610fbb8383612f12565b505050565b6000610fcc6007612be0565b905090565b600e54421015611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906147fc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1661103682611aa4565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110839061473c565b60405180910390fd5b600015156012600083815260200190815260200160002060009054906101000a900460ff161515146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea906147bc565b60405180910390fd5b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f0e450f2a6c42e90846c4dda8bdb9982c3ffb54e1d986f0b57fd5feef7d6c1ccd826040516111659190614ab7565b60405180910390a250565b666a94d74f43000081565b60003373ffffffffffffffffffffffffffffffffffffffff1661119d83611aa4565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea906148bc565b60405180910390fd5b666a94d74f43000034101561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490614a1c565b60405180910390fd5b600015156012600084815260200190815260200160002060009054906101000a900460ff161515146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b9061497c565b60405180910390fd5b6112ae6008612bca565b60006112ba6008612be0565b6112c46007612be0565b6112ce9190614bcd565b90508060136000858152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f91696ceff949070d1dedc79748f824f868af2606b48b4c20f83d39e865e5e60c8483604051611330929190614ad2565b60405180910390a280915050919050565b60098060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046bffffffffffffffffffffffff16905082565b61139c611396612f0a565b82612fcb565b6113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906149fc565b60405180910390fd5b6113e68383836130a9565b505050565b6000806000600a60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156115815760096040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b600061158b613305565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866115b79190614c54565b6115c19190614c23565b90508160000151819350935050509250929050565b6115de612f0a565b73ffffffffffffffffffffffffffffffffffffffff166115fc6122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061491c565b60405180910390fd5b600061165c6122ab565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156116a4573d6000803e3d6000fd5b505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b61271081565b600d5481565b611714612f0a565b73ffffffffffffffffffffffffffffffffffffffff166117326122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f9061491c565b60405180910390fd5b80600d8190555050565b6060600082116117a157600080fd5b600a8211156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061495c565b60405180910390fd5b8166f8b0a10e4700006117f89190614c54565b34101561180457600080fd5b60008267ffffffffffffffff8111156118205761181f614f8b565b5b60405190808252806020026020018201604052801561184e5781602001602082028036833780820191505090505b50905060005b838110156118975761186585611d7a565b82828151811061187857611877614f5c565b5b602002602001018181525050808061188f90614e55565b915050611854565b508091505092915050565b6118bd8383836040518060200160405280600081525061237d565b505050565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6118f4612f0a565b73ffffffffffffffffffffffffffffffffffffffff166119126122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061491c565b60405180910390fd5b8181600c9190611979929190613a3c565b505050565b611986612f0a565b73ffffffffffffffffffffffffffffffffffffffff166119a46122ab565b73ffffffffffffffffffffffffffffffffffffffff16146119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f19061491c565b60405180910390fd5b8181600b9190611a0b929190613a3c565b505050565b600e5481565b600c8054611a2390614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f90614df2565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b449061487c565b60405180910390fd5b80915050919050565b611b5e612f0a565b73ffffffffffffffffffffffffffffffffffffffff16611b7c6122ab565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc99061491c565b60405180910390fd5b611bda613305565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90614a3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f9061469c565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000611d84612bb1565b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061499c565b60405180910390fd5b66f8b0a10e470000341015611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e04906149dc565b60405180910390fd5b600d54421015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499061481c565b60405180910390fd5b611e5c6007612bca565b6000611e686007612be0565b90506000611e766008612be0565b611e806007612be0565b611e8a9190614bcd565b9050611e968483612bee565b8060136000848152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f9670c8b300c38cd3db8d3f9429dd902e67f418c4dd193e2497f06d20efc795608383604051611ef6929190614ad2565b60405180910390a28192505050919050565b600b8054611f1590614df2565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4190614df2565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe9061485c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612056612f0a565b73ffffffffffffffffffffffffffffffffffffffff166120746122ab565b73ffffffffffffffffffffffffffffffffffffffff16146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c19061491c565b60405180910390fd5b6120d4600061330f565b565b606081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff16101561216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390614a5c565b60405180910390fd5b60008267ffffffffffffffff81111561218857612187614f8b565b5b6040519080825280602002602001820160405280156121b65781602001602082028036833780820191505090505b50905060005b838110156121ff576121cd85610b3a565b8282815181106121e0576121df614f5c565b5b60200260200101818152505080806121f790614e55565b9150506121bc565b508091505092915050565b612212612f0a565b73ffffffffffffffffffffffffffffffffffffffff166122306122ab565b73ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d9061491c565b60405180910390fd5b60006122906122ab565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546122e490614df2565b80601f016020809104026020016040519081016040528092919081815260200182805461231090614df2565b801561235d5780601f106123325761010080835404028352916020019161235d565b820191906000526020600020905b81548152906001019060200180831161234057829003601f168201915b5050505050905090565b612379612372612f0a565b83836133d5565b5050565b61238e612388612f0a565b83612fcb565b6123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c4906149fc565b60405180910390fd5b6123d984848484613542565b50505050565b66f8b0a10e47000081565b60606123f582612e9e565b612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90614a7c565b60405180910390fd5b6012600083815260200190815260200160002060009054906101000a900460ff16156124ca57600061246461359e565b9050600081511161248457604051806020016040528060008152506124c2565b806124a16013600086815260200190815260200160002054613630565b6040516020016124b2929190614560565b6040516020818303038152906040525b915050612536565b60006124d4613791565b905060008151116124f45760405180602001604052806000815250612532565b806125116013600086815260200190815260200160002054613630565b604051602001612522929190614560565b6040516020818303038152906040525b9150505b919050565b60006125476008612be0565b905090565b612554612f0a565b73ffffffffffffffffffffffffffffffffffffffff166125726122ab565b73ffffffffffffffffffffffffffffffffffffffff16146125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf9061491c565b60405180910390fd5b81600960000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050565b61264c612f0a565b73ffffffffffffffffffffffffffffffffffffffff1661266a6122ab565b73ffffffffffffffffffffffffffffffffffffffff16146126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b79061491c565b60405180910390fd5b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612766612f0a565b73ffffffffffffffffffffffffffffffffffffffff166127846122ab565b73ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d19061491c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561284a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128419061471c565b60405180910390fd5b6128538161330f565b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff169050919050565b600080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906146fc565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661299c9190614cae565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16612a1583611aa4565b73ffffffffffffffffffffffffffffffffffffffff1614612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a629061489c565b60405180910390fd5b600015156012600084815260200190815260200160002060009054906101000a900460ff16151514612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac99061497c565b60405180910390fd5b612adc6008612bca565b6000612ae86008612be0565b612af26007612be0565b612afc9190614bcd565b90508060136000858152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f91696ceff949070d1dedc79748f824f868af2606b48b4c20f83d39e865e5e60c8483604051612b5e929190614ad2565b60405180910390a280915050919050565b600060136000838152602001908152602001600020549050919050565b6000612b986007612be0565b612ba26008612be0565b612bac9190614bcd565b905090565b600061271061ffff16612bc46007612be0565b10905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c55906148dc565b60405180910390fd5b612c6781612e9e565b15612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e9061475c565b60405180910390fd5b612cb360008383613823565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d039190614bcd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e975750612e9682613828565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f8583611aa4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fd682612e9e565b613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c906147dc565b60405180910390fd5b600061302083611aa4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061308f57508373ffffffffffffffffffffffffffffffffffffffff1661307784610e23565b73ffffffffffffffffffffffffffffffffffffffff16145b806130a0575061309f81856126ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130c982611aa4565b73ffffffffffffffffffffffffffffffffffffffff161461311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131169061493c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131869061477c565b60405180910390fd5b61319a838383613823565b6131a5600082612f12565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131f59190614ce2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461324c9190614bcd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612710905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343b9061479c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613535919061465f565b60405180910390a3505050565b61354d8484846130a9565b61355984848484613892565b613598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358f906146dc565b60405180910390fd5b50505050565b6060600c80546135ad90614df2565b80601f01602080910402602001604051908101604052809291908181526020018280546135d990614df2565b80156136265780601f106135fb57610100808354040283529160200191613626565b820191906000526020600020905b81548152906001019060200180831161360957829003601f168201915b5050505050905090565b60606000821415613678576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061378c565b600082905060005b600082146136aa57808061369390614e55565b915050600a826136a39190614c23565b9150613680565b60008167ffffffffffffffff8111156136c6576136c5614f8b565b5b6040519080825280601f01601f1916602001820160405280156136f85781602001600182028036833780820191505090505b5090505b60008514613785576001826137119190614ce2565b9150600a856137209190614e9e565b603061372c9190614bcd565b60f81b81838151811061374257613741614f5c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561377e9190614c23565b94506136fc565b8093505050505b919050565b6060600b80546137a090614df2565b80601f01602080910402602001604051908101604052809291908181526020018280546137cc90614df2565b80156138195780601f106137ee57610100808354040283529160200191613819565b820191906000526020600020905b8154815290600101906020018083116137fc57829003601f168201915b5050505050905090565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006138b38473ffffffffffffffffffffffffffffffffffffffff16613a29565b15613a1c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138dc612f0a565b8786866040518563ffffffff1660e01b81526004016138fe949392919061459f565b602060405180830381600087803b15801561391857600080fd5b505af192505050801561394957506040513d601f19601f820116820180604052508101906139469190613e53565b60015b6139cc573d8060008114613979576040519150601f19603f3d011682016040523d82523d6000602084013e61397e565b606091505b506000815114156139c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139bb906146dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a21565b600190505b949350505050565b600080823b905060008111915050919050565b828054613a4890614df2565b90600052602060002090601f016020900481019282613a6a5760008555613ab1565b82601f10613a8357803560ff1916838001178555613ab1565b82800160010185558215613ab1579182015b82811115613ab0578235825591602001919060010190613a95565b5b509050613abe9190613ac2565b5090565b5b80821115613adb576000816000905550600101613ac3565b5090565b6000613af2613aed84614b20565b614afb565b905082815260208101848484011115613b0e57613b0d614fc9565b5b613b19848285614db0565b509392505050565b600081359050613b3081615873565b92915050565b600081359050613b458161588a565b92915050565b600081359050613b5a816158a1565b92915050565b600081519050613b6f816158a1565b92915050565b600082601f830112613b8a57613b89614fbf565b5b8135613b9a848260208601613adf565b91505092915050565b60008083601f840112613bb957613bb8614fbf565b5b8235905067ffffffffffffffff811115613bd657613bd5614fba565b5b602083019150836001820283011115613bf257613bf1614fc4565b5b9250929050565b600081359050613c08816158b8565b92915050565b600081359050613c1d816158cf565b92915050565b600060208284031215613c3957613c38614fd3565b5b6000613c4784828501613b21565b91505092915050565b60008060408385031215613c6757613c66614fd3565b5b6000613c7585828601613b21565b9250506020613c8685828601613b21565b9150509250929050565b600080600060608486031215613ca957613ca8614fd3565b5b6000613cb786828701613b21565b9350506020613cc886828701613b21565b9250506040613cd986828701613bf9565b9150509250925092565b60008060008060808587031215613cfd57613cfc614fd3565b5b6000613d0b87828801613b21565b9450506020613d1c87828801613b21565b9350506040613d2d87828801613bf9565b925050606085013567ffffffffffffffff811115613d4e57613d4d614fce565b5b613d5a87828801613b75565b91505092959194509250565b60008060408385031215613d7d57613d7c614fd3565b5b6000613d8b85828601613b21565b9250506020613d9c85828601613b36565b9150509250929050565b60008060408385031215613dbd57613dbc614fd3565b5b6000613dcb85828601613b21565b9250506020613ddc85828601613bf9565b9150509250929050565b60008060408385031215613dfd57613dfc614fd3565b5b6000613e0b85828601613b21565b9250506020613e1c85828601613c0e565b9150509250929050565b600060208284031215613e3c57613e3b614fd3565b5b6000613e4a84828501613b4b565b91505092915050565b600060208284031215613e6957613e68614fd3565b5b6000613e7784828501613b60565b91505092915050565b60008060208385031215613e9757613e96614fd3565b5b600083013567ffffffffffffffff811115613eb557613eb4614fce565b5b613ec185828601613ba3565b92509250509250929050565b600060208284031215613ee357613ee2614fd3565b5b6000613ef184828501613bf9565b91505092915050565b600080600060608486031215613f1357613f12614fd3565b5b6000613f2186828701613bf9565b9350506020613f3286828701613b21565b9250506040613f4386828701613c0e565b9150509250925092565b60008060408385031215613f6457613f63614fd3565b5b6000613f7285828601613bf9565b9250506020613f8385828601613bf9565b9150509250929050565b6000613f998383614533565b60208301905092915050565b613fae81614d16565b82525050565b6000613fbf82614b61565b613fc98185614b8f565b9350613fd483614b51565b8060005b83811015614005578151613fec8882613f8d565b9750613ff783614b82565b925050600181019050613fd8565b5085935050505092915050565b61401b81614d28565b82525050565b600061402c82614b6c565b6140368185614ba0565b9350614046818560208601614dbf565b61404f81614fd8565b840191505092915050565b600061406582614b77565b61406f8185614bb1565b935061407f818560208601614dbf565b61408881614fd8565b840191505092915050565b600061409e82614b77565b6140a88185614bc2565b93506140b8818560208601614dbf565b80840191505092915050565b60006140d1601b83614bb1565b91506140dc82614fe9565b602082019050919050565b60006140f4602683614bb1565b91506140ff82615012565b604082019050919050565b6000614117603283614bb1565b915061412282615061565b604082019050919050565b600061413a602183614bb1565b9150614145826150b0565b604082019050919050565b600061415d602683614bb1565b9150614168826150ff565b604082019050919050565b6000614180602683614bb1565b915061418b8261514e565b604082019050919050565b60006141a3601c83614bb1565b91506141ae8261519d565b602082019050919050565b60006141c6602483614bb1565b91506141d1826151c6565b604082019050919050565b60006141e9601983614bb1565b91506141f482615215565b602082019050919050565b600061420c602e83614bb1565b91506142178261523e565b604082019050919050565b600061422f602c83614bb1565b915061423a8261528d565b604082019050919050565b6000614252602183614bb1565b915061425d826152dc565b604082019050919050565b6000614275601e83614bb1565b91506142808261532b565b602082019050919050565b6000614298603883614bb1565b91506142a382615354565b604082019050919050565b60006142bb602a83614bb1565b91506142c6826153a3565b604082019050919050565b60006142de602983614bb1565b91506142e9826153f2565b604082019050919050565b6000614301602083614bb1565b915061430c82615441565b602082019050919050565b6000614324602183614bb1565b915061432f8261546a565b604082019050919050565b6000614347602083614bb1565b9150614352826154b9565b602082019050919050565b600061436a602c83614bb1565b9150614375826154e2565b604082019050919050565b600061438d602083614bb1565b915061439882615531565b602082019050919050565b60006143b0602983614bb1565b91506143bb8261555a565b604082019050919050565b60006143d3601e83614bb1565b91506143de826155a9565b602082019050919050565b60006143f6601483614bb1565b9150614401826155d2565b602082019050919050565b6000614419604d83614bb1565b9150614424826155fb565b606082019050919050565b600061443c602183614bb1565b915061444782615670565b604082019050919050565b600061445f602a83614bb1565b915061446a826156bf565b604082019050919050565b6000614482603183614bb1565b915061448d8261570e565b604082019050919050565b60006144a5602c83614bb1565b91506144b08261575d565b604082019050919050565b60006144c8602a83614bb1565b91506144d3826157ac565b604082019050919050565b60006144eb603183614bb1565b91506144f6826157fb565b604082019050919050565b600061450e601483614bb1565b91506145198261584a565b602082019050919050565b61452d81614d60565b82525050565b61453c81614d8e565b82525050565b61454b81614d8e565b82525050565b61455a81614d98565b82525050565b600061456c8285614093565b91506145788284614093565b91508190509392505050565b60006020820190506145996000830184613fa5565b92915050565b60006080820190506145b46000830187613fa5565b6145c16020830186613fa5565b6145ce6040830185614542565b81810360608301526145e08184614021565b905095945050505050565b60006040820190506146006000830185613fa5565b61460d6020830184614542565b9392505050565b60006040820190506146296000830185613fa5565b6146366020830184614551565b9392505050565b600060208201905081810360008301526146578184613fb4565b905092915050565b60006020820190506146746000830184614012565b92915050565b60006020820190508181036000830152614694818461405a565b905092915050565b600060208201905081810360008301526146b5816140c4565b9050919050565b600060208201905081810360008301526146d5816140e7565b9050919050565b600060208201905081810360008301526146f58161410a565b9050919050565b600060208201905081810360008301526147158161412d565b9050919050565b6000602082019050818103600083015261473581614150565b9050919050565b6000602082019050818103600083015261475581614173565b9050919050565b6000602082019050818103600083015261477581614196565b9050919050565b60006020820190508181036000830152614795816141b9565b9050919050565b600060208201905081810360008301526147b5816141dc565b9050919050565b600060208201905081810360008301526147d5816141ff565b9050919050565b600060208201905081810360008301526147f581614222565b9050919050565b6000602082019050818103600083015261481581614245565b9050919050565b6000602082019050818103600083015261483581614268565b9050919050565b600060208201905081810360008301526148558161428b565b9050919050565b60006020820190508181036000830152614875816142ae565b9050919050565b60006020820190508181036000830152614895816142d1565b9050919050565b600060208201905081810360008301526148b5816142f4565b9050919050565b600060208201905081810360008301526148d581614317565b9050919050565b600060208201905081810360008301526148f58161433a565b9050919050565b600060208201905081810360008301526149158161435d565b9050919050565b6000602082019050818103600083015261493581614380565b9050919050565b60006020820190508181036000830152614955816143a3565b9050919050565b60006020820190508181036000830152614975816143c6565b9050919050565b60006020820190508181036000830152614995816143e9565b9050919050565b600060208201905081810360008301526149b58161440c565b9050919050565b600060208201905081810360008301526149d58161442f565b9050919050565b600060208201905081810360008301526149f581614452565b9050919050565b60006020820190508181036000830152614a1581614475565b9050919050565b60006020820190508181036000830152614a3581614498565b9050919050565b60006020820190508181036000830152614a55816144bb565b9050919050565b60006020820190508181036000830152614a75816144de565b9050919050565b60006020820190508181036000830152614a9581614501565b9050919050565b6000602082019050614ab16000830184614524565b92915050565b6000602082019050614acc6000830184614542565b92915050565b6000604082019050614ae76000830185614542565b614af46020830184614542565b9392505050565b6000614b05614b16565b9050614b118282614e24565b919050565b6000604051905090565b600067ffffffffffffffff821115614b3b57614b3a614f8b565b5b614b4482614fd8565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bd882614d8e565b9150614be383614d8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1857614c17614ecf565b5b828201905092915050565b6000614c2e82614d8e565b9150614c3983614d8e565b925082614c4957614c48614efe565b5b828204905092915050565b6000614c5f82614d8e565b9150614c6a83614d8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ca357614ca2614ecf565b5b828202905092915050565b6000614cb982614d60565b9150614cc483614d60565b925082821015614cd757614cd6614ecf565b5b828203905092915050565b6000614ced82614d8e565b9150614cf883614d8e565b925082821015614d0b57614d0a614ecf565b5b828203905092915050565b6000614d2182614d6e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ddd578082015181840152602081019050614dc2565b83811115614dec576000848401525b50505050565b60006002820490506001821680614e0a57607f821691505b60208210811415614e1e57614e1d614f2d565b5b50919050565b614e2d82614fd8565b810181811067ffffffffffffffff82111715614e4c57614e4b614f8b565b5b80604052505050565b6000614e6082614d8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9357614e92614ecf565b5b600182019050919050565b6000614ea982614d8e565b9150614eb483614d8e565b925082614ec457614ec3614efe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243323938313a20696e76616c696420706172616d65746572730000000000600082015250565b7f796f75206861766520302072656d61696e696e67207072652d72656c6561736560008201527f206d696e74730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f796f75206861766520302072656d61696e696e672066726565207265726f6c6c60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f796f75206d757374206f776e207468697320746f6b656e20746f20726571756560008201527f7374204172740000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6172742068617320616c7265616479206265656e20726571756573746564206660008201527f6f72207468617420566f786d6f6e000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f796f752063616e6e6f7420667265657a6520796f757220566f786d6f6e20796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206861736e27742073746172746564207965740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f796f75206d757374206f776e2074686520746f6b656e20746f207265726f6c6c600082015250565b7f796f75206d757374206f776e207468697320746f6b656e20746f207265726f6c60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f6d617820313020766f786d6f6e7320706572207472616e73616374696f6e0000600082015250565b7f7468697320746f6b656e2069732066726f7a656e000000000000000000000000600082015250565b7f6d6178206c69766520737570706c7920726561636865642c20746f206765742060008201527f61206e657720566f786d6f6e20796f75276c6c206e65656420746f207265726f60208201527f6c6c20616e206f6c64206f6e6500000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c206d696e74696e6720636f7374732060008201527f302e303720657468657200000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682065746865722c207265726f6c6c696e6720636f737460008201527f7320302e30332065746865720000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f7567682072656d61696e696e672060008201527f7072652d72656c65617365206d696e7473000000000000000000000000000000602082015250565b7f746f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b61587c81614d16565b811461588757600080fd5b50565b61589381614d28565b811461589e57600080fd5b50565b6158aa81614d34565b81146158b557600080fd5b50565b6158c181614d8e565b81146158cc57600080fd5b50565b6158d881614d98565b81146158e357600080fd5b5056fea2646970667358221220e5ee05307ff4409d952776a7039c05b61b79b09dd35ad2b4240ae5cf173d94e664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005a44e7863945a72c32c3c2288a955f4b5be42f22
-----Decoded View---------------
Arg [0] : addr (address): 0x5A44e7863945A72c32C3C2288a955f4B5BE42F22
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005a44e7863945a72c32c3c2288a955f4b5be42f22
Deployed Bytecode Sourcemap
38744:14769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50557:773;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45746:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46938:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48647:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39403:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51897:633;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39569:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28461:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48026:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44604:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47726:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39075:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40076:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44232:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50031:491;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28871:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47444:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44044:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43884:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40110:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39946:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25846:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45093:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49205:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39797:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25576:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;51372:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53387:123;;;;;;;;;;;;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26321:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28004:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29127:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39335:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46327:603;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47053:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44892:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44433:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28230:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47586:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52591:701;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47882:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47298:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50557:773;50616:7;50683:1;50644:24;:36;50669:10;50644:36;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;50636:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;50816:1;50777:24;:36;50802:10;50777:36;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;50738:24;:36;50763:10;50738:36;;;;;;;;;;;;;;;;:79;;;;;;;;;;;;;;;;;;50838:19;:17;:19::i;:::-;50830:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50953:25;:13;:23;:25::i;:::-;50999:18;51020:23;:13;:21;:23::i;:::-;50999:44;;51054:18;51101:25;:15;:23;:25::i;:::-;51075:23;:13;:21;:23::i;:::-;:51;;;;:::i;:::-;51054:72;;51147:28;51153:9;51164:10;51147:5;:28::i;:::-;51220:10;51186:19;:31;51206:10;51186:31;;;;;;;;;;;:44;;;;51258:9;51248:44;;;51269:10;51281;51248:44;;;;;;;:::i;:::-;;;;;;;;51312:10;51305:17;;;;50557:773;;;:::o;45746:163::-;45840:4;45864:37;45889:11;45864:24;:37::i;:::-;45857:44;;45746:163;;;:::o;26152:100::-;26206:13;26239:5;26232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26152:100;:::o;27711:221::-;27787:7;27815:16;27823:7;27815;:16::i;:::-;27807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27900:15;:24;27916:7;27900:24;;;;;;;;;;;;;;;;;;;;;27893:31;;27711:221;;;:::o;27234:411::-;27315:13;27331:23;27346:7;27331:14;:23::i;:::-;27315:39;;27379:5;27373:11;;:2;:11;;;;27365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27473:5;27457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27482:37;27499:5;27506:12;:10;:12::i;:::-;27482:16;:37::i;:::-;27457:62;27435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27616:21;27625:2;27629:7;27616:8;:21::i;:::-;27304:341;27234:411;;:::o;46938:107::-;46987:7;47014:23;:13;:21;:23::i;:::-;47007:30;;46938:107;:::o;48647:449::-;48733:12;;48714:15;:31;;48706:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48822:10;48802:30;;:16;48810:7;48802;:16::i;:::-;:30;;;48794:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48928:5;48894:39;;:21;:30;48916:7;48894:30;;;;;;;;;;;;;;;;;;;;;:39;;;48886:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;49028:4;48995:21;:30;49017:7;48995:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;49068:10;49050:38;;;49080:7;49050:38;;;;;;:::i;:::-;;;;;;;;48647:449;:::o;39403:48::-;39438:13;39403:48;:::o;51897:633::-;51954:7;52002:10;51982:30;;:16;51990:7;51982;:16::i;:::-;:30;;;51974:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39438:13;52069:9;:24;;52061:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;52195:5;52161:39;;:21;:30;52183:7;52161:30;;;;;;;;;;;;;;;;;;;;;:39;;;52153:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52246:27;:15;:25;:27::i;:::-;52284:21;52334:25;:15;:23;:25::i;:::-;52308:23;:13;:21;:23::i;:::-;:51;;;;:::i;:::-;52284:75;;52403:13;52372:19;:28;52392:7;52372:28;;;;;;;;;;;:44;;;;52454:10;52442:47;;;52466:7;52475:13;52442:47;;;;;;;:::i;:::-;;;;;;;;52509:13;52502:20;;;51897:633;;;:::o;39569:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28461:339::-;28656:41;28675:12;:10;:12::i;:::-;28689:7;28656:18;:41::i;:::-;28648:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:28;28774:4;28780:2;28784:7;28764:9;:28::i;:::-;28461:339;;;:::o;48026:473::-;48108:16;48126:21;48164:26;48193:17;:27;48211:8;48193:27;;;;;;;;;;;48164:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48269:1;48241:30;;:7;:16;;;:30;;;48237:99;;;48302:18;48292:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48237:99;48352:22;48418:17;:15;:17::i;:::-;48377:58;;48391:7;:23;;;48378:36;;:10;:36;;;;:::i;:::-;48377:58;;;;:::i;:::-;48352:83;;48458:7;:16;;;48476:14;48450:41;;;;;;48026:473;;;;;:::o;44604:243::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44759:24:::1;44794:7;:5;:7::i;:::-;44759:43;;44813:8;:17;;:26;44831:7;44813:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44655:192;44604:243:::0;:::o;47726:148::-;47810:6;47836:24;:30;47861:4;47836:30;;;;;;;;;;;;;;;;;;;;;;;;;47829:37;;47726:148;;;:::o;39075:41::-;39111:5;39075:41;:::o;40076:27::-;;;;:::o;44232:119::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44331:12:::1;44316;:27;;;;44232:119:::0;:::o;50031:491::-;50110:16;50162:1;50147:12;:16;50139:25;;;;;;50199:2;50183:12;:18;;50175:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50280:12;39368:13;50268:24;;;;:::i;:::-;50255:9;:37;;50247:46;;;;;;50306:31;50354:12;50340:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50306:61;;50384:6;50380:101;50400:12;50396:1;:16;50380:101;;;50454:15;50459:9;50454:4;:15::i;:::-;50434:14;50449:1;50434:17;;;;;;;;:::i;:::-;;;;;;;:35;;;;;50414:3;;;;;:::i;:::-;;;;50380:101;;;;50500:14;50493:21;;;50031:491;;;;:::o;28871:185::-;29009:39;29026:4;29032:2;29036:7;29009:39;;;;;;;;;;;;:16;:39::i;:::-;28871:185;;;:::o;47444:134::-;47516:4;47540:21;:30;47562:7;47540:30;;;;;;;;;;;;;;;;;;;;;47533:37;;47444:134;;;:::o;44044:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44139:3:::1;;44121:15;:21;;;;;;;:::i;:::-;;44044:106:::0;;:::o;43884:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43967:3:::1;;43955:9;:15;;;;;;;:::i;:::-;;43884:94:::0;;:::o;40110:27::-;;;;:::o;39946:59::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25846:239::-;25918:7;25938:13;25954:7;:16;25962:7;25954:16;;;;;;;;;;;;;;;;;;;;;25938:32;;26006:1;25989:19;;:5;:19;;;;25981:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:5;26065:12;;;25846:239;;;:::o;45093:372::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45240:17:::1;:15;:17::i;:::-;45224:33;;:12;:33;;;;45216:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;45344:1;45323:23;;:9;:23;;;;45315:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45421:36;;;;;;;;45433:9;45421:36;;;;;;45444:12;45421:36;;;;::::0;45391:17:::1;:27;45409:8;45391:27;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45093:372:::0;;;:::o;49205:751::-;49262:7;49290:19;:17;:19::i;:::-;49282:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39368:13;49411:9;:22;;49403:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49518:12;;49499:15;:31;;49491:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49579:25;:13;:23;:25::i;:::-;49625:18;49646:23;:13;:21;:23::i;:::-;49625:44;;49680:18;49727:25;:15;:23;:25::i;:::-;49701:23;:13;:21;:23::i;:::-;:51;;;;:::i;:::-;49680:72;;49773:28;49779:9;49790:10;49773:5;:28::i;:::-;49846:10;49812:19;:31;49832:10;49812:31;;;;;;;;;;;:44;;;;49884:9;49874:44;;;49895:10;49907;49874:44;;;;;;;:::i;:::-;;;;;;;;49938:10;49931:17;;;;49205:751;;;:::o;39797:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25576:208::-;25648:7;25693:1;25676:19;;:5;:19;;;;25668:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25760:9;:16;25770:5;25760:16;;;;;;;;;;;;;;;;25753:23;;25576:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;51372:464::-;51453:16;51530:12;51490:24;:36;51515:10;51490:36;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;51482:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;51610:31;51658:12;51644:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51610:61;;51688:6;51684:111;51704:12;51700:1;:16;51684:111;;;51758:25;51773:9;51758:14;:25::i;:::-;51738:14;51753:1;51738:17;;;;;;;;:::i;:::-;;;;;;;:45;;;;;51718:3;;;;;:::i;:::-;;;;51684:111;;;;51814:14;51807:21;;;51372:464;;;;:::o;53387:123::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53434:20:::1;53465:7;:5;:7::i;:::-;53434:39;;53497:4;53484:18;;;5544:87:::0;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;26321:104::-;26377:13;26410:7;26403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26321:104;:::o;28004:155::-;28099:52;28118:12;:10;:12::i;:::-;28132:8;28142;28099:18;:52::i;:::-;28004:155;;:::o;29127:328::-;29302:41;29321:12;:10;:12::i;:::-;29335:7;29302:18;:41::i;:::-;29294:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29408:39;29422:4;29428:2;29432:7;29441:5;29408:13;:39::i;:::-;29127:328;;;;:::o;39335:46::-;39368:13;39335:46;:::o;46327:603::-;46399:13;46433:16;46441:7;46433;:16::i;:::-;46425:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46491:21;:30;46513:7;46491:30;;;;;;;;;;;;;;;;;;;;;46487:257;;;46538:27;46568:16;:14;:16::i;:::-;46538:46;;46636:1;46612:13;46606:27;:31;:126;;;;;;;;;;;;;;;;;46664:13;46679:46;46696:19;:28;46716:7;46696:28;;;;;;;;;;;;46679:16;:46::i;:::-;46647:79;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46606:126;46599:133;;;;;46487:257;46756:21;46780:10;:8;:10::i;:::-;46756:34;;46832:1;46814:7;46808:21;:25;:114;;;;;;;;;;;;;;;;;46860:7;46869:46;46886:19;:28;46906:7;46886:28;;;;;;;;;;;;46869:16;:46::i;:::-;46843:73;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46808:114;46801:121;;;46327:603;;;;:::o;47053:110::-;47103:7;47130:25;:15;:23;:25::i;:::-;47123:32;;47053:110;:::o;44892:193::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45015:7:::1;44985:18;:27;;;:37;;;;;;;;;;;;;;;;;;45070:7;45033:18;:34;;;:44;;;;;;;;;;;;;;;;;;44892:193:::0;;:::o;44433:128::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44538:15:::1;44523:12;:30;;;;44433:128:::0;:::o;28230:164::-;28327:4;28351:18;:25;28370:5;28351:25;;;;;;;;;;;;;;;:35;28377:8;28351:35;;;;;;;;;;;;;;;;;;;;;;;;;28344:42;;28230:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;47586:132::-;47662:6;47688:16;:22;47705:4;47688:22;;;;;;;;;;;;;;;;;;;;;;;;;47681:29;;47586:132;;;:::o;52591:701::-;52644:7;52703:1;52672:16;:28;52689:10;52672:28;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;52664:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;52815:1;52784:16;:28;52801:10;52784:28;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;52753:16;:28;52770:10;52753:28;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;52857:10;52837:30;;:16;52845:7;52837;:16::i;:::-;:30;;;52829:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52957:5;52923:39;;:21;:30;52945:7;52923:30;;;;;;;;;;;;;;;;;;;;;:39;;;52915:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53008:27;:15;:25;:27::i;:::-;53046:21;53096:25;:15;:23;:25::i;:::-;53070:23;:13;:21;:23::i;:::-;:51;;;;:::i;:::-;53046:75;;53165:13;53134:19;:28;53154:7;53134:28;;;;;;;;;;;:44;;;;53216:10;53204:47;;;53228:7;53237:13;53204:47;;;;;;;:::i;:::-;;;;;;;;53271:13;53264:20;;;52591:701;;;:::o;47882:136::-;47955:7;47982:19;:28;48002:7;47982:28;;;;;;;;;;;;47975:35;;47882:136;;;:::o;47298:138::-;47350:7;47405:23;:13;:21;:23::i;:::-;47377:25;:15;:23;:25::i;:::-;:51;;;;:::i;:::-;47370:58;;47298:138;:::o;45958:120::-;46010:4;39111:5;46034:36;;:23;:13;:21;:23::i;:::-;:36;46027:43;;45958:120;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;32943:382::-;33037:1;33023:16;;:2;:16;;;;33015:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:16;33104:7;33096;:16::i;:::-;33095:17;33087:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33158:45;33187:1;33191:2;33195:7;33158:20;:45::i;:::-;33233:1;33216:9;:13;33226:2;33216:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33264:2;33245:7;:16;33253:7;33245:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33309:7;33305:2;33284:33;;33301:1;33284:33;;;;;;;;;;;;32943:382;;:::o;25207:305::-;25309:4;25361:25;25346:40;;;:11;:40;;;;:105;;;;25418:33;25403:48;;;:11;:48;;;;25346:105;:158;;;;25468:36;25492:11;25468:23;:36::i;:::-;25346:158;25326:178;;25207:305;;;:::o;30965:127::-;31030:4;31082:1;31054:30;;:7;:16;31062:7;31054:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31047:37;;30965:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;34947:174::-;35049:2;35022:15;:24;35038:7;35022:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35105:7;35101:2;35067:46;;35076:23;35091:7;35076:14;:23::i;:::-;35067:46;;;;;;;;;;;;34947:174;;:::o;31259:348::-;31352:4;31377:16;31385:7;31377;:16::i;:::-;31369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:13;31469:23;31484:7;31469:14;:23::i;:::-;31453:39;;31522:5;31511:16;;:7;:16;;;:51;;;;31555:7;31531:31;;:20;31543:7;31531:11;:20::i;:::-;:31;;;31511:51;:87;;;;31566:32;31583:5;31590:7;31566:16;:32::i;:::-;31511:87;31503:96;;;31259:348;;;;:::o;34251:578::-;34410:4;34383:31;;:23;34398:7;34383:14;:23::i;:::-;:31;;;34375:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34493:1;34479:16;;:2;:16;;;;34471:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:39;34570:4;34576:2;34580:7;34549:20;:39::i;:::-;34653:29;34670:1;34674:7;34653:8;:29::i;:::-;34714:1;34695:9;:15;34705:4;34695:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34743:1;34726:9;:13;34736:2;34726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34774:2;34755:7;:16;34763:7;34755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34813:7;34809:2;34794:27;;34803:4;34794:27;;;;;;;;;;;;34251:578;;;:::o;46120:97::-;46178:6;46204:5;46197:12;;46120:97;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35263:315::-;35418:8;35409:17;;:5;:17;;;;35401:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35505:8;35467:18;:25;35486:5;35467:25;;;;;;;;;;;;;;;:35;35493:8;35467:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35551:8;35529:41;;35544:5;35529:41;;;35561:8;35529:41;;;;;;:::i;:::-;;;;;;;;35263:315;;;:::o;30337:::-;30494:28;30504:4;30510:2;30514:7;30494:9;:28::i;:::-;30541:48;30564:4;30570:2;30574:7;30583:5;30541:22;:48::i;:::-;30533:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30337:315;;;;:::o;45633:105::-;45682:13;45715:15;45708:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45633:105;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;45515:110::-;45575:13;45608:9;45601:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45515:110;:::o;37514:126::-;;;;:::o;17976:157::-;18061:4;18100:25;18085:40;;;:11;:40;;;;18078:47;;17976:157;;;:::o;36143:799::-;36298:4;36319:15;:2;:13;;;:15::i;:::-;36315:620;;;36371:2;36355:36;;;36392:12;:10;:12::i;:::-;36406:4;36412:7;36421:5;36355:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36351:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36614:1;36597:6;:13;:18;36593:272;;;36640:60;;;;;;;;;;:::i;:::-;;;;;;;;36593:272;36815:6;36809:13;36800:6;36796:2;36792:15;36785:38;36351:529;36488:41;;;36478:51;;;:6;:51;;;;36471:58;;;;;36315:620;36919:4;36912:11;;36143:799;;;;;;;:::o;7832:387::-;7892:4;8100:12;8167:7;8155:20;8147:28;;8210:1;8203:4;:8;8196:15;;;7832:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:137::-;2117:5;2155:6;2142:20;2133:29;;2171:32;2197:5;2171:32;:::i;:::-;2072:137;;;;:::o;2215:329::-;2274:6;2323:2;2311:9;2302:7;2298:23;2294:32;2291:119;;;2329:79;;:::i;:::-;2291:119;2449:1;2474:53;2519:7;2510:6;2499:9;2495:22;2474:53;:::i;:::-;2464:63;;2420:117;2215:329;;;;:::o;2550:474::-;2618:6;2626;2675:2;2663:9;2654:7;2650:23;2646:32;2643:119;;;2681:79;;:::i;:::-;2643:119;2801:1;2826:53;2871:7;2862:6;2851:9;2847:22;2826:53;:::i;:::-;2816:63;;2772:117;2928:2;2954:53;2999:7;2990:6;2979:9;2975:22;2954:53;:::i;:::-;2944:63;;2899:118;2550:474;;;;;:::o;3030:619::-;3107:6;3115;3123;3172:2;3160:9;3151:7;3147:23;3143:32;3140:119;;;3178:79;;:::i;:::-;3140:119;3298:1;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3269:117;3425:2;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3396:118;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3030:619;;;;;:::o;3655:943::-;3750:6;3758;3766;3774;3823:3;3811:9;3802:7;3798:23;3794:33;3791:120;;;3830:79;;:::i;:::-;3791:120;3950:1;3975:53;4020:7;4011:6;4000:9;3996:22;3975:53;:::i;:::-;3965:63;;3921:117;4077:2;4103:53;4148:7;4139:6;4128:9;4124:22;4103:53;:::i;:::-;4093:63;;4048:118;4205:2;4231:53;4276:7;4267:6;4256:9;4252:22;4231:53;:::i;:::-;4221:63;;4176:118;4361:2;4350:9;4346:18;4333:32;4392:18;4384:6;4381:30;4378:117;;;4414:79;;:::i;:::-;4378:117;4519:62;4573:7;4564:6;4553:9;4549:22;4519:62;:::i;:::-;4509:72;;4304:287;3655:943;;;;;;;:::o;4604:468::-;4669:6;4677;4726:2;4714:9;4705:7;4701:23;4697:32;4694:119;;;4732:79;;:::i;:::-;4694:119;4852:1;4877:53;4922:7;4913:6;4902:9;4898:22;4877:53;:::i;:::-;4867:63;;4823:117;4979:2;5005:50;5047:7;5038:6;5027:9;5023:22;5005:50;:::i;:::-;4995:60;;4950:115;4604:468;;;;;:::o;5078:474::-;5146:6;5154;5203:2;5191:9;5182:7;5178:23;5174:32;5171:119;;;5209:79;;:::i;:::-;5171:119;5329:1;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5300:117;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;5078:474;;;;;:::o;5558:472::-;5625:6;5633;5682:2;5670:9;5661:7;5657:23;5653:32;5650:119;;;5688:79;;:::i;:::-;5650:119;5808:1;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5779:117;5935:2;5961:52;6005:7;5996:6;5985:9;5981:22;5961:52;:::i;:::-;5951:62;;5906:117;5558:472;;;;;:::o;6036:327::-;6094:6;6143:2;6131:9;6122:7;6118:23;6114:32;6111:119;;;6149:79;;:::i;:::-;6111:119;6269:1;6294:52;6338:7;6329:6;6318:9;6314:22;6294:52;:::i;:::-;6284:62;;6240:116;6036:327;;;;:::o;6369:349::-;6438:6;6487:2;6475:9;6466:7;6462:23;6458:32;6455:119;;;6493:79;;:::i;:::-;6455:119;6613:1;6638:63;6693:7;6684:6;6673:9;6669:22;6638:63;:::i;:::-;6628:73;;6584:127;6369:349;;;;:::o;6724:529::-;6795:6;6803;6852:2;6840:9;6831:7;6827:23;6823:32;6820:119;;;6858:79;;:::i;:::-;6820:119;7006:1;6995:9;6991:17;6978:31;7036:18;7028:6;7025:30;7022:117;;;7058:79;;:::i;:::-;7022:117;7171:65;7228:7;7219:6;7208:9;7204:22;7171:65;:::i;:::-;7153:83;;;;6949:297;6724:529;;;;;:::o;7259:329::-;7318:6;7367:2;7355:9;7346:7;7342:23;7338:32;7335:119;;;7373:79;;:::i;:::-;7335:119;7493:1;7518:53;7563:7;7554:6;7543:9;7539:22;7518:53;:::i;:::-;7508:63;;7464:117;7259:329;;;;:::o;7594:617::-;7670:6;7678;7686;7735:2;7723:9;7714:7;7710:23;7706:32;7703:119;;;7741:79;;:::i;:::-;7703:119;7861:1;7886:53;7931:7;7922:6;7911:9;7907:22;7886:53;:::i;:::-;7876:63;;7832:117;7988:2;8014:53;8059:7;8050:6;8039:9;8035:22;8014:53;:::i;:::-;8004:63;;7959:118;8116:2;8142:52;8186:7;8177:6;8166:9;8162:22;8142:52;:::i;:::-;8132:62;;8087:117;7594:617;;;;;:::o;8217:474::-;8285:6;8293;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8468:1;8493:53;8538:7;8529:6;8518:9;8514:22;8493:53;:::i;:::-;8483:63;;8439:117;8595:2;8621:53;8666:7;8657:6;8646:9;8642:22;8621:53;:::i;:::-;8611:63;;8566:118;8217:474;;;;;:::o;8697:179::-;8766:10;8787:46;8829:3;8821:6;8787:46;:::i;:::-;8865:4;8860:3;8856:14;8842:28;;8697:179;;;;:::o;8882:118::-;8969:24;8987:5;8969:24;:::i;:::-;8964:3;8957:37;8882:118;;:::o;9036:732::-;9155:3;9184:54;9232:5;9184:54;:::i;:::-;9254:86;9333:6;9328:3;9254:86;:::i;:::-;9247:93;;9364:56;9414:5;9364:56;:::i;:::-;9443:7;9474:1;9459:284;9484:6;9481:1;9478:13;9459:284;;;9560:6;9554:13;9587:63;9646:3;9631:13;9587:63;:::i;:::-;9580:70;;9673:60;9726:6;9673:60;:::i;:::-;9663:70;;9519:224;9506:1;9503;9499:9;9494:14;;9459:284;;;9463:14;9759:3;9752:10;;9160:608;;;9036:732;;;;:::o;9774:109::-;9855:21;9870:5;9855:21;:::i;:::-;9850:3;9843:34;9774:109;;:::o;9889:360::-;9975:3;10003:38;10035:5;10003:38;:::i;:::-;10057:70;10120:6;10115:3;10057:70;:::i;:::-;10050:77;;10136:52;10181:6;10176:3;10169:4;10162:5;10158:16;10136:52;:::i;:::-;10213:29;10235:6;10213:29;:::i;:::-;10208:3;10204:39;10197:46;;9979:270;9889:360;;;;:::o;10255:364::-;10343:3;10371:39;10404:5;10371:39;:::i;:::-;10426:71;10490:6;10485:3;10426:71;:::i;:::-;10419:78;;10506:52;10551:6;10546:3;10539:4;10532:5;10528:16;10506:52;:::i;:::-;10583:29;10605:6;10583:29;:::i;:::-;10578:3;10574:39;10567:46;;10347:272;10255:364;;;;:::o;10625:377::-;10731:3;10759:39;10792:5;10759:39;:::i;:::-;10814:89;10896:6;10891:3;10814:89;:::i;:::-;10807:96;;10912:52;10957:6;10952:3;10945:4;10938:5;10934:16;10912:52;:::i;:::-;10989:6;10984:3;10980:16;10973:23;;10735:267;10625:377;;;;:::o;11008:366::-;11150:3;11171:67;11235:2;11230:3;11171:67;:::i;:::-;11164:74;;11247:93;11336:3;11247:93;:::i;:::-;11365:2;11360:3;11356:12;11349:19;;11008:366;;;:::o;11380:::-;11522:3;11543:67;11607:2;11602:3;11543:67;:::i;:::-;11536:74;;11619:93;11708:3;11619:93;:::i;:::-;11737:2;11732:3;11728:12;11721:19;;11380:366;;;:::o;11752:::-;11894:3;11915:67;11979:2;11974:3;11915:67;:::i;:::-;11908:74;;11991:93;12080:3;11991:93;:::i;:::-;12109:2;12104:3;12100:12;12093:19;;11752:366;;;:::o;12124:::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12124:366;;;:::o;12496:::-;12638:3;12659:67;12723:2;12718:3;12659:67;:::i;:::-;12652:74;;12735:93;12824:3;12735:93;:::i;:::-;12853:2;12848:3;12844:12;12837:19;;12496:366;;;:::o;12868:::-;13010:3;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13107:93;13196:3;13107:93;:::i;:::-;13225:2;13220:3;13216:12;13209:19;;12868:366;;;:::o;13240:::-;13382:3;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13479:93;13568:3;13479:93;:::i;:::-;13597:2;13592:3;13588:12;13581:19;;13240:366;;;:::o;13612:::-;13754:3;13775:67;13839:2;13834:3;13775:67;:::i;:::-;13768:74;;13851:93;13940:3;13851:93;:::i;:::-;13969:2;13964:3;13960:12;13953:19;;13612:366;;;:::o;13984:::-;14126:3;14147:67;14211:2;14206:3;14147:67;:::i;:::-;14140:74;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;13984:366;;;:::o;14356:::-;14498:3;14519:67;14583:2;14578:3;14519:67;:::i;:::-;14512:74;;14595:93;14684:3;14595:93;:::i;:::-;14713:2;14708:3;14704:12;14697:19;;14356:366;;;:::o;14728:::-;14870:3;14891:67;14955:2;14950:3;14891:67;:::i;:::-;14884:74;;14967:93;15056:3;14967:93;:::i;:::-;15085:2;15080:3;15076:12;15069:19;;14728:366;;;:::o;15100:::-;15242:3;15263:67;15327:2;15322:3;15263:67;:::i;:::-;15256:74;;15339:93;15428:3;15339:93;:::i;:::-;15457:2;15452:3;15448:12;15441:19;;15100:366;;;:::o;15472:::-;15614:3;15635:67;15699:2;15694:3;15635:67;:::i;:::-;15628:74;;15711:93;15800:3;15711:93;:::i;:::-;15829:2;15824:3;15820:12;15813:19;;15472:366;;;:::o;15844:::-;15986:3;16007:67;16071:2;16066:3;16007:67;:::i;:::-;16000:74;;16083:93;16172:3;16083:93;:::i;:::-;16201:2;16196:3;16192:12;16185:19;;15844:366;;;:::o;16216:::-;16358:3;16379:67;16443:2;16438:3;16379:67;:::i;:::-;16372:74;;16455:93;16544:3;16455:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16216:366;;;:::o;16588:::-;16730:3;16751:67;16815:2;16810:3;16751:67;:::i;:::-;16744:74;;16827:93;16916:3;16827:93;:::i;:::-;16945:2;16940:3;16936:12;16929:19;;16588:366;;;:::o;16960:::-;17102:3;17123:67;17187:2;17182:3;17123:67;:::i;:::-;17116:74;;17199:93;17288:3;17199:93;:::i;:::-;17317:2;17312:3;17308:12;17301:19;;16960:366;;;:::o;17332:::-;17474:3;17495:67;17559:2;17554:3;17495:67;:::i;:::-;17488:74;;17571:93;17660:3;17571:93;:::i;:::-;17689:2;17684:3;17680:12;17673:19;;17332:366;;;:::o;17704:::-;17846:3;17867:67;17931:2;17926:3;17867:67;:::i;:::-;17860:74;;17943:93;18032:3;17943:93;:::i;:::-;18061:2;18056:3;18052:12;18045:19;;17704:366;;;:::o;18076:::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:::-;18590:3;18611:67;18675:2;18670:3;18611:67;:::i;:::-;18604:74;;18687:93;18776:3;18687:93;:::i;:::-;18805:2;18800:3;18796:12;18789:19;;18448:366;;;:::o;18820:::-;18962:3;18983:67;19047:2;19042:3;18983:67;:::i;:::-;18976:74;;19059:93;19148:3;19059:93;:::i;:::-;19177:2;19172:3;19168:12;19161:19;;18820:366;;;:::o;19192:::-;19334:3;19355:67;19419:2;19414:3;19355:67;:::i;:::-;19348:74;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19192:366;;;:::o;19564:::-;19706:3;19727:67;19791:2;19786:3;19727:67;:::i;:::-;19720:74;;19803:93;19892:3;19803:93;:::i;:::-;19921:2;19916:3;19912:12;19905:19;;19564:366;;;:::o;19936:::-;20078:3;20099:67;20163:2;20158:3;20099:67;:::i;:::-;20092:74;;20175:93;20264:3;20175:93;:::i;:::-;20293:2;20288:3;20284:12;20277:19;;19936:366;;;:::o;20308:::-;20450:3;20471:67;20535:2;20530:3;20471:67;:::i;:::-;20464:74;;20547:93;20636:3;20547:93;:::i;:::-;20665:2;20660:3;20656:12;20649:19;;20308:366;;;:::o;20680:::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:::-;21938:3;21959:67;22023:2;22018:3;21959:67;:::i;:::-;21952:74;;22035:93;22124:3;22035:93;:::i;:::-;22153:2;22148:3;22144:12;22137:19;;21796:366;;;:::o;22168:::-;22310:3;22331:67;22395:2;22390:3;22331:67;:::i;:::-;22324:74;;22407:93;22496:3;22407:93;:::i;:::-;22525:2;22520:3;22516:12;22509:19;;22168:366;;;:::o;22540:::-;22682:3;22703:67;22767:2;22762:3;22703:67;:::i;:::-;22696:74;;22779:93;22868:3;22779:93;:::i;:::-;22897:2;22892:3;22888:12;22881:19;;22540:366;;;:::o;22912:115::-;22997:23;23014:5;22997:23;:::i;:::-;22992:3;22985:36;22912:115;;:::o;23033:108::-;23110:24;23128:5;23110:24;:::i;:::-;23105:3;23098:37;23033:108;;:::o;23147:118::-;23234:24;23252:5;23234:24;:::i;:::-;23229:3;23222:37;23147:118;;:::o;23271:115::-;23356:23;23373:5;23356:23;:::i;:::-;23351:3;23344:36;23271:115;;:::o;23392:435::-;23572:3;23594:95;23685:3;23676:6;23594:95;:::i;:::-;23587:102;;23706:95;23797:3;23788:6;23706:95;:::i;:::-;23699:102;;23818:3;23811:10;;23392:435;;;;;:::o;23833:222::-;23926:4;23964:2;23953:9;23949:18;23941:26;;23977:71;24045:1;24034:9;24030:17;24021:6;23977:71;:::i;:::-;23833:222;;;;:::o;24061:640::-;24256:4;24294:3;24283:9;24279:19;24271:27;;24308:71;24376:1;24365:9;24361:17;24352:6;24308:71;:::i;:::-;24389:72;24457:2;24446:9;24442:18;24433:6;24389:72;:::i;:::-;24471;24539:2;24528:9;24524:18;24515:6;24471:72;:::i;:::-;24590:9;24584:4;24580:20;24575:2;24564:9;24560:18;24553:48;24618:76;24689:4;24680:6;24618:76;:::i;:::-;24610:84;;24061:640;;;;;;;:::o;24707:332::-;24828:4;24866:2;24855:9;24851:18;24843:26;;24879:71;24947:1;24936:9;24932:17;24923:6;24879:71;:::i;:::-;24960:72;25028:2;25017:9;25013:18;25004:6;24960:72;:::i;:::-;24707:332;;;;;:::o;25045:328::-;25164:4;25202:2;25191:9;25187:18;25179:26;;25215:71;25283:1;25272:9;25268:17;25259:6;25215:71;:::i;:::-;25296:70;25362:2;25351:9;25347:18;25338:6;25296:70;:::i;:::-;25045:328;;;;;:::o;25379:373::-;25522:4;25560:2;25549:9;25545:18;25537:26;;25609:9;25603:4;25599:20;25595:1;25584:9;25580:17;25573:47;25637:108;25740:4;25731:6;25637:108;:::i;:::-;25629:116;;25379:373;;;;:::o;25758:210::-;25845:4;25883:2;25872:9;25868:18;25860:26;;25896:65;25958:1;25947:9;25943:17;25934:6;25896:65;:::i;:::-;25758:210;;;;:::o;25974:313::-;26087:4;26125:2;26114:9;26110:18;26102:26;;26174:9;26168:4;26164:20;26160:1;26149:9;26145:17;26138:47;26202:78;26275:4;26266:6;26202:78;:::i;:::-;26194:86;;25974:313;;;;:::o;26293:419::-;26459:4;26497:2;26486:9;26482:18;26474:26;;26546:9;26540:4;26536:20;26532:1;26521:9;26517:17;26510:47;26574:131;26700:4;26574:131;:::i;:::-;26566:139;;26293:419;;;:::o;26718:::-;26884:4;26922:2;26911:9;26907:18;26899:26;;26971:9;26965:4;26961:20;26957:1;26946:9;26942:17;26935:47;26999:131;27125:4;26999:131;:::i;:::-;26991:139;;26718:419;;;:::o;27143:::-;27309:4;27347:2;27336:9;27332:18;27324:26;;27396:9;27390:4;27386:20;27382:1;27371:9;27367:17;27360:47;27424:131;27550:4;27424:131;:::i;:::-;27416:139;;27143:419;;;:::o;27568:::-;27734:4;27772:2;27761:9;27757:18;27749:26;;27821:9;27815:4;27811:20;27807:1;27796:9;27792:17;27785:47;27849:131;27975:4;27849:131;:::i;:::-;27841:139;;27568:419;;;:::o;27993:::-;28159:4;28197:2;28186:9;28182:18;28174:26;;28246:9;28240:4;28236:20;28232:1;28221:9;28217:17;28210:47;28274:131;28400:4;28274:131;:::i;:::-;28266:139;;27993:419;;;:::o;28418:::-;28584:4;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28418:419;;;:::o;28843:::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:::-;29434:4;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29268:419;;;:::o;29693:::-;29859:4;29897:2;29886:9;29882:18;29874:26;;29946:9;29940:4;29936:20;29932:1;29921:9;29917:17;29910:47;29974:131;30100:4;29974:131;:::i;:::-;29966:139;;29693:419;;;:::o;30118:::-;30284:4;30322:2;30311:9;30307:18;30299:26;;30371:9;30365:4;30361:20;30357:1;30346:9;30342:17;30335:47;30399:131;30525:4;30399:131;:::i;:::-;30391:139;;30118:419;;;:::o;30543:::-;30709:4;30747:2;30736:9;30732:18;30724:26;;30796:9;30790:4;30786:20;30782:1;30771:9;30767:17;30760:47;30824:131;30950:4;30824:131;:::i;:::-;30816:139;;30543:419;;;:::o;30968:::-;31134:4;31172:2;31161:9;31157:18;31149:26;;31221:9;31215:4;31211:20;31207:1;31196:9;31192:17;31185:47;31249:131;31375:4;31249:131;:::i;:::-;31241:139;;30968:419;;;:::o;31393:::-;31559:4;31597:2;31586:9;31582:18;31574:26;;31646:9;31640:4;31636:20;31632:1;31621:9;31617:17;31610:47;31674:131;31800:4;31674:131;:::i;:::-;31666:139;;31393:419;;;:::o;31818:::-;31984:4;32022:2;32011:9;32007:18;31999:26;;32071:9;32065:4;32061:20;32057:1;32046:9;32042:17;32035:47;32099:131;32225:4;32099:131;:::i;:::-;32091:139;;31818:419;;;:::o;32243:::-;32409:4;32447:2;32436:9;32432:18;32424:26;;32496:9;32490:4;32486:20;32482:1;32471:9;32467:17;32460:47;32524:131;32650:4;32524:131;:::i;:::-;32516:139;;32243:419;;;:::o;32668:::-;32834:4;32872:2;32861:9;32857:18;32849:26;;32921:9;32915:4;32911:20;32907:1;32896:9;32892:17;32885:47;32949:131;33075:4;32949:131;:::i;:::-;32941:139;;32668:419;;;:::o;33093:::-;33259:4;33297:2;33286:9;33282:18;33274:26;;33346:9;33340:4;33336:20;33332:1;33321:9;33317:17;33310:47;33374:131;33500:4;33374:131;:::i;:::-;33366:139;;33093:419;;;:::o;33518:::-;33684:4;33722:2;33711:9;33707:18;33699:26;;33771:9;33765:4;33761:20;33757:1;33746:9;33742:17;33735:47;33799:131;33925:4;33799:131;:::i;:::-;33791:139;;33518:419;;;:::o;33943:::-;34109:4;34147:2;34136:9;34132:18;34124:26;;34196:9;34190:4;34186:20;34182:1;34171:9;34167:17;34160:47;34224:131;34350:4;34224:131;:::i;:::-;34216:139;;33943:419;;;:::o;34368:::-;34534:4;34572:2;34561:9;34557:18;34549:26;;34621:9;34615:4;34611:20;34607:1;34596:9;34592:17;34585:47;34649:131;34775:4;34649:131;:::i;:::-;34641:139;;34368:419;;;:::o;34793:::-;34959:4;34997:2;34986:9;34982:18;34974:26;;35046:9;35040:4;35036:20;35032:1;35021:9;35017:17;35010:47;35074:131;35200:4;35074:131;:::i;:::-;35066:139;;34793:419;;;:::o;35218:::-;35384:4;35422:2;35411:9;35407:18;35399:26;;35471:9;35465:4;35461:20;35457:1;35446:9;35442:17;35435:47;35499:131;35625:4;35499:131;:::i;:::-;35491:139;;35218:419;;;:::o;35643:::-;35809:4;35847:2;35836:9;35832:18;35824:26;;35896:9;35890:4;35886:20;35882:1;35871:9;35867:17;35860:47;35924:131;36050:4;35924:131;:::i;:::-;35916:139;;35643:419;;;:::o;36068:::-;36234:4;36272:2;36261:9;36257:18;36249:26;;36321:9;36315:4;36311:20;36307:1;36296:9;36292:17;36285:47;36349:131;36475:4;36349:131;:::i;:::-;36341:139;;36068:419;;;:::o;36493:::-;36659:4;36697:2;36686:9;36682:18;36674:26;;36746:9;36740:4;36736:20;36732:1;36721:9;36717:17;36710:47;36774:131;36900:4;36774:131;:::i;:::-;36766:139;;36493:419;;;:::o;36918:::-;37084:4;37122:2;37111:9;37107:18;37099:26;;37171:9;37165:4;37161:20;37157:1;37146:9;37142:17;37135:47;37199:131;37325:4;37199:131;:::i;:::-;37191:139;;36918:419;;;:::o;37343:::-;37509:4;37547:2;37536:9;37532:18;37524:26;;37596:9;37590:4;37586:20;37582:1;37571:9;37567:17;37560:47;37624:131;37750:4;37624:131;:::i;:::-;37616:139;;37343:419;;;:::o;37768:::-;37934:4;37972:2;37961:9;37957:18;37949:26;;38021:9;38015:4;38011:20;38007:1;37996:9;37992:17;37985:47;38049:131;38175:4;38049:131;:::i;:::-;38041:139;;37768:419;;;:::o;38193:::-;38359:4;38397:2;38386:9;38382:18;38374:26;;38446:9;38440:4;38436:20;38432:1;38421:9;38417:17;38410:47;38474:131;38600:4;38474:131;:::i;:::-;38466:139;;38193:419;;;:::o;38618:::-;38784:4;38822:2;38811:9;38807:18;38799:26;;38871:9;38865:4;38861:20;38857:1;38846:9;38842:17;38835:47;38899:131;39025:4;38899:131;:::i;:::-;38891:139;;38618:419;;;:::o;39043:::-;39209:4;39247:2;39236:9;39232:18;39224:26;;39296:9;39290:4;39286:20;39282:1;39271:9;39267:17;39260:47;39324:131;39450:4;39324:131;:::i;:::-;39316:139;;39043:419;;;:::o;39468:::-;39634:4;39672:2;39661:9;39657:18;39649:26;;39721:9;39715:4;39711:20;39707:1;39696:9;39692:17;39685:47;39749:131;39875:4;39749:131;:::i;:::-;39741:139;;39468:419;;;:::o;39893:218::-;39984:4;40022:2;40011:9;40007:18;39999:26;;40035:69;40101:1;40090:9;40086:17;40077:6;40035:69;:::i;:::-;39893:218;;;;:::o;40117:222::-;40210:4;40248:2;40237:9;40233:18;40225:26;;40261:71;40329:1;40318:9;40314:17;40305:6;40261:71;:::i;:::-;40117:222;;;;:::o;40345:332::-;40466:4;40504:2;40493:9;40489:18;40481:26;;40517:71;40585:1;40574:9;40570:17;40561:6;40517:71;:::i;:::-;40598:72;40666:2;40655:9;40651:18;40642:6;40598:72;:::i;:::-;40345:332;;;;;:::o;40683:129::-;40717:6;40744:20;;:::i;:::-;40734:30;;40773:33;40801:4;40793:6;40773:33;:::i;:::-;40683:129;;;:::o;40818:75::-;40851:6;40884:2;40878:9;40868:19;;40818:75;:::o;40899:307::-;40960:4;41050:18;41042:6;41039:30;41036:56;;;41072:18;;:::i;:::-;41036:56;41110:29;41132:6;41110:29;:::i;:::-;41102:37;;41194:4;41188;41184:15;41176:23;;40899:307;;;:::o;41212:132::-;41279:4;41302:3;41294:11;;41332:4;41327:3;41323:14;41315:22;;41212:132;;;:::o;41350:114::-;41417:6;41451:5;41445:12;41435:22;;41350:114;;;:::o;41470:98::-;41521:6;41555:5;41549:12;41539:22;;41470:98;;;:::o;41574:99::-;41626:6;41660:5;41654:12;41644:22;;41574:99;;;:::o;41679:113::-;41749:4;41781;41776:3;41772:14;41764:22;;41679:113;;;:::o;41798:184::-;41897:11;41931:6;41926:3;41919:19;41971:4;41966:3;41962:14;41947:29;;41798:184;;;;:::o;41988:168::-;42071:11;42105:6;42100:3;42093:19;42145:4;42140:3;42136:14;42121:29;;41988:168;;;;:::o;42162:169::-;42246:11;42280:6;42275:3;42268:19;42320:4;42315:3;42311:14;42296:29;;42162:169;;;;:::o;42337:148::-;42439:11;42476:3;42461:18;;42337:148;;;;:::o;42491:305::-;42531:3;42550:20;42568:1;42550:20;:::i;:::-;42545:25;;42584:20;42602:1;42584:20;:::i;:::-;42579:25;;42738:1;42670:66;42666:74;42663:1;42660:81;42657:107;;;42744:18;;:::i;:::-;42657:107;42788:1;42785;42781:9;42774:16;;42491:305;;;;:::o;42802:185::-;42842:1;42859:20;42877:1;42859:20;:::i;:::-;42854:25;;42893:20;42911:1;42893:20;:::i;:::-;42888:25;;42932:1;42922:35;;42937:18;;:::i;:::-;42922:35;42979:1;42976;42972:9;42967:14;;42802:185;;;;:::o;42993:348::-;43033:7;43056:20;43074:1;43056:20;:::i;:::-;43051:25;;43090:20;43108:1;43090:20;:::i;:::-;43085:25;;43278:1;43210:66;43206:74;43203:1;43200:81;43195:1;43188:9;43181:17;43177:105;43174:131;;;43285:18;;:::i;:::-;43174:131;43333:1;43330;43326:9;43315:20;;42993:348;;;;:::o;43347:188::-;43386:4;43406:19;43423:1;43406:19;:::i;:::-;43401:24;;43439:19;43456:1;43439:19;:::i;:::-;43434:24;;43477:1;43474;43471:8;43468:34;;;43482:18;;:::i;:::-;43468:34;43527:1;43524;43520:9;43512:17;;43347:188;;;;:::o;43541:191::-;43581:4;43601:20;43619:1;43601:20;:::i;:::-;43596:25;;43635:20;43653:1;43635:20;:::i;:::-;43630:25;;43674:1;43671;43668:8;43665:34;;;43679:18;;:::i;:::-;43665:34;43724:1;43721;43717:9;43709:17;;43541:191;;;;:::o;43738:96::-;43775:7;43804:24;43822:5;43804:24;:::i;:::-;43793:35;;43738:96;;;:::o;43840:90::-;43874:7;43917:5;43910:13;43903:21;43892:32;;43840:90;;;:::o;43936:149::-;43972:7;44012:66;44005:5;44001:78;43990:89;;43936:149;;;:::o;44091:89::-;44127:7;44167:6;44160:5;44156:18;44145:29;;44091:89;;;:::o;44186:126::-;44223:7;44263:42;44256:5;44252:54;44241:65;;44186:126;;;:::o;44318:77::-;44355:7;44384:5;44373:16;;44318:77;;;:::o;44401:109::-;44437:7;44477:26;44470:5;44466:38;44455:49;;44401:109;;;:::o;44516:154::-;44600:6;44595:3;44590;44577:30;44662:1;44653:6;44648:3;44644:16;44637:27;44516:154;;;:::o;44676:307::-;44744:1;44754:113;44768:6;44765:1;44762:13;44754:113;;;44853:1;44848:3;44844:11;44838:18;44834:1;44829:3;44825:11;44818:39;44790:2;44787:1;44783:10;44778:15;;44754:113;;;44885:6;44882:1;44879:13;44876:101;;;44965:1;44956:6;44951:3;44947:16;44940:27;44876:101;44725:258;44676:307;;;:::o;44989:320::-;45033:6;45070:1;45064:4;45060:12;45050:22;;45117:1;45111:4;45107:12;45138:18;45128:81;;45194:4;45186:6;45182:17;45172:27;;45128:81;45256:2;45248:6;45245:14;45225:18;45222:38;45219:84;;;45275:18;;:::i;:::-;45219:84;45040:269;44989:320;;;:::o;45315:281::-;45398:27;45420:4;45398:27;:::i;:::-;45390:6;45386:40;45528:6;45516:10;45513:22;45492:18;45480:10;45477:34;45474:62;45471:88;;;45539:18;;:::i;:::-;45471:88;45579:10;45575:2;45568:22;45358:238;45315:281;;:::o;45602:233::-;45641:3;45664:24;45682:5;45664:24;:::i;:::-;45655:33;;45710:66;45703:5;45700:77;45697:103;;;45780:18;;:::i;:::-;45697:103;45827:1;45820:5;45816:13;45809:20;;45602:233;;;:::o;45841:176::-;45873:1;45890:20;45908:1;45890:20;:::i;:::-;45885:25;;45924:20;45942:1;45924:20;:::i;:::-;45919:25;;45963:1;45953:35;;45968:18;;:::i;:::-;45953:35;46009:1;46006;46002:9;45997:14;;45841:176;;;;:::o;46023:180::-;46071:77;46068:1;46061:88;46168:4;46165:1;46158:15;46192:4;46189:1;46182:15;46209:180;46257:77;46254:1;46247:88;46354:4;46351:1;46344:15;46378:4;46375:1;46368:15;46395:180;46443:77;46440:1;46433:88;46540:4;46537:1;46530:15;46564:4;46561:1;46554:15;46581:180;46629:77;46626:1;46619:88;46726:4;46723:1;46716:15;46750:4;46747:1;46740:15;46767:180;46815:77;46812:1;46805:88;46912:4;46909:1;46902:15;46936:4;46933:1;46926:15;46953:117;47062:1;47059;47052:12;47076:117;47185:1;47182;47175:12;47199:117;47308:1;47305;47298:12;47322:117;47431:1;47428;47421:12;47445:117;47554:1;47551;47544:12;47568:117;47677:1;47674;47667:12;47691:102;47732:6;47783:2;47779:7;47774:2;47767:5;47763:14;47759:28;47749:38;;47691:102;;;:::o;47799:177::-;47939:29;47935:1;47927:6;47923:14;47916:53;47799:177;:::o;47982:225::-;48122:34;48118:1;48110:6;48106:14;48099:58;48191:8;48186:2;48178:6;48174:15;48167:33;47982:225;:::o;48213:237::-;48353:34;48349:1;48341:6;48337:14;48330:58;48422:20;48417:2;48409:6;48405:15;48398:45;48213:237;:::o;48456:220::-;48596:34;48592:1;48584:6;48580:14;48573:58;48665:3;48660:2;48652:6;48648:15;48641:28;48456:220;:::o;48682:225::-;48822:34;48818:1;48810:6;48806:14;48799:58;48891:8;48886:2;48878:6;48874:15;48867:33;48682:225;:::o;48913:::-;49053:34;49049:1;49041:6;49037:14;49030:58;49122:8;49117:2;49109:6;49105:15;49098:33;48913:225;:::o;49144:178::-;49284:30;49280:1;49272:6;49268:14;49261:54;49144:178;:::o;49328:223::-;49468:34;49464:1;49456:6;49452:14;49445:58;49537:6;49532:2;49524:6;49520:15;49513:31;49328:223;:::o;49557:175::-;49697:27;49693:1;49685:6;49681:14;49674:51;49557:175;:::o;49738:233::-;49878:34;49874:1;49866:6;49862:14;49855:58;49947:16;49942:2;49934:6;49930:15;49923:41;49738:233;:::o;49977:231::-;50117:34;50113:1;50105:6;50101:14;50094:58;50186:14;50181:2;50173:6;50169:15;50162:39;49977:231;:::o;50214:220::-;50354:34;50350:1;50342:6;50338:14;50331:58;50423:3;50418:2;50410:6;50406:15;50399:28;50214:220;:::o;50440:180::-;50580:32;50576:1;50568:6;50564:14;50557:56;50440:180;:::o;50626:243::-;50766:34;50762:1;50754:6;50750:14;50743:58;50835:26;50830:2;50822:6;50818:15;50811:51;50626:243;:::o;50875:229::-;51015:34;51011:1;51003:6;50999:14;50992:58;51084:12;51079:2;51071:6;51067:15;51060:37;50875:229;:::o;51110:228::-;51250:34;51246:1;51238:6;51234:14;51227:58;51319:11;51314:2;51306:6;51302:15;51295:36;51110:228;:::o;51344:182::-;51484:34;51480:1;51472:6;51468:14;51461:58;51344:182;:::o;51532:220::-;51672:34;51668:1;51660:6;51656:14;51649:58;51741:3;51736:2;51728:6;51724:15;51717:28;51532:220;:::o;51758:182::-;51898:34;51894:1;51886:6;51882:14;51875:58;51758:182;:::o;51946:231::-;52086:34;52082:1;52074:6;52070:14;52063:58;52155:14;52150:2;52142:6;52138:15;52131:39;51946:231;:::o;52183:182::-;52323:34;52319:1;52311:6;52307:14;52300:58;52183:182;:::o;52371:228::-;52511:34;52507:1;52499:6;52495:14;52488:58;52580:11;52575:2;52567:6;52563:15;52556:36;52371:228;:::o;52605:180::-;52745:32;52741:1;52733:6;52729:14;52722:56;52605:180;:::o;52791:170::-;52931:22;52927:1;52919:6;52915:14;52908:46;52791:170;:::o;52967:301::-;53107:34;53103:1;53095:6;53091:14;53084:58;53176:34;53171:2;53163:6;53159:15;53152:59;53245:15;53240:2;53232:6;53228:15;53221:40;52967:301;:::o;53274:220::-;53414:34;53410:1;53402:6;53398:14;53391:58;53483:3;53478:2;53470:6;53466:15;53459:28;53274:220;:::o;53500:229::-;53640:34;53636:1;53628:6;53624:14;53617:58;53709:12;53704:2;53696:6;53692:15;53685:37;53500:229;:::o;53735:236::-;53875:34;53871:1;53863:6;53859:14;53852:58;53944:19;53939:2;53931:6;53927:15;53920:44;53735:236;:::o;53977:231::-;54117:34;54113:1;54105:6;54101:14;54094:58;54186:14;54181:2;54173:6;54169:15;54162:39;53977:231;:::o;54214:229::-;54354:34;54350:1;54342:6;54338:14;54331:58;54423:12;54418:2;54410:6;54406:15;54399:37;54214:229;:::o;54449:236::-;54589:34;54585:1;54577:6;54573:14;54566:58;54658:19;54653:2;54645:6;54641:15;54634:44;54449:236;:::o;54691:170::-;54831:22;54827:1;54819:6;54815:14;54808:46;54691:170;:::o;54867:122::-;54940:24;54958:5;54940:24;:::i;:::-;54933:5;54930:35;54920:63;;54979:1;54976;54969:12;54920:63;54867:122;:::o;54995:116::-;55065:21;55080:5;55065:21;:::i;:::-;55058:5;55055:32;55045:60;;55101:1;55098;55091:12;55045:60;54995:116;:::o;55117:120::-;55189:23;55206:5;55189:23;:::i;:::-;55182:5;55179:34;55169:62;;55227:1;55224;55217:12;55169:62;55117:120;:::o;55243:122::-;55316:24;55334:5;55316:24;:::i;:::-;55309:5;55306:35;55296:63;;55355:1;55352;55345:12;55296:63;55243:122;:::o;55371:120::-;55443:23;55460:5;55443:23;:::i;:::-;55436:5;55433:34;55423:62;;55481:1;55478;55471:12;55423:62;55371:120;:::o
Swarm Source
ipfs://e5ee05307ff4409d952776a7039c05b61b79b09dd35ad2b4240ae5cf173d94e6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.