Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.016000000000000014 ETH
Eth Value
$37.14 (@ $2,321.05/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 31 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 20546258 | 577 days ago | IN | 0 ETH | 0.00004649 | ||||
| Set Approval For... | 12893188 | 1696 days ago | IN | 0 ETH | 0.00070087 | ||||
| Transfer | 12852801 | 1702 days ago | IN | 0.0016 ETH | 0.00448367 | ||||
| Transfer | 12817516 | 1708 days ago | IN | 0.0016 ETH | 0.00513318 | ||||
| Transfer | 12817511 | 1708 days ago | IN | 0.0016 ETH | 0.00513318 | ||||
| Transfer | 12817445 | 1708 days ago | IN | 0.0016 ETH | 0.00509369 | ||||
| Transfer | 12817366 | 1708 days ago | IN | 0.0016 ETH | 0.00501669 | ||||
| Transfer | 12817326 | 1708 days ago | IN | 0.0016 ETH | 0.00514872 | ||||
| Transfer | 12602539 | 1741 days ago | IN | 0.0016 ETH | 0.00386154 | ||||
| Transfer | 12582967 | 1744 days ago | IN | 0.0016 ETH | 0.00217173 | ||||
| Transfer | 12582892 | 1744 days ago | IN | 0.0016 ETH | 0.00235983 | ||||
| Set Approval For... | 12574605 | 1745 days ago | IN | 0 ETH | 0.0005607 | ||||
| Transfer | 12521844 | 1754 days ago | IN | 0.0016 ETH | 0.00426448 | ||||
| Transfer | 12516924 | 1754 days ago | IN | 1 wei | 0.01070652 | ||||
| Transfer From | 12514642 | 1755 days ago | IN | 0 ETH | 0.00123908 | ||||
| Transfer | 12514493 | 1755 days ago | IN | 1 wei | 0.00667652 | ||||
| Transfer | 12514485 | 1755 days ago | IN | 1 wei | 0.000672 | ||||
| Transfer | 12514426 | 1755 days ago | IN | 1 wei | 0.00609177 | ||||
| Transfer | 12495496 | 1758 days ago | IN | 1 wei | 0.00747137 | ||||
| Transfer | 12484471 | 1759 days ago | IN | 1 wei | 0.00953412 | ||||
| Set Approval For... | 12483524 | 1759 days ago | IN | 0 ETH | 0.00167742 | ||||
| Transfer | 12483502 | 1759 days ago | IN | 1 wei | 0.00819059 | ||||
| Transfer | 12462203 | 1763 days ago | IN | 1 wei | 0.02614345 | ||||
| Transfer | 12460151 | 1763 days ago | IN | 1 wei | 0.01806722 | ||||
| Transfer | 12457347 | 1764 days ago | IN | 1 wei | 0.01514468 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XonaRobotics
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.8.0;
import "./ERC721URIStorage.sol";
contract XonaRobotics is ERC721URIStorage {
uint8 public constant version = 1;
address public OWNER1;
address public owner2 = 0x48122D8Fa6D9F24DD27906e4221b8d1beE16e006;
uint public SMART_CONTRACT_RELEASE_BY_UNIXTIME;
uint32 public constant MAX_ROBOTS = 1000000;
string public base_url = "https://ipfs.xonalabs.com/ipfs/";
string public json_ipfs_id = "QmWtVoyFgeKJLTFdnbzUPHDhQJmTjbyuf26oRxu2gANghJ";
uint32 public robots_counter;
address[] public free_phase_addresses;
bool public project_paused = false;
uint256 private FREE_CLAIM_10_DAYS_IN_SECONDS = 864000;
uint256 public free_claim_end_timestamp;
uint256 public phase1_fee = 0.000000000000000001 ether;
uint256 public phase2_fee = 0.0016 ether;
uint256 public phase3_fee = 0.0049 ether;
constructor() ERC721("XonaRobotics", "XROB") {
OWNER1 = msg.sender;
SMART_CONTRACT_RELEASE_BY_UNIXTIME = block.timestamp;
robots_counter = 0;
free_claim_end_timestamp = FREE_CLAIM_10_DAYS_IN_SECONDS + SMART_CONTRACT_RELEASE_BY_UNIXTIME;
}
event SubscibePayments(
uint32 indexed id,
address indexed user,
uint256 indexed date,
uint256 amount
);
function contractURI() public view returns (string memory) {
string memory url = string(abi.encodePacked(base_url, json_ipfs_id, "/", "about", ".json"));
return url; // should redirect or return the about.json
}
function create_robot() internal returns (uint32) {
robots_counter++;
uint32 new_item_id = robots_counter;
string memory tokenuri = string(abi.encodePacked(base_url, json_ipfs_id, "/", uint2str(new_item_id), ".json"));
_safeMint(msg.sender, new_item_id);
_setTokenURI(new_item_id, tokenuri);
return new_item_id;
}
function change_OWNER2(address _newaddr) public is_owner {
owner2 = _newaddr;
}
function change_BASE_URL(string memory _url) public is_owner {
base_url = _url;
}
function change_IPFS_ID(string memory _ipfsid) public is_owner {
json_ipfs_id = _ipfsid;
}
function suspend_project(bool _param) public is_owner {
project_paused = _param;
}
function get_balance() public view returns (uint) {
return address(this).balance;
}
function append_address_if_free_phase(address addr) internal {
if (robots_counter < 10000) {
free_phase_addresses.push(addr);
}
}
function check_if_address_included_in_free_phase(address addr) internal view returns (bool) {
for (uint16 i; i<free_phase_addresses.length; i++) {
if (free_phase_addresses[i] == addr) {
return true;
}
}
return false;
}
function change_PHASE1_FEE(uint256 _new) public is_owner {
phase1_fee = _new;
}
function change_PHASE2_FEE(uint256 _new) public is_owner {
phase2_fee = _new;
}
function change_PHASE3_FEE(uint256 _new) public is_owner {
phase3_fee = _new;
}
function payout(address payable _addr) public is_owner {
_addr.transfer(address(this).balance);
}
function check_the_mint_phase_fee() internal {
if (robots_counter >= 0 && robots_counter < 10000 && free_claim_end_timestamp > block.timestamp) {
require (msg.value >= phase1_fee, "The ether amount is not enough to buy a robot! Phase1 (FREE)");
bool claim_status = check_if_address_included_in_free_phase(msg.sender);
require (claim_status == false, "This address already minted a free robot! Phase1 (FREE)");
}
else if (robots_counter >= 0 && robots_counter < 190000) {
require (msg.value >= phase2_fee, "The ether amount is not enough to buy a robot! Phase2");
}
else if (robots_counter >= 190000 && robots_counter < MAX_ROBOTS) {
require (msg.value >= phase3_fee, "The ether amount is not enough to buy a robot! Phase3");
}
else {
require (msg.value >= 999 ether, "This statement will be never reached :)");
}
}
function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len;
while (_i != 0) {
k = k-1;
uint8 temp = (48 + uint8(_i - _i / 10 * 10));
bytes1 b1 = bytes1(temp);
bstr[k] = b1;
_i /= 10;
}
return string(bstr);
}
receive() external
pause_project
check_if_max_robots_count_not_reached
payable {
check_the_mint_phase_fee();
append_address_if_free_phase(msg.sender);
create_robot();
emit SubscibePayments(robots_counter, msg.sender, block.timestamp, msg.value);
}
modifier check_if_max_robots_count_not_reached() {
require(robots_counter < MAX_ROBOTS, "The XonaRobotics buy period ended! 1M robots count reached.");
_;
}
modifier pause_project() {
require (project_paused == false, "Project owners suspended the project, sorry for the inconvenience");
_;
}
modifier is_owner() {
require(msg.sender == OWNER1 || msg.sender == owner2, "Caller is not smart contract owner");
_;
}
}
// SPDX-License-Identifier: MIT
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;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @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;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./ERC165.sol";
import "./Context.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping (uint256 => address) private _owners;
// Mapping owner address to token count
mapping (address => uint256) private _balances;
// Mapping from token ID to approved address
mapping (uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping (address => mapping (address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor (string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC721).interfaceId
|| interfaceId == type(IERC721Metadata).interfaceId
|| super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: '';
}
/**
* @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
* in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(address from, address to, uint256 tokenId) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
_mint(to, tokenId);
require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(address from, address to, uint256 tokenId) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
private returns (bool)
{
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
// solhint-disable-next-line no-inline-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./ERC721.sol";
import "./Context.sol";
/**
* @title ERC721 Burnable Token
* @dev ERC721 Token that can be irreversibly burned (destroyed).
*/
abstract contract ERC721Burnable is Context, ERC721 {
/**
* @dev Burns `tokenId`. See {ERC721-_burn}.
*
* Requirements:
*
* - The caller must own `tokenId` or be an approved operator.
*/
function burn(uint256 tokenId) public virtual {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
_burn(tokenId);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./ERC721.sol";
import "./IERC721Enumerable.sol";
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId
|| super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC721Receiver.sol";
/**
* @dev Implementation of the {IERC721Receiver} interface.
*
* Accepts all token transfers.
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
*/
contract ERC721Holder is IERC721Receiver {
/**
* @dev See {IERC721Receiver-onERC721Received}.
*
* Always returns `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./ERC721.sol";
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
mapping (uint256 => string) private _tokenURIs;
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseURI();
// If there is no base URI, return the token URI.
if (bytes(base).length == 0) {
return _tokenURI;
}
// If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.tokenURI(tokenId);
}
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @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 override {
super._burn(tokenId);
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// SPDX-License-Identifier: MIT
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);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @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;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC721.sol";
/**
* @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);
}
// SPDX-License-Identifier: MIT
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);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant alphabet = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = alphabet[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"id","type":"uint32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SubscibePayments","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_ROBOTS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SMART_CONTRACT_RELEASE_BY_UNIXTIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base_url","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_url","type":"string"}],"name":"change_BASE_URL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ipfsid","type":"string"}],"name":"change_IPFS_ID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddr","type":"address"}],"name":"change_OWNER2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"change_PHASE1_FEE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"change_PHASE2_FEE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"change_PHASE3_FEE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"free_claim_end_timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"free_phase_addresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_balance","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":[],"name":"json_ipfs_id","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner2","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 payable","name":"_addr","type":"address"}],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"phase1_fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase2_fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase3_fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"project_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"robots_counter","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_param","type":"bool"}],"name":"suspend_project","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040527348122d8fa6d9f24dd27906e4221b8d1bee16e006600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601f81526020017f68747470733a2f2f697066732e786f6e616c6162732e636f6d2f697066732f00815250600a9080519060200190620000a69291906200024c565b506040518060600160405280602e815260200162004ff9602e9139600b9080519060200190620000d89291906200024c565b506000600e60006101000a81548160ff021916908315150217905550620d2f00600f5560016011556605af3107a4000060125566116886276640006013553480156200012357600080fd5b506040518060400160405280600c81526020017f586f6e61526f626f7469637300000000000000000000000000000000000000008152506040518060400160405280600481526020017f58524f42000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001a89291906200024c565b508060019080519060200190620001c19291906200024c565b50505033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426009819055506000600c60006101000a81548163ffffffff021916908363ffffffff160217905550600954600f54620002409190620002fc565b601081905550620003f7565b8280546200025a9062000363565b90600052602060002090601f0160209004810192826200027e5760008555620002ca565b82601f106200029957805160ff1916838001178555620002ca565b82800160010185558215620002ca579182015b82811115620002c9578251825591602001919060010190620002ac565b5b509050620002d99190620002dd565b5090565b5b80821115620002f8576000816000905550600101620002de565b5090565b6000620003098262000359565b9150620003168362000359565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200034e576200034d62000399565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200037c57607f821691505b60208210811415620003935762000392620003c8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614bf280620004076000396000f3fe60806040526004361061021e5760003560e01c80636a72b79d11610123578063b88d4fde116100ab578063e66df1dd1161006f578063e66df1dd14610919578063e6edf0ff14610944578063e8a3d4851461096d578063e985e9c514610998578063fb83b763146109d557610360565b8063b88d4fde14610832578063c1cfb99a1461085b578063c87b56dd14610886578063d47bf336146108c3578063e3a5c53b146108ee57610360565b80639fe65313116100f25780639fe6531314610761578063a22cb4651461078a578063a8c9739d146107b3578063ac49c272146107de578063b6c8a9c31461080757610360565b80636a72b79d146106a557806370a08231146106ce5780637cc4370a1461070b57806395d89b411461073657610360565b80633489b2c0116101a6578063491195151161017557806349119515146105be5780634fd61e24146105e7578063527097251461061257806354fd4d501461063d5780636352211e1461066857610360565b80633489b2c0146105025780633b6495c01461052d5780633ba5fc7c1461055857806342842e0e1461059557610360565b8063095ea7b3116101ed578063095ea7b3146104335780630b7e9c441461045c578063176296ef1461048557806323b872dd146104ae57806333a1bb26146104d757610360565b806301ffc9a71461036557806302c378a8146103a257806306fdde03146103cb578063081812fc146103f657610360565b366103605760001515600e60009054906101000a900460ff16151514610279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027090613c41565b60405180910390fd5b620f424063ffffffff16600c60009054906101000a900463ffffffff1663ffffffff16106102dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d390613e21565b60405180910390fd5b6102e4610a00565b6102ed33610c70565b6102f5610cf9565b50423373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900463ffffffff1663ffffffff167fd5e3b8f1b84b81319ce17c7afa770933cc7a6db4aeb9fddc88cbd78536a98ec5346040516103569190613e41565b60405180910390a4005b600080fd5b34801561037157600080fd5b5061038c60048036038101906103879190613413565b610db3565b6040516103999190613b04565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906134a6565b610e95565b005b3480156103d757600080fd5b506103e0610f87565b6040516103ed9190613b1f565b60405180910390f35b34801561040257600080fd5b5061041d600480360381019061041891906134a6565b611019565b60405161042a9190613a9d565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906133ae565b61109e565b005b34801561046857600080fd5b50610483600480360381019061047e9190613243565b6111b6565b005b34801561049157600080fd5b506104ac60048036038101906104a791906134a6565b6112e8565b005b3480156104ba57600080fd5b506104d560048036038101906104d091906132a8565b6113da565b005b3480156104e357600080fd5b506104ec61143a565b6040516104f99190613b1f565b60405180910390f35b34801561050e57600080fd5b506105176114c8565b6040516105249190613a9d565b60405180910390f35b34801561053957600080fd5b506105426114ee565b60405161054f9190613e41565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906134a6565b6114f4565b60405161058c9190613a9d565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906132a8565b611533565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061321a565b611553565b005b3480156105f357600080fd5b506105fc61167f565b6040516106099190613e5c565b60405180910390f35b34801561061e57600080fd5b50610627611695565b6040516106349190613a9d565b60405180910390f35b34801561064957600080fd5b506106526116bb565b60405161065f9190613e77565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906134a6565b6116c0565b60405161069c9190613a9d565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613465565b611772565b005b3480156106da57600080fd5b506106f560048036038101906106f0919061321a565b611874565b6040516107029190613e41565b60405180910390f35b34801561071757600080fd5b5061072061192c565b60405161072d9190613b04565b60405180910390f35b34801561074257600080fd5b5061074b61193f565b6040516107589190613b1f565b60405180910390f35b34801561076d57600080fd5b50610788600480360381019061078391906133ea565b6119d1565b005b34801561079657600080fd5b506107b160048036038101906107ac9190613372565b611ad6565b005b3480156107bf57600080fd5b506107c8611c57565b6040516107d59190613e41565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906134a6565b611c5d565b005b34801561081357600080fd5b5061081c611d4f565b6040516108299190613e41565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132f7565b611d55565b005b34801561086757600080fd5b50610870611db7565b60405161087d9190613e41565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906134a6565b611dbf565b6040516108ba9190613b1f565b60405180910390f35b3480156108cf57600080fd5b506108d8611f11565b6040516108e59190613e41565b60405180910390f35b3480156108fa57600080fd5b50610903611f17565b6040516109109190613e5c565b60405180910390f35b34801561092557600080fd5b5061092e611f1e565b60405161093b9190613b1f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613465565b611fac565b005b34801561097957600080fd5b506109826120ae565b60405161098f9190613b1f565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba919061326c565b6120df565b6040516109cc9190613b04565b60405180910390f35b3480156109e157600080fd5b506109ea612173565b6040516109f79190613e41565b60405180910390f35b6000600c60009054906101000a900463ffffffff1663ffffffff1610158015610a425750612710600c60009054906101000a900463ffffffff1663ffffffff16105b8015610a4f575042601054115b15610af357601154341015610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613e01565b60405180910390fd5b6000610aa433612179565b90506000151581151514610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613d61565b60405180910390fd5b50610c6e565b6000600c60009054906101000a900463ffffffff1663ffffffff1610158015610b3657506202e630600c60009054906101000a900463ffffffff1663ffffffff16105b15610b8557601254341015610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613b61565b60405180910390fd5b610c6d565b6202e630600c60009054906101000a900463ffffffff1663ffffffff1610158015610bd05750620f424063ffffffff16600c60009054906101000a900463ffffffff1663ffffffff16105b15610c1f57601354341015610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613c01565b60405180910390fd5b610c6c565b683627e8f712373c0000341015610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613ce1565b60405180910390fd5b5b5b5b565b612710600c60009054906101000a900463ffffffff1663ffffffff161015610cf657600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600c600081819054906101000a900463ffffffff1680929190610d1d90614287565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000600c60009054906101000a900463ffffffff1690506000600a600b610d688463ffffffff16612252565b604051602001610d7a93929190613a11565b6040516020818303038152906040529050610d9b338363ffffffff16612427565b610dab8263ffffffff1682612445565b819250505090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e7e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e8e5750610e8d826124b9565b5b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f3e5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613ba1565b60405180910390fd5b8060128190555050565b606060008054610f96906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc2906141b0565b801561100f5780601f10610fe45761010080835404028352916020019161100f565b820191906000526020600020905b815481529060010190602001808311610ff257829003601f168201915b5050505050905090565b600061102482612523565b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90613d41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006110a9826116c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613dc1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661113961258f565b73ffffffffffffffffffffffffffffffffffffffff16148061116857506111678161116261258f565b6120df565b5b6111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613c61565b60405180910390fd5b6111b18383612597565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061125f5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613ba1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112e4573d6000803e3d6000fd5b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113915750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613ba1565b60405180910390fd5b8060138190555050565b6113eb6113e561258f565b82612650565b61142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190613de1565b60405180910390fd5b61143583838361272e565b505050565b600a8054611447906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611473906141b0565b80156114c05780601f10611495576101008083540402835291602001916114c0565b820191906000526020600020905b8154815290600101906020018083116114a357829003601f168201915b505050505081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d818154811061150457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61154e83838360405180602001604052806000815250611d55565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115fc5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613ba1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900463ffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613ca1565b60405180910390fd5b80915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061181b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613ba1565b60405180910390fd5b80600a9080519060200190611870929190613029565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90613c81565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60009054906101000a900460ff1681565b60606001805461194e906141b0565b80601f016020809104026020016040519081016040528092919081815260200182805461197a906141b0565b80156119c75780601f1061199c576101008083540402835291602001916119c7565b820191906000526020600020905b8154815290600101906020018083116119aa57829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a7a5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090613ba1565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b611ade61258f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4390613be1565b60405180910390fd5b8060056000611b5961258f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c0661258f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4b9190613b04565b60405180910390a35050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d065750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613ba1565b60405180910390fd5b8060118190555050565b60135481565b611d66611d6061258f565b83612650565b611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613de1565b60405180910390fd5b611db18484848461298a565b50505050565b600047905090565b6060611dca82612523565b611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0090613d21565b60405180910390fd5b6000600660008481526020019081526020016000208054611e29906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e55906141b0565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b505050505090506000611eb36129e6565b9050600081511415611ec9578192505050611f0c565b600082511115611efe578082604051602001611ee69291906139ed565b60405160208183030381529060405292505050611f0c565b611f07846129fd565b925050505b919050565b60105481565b620f424081565b600b8054611f2b906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f57906141b0565b8015611fa45780601f10611f7957610100808354040283529160200191611fa4565b820191906000526020600020905b815481529060010190602001808311611f8757829003601f168201915b505050505081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120555750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613ba1565b60405180910390fd5b80600b90805190602001906120aa929190613029565b5050565b60606000600a600b6040516020016120c7929190613a58565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6000805b600d805490508161ffff161015612247578273ffffffffffffffffffffffffffffffffffffffff16600d8261ffff16815481106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223457600191505061224d565b808061223f90614213565b91505061217d565b50600090505b919050565b6060600082141561229a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612422565b600082905060005b600082146122cc5780806122b59061423e565b915050600a826122c59190613ffe565b91506122a2565b60008167ffffffffffffffff81111561230e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123405781602001600182028036833780820191505090505b50905060008290505b6000861461241a5760018161235e9190614089565b90506000600a80886123709190613ffe565b61237a919061402f565b876123859190614089565b60306123919190613fc7565b905060008160f81b9050808484815181106123d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886124119190613ffe565b97505050612349565b819450505050505b919050565b612441828260405180602001604052806000815250612aa4565b5050565b61244e82612523565b61248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490613cc1565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906124b4929190613029565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661260a836116c0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061265b82612523565b61269a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269190613c21565b60405180910390fd5b60006126a5836116c0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271457508373ffffffffffffffffffffffffffffffffffffffff166126fc84611019565b73ffffffffffffffffffffffffffffffffffffffff16145b80612725575061272481856120df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661274e826116c0565b73ffffffffffffffffffffffffffffffffffffffff16146127a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279b90613d81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613bc1565b60405180910390fd5b61281f838383612aff565b61282a600082612597565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287a9190614089565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d19190613f71565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61299584848461272e565b6129a184848484612b04565b6129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790613b41565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060612a0882612523565b612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e90613da1565b60405180910390fd5b6000612a516129e6565b90506000815111612a715760405180602001604052806000815250612a9c565b80612a7b84612c9b565b604051602001612a8c9291906139ed565b6040516020818303038152906040525b915050919050565b612aae8383612e48565b612abb6000848484612b04565b612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190613b41565b60405180910390fd5b505050565b505050565b6000612b258473ffffffffffffffffffffffffffffffffffffffff16613016565b15612c8e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b4e61258f565b8786866040518563ffffffff1660e01b8152600401612b709493929190613ab8565b602060405180830381600087803b158015612b8a57600080fd5b505af1925050508015612bbb57506040513d601f19601f82011682018060405250810190612bb8919061343c565b60015b612c3e573d8060008114612beb576040519150601f19603f3d011682016040523d82523d6000602084013e612bf0565b606091505b50600081511415612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90613b41565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c93565b600190505b949350505050565b60606000821415612ce3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e43565b600082905060005b60008214612d15578080612cfe9061423e565b915050600a82612d0e9190613ffe565b9150612ceb565b60008167ffffffffffffffff811115612d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d895781602001600182028036833780820191505090505b5090505b60008514612e3c57600182612da29190614089565b9150600a85612db191906142b4565b6030612dbd9190613f71565b60f81b818381518110612df9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e359190613ffe565b9450612d8d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90613d01565b60405180910390fd5b612ec181612523565b15612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890613b81565b60405180910390fd5b612f0d60008383612aff565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5d9190613f71565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613035906141b0565b90600052602060002090601f016020900481019282613057576000855561309e565b82601f1061307057805160ff191683800117855561309e565b8280016001018555821561309e579182015b8281111561309d578251825591602001919060010190613082565b5b5090506130ab91906130af565b5090565b5b808211156130c85760008160009055506001016130b0565b5090565b60006130df6130da84613eb7565b613e92565b9050828152602081018484840111156130f757600080fd5b61310284828561416e565b509392505050565b600061311d61311884613ee8565b613e92565b90508281526020810184848401111561313557600080fd5b61314084828561416e565b509392505050565b60008135905061315781614b49565b92915050565b60008135905061316c81614b60565b92915050565b60008135905061318181614b77565b92915050565b60008135905061319681614b8e565b92915050565b6000815190506131ab81614b8e565b92915050565b600082601f8301126131c257600080fd5b81356131d28482602086016130cc565b91505092915050565b600082601f8301126131ec57600080fd5b81356131fc84826020860161310a565b91505092915050565b60008135905061321481614ba5565b92915050565b60006020828403121561322c57600080fd5b600061323a84828501613148565b91505092915050565b60006020828403121561325557600080fd5b60006132638482850161315d565b91505092915050565b6000806040838503121561327f57600080fd5b600061328d85828601613148565b925050602061329e85828601613148565b9150509250929050565b6000806000606084860312156132bd57600080fd5b60006132cb86828701613148565b93505060206132dc86828701613148565b92505060406132ed86828701613205565b9150509250925092565b6000806000806080858703121561330d57600080fd5b600061331b87828801613148565b945050602061332c87828801613148565b935050604061333d87828801613205565b925050606085013567ffffffffffffffff81111561335a57600080fd5b613366878288016131b1565b91505092959194509250565b6000806040838503121561338557600080fd5b600061339385828601613148565b92505060206133a485828601613172565b9150509250929050565b600080604083850312156133c157600080fd5b60006133cf85828601613148565b92505060206133e085828601613205565b9150509250929050565b6000602082840312156133fc57600080fd5b600061340a84828501613172565b91505092915050565b60006020828403121561342557600080fd5b600061343384828501613187565b91505092915050565b60006020828403121561344e57600080fd5b600061345c8482850161319c565b91505092915050565b60006020828403121561347757600080fd5b600082013567ffffffffffffffff81111561349157600080fd5b61349d848285016131db565b91505092915050565b6000602082840312156134b857600080fd5b60006134c684828501613205565b91505092915050565b6134d8816140bd565b82525050565b6134e7816140e1565b82525050565b60006134f882613f2e565b6135028185613f44565b935061351281856020860161417d565b61351b816143a1565b840191505092915050565b600061353182613f39565b61353b8185613f55565b935061354b81856020860161417d565b613554816143a1565b840191505092915050565b600061356a82613f39565b6135748185613f66565b935061358481856020860161417d565b80840191505092915050565b6000815461359d816141b0565b6135a78186613f66565b945060018216600081146135c257600181146135d357613606565b60ff19831686528186019350613606565b6135dc85613f19565b60005b838110156135fe578154818901526001820191506020810190506135df565b838801955050505b50505092915050565b600061361c603283613f55565b9150613627826143b2565b604082019050919050565b600061363f603583613f55565b915061364a82614401565b604082019050919050565b6000613662601c83613f55565b915061366d82614450565b602082019050919050565b6000613685602283613f55565b915061369082614479565b604082019050919050565b60006136a8602483613f55565b91506136b3826144c8565b604082019050919050565b60006136cb601983613f55565b91506136d682614517565b602082019050919050565b60006136ee603583613f55565b91506136f982614540565b604082019050919050565b6000613711602c83613f55565b915061371c8261458f565b604082019050919050565b6000613734604183613f55565b915061373f826145de565b606082019050919050565b6000613757603883613f55565b915061376282614653565b604082019050919050565b600061377a602a83613f55565b9150613785826146a2565b604082019050919050565b600061379d602983613f55565b91506137a8826146f1565b604082019050919050565b60006137c0602e83613f55565b91506137cb82614740565b604082019050919050565b60006137e3602783613f55565b91506137ee8261478f565b604082019050919050565b6000613806602083613f55565b9150613811826147de565b602082019050919050565b6000613829603183613f55565b915061383482614807565b604082019050919050565b600061384c602c83613f55565b915061385782614856565b604082019050919050565b600061386f603783613f55565b915061387a826148a5565b604082019050919050565b6000613892600583613f66565b915061389d826148f4565b600582019050919050565b60006138b5600583613f66565b91506138c08261491d565b600582019050919050565b60006138d8602983613f55565b91506138e382614946565b604082019050919050565b60006138fb602f83613f55565b915061390682614995565b604082019050919050565b600061391e602183613f55565b9150613929826149e4565b604082019050919050565b6000613941603183613f55565b915061394c82614a33565b604082019050919050565b6000613964603c83613f55565b915061396f82614a82565b604082019050919050565b6000613987603b83613f55565b915061399282614ad1565b604082019050919050565b60006139aa600183613f66565b91506139b582614b20565b600182019050919050565b6139c981614147565b82525050565b6139d881614151565b82525050565b6139e781614161565b82525050565b60006139f9828561355f565b9150613a05828461355f565b91508190509392505050565b6000613a1d8286613590565b9150613a298285613590565b9150613a348261399d565b9150613a40828461355f565b9150613a4b82613885565b9150819050949350505050565b6000613a648285613590565b9150613a708284613590565b9150613a7b8261399d565b9150613a86826138a8565b9150613a9182613885565b91508190509392505050565b6000602082019050613ab260008301846134cf565b92915050565b6000608082019050613acd60008301876134cf565b613ada60208301866134cf565b613ae760408301856139c0565b8181036060830152613af981846134ed565b905095945050505050565b6000602082019050613b1960008301846134de565b92915050565b60006020820190508181036000830152613b398184613526565b905092915050565b60006020820190508181036000830152613b5a8161360f565b9050919050565b60006020820190508181036000830152613b7a81613632565b9050919050565b60006020820190508181036000830152613b9a81613655565b9050919050565b60006020820190508181036000830152613bba81613678565b9050919050565b60006020820190508181036000830152613bda8161369b565b9050919050565b60006020820190508181036000830152613bfa816136be565b9050919050565b60006020820190508181036000830152613c1a816136e1565b9050919050565b60006020820190508181036000830152613c3a81613704565b9050919050565b60006020820190508181036000830152613c5a81613727565b9050919050565b60006020820190508181036000830152613c7a8161374a565b9050919050565b60006020820190508181036000830152613c9a8161376d565b9050919050565b60006020820190508181036000830152613cba81613790565b9050919050565b60006020820190508181036000830152613cda816137b3565b9050919050565b60006020820190508181036000830152613cfa816137d6565b9050919050565b60006020820190508181036000830152613d1a816137f9565b9050919050565b60006020820190508181036000830152613d3a8161381c565b9050919050565b60006020820190508181036000830152613d5a8161383f565b9050919050565b60006020820190508181036000830152613d7a81613862565b9050919050565b60006020820190508181036000830152613d9a816138cb565b9050919050565b60006020820190508181036000830152613dba816138ee565b9050919050565b60006020820190508181036000830152613dda81613911565b9050919050565b60006020820190508181036000830152613dfa81613934565b9050919050565b60006020820190508181036000830152613e1a81613957565b9050919050565b60006020820190508181036000830152613e3a8161397a565b9050919050565b6000602082019050613e5660008301846139c0565b92915050565b6000602082019050613e7160008301846139cf565b92915050565b6000602082019050613e8c60008301846139de565b92915050565b6000613e9c613ead565b9050613ea882826141e2565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed257613ed1614372565b5b613edb826143a1565b9050602081019050919050565b600067ffffffffffffffff821115613f0357613f02614372565b5b613f0c826143a1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f7c82614147565b9150613f8783614147565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fbc57613fbb6142e5565b5b828201905092915050565b6000613fd282614161565b9150613fdd83614161565b92508260ff03821115613ff357613ff26142e5565b5b828201905092915050565b600061400982614147565b915061401483614147565b92508261402457614023614314565b5b828204905092915050565b600061403a82614147565b915061404583614147565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407e5761407d6142e5565b5b828202905092915050565b600061409482614147565b915061409f83614147565b9250828210156140b2576140b16142e5565b5b828203905092915050565b60006140c882614127565b9050919050565b60006140da82614127565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561419b578082015181840152602081019050614180565b838111156141aa576000848401525b50505050565b600060028204905060018216806141c857607f821691505b602082108114156141dc576141db614343565b5b50919050565b6141eb826143a1565b810181811067ffffffffffffffff8211171561420a57614209614372565b5b80604052505050565b600061421e82614119565b915061ffff821415614233576142326142e5565b5b600182019050919050565b600061424982614147565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561427c5761427b6142e5565b5b600182019050919050565b600061429282614151565b915063ffffffff8214156142a9576142a86142e5565b5b600182019050919050565b60006142bf82614147565b91506142ca83614147565b9250826142da576142d9614314565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365320000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616c6c6572206973206e6f7420736d61727420636f6e7472616374206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365330000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f50726f6a656374206f776e6572732073757370656e646564207468652070726f60008201527f6a6563742c20736f72727920666f722074686520696e636f6e76656e69656e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f546869732073746174656d656e742077696c6c206265206e657665722072656160008201527f63686564203a2900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686973206164647265737320616c7265616479206d696e746564206120667260008201527f656520726f626f74212050686173653120284652454529000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f61626f7574000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365312028465245452900000000602082015250565b7f54686520586f6e61526f626f746963732062757920706572696f6420656e646560008201527f642120314d20726f626f747320636f756e7420726561636865642e0000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614b52816140bd565b8114614b5d57600080fd5b50565b614b69816140cf565b8114614b7457600080fd5b50565b614b80816140e1565b8114614b8b57600080fd5b50565b614b97816140ed565b8114614ba257600080fd5b50565b614bae81614147565b8114614bb957600080fd5b5056fea2646970667358221220e4c7d107e3dacfd9c0f28fca7604ec0e5b1fb3eb67044f075d001815fa79764164736f6c63430008010033516d5774566f794667654b4a4c5446646e627a5550484468514a6d546a6279756632366f5278753267414e67684a
Deployed Bytecode
0x60806040526004361061021e5760003560e01c80636a72b79d11610123578063b88d4fde116100ab578063e66df1dd1161006f578063e66df1dd14610919578063e6edf0ff14610944578063e8a3d4851461096d578063e985e9c514610998578063fb83b763146109d557610360565b8063b88d4fde14610832578063c1cfb99a1461085b578063c87b56dd14610886578063d47bf336146108c3578063e3a5c53b146108ee57610360565b80639fe65313116100f25780639fe6531314610761578063a22cb4651461078a578063a8c9739d146107b3578063ac49c272146107de578063b6c8a9c31461080757610360565b80636a72b79d146106a557806370a08231146106ce5780637cc4370a1461070b57806395d89b411461073657610360565b80633489b2c0116101a6578063491195151161017557806349119515146105be5780634fd61e24146105e7578063527097251461061257806354fd4d501461063d5780636352211e1461066857610360565b80633489b2c0146105025780633b6495c01461052d5780633ba5fc7c1461055857806342842e0e1461059557610360565b8063095ea7b3116101ed578063095ea7b3146104335780630b7e9c441461045c578063176296ef1461048557806323b872dd146104ae57806333a1bb26146104d757610360565b806301ffc9a71461036557806302c378a8146103a257806306fdde03146103cb578063081812fc146103f657610360565b366103605760001515600e60009054906101000a900460ff16151514610279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027090613c41565b60405180910390fd5b620f424063ffffffff16600c60009054906101000a900463ffffffff1663ffffffff16106102dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d390613e21565b60405180910390fd5b6102e4610a00565b6102ed33610c70565b6102f5610cf9565b50423373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900463ffffffff1663ffffffff167fd5e3b8f1b84b81319ce17c7afa770933cc7a6db4aeb9fddc88cbd78536a98ec5346040516103569190613e41565b60405180910390a4005b600080fd5b34801561037157600080fd5b5061038c60048036038101906103879190613413565b610db3565b6040516103999190613b04565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906134a6565b610e95565b005b3480156103d757600080fd5b506103e0610f87565b6040516103ed9190613b1f565b60405180910390f35b34801561040257600080fd5b5061041d600480360381019061041891906134a6565b611019565b60405161042a9190613a9d565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906133ae565b61109e565b005b34801561046857600080fd5b50610483600480360381019061047e9190613243565b6111b6565b005b34801561049157600080fd5b506104ac60048036038101906104a791906134a6565b6112e8565b005b3480156104ba57600080fd5b506104d560048036038101906104d091906132a8565b6113da565b005b3480156104e357600080fd5b506104ec61143a565b6040516104f99190613b1f565b60405180910390f35b34801561050e57600080fd5b506105176114c8565b6040516105249190613a9d565b60405180910390f35b34801561053957600080fd5b506105426114ee565b60405161054f9190613e41565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906134a6565b6114f4565b60405161058c9190613a9d565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b791906132a8565b611533565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061321a565b611553565b005b3480156105f357600080fd5b506105fc61167f565b6040516106099190613e5c565b60405180910390f35b34801561061e57600080fd5b50610627611695565b6040516106349190613a9d565b60405180910390f35b34801561064957600080fd5b506106526116bb565b60405161065f9190613e77565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906134a6565b6116c0565b60405161069c9190613a9d565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613465565b611772565b005b3480156106da57600080fd5b506106f560048036038101906106f0919061321a565b611874565b6040516107029190613e41565b60405180910390f35b34801561071757600080fd5b5061072061192c565b60405161072d9190613b04565b60405180910390f35b34801561074257600080fd5b5061074b61193f565b6040516107589190613b1f565b60405180910390f35b34801561076d57600080fd5b50610788600480360381019061078391906133ea565b6119d1565b005b34801561079657600080fd5b506107b160048036038101906107ac9190613372565b611ad6565b005b3480156107bf57600080fd5b506107c8611c57565b6040516107d59190613e41565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906134a6565b611c5d565b005b34801561081357600080fd5b5061081c611d4f565b6040516108299190613e41565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132f7565b611d55565b005b34801561086757600080fd5b50610870611db7565b60405161087d9190613e41565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906134a6565b611dbf565b6040516108ba9190613b1f565b60405180910390f35b3480156108cf57600080fd5b506108d8611f11565b6040516108e59190613e41565b60405180910390f35b3480156108fa57600080fd5b50610903611f17565b6040516109109190613e5c565b60405180910390f35b34801561092557600080fd5b5061092e611f1e565b60405161093b9190613b1f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613465565b611fac565b005b34801561097957600080fd5b506109826120ae565b60405161098f9190613b1f565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba919061326c565b6120df565b6040516109cc9190613b04565b60405180910390f35b3480156109e157600080fd5b506109ea612173565b6040516109f79190613e41565b60405180910390f35b6000600c60009054906101000a900463ffffffff1663ffffffff1610158015610a425750612710600c60009054906101000a900463ffffffff1663ffffffff16105b8015610a4f575042601054115b15610af357601154341015610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613e01565b60405180910390fd5b6000610aa433612179565b90506000151581151514610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613d61565b60405180910390fd5b50610c6e565b6000600c60009054906101000a900463ffffffff1663ffffffff1610158015610b3657506202e630600c60009054906101000a900463ffffffff1663ffffffff16105b15610b8557601254341015610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613b61565b60405180910390fd5b610c6d565b6202e630600c60009054906101000a900463ffffffff1663ffffffff1610158015610bd05750620f424063ffffffff16600c60009054906101000a900463ffffffff1663ffffffff16105b15610c1f57601354341015610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613c01565b60405180910390fd5b610c6c565b683627e8f712373c0000341015610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613ce1565b60405180910390fd5b5b5b5b565b612710600c60009054906101000a900463ffffffff1663ffffffff161015610cf657600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600c600081819054906101000a900463ffffffff1680929190610d1d90614287565b91906101000a81548163ffffffff021916908363ffffffff160217905550506000600c60009054906101000a900463ffffffff1690506000600a600b610d688463ffffffff16612252565b604051602001610d7a93929190613a11565b6040516020818303038152906040529050610d9b338363ffffffff16612427565b610dab8263ffffffff1682612445565b819250505090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e7e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e8e5750610e8d826124b9565b5b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f3e5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490613ba1565b60405180910390fd5b8060128190555050565b606060008054610f96906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc2906141b0565b801561100f5780601f10610fe45761010080835404028352916020019161100f565b820191906000526020600020905b815481529060010190602001808311610ff257829003601f168201915b5050505050905090565b600061102482612523565b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90613d41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006110a9826116c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613dc1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661113961258f565b73ffffffffffffffffffffffffffffffffffffffff16148061116857506111678161116261258f565b6120df565b5b6111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613c61565b60405180910390fd5b6111b18383612597565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061125f5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590613ba1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156112e4573d6000803e3d6000fd5b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113915750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613ba1565b60405180910390fd5b8060138190555050565b6113eb6113e561258f565b82612650565b61142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190613de1565b60405180910390fd5b61143583838361272e565b505050565b600a8054611447906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611473906141b0565b80156114c05780601f10611495576101008083540402835291602001916114c0565b820191906000526020600020905b8154815290600101906020018083116114a357829003601f168201915b505050505081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b600d818154811061150457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61154e83838360405180602001604052806000815250611d55565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115fc5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290613ba1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900463ffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613ca1565b60405180910390fd5b80915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061181b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613ba1565b60405180910390fd5b80600a9080519060200190611870929190613029565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc90613c81565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60009054906101000a900460ff1681565b60606001805461194e906141b0565b80601f016020809104026020016040519081016040528092919081815260200182805461197a906141b0565b80156119c75780601f1061199c576101008083540402835291602001916119c7565b820191906000526020600020905b8154815290600101906020018083116119aa57829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a7a5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090613ba1565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b611ade61258f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4390613be1565b60405180910390fd5b8060056000611b5961258f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c0661258f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4b9190613b04565b60405180910390a35050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d065750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613ba1565b60405180910390fd5b8060118190555050565b60135481565b611d66611d6061258f565b83612650565b611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613de1565b60405180910390fd5b611db18484848461298a565b50505050565b600047905090565b6060611dca82612523565b611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0090613d21565b60405180910390fd5b6000600660008481526020019081526020016000208054611e29906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e55906141b0565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b505050505090506000611eb36129e6565b9050600081511415611ec9578192505050611f0c565b600082511115611efe578082604051602001611ee69291906139ed565b60405160208183030381529060405292505050611f0c565b611f07846129fd565b925050505b919050565b60105481565b620f424081565b600b8054611f2b906141b0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f57906141b0565b8015611fa45780601f10611f7957610100808354040283529160200191611fa4565b820191906000526020600020905b815481529060010190602001808311611f8757829003601f168201915b505050505081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120555750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613ba1565b60405180910390fd5b80600b90805190602001906120aa929190613029565b5050565b60606000600a600b6040516020016120c7929190613a58565b60405160208183030381529060405290508091505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6000805b600d805490508161ffff161015612247578273ffffffffffffffffffffffffffffffffffffffff16600d8261ffff16815481106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223457600191505061224d565b808061223f90614213565b91505061217d565b50600090505b919050565b6060600082141561229a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612422565b600082905060005b600082146122cc5780806122b59061423e565b915050600a826122c59190613ffe565b91506122a2565b60008167ffffffffffffffff81111561230e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123405781602001600182028036833780820191505090505b50905060008290505b6000861461241a5760018161235e9190614089565b90506000600a80886123709190613ffe565b61237a919061402f565b876123859190614089565b60306123919190613fc7565b905060008160f81b9050808484815181106123d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886124119190613ffe565b97505050612349565b819450505050505b919050565b612441828260405180602001604052806000815250612aa4565b5050565b61244e82612523565b61248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490613cc1565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906124b4929190613029565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661260a836116c0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061265b82612523565b61269a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269190613c21565b60405180910390fd5b60006126a5836116c0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271457508373ffffffffffffffffffffffffffffffffffffffff166126fc84611019565b73ffffffffffffffffffffffffffffffffffffffff16145b80612725575061272481856120df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661274e826116c0565b73ffffffffffffffffffffffffffffffffffffffff16146127a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279b90613d81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613bc1565b60405180910390fd5b61281f838383612aff565b61282a600082612597565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287a9190614089565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d19190613f71565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61299584848461272e565b6129a184848484612b04565b6129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790613b41565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060612a0882612523565b612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e90613da1565b60405180910390fd5b6000612a516129e6565b90506000815111612a715760405180602001604052806000815250612a9c565b80612a7b84612c9b565b604051602001612a8c9291906139ed565b6040516020818303038152906040525b915050919050565b612aae8383612e48565b612abb6000848484612b04565b612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190613b41565b60405180910390fd5b505050565b505050565b6000612b258473ffffffffffffffffffffffffffffffffffffffff16613016565b15612c8e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b4e61258f565b8786866040518563ffffffff1660e01b8152600401612b709493929190613ab8565b602060405180830381600087803b158015612b8a57600080fd5b505af1925050508015612bbb57506040513d601f19601f82011682018060405250810190612bb8919061343c565b60015b612c3e573d8060008114612beb576040519150601f19603f3d011682016040523d82523d6000602084013e612bf0565b606091505b50600081511415612c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2d90613b41565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c93565b600190505b949350505050565b60606000821415612ce3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e43565b600082905060005b60008214612d15578080612cfe9061423e565b915050600a82612d0e9190613ffe565b9150612ceb565b60008167ffffffffffffffff811115612d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d895781602001600182028036833780820191505090505b5090505b60008514612e3c57600182612da29190614089565b9150600a85612db191906142b4565b6030612dbd9190613f71565b60f81b818381518110612df9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e359190613ffe565b9450612d8d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90613d01565b60405180910390fd5b612ec181612523565b15612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890613b81565b60405180910390fd5b612f0d60008383612aff565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5d9190613f71565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613035906141b0565b90600052602060002090601f016020900481019282613057576000855561309e565b82601f1061307057805160ff191683800117855561309e565b8280016001018555821561309e579182015b8281111561309d578251825591602001919060010190613082565b5b5090506130ab91906130af565b5090565b5b808211156130c85760008160009055506001016130b0565b5090565b60006130df6130da84613eb7565b613e92565b9050828152602081018484840111156130f757600080fd5b61310284828561416e565b509392505050565b600061311d61311884613ee8565b613e92565b90508281526020810184848401111561313557600080fd5b61314084828561416e565b509392505050565b60008135905061315781614b49565b92915050565b60008135905061316c81614b60565b92915050565b60008135905061318181614b77565b92915050565b60008135905061319681614b8e565b92915050565b6000815190506131ab81614b8e565b92915050565b600082601f8301126131c257600080fd5b81356131d28482602086016130cc565b91505092915050565b600082601f8301126131ec57600080fd5b81356131fc84826020860161310a565b91505092915050565b60008135905061321481614ba5565b92915050565b60006020828403121561322c57600080fd5b600061323a84828501613148565b91505092915050565b60006020828403121561325557600080fd5b60006132638482850161315d565b91505092915050565b6000806040838503121561327f57600080fd5b600061328d85828601613148565b925050602061329e85828601613148565b9150509250929050565b6000806000606084860312156132bd57600080fd5b60006132cb86828701613148565b93505060206132dc86828701613148565b92505060406132ed86828701613205565b9150509250925092565b6000806000806080858703121561330d57600080fd5b600061331b87828801613148565b945050602061332c87828801613148565b935050604061333d87828801613205565b925050606085013567ffffffffffffffff81111561335a57600080fd5b613366878288016131b1565b91505092959194509250565b6000806040838503121561338557600080fd5b600061339385828601613148565b92505060206133a485828601613172565b9150509250929050565b600080604083850312156133c157600080fd5b60006133cf85828601613148565b92505060206133e085828601613205565b9150509250929050565b6000602082840312156133fc57600080fd5b600061340a84828501613172565b91505092915050565b60006020828403121561342557600080fd5b600061343384828501613187565b91505092915050565b60006020828403121561344e57600080fd5b600061345c8482850161319c565b91505092915050565b60006020828403121561347757600080fd5b600082013567ffffffffffffffff81111561349157600080fd5b61349d848285016131db565b91505092915050565b6000602082840312156134b857600080fd5b60006134c684828501613205565b91505092915050565b6134d8816140bd565b82525050565b6134e7816140e1565b82525050565b60006134f882613f2e565b6135028185613f44565b935061351281856020860161417d565b61351b816143a1565b840191505092915050565b600061353182613f39565b61353b8185613f55565b935061354b81856020860161417d565b613554816143a1565b840191505092915050565b600061356a82613f39565b6135748185613f66565b935061358481856020860161417d565b80840191505092915050565b6000815461359d816141b0565b6135a78186613f66565b945060018216600081146135c257600181146135d357613606565b60ff19831686528186019350613606565b6135dc85613f19565b60005b838110156135fe578154818901526001820191506020810190506135df565b838801955050505b50505092915050565b600061361c603283613f55565b9150613627826143b2565b604082019050919050565b600061363f603583613f55565b915061364a82614401565b604082019050919050565b6000613662601c83613f55565b915061366d82614450565b602082019050919050565b6000613685602283613f55565b915061369082614479565b604082019050919050565b60006136a8602483613f55565b91506136b3826144c8565b604082019050919050565b60006136cb601983613f55565b91506136d682614517565b602082019050919050565b60006136ee603583613f55565b91506136f982614540565b604082019050919050565b6000613711602c83613f55565b915061371c8261458f565b604082019050919050565b6000613734604183613f55565b915061373f826145de565b606082019050919050565b6000613757603883613f55565b915061376282614653565b604082019050919050565b600061377a602a83613f55565b9150613785826146a2565b604082019050919050565b600061379d602983613f55565b91506137a8826146f1565b604082019050919050565b60006137c0602e83613f55565b91506137cb82614740565b604082019050919050565b60006137e3602783613f55565b91506137ee8261478f565b604082019050919050565b6000613806602083613f55565b9150613811826147de565b602082019050919050565b6000613829603183613f55565b915061383482614807565b604082019050919050565b600061384c602c83613f55565b915061385782614856565b604082019050919050565b600061386f603783613f55565b915061387a826148a5565b604082019050919050565b6000613892600583613f66565b915061389d826148f4565b600582019050919050565b60006138b5600583613f66565b91506138c08261491d565b600582019050919050565b60006138d8602983613f55565b91506138e382614946565b604082019050919050565b60006138fb602f83613f55565b915061390682614995565b604082019050919050565b600061391e602183613f55565b9150613929826149e4565b604082019050919050565b6000613941603183613f55565b915061394c82614a33565b604082019050919050565b6000613964603c83613f55565b915061396f82614a82565b604082019050919050565b6000613987603b83613f55565b915061399282614ad1565b604082019050919050565b60006139aa600183613f66565b91506139b582614b20565b600182019050919050565b6139c981614147565b82525050565b6139d881614151565b82525050565b6139e781614161565b82525050565b60006139f9828561355f565b9150613a05828461355f565b91508190509392505050565b6000613a1d8286613590565b9150613a298285613590565b9150613a348261399d565b9150613a40828461355f565b9150613a4b82613885565b9150819050949350505050565b6000613a648285613590565b9150613a708284613590565b9150613a7b8261399d565b9150613a86826138a8565b9150613a9182613885565b91508190509392505050565b6000602082019050613ab260008301846134cf565b92915050565b6000608082019050613acd60008301876134cf565b613ada60208301866134cf565b613ae760408301856139c0565b8181036060830152613af981846134ed565b905095945050505050565b6000602082019050613b1960008301846134de565b92915050565b60006020820190508181036000830152613b398184613526565b905092915050565b60006020820190508181036000830152613b5a8161360f565b9050919050565b60006020820190508181036000830152613b7a81613632565b9050919050565b60006020820190508181036000830152613b9a81613655565b9050919050565b60006020820190508181036000830152613bba81613678565b9050919050565b60006020820190508181036000830152613bda8161369b565b9050919050565b60006020820190508181036000830152613bfa816136be565b9050919050565b60006020820190508181036000830152613c1a816136e1565b9050919050565b60006020820190508181036000830152613c3a81613704565b9050919050565b60006020820190508181036000830152613c5a81613727565b9050919050565b60006020820190508181036000830152613c7a8161374a565b9050919050565b60006020820190508181036000830152613c9a8161376d565b9050919050565b60006020820190508181036000830152613cba81613790565b9050919050565b60006020820190508181036000830152613cda816137b3565b9050919050565b60006020820190508181036000830152613cfa816137d6565b9050919050565b60006020820190508181036000830152613d1a816137f9565b9050919050565b60006020820190508181036000830152613d3a8161381c565b9050919050565b60006020820190508181036000830152613d5a8161383f565b9050919050565b60006020820190508181036000830152613d7a81613862565b9050919050565b60006020820190508181036000830152613d9a816138cb565b9050919050565b60006020820190508181036000830152613dba816138ee565b9050919050565b60006020820190508181036000830152613dda81613911565b9050919050565b60006020820190508181036000830152613dfa81613934565b9050919050565b60006020820190508181036000830152613e1a81613957565b9050919050565b60006020820190508181036000830152613e3a8161397a565b9050919050565b6000602082019050613e5660008301846139c0565b92915050565b6000602082019050613e7160008301846139cf565b92915050565b6000602082019050613e8c60008301846139de565b92915050565b6000613e9c613ead565b9050613ea882826141e2565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed257613ed1614372565b5b613edb826143a1565b9050602081019050919050565b600067ffffffffffffffff821115613f0357613f02614372565b5b613f0c826143a1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f7c82614147565b9150613f8783614147565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fbc57613fbb6142e5565b5b828201905092915050565b6000613fd282614161565b9150613fdd83614161565b92508260ff03821115613ff357613ff26142e5565b5b828201905092915050565b600061400982614147565b915061401483614147565b92508261402457614023614314565b5b828204905092915050565b600061403a82614147565b915061404583614147565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407e5761407d6142e5565b5b828202905092915050565b600061409482614147565b915061409f83614147565b9250828210156140b2576140b16142e5565b5b828203905092915050565b60006140c882614127565b9050919050565b60006140da82614127565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561419b578082015181840152602081019050614180565b838111156141aa576000848401525b50505050565b600060028204905060018216806141c857607f821691505b602082108114156141dc576141db614343565b5b50919050565b6141eb826143a1565b810181811067ffffffffffffffff8211171561420a57614209614372565b5b80604052505050565b600061421e82614119565b915061ffff821415614233576142326142e5565b5b600182019050919050565b600061424982614147565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561427c5761427b6142e5565b5b600182019050919050565b600061429282614151565b915063ffffffff8214156142a9576142a86142e5565b5b600182019050919050565b60006142bf82614147565b91506142ca83614147565b9250826142da576142d9614314565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365320000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616c6c6572206973206e6f7420736d61727420636f6e7472616374206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365330000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f50726f6a656374206f776e6572732073757370656e646564207468652070726f60008201527f6a6563742c20736f72727920666f722074686520696e636f6e76656e69656e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f546869732073746174656d656e742077696c6c206265206e657665722072656160008201527f63686564203a2900000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54686973206164647265737320616c7265616479206d696e746564206120667260008201527f656520726f626f74212050686173653120284652454529000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f61626f7574000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54686520657468657220616d6f756e74206973206e6f7420656e6f756768207460008201527f6f20627579206120726f626f7421205068617365312028465245452900000000602082015250565b7f54686520586f6e61526f626f746963732062757920706572696f6420656e646560008201527f642120314d20726f626f747320636f756e7420726561636865642e0000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b614b52816140bd565b8114614b5d57600080fd5b50565b614b69816140cf565b8114614b7457600080fd5b50565b614b80816140e1565b8114614b8b57600080fd5b50565b614b97816140ed565b8114614ba257600080fd5b50565b614bae81614147565b8114614bb957600080fd5b5056fea2646970667358221220e4c7d107e3dacfd9c0f28fca7604ec0e5b1fb3eb67044f075d001815fa79764164736f6c63430008010033
Deployed Bytecode Sourcemap
59:5613:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5440:5;5422:23;;:14;;;;;;;;;;;:23;;;5413:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;333:7:::1;5263:27;;:14;;;;;;;;;;;:27;;;5255:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;4996:26:::2;:24;:26::i;:::-;5032:40;5061:10;5032:28;:40::i;:::-;5082:14;:12;:14::i;:::-;;5156:15;5144:10;5111:72;;5128:14;;;;;;;;;;;5111:72;;;5173:9;5111:72;;;;;;:::i;:::-;;;;;;;;59:5613:::0;;;;;1495:288:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2983:91:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2401:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3813:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3364:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3181:109:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3084:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4677:300:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;346:58:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;146:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;775:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;527:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5043:149:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1914:91:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;493:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;173:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;107:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2104:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2011:93:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1842:205:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;570:34:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2563:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2218:94:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4097:290:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;245:46:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2882:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;821:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5258:282:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2318:95:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;387:663:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;670:39:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;297:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;410:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2110:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1295:232;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4453:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;715:54:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:954;3373:1;3355:14;;;;;;;;;;;:19;;;;:45;;;;;3395:5;3378:14;;;;;;;;;;;:22;;;3355:45;:91;;;;;3431:15;3404:24;;:42;3355:91;3351:893;;;3484:10;;3471:9;:23;;3462:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;3573:17;3593:51;3633:10;3593:39;:51::i;:::-;3573:71;;3683:5;3667:21;;:12;:21;;;3658:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;3351:893;;;;3795:1;3777:14;;;;;;;;;;;:19;;;;:46;;;;;3817:6;3800:14;;;;;;;;;;;:23;;;3777:46;3773:471;;;3861:10;;3848:9;:23;;3839:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;3773:471;;;3976:6;3958:14;;;;;;;;;;;:24;;;;:55;;;;;333:7;3986:27;;:14;;;;;;;;;;;:27;;;3958:55;3954:290;;;4051:10;;4038:9;:23;;4029:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;3954:290;;;4180:9;4167;:22;;4158:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;3954:290;3773:471;3351:893;3296:954::o;2419:161::-;2511:5;2494:14;;;;;;;;;;;:22;;;2490:84;;;2532:20;2558:4;2532:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2490:84;2419:161;:::o;1533:375::-;1575:6;1593:14;;:16;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1619:18;1640:14;;;;;;;;;;;1619:35;;1664:22;1713:8;1723:12;1743:21;1752:11;1743:21;;:8;:21::i;:::-;1696:78;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1664:111;;1785:34;1795:10;1807:11;1785:34;;:9;:34::i;:::-;1829:35;1842:11;1829:35;;1855:8;1829:12;:35::i;:::-;1890:11;1883:18;;;;1533:375;:::o;1495:288:3:-;1597:4;1635:25;1620:40;;;:11;:40;;;;:104;;;;1691:33;1676:48;;;:11;:48;;;;1620:104;:156;;;;1740:36;1764:11;1740:23;:36::i;:::-;1620:156;1613:163;;1495:288;;;:::o;2983:91:14:-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;3063:4:::1;3050:10;:17;;;;2983:91:::0;:::o;2401:98:3:-;2455:13;2487:5;2480:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2401:98;:::o;3813:217::-;3889:7;3916:16;3924:7;3916;:16::i;:::-;3908:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3999:15;:24;4015:7;3999:24;;;;;;;;;;;;;;;;;;;;;3992:31;;3813:217;;;:::o;3364:388::-;3444:13;3460:23;3475:7;3460:14;:23::i;:::-;3444:39;;3507:5;3501:11;;:2;:11;;;;3493:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3585:5;3569:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3594:37;3611:5;3618:12;:10;:12::i;:::-;3594:16;:37::i;:::-;3569:62;3561:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;3724:21;3733:2;3737:7;3724:8;:21::i;:::-;3364:388;;;:::o;3181:109:14:-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;3246:5:::1;:14;;:37;3261:21;3246:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3181:109:::0;:::o;3084:91::-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;3164:4:::1;3151:10;:17;;;;3084:91:::0;:::o;4677:300:3:-;4836:41;4855:12;:10;:12::i;:::-;4869:7;4836:18;:41::i;:::-;4828:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4942:28;4952:4;4958:2;4962:7;4942:9;:28::i;:::-;4677:300;;;:::o;346:58:14:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;146:21::-;;;;;;;;;;;;;:::o;775:40::-;;;;:::o;527:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5043:149:3:-;5146:39;5163:4;5169:2;5173:7;5146:39;;;;;;;;;;;;:16;:39::i;:::-;5043:149;;;:::o;1914:91:14:-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;1990:8:::1;1981:6;;:17;;;;;;;;;;;;;;;;;;1914:91:::0;:::o;493:28::-;;;;;;;;;;;;;:::o;173:66::-;;;;;;;;;;;;;:::o;107:33::-;139:1;107:33;:::o;2104:235:3:-;2176:7;2195:13;2211:7;:16;2219:7;2211:16;;;;;;;;;;;;;;;;;;;;;2195:32;;2262:1;2245:19;;:5;:19;;;;2237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2327:5;2320:12;;;2104:235;;;:::o;2011:93:14:-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;2093:4:::1;2082:8;:15;;;;;;;;;;;;:::i;:::-;;2011:93:::0;:::o;1842:205:3:-;1914:7;1958:1;1941:19;;:5;:19;;;;1933:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:9;:16;2034:5;2024:16;;;;;;;;;;;;;;;;2017:23;;1842:205;;;:::o;570:34:14:-;;;;;;;;;;;;;:::o;2563:102:3:-;2619:13;2651:7;2644:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2563:102;:::o;2218:94:14:-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;2299:6:::1;2282:14;;:23;;;;;;;;;;;;;;;;;;2218:94:::0;:::o;4097:290:3:-;4211:12;:10;:12::i;:::-;4199:24;;:8;:24;;;;4191:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4309:8;4264:18;:32;4283:12;:10;:12::i;:::-;4264:32;;;;;;;;;;;;;;;:42;4297:8;4264:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4361:8;4332:48;;4347:12;:10;:12::i;:::-;4332:48;;;4371:8;4332:48;;;;;;:::i;:::-;;;;;;;;4097:290;;:::o;245:46:14:-;;;;:::o;2882:91::-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;2962:4:::1;2949:10;:17;;;;2882:91:::0;:::o;821:40::-;;;;:::o;5258:282:3:-;5389:41;5408:12;:10;:12::i;:::-;5422:7;5389:18;:41::i;:::-;5381:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5494:39;5508:4;5514:2;5518:7;5527:5;5494:13;:39::i;:::-;5258:282;;;;:::o;2318:95:14:-;2362:4;2385:21;2378:28;;2318:95;:::o;387:663:7:-;460:13;493:16;501:7;493;:16::i;:::-;485:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;574:23;600:10;:19;611:7;600:19;;;;;;;;;;;574:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:18;650:10;:8;:10::i;:::-;629:31;;755:1;739:4;733:18;:23;729:70;;;779:9;772:16;;;;;;729:70;927:1;907:9;901:23;:27;897:106;;;975:4;981:9;958:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;944:48;;;;;;897:106;1020:23;1035:7;1020:14;:23::i;:::-;1013:30;;;;387:663;;;;:::o;670:39:14:-;;;;:::o;297:43::-;333:7;297:43;:::o;410:77::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2110:102::-;5587:6;;;;;;;;;;;5573:20;;:10;:20;;;:44;;;;5611:6;;;;;;;;;;;5597:20;;:10;:20;;;5573:44;5565:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;2198:7:::1;2183:12;:22;;;;;;;;;;;;:::i;:::-;;2110:102:::0;:::o;1295:232::-;1339:13;1364:17;1408:8;1418:12;1391:64;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1364:92;;1473:3;1466:10;;;1295:232;:::o;4453:162:3:-;4550:4;4573:18;:25;4592:5;4573:25;;;;;;;;;;;;;;;:35;4599:8;4573:35;;;;;;;;;;;;;;;;;;;;;;;;;4566:42;;4453:162;;;;:::o;715:54:14:-;;;;:::o;2590:286::-;2676:4;2697:8;2692:156;2709:20;:27;;;;2707:1;:29;;;2692:156;;;2788:4;2761:31;;:20;2782:1;2761:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;2757:81;;;2819:4;2812:11;;;;;2757:81;2738:3;;;;;:::i;:::-;;;;2692:156;;;;2864:5;2857:12;;2590:286;;;;:::o;4256:633::-;4306:27;4359:1;4353:2;:7;4349:56;;;4380:10;;;;;;;;;;;;;;;;;;;;;4349:56;4418:6;4427:2;4418:11;;4443:8;4465:78;4477:1;4472;:6;4465:78;;4498:5;;;;;:::i;:::-;;;;4526:2;4521:7;;;;;:::i;:::-;;;4465:78;;;4556:17;4586:3;4576:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4556:34;;4604:6;4613:3;4604:12;;4630:216;4643:1;4637:2;:7;4630:216;;4670:1;4668;:3;;;;:::i;:::-;4664:7;;4689:10;4729:2;4724;4719;:7;;;;:::i;:::-;:12;;;;:::i;:::-;4714:2;:17;;;;:::i;:::-;4703:2;:29;;;;:::i;:::-;4689:44;;4751:9;4770:4;4763:12;;4751:24;;4803:2;4793:4;4798:1;4793:7;;;;;;;;;;;;;;;;;;;:12;;;;;;;;;;;4829:2;4823:8;;;;;:::i;:::-;;;4630:216;;;;;4873:4;4859:19;;;;;;4256:633;;;;:::o;7931:108:3:-;8006:26;8016:2;8020:7;8006:26;;;;;;;;;;;;:9;:26::i;:::-;7931:108;;:::o;1197:214:7:-;1296:16;1304:7;1296;:16::i;:::-;1288:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1395:9;1373:10;:19;1384:7;1373:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1197:214;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;6974:125:3:-;7039:4;7090:1;7062:30;;:7;:16;7070:7;7062:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7055:37;;6974:125;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;10731:171:3:-;10832:2;10805:15;:24;10821:7;10805:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;10887:7;10883:2;10849:46;;10858:23;10873:7;10858:14;:23::i;:::-;10849:46;;;;;;;;;;;;10731:171;;:::o;7257:344::-;7350:4;7374:16;7382:7;7374;:16::i;:::-;7366:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7449:13;7465:23;7480:7;7465:14;:23::i;:::-;7449:39;;7517:5;7506:16;;:7;:16;;;:51;;;;7550:7;7526:31;;:20;7538:7;7526:11;:20::i;:::-;:31;;;7506:51;:87;;;;7561:32;7578:5;7585:7;7561:16;:32::i;:::-;7506:87;7498:96;;;7257:344;;;;:::o;10090:530::-;10214:4;10187:31;;:23;10202:7;10187:14;:23::i;:::-;:31;;;10179:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10296:1;10282:16;;:2;:16;;;;10274:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10350:39;10371:4;10377:2;10381:7;10350:20;:39::i;:::-;10451:29;10468:1;10472:7;10451:8;:29::i;:::-;10510:1;10491:9;:15;10501:4;10491:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10538:1;10521:9;:13;10531:2;10521:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10568:2;10549:7;:16;10557:7;10549:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10605:7;10601:2;10586:27;;10595:4;10586:27;;;;;;;;;;;;10090:530;;;:::o;6402:269::-;6515:28;6525:4;6531:2;6535:7;6515:9;:28::i;:::-;6561:48;6584:4;6590:2;6594:7;6603:5;6561:22;:48::i;:::-;6553:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6402:269;;;;:::o;3215:92::-;3266:13;3291:9;;;;;;;;;;;;;;3215:92;:::o;2731:353::-;2804:13;2837:16;2845:7;2837;:16::i;:::-;2829:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2916:21;2940:10;:8;:10::i;:::-;2916:34;;2991:1;2973:7;2967:21;:25;:110;;;;;;;;;;;;;;;;;3031:7;3040:18;:7;:16;:18::i;:::-;3014:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2967:110;2960:117;;;2731:353;;;:::o;8260:247::-;8355:18;8361:2;8365:7;8355:5;:18::i;:::-;8391:54;8422:1;8426:2;8430:7;8439:5;8391:22;:54::i;:::-;8383:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;8260:247;;;:::o;12875:93::-;;;;:::o;11455:824::-;11575:4;11599:15;:2;:13;;;:15::i;:::-;11595:678;;;11650:2;11634:36;;;11671:12;:10;:12::i;:::-;11685:4;11691:7;11700:5;11634:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11630:591;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11894:1;11877:6;:13;:18;11873:334;;;11919:60;;;;;;;;;;:::i;:::-;;;;;;;;11873:334;12159:6;12153:13;12144:6;12140:2;12136:15;12129:38;11630:591;11766:45;;;11756:55;;;:6;:55;;;;11749:62;;;;;11595:678;12258:4;12251:11;;11455:824;;;;;;;:::o;271:703:13:-;327:13;553:1;544:5;:10;540:51;;;570:10;;;;;;;;;;;;;;;;;;;;;540:51;600:12;615:5;600:20;;630:14;654:75;669:1;661:4;:9;654:75;;686:8;;;;;:::i;:::-;;;;716:2;708:10;;;;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;738:39;;787:150;803:1;794:5;:10;787:150;;830:1;820:11;;;;;:::i;:::-;;;896:2;888:5;:10;;;;:::i;:::-;875:2;:24;;;;:::i;:::-;862:39;;845:6;852;845:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;924:2;915:11;;;;;:::i;:::-;;;787:150;;;960:6;946:21;;;;;271:703;;;;:::o;8829:372:3:-;8922:1;8908:16;;:2;:16;;;;8900:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8980:16;8988:7;8980;:16::i;:::-;8979:17;8971:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9040:45;9069:1;9073:2;9077:7;9040:20;:45::i;:::-;9113:1;9096:9;:13;9106:2;9096:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9143:2;9124:7;:16;9132:7;9124:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9186:7;9182:2;9161:33;;9178:1;9161:33;;;;;;;;;;;;8829:372;;:::o;718:413:0:-;778:4;981:12;1090:7;1078:20;1070:28;;1123:1;1116:4;:8;1109:15;;;718:413;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:15:-;;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:155::-;;944:6;931:20;922:29;;960:41;995:5;960:41;:::i;:::-;912:95;;;;:::o;1013:133::-;;1094:6;1081:20;1072:29;;1110:30;1134:5;1110:30;:::i;:::-;1062:84;;;;:::o;1152:137::-;;1235:6;1222:20;1213:29;;1251:32;1277:5;1251:32;:::i;:::-;1203:86;;;;:::o;1295:141::-;;1382:6;1376:13;1367:22;;1398:32;1424:5;1398:32;:::i;:::-;1357:79;;;;:::o;1455:271::-;;1559:3;1552:4;1544:6;1540:17;1536:27;1526:2;;1577:1;1574;1567:12;1526:2;1617:6;1604:20;1642:78;1716:3;1708:6;1701:4;1693:6;1689:17;1642:78;:::i;:::-;1633:87;;1516:210;;;;;:::o;1746:273::-;;1851:3;1844:4;1836:6;1832:17;1828:27;1818:2;;1869:1;1866;1859:12;1818:2;1909:6;1896:20;1934:79;2009:3;2001:6;1994:4;1986:6;1982:17;1934:79;:::i;:::-;1925:88;;1808:211;;;;;:::o;2025:139::-;;2109:6;2096:20;2087:29;;2125:33;2152:5;2125:33;:::i;:::-;2077:87;;;;:::o;2170:262::-;;2278:2;2266:9;2257:7;2253:23;2249:32;2246:2;;;2294:1;2291;2284:12;2246:2;2337:1;2362:53;2407:7;2398:6;2387:9;2383:22;2362:53;:::i;:::-;2352:63;;2308:117;2236:196;;;;:::o;2438:278::-;;2554:2;2542:9;2533:7;2529:23;2525:32;2522:2;;;2570:1;2567;2560:12;2522:2;2613:1;2638:61;2691:7;2682:6;2671:9;2667:22;2638:61;:::i;:::-;2628:71;;2584:125;2512:204;;;;:::o;2722:407::-;;;2847:2;2835:9;2826:7;2822:23;2818:32;2815:2;;;2863:1;2860;2853:12;2815:2;2906:1;2931:53;2976:7;2967:6;2956:9;2952:22;2931:53;:::i;:::-;2921:63;;2877:117;3033:2;3059:53;3104:7;3095:6;3084:9;3080:22;3059:53;:::i;:::-;3049:63;;3004:118;2805:324;;;;;:::o;3135:552::-;;;;3277:2;3265:9;3256:7;3252:23;3248:32;3245:2;;;3293:1;3290;3283:12;3245:2;3336:1;3361:53;3406:7;3397:6;3386:9;3382:22;3361:53;:::i;:::-;3351:63;;3307:117;3463:2;3489:53;3534:7;3525:6;3514:9;3510:22;3489:53;:::i;:::-;3479:63;;3434:118;3591:2;3617:53;3662:7;3653:6;3642:9;3638:22;3617:53;:::i;:::-;3607:63;;3562:118;3235:452;;;;;:::o;3693:809::-;;;;;3861:3;3849:9;3840:7;3836:23;3832:33;3829:2;;;3878:1;3875;3868:12;3829:2;3921:1;3946:53;3991:7;3982:6;3971:9;3967:22;3946:53;:::i;:::-;3936:63;;3892:117;4048:2;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4019:118;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;4332:2;4321:9;4317:18;4304:32;4363:18;4355:6;4352:30;4349:2;;;4395:1;4392;4385:12;4349:2;4423:62;4477:7;4468:6;4457:9;4453:22;4423:62;:::i;:::-;4413:72;;4275:220;3819:683;;;;;;;:::o;4508:401::-;;;4630:2;4618:9;4609:7;4605:23;4601:32;4598:2;;;4646:1;4643;4636:12;4598:2;4689:1;4714:53;4759:7;4750:6;4739:9;4735:22;4714:53;:::i;:::-;4704:63;;4660:117;4816:2;4842:50;4884:7;4875:6;4864:9;4860:22;4842:50;:::i;:::-;4832:60;;4787:115;4588:321;;;;;:::o;4915:407::-;;;5040:2;5028:9;5019:7;5015:23;5011:32;5008:2;;;5056:1;5053;5046:12;5008:2;5099:1;5124:53;5169:7;5160:6;5149:9;5145:22;5124:53;:::i;:::-;5114:63;;5070:117;5226:2;5252:53;5297:7;5288:6;5277:9;5273:22;5252:53;:::i;:::-;5242:63;;5197:118;4998:324;;;;;:::o;5328:256::-;;5433:2;5421:9;5412:7;5408:23;5404:32;5401:2;;;5449:1;5446;5439:12;5401:2;5492:1;5517:50;5559:7;5550:6;5539:9;5535:22;5517:50;:::i;:::-;5507:60;;5463:114;5391:193;;;;:::o;5590:260::-;;5697:2;5685:9;5676:7;5672:23;5668:32;5665:2;;;5713:1;5710;5703:12;5665:2;5756:1;5781:52;5825:7;5816:6;5805:9;5801:22;5781:52;:::i;:::-;5771:62;;5727:116;5655:195;;;;:::o;5856:282::-;;5974:2;5962:9;5953:7;5949:23;5945:32;5942:2;;;5990:1;5987;5980:12;5942:2;6033:1;6058:63;6113:7;6104:6;6093:9;6089:22;6058:63;:::i;:::-;6048:73;;6004:127;5932:206;;;;:::o;6144:375::-;;6262:2;6250:9;6241:7;6237:23;6233:32;6230:2;;;6278:1;6275;6268:12;6230:2;6349:1;6338:9;6334:17;6321:31;6379:18;6371:6;6368:30;6365:2;;;6411:1;6408;6401:12;6365:2;6439:63;6494:7;6485:6;6474:9;6470:22;6439:63;:::i;:::-;6429:73;;6292:220;6220:299;;;;:::o;6525:262::-;;6633:2;6621:9;6612:7;6608:23;6604:32;6601:2;;;6649:1;6646;6639:12;6601:2;6692:1;6717:53;6762:7;6753:6;6742:9;6738:22;6717:53;:::i;:::-;6707:63;;6663:117;6591:196;;;;:::o;6793:118::-;6880:24;6898:5;6880:24;:::i;:::-;6875:3;6868:37;6858:53;;:::o;6917:109::-;6998:21;7013:5;6998:21;:::i;:::-;6993:3;6986:34;6976:50;;:::o;7032:360::-;;7146:38;7178:5;7146:38;:::i;:::-;7200:70;7263:6;7258:3;7200:70;:::i;:::-;7193:77;;7279:52;7324:6;7319:3;7312:4;7305:5;7301:16;7279:52;:::i;:::-;7356:29;7378:6;7356:29;:::i;:::-;7351:3;7347:39;7340:46;;7122:270;;;;;:::o;7398:364::-;;7514:39;7547:5;7514:39;:::i;:::-;7569:71;7633:6;7628:3;7569:71;:::i;:::-;7562:78;;7649:52;7694:6;7689:3;7682:4;7675:5;7671:16;7649:52;:::i;:::-;7726:29;7748:6;7726:29;:::i;:::-;7721:3;7717:39;7710:46;;7490:272;;;;;:::o;7768:377::-;;7902:39;7935:5;7902:39;:::i;:::-;7957:89;8039:6;8034:3;7957:89;:::i;:::-;7950:96;;8055:52;8100:6;8095:3;8088:4;8081:5;8077:16;8055:52;:::i;:::-;8132:6;8127:3;8123:16;8116:23;;7878:267;;;;;:::o;8175:845::-;;8315:5;8309:12;8344:36;8370:9;8344:36;:::i;:::-;8396:89;8478:6;8473:3;8396:89;:::i;:::-;8389:96;;8516:1;8505:9;8501:17;8532:1;8527:137;;;;8678:1;8673:341;;;;8494:520;;8527:137;8611:4;8607:9;8596;8592:25;8587:3;8580:38;8647:6;8642:3;8638:16;8631:23;;8527:137;;8673:341;8740:38;8772:5;8740:38;:::i;:::-;8800:1;8814:154;8828:6;8825:1;8822:13;8814:154;;;8902:7;8896:14;8892:1;8887:3;8883:11;8876:35;8952:1;8943:7;8939:15;8928:26;;8850:4;8847:1;8843:12;8838:17;;8814:154;;;8997:6;8992:3;8988:16;8981:23;;8680:334;;8494:520;;8282:738;;;;;;:::o;9026:366::-;;9189:67;9253:2;9248:3;9189:67;:::i;:::-;9182:74;;9265:93;9354:3;9265:93;:::i;:::-;9383:2;9378:3;9374:12;9367:19;;9172:220;;;:::o;9398:366::-;;9561:67;9625:2;9620:3;9561:67;:::i;:::-;9554:74;;9637:93;9726:3;9637:93;:::i;:::-;9755:2;9750:3;9746:12;9739:19;;9544:220;;;:::o;9770:366::-;;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9916:220;;;:::o;10142:366::-;;10305:67;10369:2;10364:3;10305:67;:::i;:::-;10298:74;;10381:93;10470:3;10381:93;:::i;:::-;10499:2;10494:3;10490:12;10483:19;;10288:220;;;:::o;10514:366::-;;10677:67;10741:2;10736:3;10677:67;:::i;:::-;10670:74;;10753:93;10842:3;10753:93;:::i;:::-;10871:2;10866:3;10862:12;10855:19;;10660:220;;;:::o;10886:366::-;;11049:67;11113:2;11108:3;11049:67;:::i;:::-;11042:74;;11125:93;11214:3;11125:93;:::i;:::-;11243:2;11238:3;11234:12;11227:19;;11032:220;;;:::o;11258:366::-;;11421:67;11485:2;11480:3;11421:67;:::i;:::-;11414:74;;11497:93;11586:3;11497:93;:::i;:::-;11615:2;11610:3;11606:12;11599:19;;11404:220;;;:::o;11630:366::-;;11793:67;11857:2;11852:3;11793:67;:::i;:::-;11786:74;;11869:93;11958:3;11869:93;:::i;:::-;11987:2;11982:3;11978:12;11971:19;;11776:220;;;:::o;12002:366::-;;12165:67;12229:2;12224:3;12165:67;:::i;:::-;12158:74;;12241:93;12330:3;12241:93;:::i;:::-;12359:2;12354:3;12350:12;12343:19;;12148:220;;;:::o;12374:366::-;;12537:67;12601:2;12596:3;12537:67;:::i;:::-;12530:74;;12613:93;12702:3;12613:93;:::i;:::-;12731:2;12726:3;12722:12;12715:19;;12520:220;;;:::o;12746:366::-;;12909:67;12973:2;12968:3;12909:67;:::i;:::-;12902:74;;12985:93;13074:3;12985:93;:::i;:::-;13103:2;13098:3;13094:12;13087:19;;12892:220;;;:::o;13118:366::-;;13281:67;13345:2;13340:3;13281:67;:::i;:::-;13274:74;;13357:93;13446:3;13357:93;:::i;:::-;13475:2;13470:3;13466:12;13459:19;;13264:220;;;:::o;13490:366::-;;13653:67;13717:2;13712:3;13653:67;:::i;:::-;13646:74;;13729:93;13818:3;13729:93;:::i;:::-;13847:2;13842:3;13838:12;13831:19;;13636:220;;;:::o;13862:366::-;;14025:67;14089:2;14084:3;14025:67;:::i;:::-;14018:74;;14101:93;14190:3;14101:93;:::i;:::-;14219:2;14214:3;14210:12;14203:19;;14008:220;;;:::o;14234:366::-;;14397:67;14461:2;14456:3;14397:67;:::i;:::-;14390:74;;14473:93;14562:3;14473:93;:::i;:::-;14591:2;14586:3;14582:12;14575:19;;14380:220;;;:::o;14606:366::-;;14769:67;14833:2;14828:3;14769:67;:::i;:::-;14762:74;;14845:93;14934:3;14845:93;:::i;:::-;14963:2;14958:3;14954:12;14947:19;;14752:220;;;:::o;14978:366::-;;15141:67;15205:2;15200:3;15141:67;:::i;:::-;15134:74;;15217:93;15306:3;15217:93;:::i;:::-;15335:2;15330:3;15326:12;15319:19;;15124:220;;;:::o;15350:366::-;;15513:67;15577:2;15572:3;15513:67;:::i;:::-;15506:74;;15589:93;15678:3;15589:93;:::i;:::-;15707:2;15702:3;15698:12;15691:19;;15496:220;;;:::o;15722:400::-;;15903:84;15985:1;15980:3;15903:84;:::i;:::-;15896:91;;15996:93;16085:3;15996:93;:::i;:::-;16114:1;16109:3;16105:11;16098:18;;15886:236;;;:::o;16128:400::-;;16309:84;16391:1;16386:3;16309:84;:::i;:::-;16302:91;;16402:93;16491:3;16402:93;:::i;:::-;16520:1;16515:3;16511:11;16504:18;;16292:236;;;:::o;16534:366::-;;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16680:220;;;:::o;16906:366::-;;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;17052:220;;;:::o;17278:366::-;;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17424:220;;;:::o;17650:366::-;;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17796:220;;;:::o;18022:366::-;;18185:67;18249:2;18244:3;18185:67;:::i;:::-;18178:74;;18261:93;18350:3;18261:93;:::i;:::-;18379:2;18374:3;18370:12;18363:19;;18168:220;;;:::o;18394:366::-;;18557:67;18621:2;18616:3;18557:67;:::i;:::-;18550:74;;18633:93;18722:3;18633:93;:::i;:::-;18751:2;18746:3;18742:12;18735:19;;18540:220;;;:::o;18766:400::-;;18947:84;19029:1;19024:3;18947:84;:::i;:::-;18940:91;;19040:93;19129:3;19040:93;:::i;:::-;19158:1;19153:3;19149:11;19142:18;;18930:236;;;:::o;19172:118::-;19259:24;19277:5;19259:24;:::i;:::-;19254:3;19247:37;19237:53;;:::o;19296:115::-;19381:23;19398:5;19381:23;:::i;:::-;19376:3;19369:36;19359:52;;:::o;19417:112::-;19500:22;19516:5;19500:22;:::i;:::-;19495:3;19488:35;19478:51;;:::o;19535:435::-;;19737:95;19828:3;19819:6;19737:95;:::i;:::-;19730:102;;19849:95;19940:3;19931:6;19849:95;:::i;:::-;19842:102;;19961:3;19954:10;;19719:251;;;;;:::o;19976:1115::-;;20422:92;20510:3;20501:6;20422:92;:::i;:::-;20415:99;;20531:92;20619:3;20610:6;20531:92;:::i;:::-;20524:99;;20640:148;20784:3;20640:148;:::i;:::-;20633:155;;20805:95;20896:3;20887:6;20805:95;:::i;:::-;20798:102;;20917:148;21061:3;20917:148;:::i;:::-;20910:155;;21082:3;21075:10;;20404:687;;;;;;:::o;21097:1221::-;;21596:92;21684:3;21675:6;21596:92;:::i;:::-;21589:99;;21705:92;21793:3;21784:6;21705:92;:::i;:::-;21698:99;;21814:148;21958:3;21814:148;:::i;:::-;21807:155;;21979:148;22123:3;21979:148;:::i;:::-;21972:155;;22144:148;22288:3;22144:148;:::i;:::-;22137:155;;22309:3;22302:10;;21578:740;;;;;:::o;22324:222::-;;22455:2;22444:9;22440:18;22432:26;;22468:71;22536:1;22525:9;22521:17;22512:6;22468:71;:::i;:::-;22422:124;;;;:::o;22552:640::-;;22785:3;22774:9;22770:19;22762:27;;22799:71;22867:1;22856:9;22852:17;22843:6;22799:71;:::i;:::-;22880:72;22948:2;22937:9;22933:18;22924:6;22880:72;:::i;:::-;22962;23030:2;23019:9;23015:18;23006:6;22962:72;:::i;:::-;23081:9;23075:4;23071:20;23066:2;23055:9;23051:18;23044:48;23109:76;23180:4;23171:6;23109:76;:::i;:::-;23101:84;;22752:440;;;;;;;:::o;23198:210::-;;23323:2;23312:9;23308:18;23300:26;;23336:65;23398:1;23387:9;23383:17;23374:6;23336:65;:::i;:::-;23290:118;;;;:::o;23414:313::-;;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:78;23715:4;23706:6;23642:78;:::i;:::-;23634:86;;23532:195;;;;:::o;23733:419::-;;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:131;24140:4;24014:131;:::i;:::-;24006:139;;23904:248;;;:::o;24158:419::-;;24362:2;24351:9;24347:18;24339:26;;24411:9;24405:4;24401:20;24397:1;24386:9;24382:17;24375:47;24439:131;24565:4;24439:131;:::i;:::-;24431:139;;24329:248;;;:::o;24583:419::-;;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:131;24990:4;24864:131;:::i;:::-;24856:139;;24754:248;;;:::o;25008:419::-;;25212:2;25201:9;25197:18;25189:26;;25261:9;25255:4;25251:20;25247:1;25236:9;25232:17;25225:47;25289:131;25415:4;25289:131;:::i;:::-;25281:139;;25179:248;;;:::o;25433:419::-;;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25604:248;;;:::o;25858:419::-;;26062:2;26051:9;26047:18;26039:26;;26111:9;26105:4;26101:20;26097:1;26086:9;26082:17;26075:47;26139:131;26265:4;26139:131;:::i;:::-;26131:139;;26029:248;;;:::o;26283:419::-;;26487:2;26476:9;26472:18;26464:26;;26536:9;26530:4;26526:20;26522:1;26511:9;26507:17;26500:47;26564:131;26690:4;26564:131;:::i;:::-;26556:139;;26454:248;;;:::o;26708:419::-;;26912:2;26901:9;26897:18;26889:26;;26961:9;26955:4;26951:20;26947:1;26936:9;26932:17;26925:47;26989:131;27115:4;26989:131;:::i;:::-;26981:139;;26879:248;;;:::o;27133:419::-;;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27304:248;;;:::o;27558:419::-;;27762:2;27751:9;27747:18;27739:26;;27811:9;27805:4;27801:20;27797:1;27786:9;27782:17;27775:47;27839:131;27965:4;27839:131;:::i;:::-;27831:139;;27729:248;;;:::o;27983:419::-;;28187:2;28176:9;28172:18;28164:26;;28236:9;28230:4;28226:20;28222:1;28211:9;28207:17;28200:47;28264:131;28390:4;28264:131;:::i;:::-;28256:139;;28154:248;;;:::o;28408:419::-;;28612:2;28601:9;28597:18;28589:26;;28661:9;28655:4;28651:20;28647:1;28636:9;28632:17;28625:47;28689:131;28815:4;28689:131;:::i;:::-;28681:139;;28579:248;;;:::o;28833:419::-;;29037:2;29026:9;29022:18;29014:26;;29086:9;29080:4;29076:20;29072:1;29061:9;29057:17;29050:47;29114:131;29240:4;29114:131;:::i;:::-;29106:139;;29004:248;;;:::o;29258:419::-;;29462:2;29451:9;29447:18;29439:26;;29511:9;29505:4;29501:20;29497:1;29486:9;29482:17;29475:47;29539:131;29665:4;29539:131;:::i;:::-;29531:139;;29429:248;;;:::o;29683:419::-;;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29854:248;;;:::o;30108:419::-;;30312:2;30301:9;30297:18;30289:26;;30361:9;30355:4;30351:20;30347:1;30336:9;30332:17;30325:47;30389:131;30515:4;30389:131;:::i;:::-;30381:139;;30279:248;;;:::o;30533:419::-;;30737:2;30726:9;30722:18;30714:26;;30786:9;30780:4;30776:20;30772:1;30761:9;30757:17;30750:47;30814:131;30940:4;30814:131;:::i;:::-;30806:139;;30704:248;;;:::o;30958:419::-;;31162:2;31151:9;31147:18;31139:26;;31211:9;31205:4;31201:20;31197:1;31186:9;31182:17;31175:47;31239:131;31365:4;31239:131;:::i;:::-;31231:139;;31129:248;;;:::o;31383:419::-;;31587:2;31576:9;31572:18;31564:26;;31636:9;31630:4;31626:20;31622:1;31611:9;31607:17;31600:47;31664:131;31790:4;31664:131;:::i;:::-;31656:139;;31554:248;;;:::o;31808:419::-;;32012:2;32001:9;31997:18;31989:26;;32061:9;32055:4;32051:20;32047:1;32036:9;32032:17;32025:47;32089:131;32215:4;32089:131;:::i;:::-;32081:139;;31979:248;;;:::o;32233:419::-;;32437:2;32426:9;32422:18;32414:26;;32486:9;32480:4;32476:20;32472:1;32461:9;32457:17;32450:47;32514:131;32640:4;32514:131;:::i;:::-;32506:139;;32404:248;;;:::o;32658:419::-;;32862:2;32851:9;32847:18;32839:26;;32911:9;32905:4;32901:20;32897:1;32886:9;32882:17;32875:47;32939:131;33065:4;32939:131;:::i;:::-;32931:139;;32829:248;;;:::o;33083:419::-;;33287:2;33276:9;33272:18;33264:26;;33336:9;33330:4;33326:20;33322:1;33311:9;33307:17;33300:47;33364:131;33490:4;33364:131;:::i;:::-;33356:139;;33254:248;;;:::o;33508:419::-;;33712:2;33701:9;33697:18;33689:26;;33761:9;33755:4;33751:20;33747:1;33736:9;33732:17;33725:47;33789:131;33915:4;33789:131;:::i;:::-;33781:139;;33679:248;;;:::o;33933:222::-;;34064:2;34053:9;34049:18;34041:26;;34077:71;34145:1;34134:9;34130:17;34121:6;34077:71;:::i;:::-;34031:124;;;;:::o;34161:218::-;;34290:2;34279:9;34275:18;34267:26;;34303:69;34369:1;34358:9;34354:17;34345:6;34303:69;:::i;:::-;34257:122;;;;:::o;34385:214::-;;34512:2;34501:9;34497:18;34489:26;;34525:67;34589:1;34578:9;34574:17;34565:6;34525:67;:::i;:::-;34479:120;;;;:::o;34605:129::-;;34666:20;;:::i;:::-;34656:30;;34695:33;34723:4;34715:6;34695:33;:::i;:::-;34646:88;;;:::o;34740:75::-;;34806:2;34800:9;34790:19;;34780:35;:::o;34821:307::-;;34972:18;34964:6;34961:30;34958:2;;;34994:18;;:::i;:::-;34958:2;35032:29;35054:6;35032:29;:::i;:::-;35024:37;;35116:4;35110;35106:15;35098:23;;34887:241;;;:::o;35134:308::-;;35286:18;35278:6;35275:30;35272:2;;;35308:18;;:::i;:::-;35272:2;35346:29;35368:6;35346:29;:::i;:::-;35338:37;;35430:4;35424;35420:15;35412:23;;35201:241;;;:::o;35448:141::-;;35520:3;35512:11;;35543:3;35540:1;35533:14;35577:4;35574:1;35564:18;35556:26;;35502:87;;;:::o;35595:98::-;;35680:5;35674:12;35664:22;;35653:40;;;:::o;35699:99::-;;35785:5;35779:12;35769:22;;35758:40;;;:::o;35804:168::-;;35921:6;35916:3;35909:19;35961:4;35956:3;35952:14;35937:29;;35899:73;;;;:::o;35978:169::-;;36096:6;36091:3;36084:19;36136:4;36131:3;36127:14;36112:29;;36074:73;;;;:::o;36153:148::-;;36292:3;36277:18;;36267:34;;;;:::o;36307:305::-;;36366:20;36384:1;36366:20;:::i;:::-;36361:25;;36400:20;36418:1;36400:20;:::i;:::-;36395:25;;36554:1;36486:66;36482:74;36479:1;36476:81;36473:2;;;36560:18;;:::i;:::-;36473:2;36604:1;36601;36597:9;36590:16;;36351:261;;;;:::o;36618:237::-;;36675:18;36691:1;36675:18;:::i;:::-;36670:23;;36707:18;36723:1;36707:18;:::i;:::-;36702:23;;36797:1;36791:4;36787:12;36784:1;36781:19;36778:2;;;36803:18;;:::i;:::-;36778:2;36847:1;36844;36840:9;36833:16;;36660:195;;;;:::o;36861:185::-;;36918:20;36936:1;36918:20;:::i;:::-;36913:25;;36952:20;36970:1;36952:20;:::i;:::-;36947:25;;36991:1;36981:2;;36996:18;;:::i;:::-;36981:2;37038:1;37035;37031:9;37026:14;;36903:143;;;;:::o;37052:348::-;;37115:20;37133:1;37115:20;:::i;:::-;37110:25;;37149:20;37167:1;37149:20;:::i;:::-;37144:25;;37337:1;37269:66;37265:74;37262:1;37259:81;37254:1;37247:9;37240:17;37236:105;37233:2;;;37344:18;;:::i;:::-;37233:2;37392:1;37389;37385:9;37374:20;;37100:300;;;;:::o;37406:191::-;;37466:20;37484:1;37466:20;:::i;:::-;37461:25;;37500:20;37518:1;37500:20;:::i;:::-;37495:25;;37539:1;37536;37533:8;37530:2;;;37544:18;;:::i;:::-;37530:2;37589:1;37586;37582:9;37574:17;;37451:146;;;;:::o;37603:96::-;;37669:24;37687:5;37669:24;:::i;:::-;37658:35;;37648:51;;;:::o;37705:104::-;;37779:24;37797:5;37779:24;:::i;:::-;37768:35;;37758:51;;;:::o;37815:90::-;;37892:5;37885:13;37878:21;37867:32;;37857:48;;;:::o;37911:149::-;;37987:66;37980:5;37976:78;37965:89;;37955:105;;;:::o;38066:89::-;;38142:6;38135:5;38131:18;38120:29;;38110:45;;;:::o;38161:126::-;;38238:42;38231:5;38227:54;38216:65;;38206:81;;;:::o;38293:77::-;;38359:5;38348:16;;38338:32;;;:::o;38376:93::-;;38452:10;38445:5;38441:22;38430:33;;38420:49;;;:::o;38475:86::-;;38550:4;38543:5;38539:16;38528:27;;38518:43;;;:::o;38567:154::-;38651:6;38646:3;38641;38628:30;38713:1;38704:6;38699:3;38695:16;38688:27;38618:103;;;:::o;38727:307::-;38795:1;38805:113;38819:6;38816:1;38813:13;38805:113;;;38904:1;38899:3;38895:11;38889:18;38885:1;38880:3;38876:11;38869:39;38841:2;38838:1;38834:10;38829:15;;38805:113;;;38936:6;38933:1;38930:13;38927:2;;;39016:1;39007:6;39002:3;38998:16;38991:27;38927:2;38776:258;;;;:::o;39040:320::-;;39121:1;39115:4;39111:12;39101:22;;39168:1;39162:4;39158:12;39189:18;39179:2;;39245:4;39237:6;39233:17;39223:27;;39179:2;39307;39299:6;39296:14;39276:18;39273:38;39270:2;;;39326:18;;:::i;:::-;39270:2;39091:269;;;;:::o;39366:281::-;39449:27;39471:4;39449:27;:::i;:::-;39441:6;39437:40;39579:6;39567:10;39564:22;39543:18;39531:10;39528:34;39525:62;39522:2;;;39590:18;;:::i;:::-;39522:2;39630:10;39626:2;39619:22;39409:238;;;:::o;39653:171::-;;39714:23;39731:5;39714:23;:::i;:::-;39705:32;;39759:6;39752:5;39749:17;39746:2;;;39769:18;;:::i;:::-;39746:2;39816:1;39809:5;39805:13;39798:20;;39695:129;;;:::o;39830:233::-;;39892:24;39910:5;39892:24;:::i;:::-;39883:33;;39938:66;39931:5;39928:77;39925:2;;;40008:18;;:::i;:::-;39925:2;40055:1;40048:5;40044:13;40037:20;;39873:190;;;:::o;40069:175::-;;40130:23;40147:5;40130:23;:::i;:::-;40121:32;;40175:10;40168:5;40165:21;40162:2;;;40189:18;;:::i;:::-;40162:2;40236:1;40229:5;40225:13;40218:20;;40111:133;;;:::o;40250:176::-;;40299:20;40317:1;40299:20;:::i;:::-;40294:25;;40333:20;40351:1;40333:20;:::i;:::-;40328:25;;40372:1;40362:2;;40377:18;;:::i;:::-;40362:2;40418:1;40415;40411:9;40406:14;;40284:142;;;;:::o;40432:180::-;40480:77;40477:1;40470:88;40577:4;40574:1;40567:15;40601:4;40598:1;40591:15;40618:180;40666:77;40663:1;40656:88;40763:4;40760:1;40753:15;40787:4;40784:1;40777:15;40804:180;40852:77;40849:1;40842:88;40949:4;40946:1;40939:15;40973:4;40970:1;40963:15;40990:180;41038:77;41035:1;41028:88;41135:4;41132:1;41125:15;41159:4;41156:1;41149:15;41176:102;;41268:2;41264:7;41259:2;41252:5;41248:14;41244:28;41234:38;;41224:54;;;:::o;41284:237::-;41424:34;41420:1;41412:6;41408:14;41401:58;41493:20;41488:2;41480:6;41476:15;41469:45;41390:131;:::o;41527:240::-;41667:34;41663:1;41655:6;41651:14;41644:58;41736:23;41731:2;41723:6;41719:15;41712:48;41633:134;:::o;41773:178::-;41913:30;41909:1;41901:6;41897:14;41890:54;41879:72;:::o;41957:221::-;42097:34;42093:1;42085:6;42081:14;42074:58;42166:4;42161:2;42153:6;42149:15;42142:29;42063:115;:::o;42184:223::-;42324:34;42320:1;42312:6;42308:14;42301:58;42393:6;42388:2;42380:6;42376:15;42369:31;42290:117;:::o;42413:175::-;42553:27;42549:1;42541:6;42537:14;42530:51;42519:69;:::o;42594:240::-;42734:34;42730:1;42722:6;42718:14;42711:58;42803:23;42798:2;42790:6;42786:15;42779:48;42700:134;:::o;42840:231::-;42980:34;42976:1;42968:6;42964:14;42957:58;43049:14;43044:2;43036:6;43032:15;43025:39;42946:125;:::o;43077:289::-;43217:34;43213:1;43205:6;43201:14;43194:58;43286:34;43281:2;43273:6;43269:15;43262:59;43355:3;43350:2;43342:6;43338:15;43331:28;43183:183;:::o;43372:243::-;43512:34;43508:1;43500:6;43496:14;43489:58;43581:26;43576:2;43568:6;43564:15;43557:51;43478:137;:::o;43621:229::-;43761:34;43757:1;43749:6;43745:14;43738:58;43830:12;43825:2;43817:6;43813:15;43806:37;43727:123;:::o;43856:228::-;43996:34;43992:1;43984:6;43980:14;43973:58;44065:11;44060:2;44052:6;44048:15;44041:36;43962:122;:::o;44090:233::-;44230:34;44226:1;44218:6;44214:14;44207:58;44299:16;44294:2;44286:6;44282:15;44275:41;44196:127;:::o;44329:218::-;44469:34;44465:1;44457:6;44453:14;44446:58;44534:9;44529:2;44521:6;44517:15;44510:34;44435:112;:::o;44549:174::-;44685:34;44681:1;44673:6;44669:14;44662:58;44655:68;:::o;44725:224::-;44861:34;44857:1;44849:6;44845:14;44838:58;44926:19;44921:2;44913:6;44909:15;44902:44;44831:118;:::o;44951:219::-;45087:34;45083:1;45075:6;45071:14;45064:58;45152:14;45147:2;45139:6;45135:15;45128:39;45057:113;:::o;45172:230::-;45308:34;45304:1;45296:6;45292:14;45285:58;45373:25;45368:2;45360:6;45356:15;45349:50;45278:124;:::o;45404:147::-;45540:7;45536:1;45528:6;45524:14;45517:31;45510:41;:::o;45553:147::-;45689:7;45685:1;45677:6;45673:14;45666:31;45659:41;:::o;45702:216::-;45838:34;45834:1;45826:6;45822:14;45815:58;45903:11;45898:2;45890:6;45886:15;45879:36;45808:110;:::o;45920:222::-;46056:34;46052:1;46044:6;46040:14;46033:58;46121:17;46116:2;46108:6;46104:15;46097:42;46026:116;:::o;46144:208::-;46280:34;46276:1;46268:6;46264:14;46257:58;46345:3;46340:2;46332:6;46328:15;46321:28;46250:102;:::o;46354:224::-;46490:34;46486:1;46478:6;46474:14;46467:58;46555:19;46550:2;46542:6;46538:15;46531:44;46460:118;:::o;46580:235::-;46716:34;46712:1;46704:6;46700:14;46693:58;46781:30;46776:2;46768:6;46764:15;46757:55;46686:129;:::o;46817:234::-;46953:34;46949:1;46941:6;46937:14;46930:58;47018:29;47013:2;47005:6;47001:15;46994:54;46923:128;:::o;47053:143::-;47189:3;47185:1;47177:6;47173:14;47166:27;47159:37;:::o;47198:114::-;47267:24;47285:5;47267:24;:::i;:::-;47260:5;47257:35;47247:2;;47306:1;47303;47296:12;47247:2;47241:71;:::o;47314:130::-;47391:32;47417:5;47391:32;:::i;:::-;47384:5;47381:43;47371:2;;47438:1;47435;47428:12;47371:2;47365:79;:::o;47446:108::-;47512:21;47527:5;47512:21;:::i;:::-;47505:5;47502:32;47492:2;;47548:1;47545;47538:12;47492:2;47486:68;:::o;47556:112::-;47624:23;47641:5;47624:23;:::i;:::-;47617:5;47614:34;47604:2;;47662:1;47659;47652:12;47604:2;47598:70;:::o;47670:114::-;47739:24;47757:5;47739:24;:::i;:::-;47732:5;47729:35;47719:2;;47778:1;47775;47768:12;47719:2;47713:71;:::o
Swarm Source
ipfs://e4c7d107e3dacfd9c0f28fca7604ec0e5b1fb3eb67044f075d001815fa797641
Loading...
Loading
Loading...
Loading
OVERVIEW
XonaRobotics is a collectible NFT platform based on Ethereum blockchain with a limit of 1 million unique, randomly generated robots. The NFTs were created using an algorithm which differentiates patterns to achieve random appearances, attributes and characteristics.Net Worth in USD
$37.14
Net Worth in ETH
0.016
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,321.05 | 0.016 | $37.14 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.