Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 99 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 13148057 | 1646 days ago | IN | 0 ETH | 0.00692265 | ||||
| Mint | 12876637 | 1688 days ago | IN | 0 ETH | 0.0059256 | ||||
| Mint | 12876599 | 1688 days ago | IN | 0 ETH | 0.00567897 | ||||
| Mint | 12876552 | 1688 days ago | IN | 0 ETH | 0.0061728 | ||||
| Mint | 12874323 | 1688 days ago | IN | 0 ETH | 0.00469132 | ||||
| Mint | 12874283 | 1688 days ago | IN | 0 ETH | 0.00395059 | ||||
| Mint | 12874230 | 1688 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12855834 | 1691 days ago | IN | 0 ETH | 0.00469132 | ||||
| Mint | 12855747 | 1691 days ago | IN | 0 ETH | 0.00370368 | ||||
| Set Approval For... | 12852129 | 1692 days ago | IN | 0 ETH | 0.00087675 | ||||
| Mint | 12842998 | 1693 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12842971 | 1693 days ago | IN | 0 ETH | 0.00493752 | ||||
| Mint | 12842926 | 1693 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12842916 | 1693 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12842881 | 1693 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12842796 | 1693 days ago | IN | 0 ETH | 0.00469132 | ||||
| Mint | 12842786 | 1693 days ago | IN | 0 ETH | 0.00444441 | ||||
| Mint | 12836829 | 1694 days ago | IN | 0 ETH | 0.0071601 | ||||
| Mint | 12836542 | 1694 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12836332 | 1694 days ago | IN | 0 ETH | 0.0061728 | ||||
| Mint | 12836258 | 1694 days ago | IN | 0 ETH | 0.0059256 | ||||
| Mint | 12836239 | 1694 days ago | IN | 0 ETH | 0.00592588 | ||||
| Mint | 12836218 | 1694 days ago | IN | 0 ETH | 0.00691353 | ||||
| Mint | 12836105 | 1694 days ago | IN | 0 ETH | 0.00518515 | ||||
| Mint | 12836075 | 1694 days ago | IN | 0 ETH | 0.0051849 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 3 internal transactions
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AMENFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-08
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
library Strings {
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
uint256 index = digits - 1;
temp = value;
while (temp != 0) {
buffer[index--] = bytes1(uint8(48 + temp % 10));
temp /= 10;
}
return string(buffer);
}
}
library EnumerableMap {
struct MapEntry {
bytes32 _key;
bytes32 _value;
}
struct Map {
MapEntry[] _entries;
mapping (bytes32 => uint256) _indexes;
}
function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
uint256 keyIndex = map._indexes[key];
if (keyIndex == 0) { // Equivalent to !contains(map, key)
map._entries.push(MapEntry({ _key: key, _value: value }));
map._indexes[key] = map._entries.length;
return true;
} else {
map._entries[keyIndex - 1]._value = value;
return false;
}
}
function _remove(Map storage map, bytes32 key) private returns (bool) {
uint256 keyIndex = map._indexes[key];
if (keyIndex != 0) { // Equivalent to contains(map, key)
uint256 toDeleteIndex = keyIndex - 1;
uint256 lastIndex = map._entries.length - 1;
MapEntry storage lastEntry = map._entries[lastIndex];
map._entries[toDeleteIndex] = lastEntry;
map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based
map._entries.pop();
delete map._indexes[key];
return true;
} else {
return false;
}
}
function _contains(Map storage map, bytes32 key) private view returns (bool) {
return map._indexes[key] != 0;
}
function _length(Map storage map) private view returns (uint256) {
return map._entries.length;
}
function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
require(map._entries.length > index, "EnumerableMap: index out of bounds");
MapEntry storage entry = map._entries[index];
return (entry._key, entry._value);
}
function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
uint256 keyIndex = map._indexes[key];
if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
}
function _get(Map storage map, bytes32 key) private view returns (bytes32) {
uint256 keyIndex = map._indexes[key];
require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
return map._entries[keyIndex - 1]._value; // All indexes are 1-based
}
function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
uint256 keyIndex = map._indexes[key];
require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
return map._entries[keyIndex - 1]._value; // All indexes are 1-based
}
struct UintToAddressMap {
Map _inner;
}
function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
}
function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
return _remove(map._inner, bytes32(key));
}
function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
return _contains(map._inner, bytes32(key));
}
function length(UintToAddressMap storage map) internal view returns (uint256) {
return _length(map._inner);
}
function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
(bytes32 key, bytes32 value) = _at(map._inner, index);
return (uint256(key), address(uint160(uint256(value))));
}
function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
(bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
return (success, address(uint160(uint256(value))));
}
function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
return address(uint160(uint256(_get(map._inner, bytes32(key)))));
}
function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
}
}
library EnumerableSet {
struct Set {
bytes32[] _values;
mapping (bytes32 => uint256) _indexes;
}
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
function _remove(Set storage set, bytes32 value) private returns (bool) {
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) { // Equivalent to contains(set, value)
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
bytes32 lastvalue = set._values[lastIndex];
set._values[toDeleteIndex] = lastvalue;
set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based
set._values.pop();
delete set._indexes[value];
return true;
} else {
return false;
}
}
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
function _at(Set storage set, uint256 index) private view returns (bytes32) {
require(set._values.length > index, "EnumerableSet: index out of bounds");
return set._values[index];
}
struct Bytes32Set {
Set _inner;
}
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
struct AddressSet {
Set _inner;
}
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
struct UintSet {
Set _inner;
}
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
}
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);
}
interface IERC1155 is IERC165 {
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
event URI(string value, uint256 indexed id);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function balanceOf(address account, uint256 id) external view returns (uint256);
function royaltyFee(uint256 tokenId) external view returns(uint256);
function getCreator(uint256 tokenId) external view returns(address);
function tokenURI(uint256 tokenId) external view returns (string memory);
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
function setApprovalForAll(address operator, bool approved) external;
function isApprovedForAll(address account, address operator) external view returns (bool);
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}
interface IERC1155MetadataURI is IERC1155 {
}
interface IERC1155Receiver is IERC165 {
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
)
external
returns(bytes4);
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
)
external
returns(bytes4);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
contract ERC165 is IERC165 {
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () {
_registerInterface(_INTERFACE_ID_ERC165);
}
function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
return _supportedInterfaces[interfaceId];
}
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
/**
* @dev Integer modulo of two numbers, truncating the remainder.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly { size := extcodesize(account) }
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
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");
}
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");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using SafeMath for uint256;
using Address for address;
using Strings for uint256;
using EnumerableMap for EnumerableMap.UintToAddressMap;
// Mapping from token ID to account balances
mapping (uint256 => address) private creators;
mapping (uint256 => uint256) private _royaltyFee;
mapping (uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping (address => mapping(address => bool)) private _operatorApprovals;
string public tokenURIPrefix;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
EnumerableMap.UintToAddressMap private _tokenOwners;
string private _name;
string private _symbol;
bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;
bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;
constructor (string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_registerInterface(_INTERFACE_ID_ERC1155);
_registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Internal function to set the token URI for a given token.
* Reverts if the token ID does not exist.
* @param tokenId uint256 ID of the token to set its URI
* @param uri string URI to assign
*/
function _setTokenURI(uint256 tokenId, string memory uri) public {
_tokenURIs[tokenId] = uri;
}
/**
@notice Get the royalty associated with tokenID.
@param tokenId ID of the Token.
@return royaltyFee of given ID.
*/
function royaltyFee(uint256 tokenId) public view override returns(uint256) {
return _royaltyFee[tokenId];
}
/**
@notice Get the creator of given tokenID.
@param tokenId ID of the Token.
@return creator of given ID.
*/
function getCreator(uint256 tokenId) public view virtual override returns(address) {
return creators[tokenId];
}
/**
* @dev Internal function to set the token URI for all the tokens.
* @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
*/
function _setTokenURIPrefix(string memory _tokenURIPrefix) public {
tokenURIPrefix = _tokenURIPrefix;
}
/**
* @dev Returns an URI for a given token ID.
* Throws if the token ID does not exist. May return an empty string.
* @param tokenId uint256 ID of the token to query
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = tokenURIPrefix;
if (bytes(base).length == 0) {
return _tokenURI;
}
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return string(abi.encodePacked(base, tokenId.toString()));
}
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _tokenOwners.contains(tokenId);
}
/**
@notice Get the balance of an account's Tokens.
@param account The address of the token holder
@param tokenId ID of the Token
@return The owner's balance of the Token type requested
*/
function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
require(account != address(0), "ERC1155: balance query for the zero address");
return _balances[tokenId][account];
}
/**
@notice Get the balance of multiple account/token pairs
@param accounts The addresses of the token holders
@param ids ID of the Tokens
@return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
*/
function balanceOfBatch(
address[] memory accounts,
uint256[] memory ids
)
public
view
override
returns (uint256[] memory)
{
require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
batchBalances[i] = _balances[ids[i]][accounts[i]];
}
return batchBalances;
}
/**
@notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
@dev MUST emit the ApprovalForAll event on success.
@param operator Address to add to the set of authorized operators
@param approved True if the operator is approved, false to revoke approval
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(_msgSender() != operator, "ERC1155: setting approval status for self");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
@notice Queries the approval status of an operator for a given owner.
@param account The owner of the Tokens
@param operator Address of authorized operator
@return True if the operator is approved, false if not
*/
function isApprovedForAll(address account, address operator) public view override returns (bool) {
return _operatorApprovals[account][operator];
}
/**
@notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
MUST revert if `_to` is the zero address.
MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
MUST revert on any other error.
MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param from Source address
@param to Target address
@param tokenId ID of the token type
@param amount Transfer amount
@param data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
uint256 amount,
bytes memory data
)
public
virtual
override
{
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, _asSingletonArray(tokenId), _asSingletonArray(amount), data);
_balances[tokenId][from] = _balances[tokenId][from].sub(amount, "ERC1155: insufficient balance for transfer");
_balances[tokenId][to] = _balances[tokenId][to].add(amount);
emit TransferSingle(operator, from, to, tokenId, amount);
_doSafeTransferAcceptanceCheck(operator, from, to, tokenId, amount, data);
}
/**
@notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
@dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
MUST revert if `_to` is the zero address.
MUST revert if length of `_ids` is not the same as length of `_values`.
MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
MUST revert on any other error.
MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
@param from Source address
@param to Target address
@param tokenIds IDs of each token type (order and length must match _values array)
@param amounts Transfer amounts per token type (order and length must match _ids array)
@param data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory tokenIds,
uint256[] memory amounts,
bytes memory data
)
public
virtual
override
{
require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, tokenIds, amounts, data);
for (uint256 i = 0; i < tokenIds.length; ++i) {
uint256 tokenId = tokenIds[i];
uint256 amount = amounts[i];
_balances[tokenId][from] = _balances[tokenId][from].sub(
amount,
"ERC1155: insufficient balance for transfer"
);
_balances[tokenId][to] = _balances[tokenId][to].add(amount);
}
emit TransferBatch(operator, from, to, tokenIds, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, tokenIds, amounts, data);
}
/**
* @dev Internal function to mint a new token.
* Reverts if the given token ID already exists.
* @param tokenId uint256 ID of the token to be minted
* @param _supply uint256 supply of the token to be minted
* @param _uri string memory URI of the token to be minted
* @param _fee uint256 royalty of the token to be minted
*/
function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
require(!_exists(tokenId), "ERC1155: token already minted");
require(_supply != 0, "Supply should be positive");
require(bytes(_uri).length > 0, "uri should be set");
creators[tokenId] = msg.sender;
_tokenOwners.set(tokenId, msg.sender);
_royaltyFee[tokenId] = _fee;
_balances[tokenId][msg.sender] = _supply;
_setTokenURI(tokenId, _uri);
emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
emit URI(_uri, tokenId);
}
/**
* @dev version of {_mint}.
*
* Requirements:
*
* - `tokenIds` and `amounts` must have the same length.
*/
function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, tokenIds, amounts, data);
for (uint i = 0; i < tokenIds.length; i++) {
_balances[tokenIds[i]][to] = amounts[i].add(_balances[tokenIds[i]][to]);
}
emit TransferBatch(operator, address(0), to, tokenIds, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, tokenIds, amounts, data);
}
/**
* @dev Internal function to burn a specific token.
* Reverts if the token does not exist.
* Deprecated, use {ERC721-_burn} instead.
* @param account owner of the token to burn
* @param tokenId uint256 ID of the token being burned
* @param amount uint256 amount of supply being burned
*/
function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
require(account != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), _asSingletonArray(tokenId), _asSingletonArray(amount), "");
_balances[tokenId][account] = _balances[tokenId][account].sub(
amount,
"ERC_holderTokens1155: burn amount exceeds balance"
);
emit TransferSingle(operator, account, address(0), tokenId, amount);
}
/**
* @dev version of {_burn}.
* Requirements:
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), tokenIds, amounts, "");
for (uint i = 0; i < tokenIds.length; i++) {
_balances[tokenIds[i]][account] = _balances[tokenIds[i]][account].sub(
amounts[i],
"ERC1155: burn amount exceeds balance"
);
}
emit TransferBatch(operator, account, address(0), tokenIds, amounts);
}
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory tokenIds,
uint256[] memory amounts,
bytes memory data
)
internal virtual
{ }
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 tokenId,
uint256 amount,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155Received(operator, from, tokenId, amount, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory tokenIds,
uint256[] memory amounts,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, tokenIds, amounts, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
}
contract AMENFT is ERC1155 {
uint256 newItemId = 1;
address public owner;
struct Sign {
uint8 v;
bytes32 r;
bytes32 s;
}
constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC1155 (name, symbol) {
owner = msg.sender;
_setTokenURIPrefix(tokenURIPrefix);
}
modifier onlyOwner() {
require(owner == msg.sender, "Ownable: caller is not the owner");
_;
}
/** @dev change the Ownership from current owner to newOwner address
@param newOwner : newOwner address */
function ownerTransfership(address newOwner) public onlyOwner returns(bool){
require(newOwner != address(0), "Ownable: new owner is the zero address");
owner = newOwner;
return true;
}
/** @dev verify the tokenURI that should be verified by owner of the contract.
*requirements: signer must be owner of the contract
@param tokenURI string memory URI of token to be minted.
@param sign struct combination of uint8, bytes32, bytes 32 are v, r, s.
note : sign value must be in the order of v, r, s.
*/
function verifySign(string memory tokenURI, Sign memory sign) internal view {
bytes32 hash = keccak256(abi.encodePacked(this,tokenURI));
require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
}
function mint(string memory uri, uint256 supply, uint256 fee, Sign memory sign) public {
verifySign(uri, sign);
_mint(newItemId, supply, uri,fee);
newItemId = newItemId+1;
}
function burn(uint256 tokenId, uint256 supply) public {
_burn(msg.sender, tokenId, supply);
}
function burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) public {
_burnBatch(account, tokenIds, amounts);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"_setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURIPrefix","type":"string"}],"name":"_setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct AMENFT.Sign","name":"sign","type":"tuple"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"amount","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526001600b553480156200001657600080fd5b5060405162002b5b38038062002b5b8339810160408190526200003991620002bb565b82826200004d6301ffc9a760e01b620000c5565b81516200006290600990602085019062000162565b5080516200007890600a90602084019062000162565b506200008b636cdb3d1360e11b620000c5565b6200009d6303a24d0760e21b620000c5565b5050600c80546001600160a01b03191633179055620000bc8162000149565b5050506200039b565b6001600160e01b03198082161415620001245760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200015e90600590602084019062000162565b5050565b828054620001709062000348565b90600052602060002090601f016020900481019282620001945760008555620001df565b82601f10620001af57805160ff1916838001178555620001df565b82800160010185558215620001df579182015b82811115620001df578251825591602001919060010190620001c2565b50620001ed929150620001f1565b5090565b5b80821115620001ed5760008155600101620001f2565b600082601f83011262000219578081fd5b81516001600160401b038082111562000236576200023662000385565b604051601f8301601f19908116603f0116810190828211818310171562000261576200026162000385565b816040528381526020925086838588010111156200027d578485fd5b8491505b83821015620002a0578582018301518183018401529082019062000281565b83821115620002b157848385830101525b9695505050505050565b600080600060608486031215620002d0578283fd5b83516001600160401b0380821115620002e7578485fd5b620002f58783880162000208565b945060208601519150808211156200030b578384fd5b620003198783880162000208565b935060408601519150808211156200032f578283fd5b506200033e8682870162000208565b9150509250925092565b600181811c908216806200035d57607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127b080620003ab6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): AME NFT
Arg [1] : symbol (string): AMENFT
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 414d45204e465400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 414d454e46540000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
33972:2030:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20538:325;;;;;;:::i;:::-;;:::i;:::-;;;22601:25:1;;;22589:2;22574:18;20538:325:0;;;;;;;;18359:109;;;;;;:::i;:::-;;:::i;:::-;;12109:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12210:33:0;12186:4;12210:33;;;;;;;;;;;;;;12109:142;;;;13476:14:1;;13469:22;13451:41;;13439:2;13424:18;12109:142:0;13406:92:1;17883:100:0;;;:::i;:::-;;;;;;;:::i;26707:1280::-;;;;;;:::i;:::-;;:::i;19251:117::-;;;;;;:::i;:::-;;:::i;21173:634::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35846:153::-;;;;;;:::i;:::-;;:::i;34602:216::-;;;;;;:::i;:::-;;:::i;34036:20::-;;;;;-1:-1:-1;;;;;34036:20:0;;;;;;-1:-1:-1;;;;;11135:32:1;;;11117:51;;11105:2;11090:18;34036:20:0;11072:102:1;17991:104:0;;;:::i;22169:311::-;;;;;;:::i;:::-;;:::i;35731:107::-;;;;;;:::i;:::-;;:::i;17241:28::-;;;:::i;18647:121::-;;;;;;:::i;:::-;18713:7;18740:20;;;:11;:20;;;;;;;18647:121;19589:556;;;;;;:::i;:::-;;:::i;35517:206::-;;;;;;:::i;:::-;;:::i;18941:126::-;;;;;;:::i;:::-;19015:7;19042:17;;;:8;:17;;;;;;-1:-1:-1;;;;;19042:17:0;;18941:126;22769:160;;;;;;:::i;:::-;-1:-1:-1;;;;;22884:27:0;;;22860:4;22884:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22769:160;24092:964;;;;;;:::i;:::-;;:::i;20538:325::-;20621:7;20649:16;20657:7;20649;:16::i;:::-;20641:81;;;;-1:-1:-1;;;20641:81:0;;18767:2:1;20641:81:0;;;18749:21:1;18806:2;18786:18;;;18779:30;18845:34;18825:18;;;18818:62;-1:-1:-1;;;18896:18:1;;;18889:50;18956:19;;20641:81:0;;;;;;;;;-1:-1:-1;;;;;20741:21:0;;20733:77;;;;-1:-1:-1;;;20733:77:0;;15162:2:1;20733:77:0;;;15144:21:1;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:1;;;15284:41;15342:19;;20733:77:0;15134:233:1;20733:77:0;-1:-1:-1;20828:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;20828:27:0;;;;;;;;;;;;20538:325::o;18359:109::-;18435:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;18359:109;;:::o;17883:100::-;17937:13;17970:5;17963:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:100;:::o;26707:1280::-;26982:7;:14;26963:8;:15;:33;26955:86;;;;-1:-1:-1;;;26955:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27060:16:0;;27052:66;;;;-1:-1:-1;;;27052:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27151:20:0;;11601:10;27151:20;;:60;;-1:-1:-1;27175:36:0;27192:4;11601:10;22769:160;:::i;27175:36::-;27129:160;;;;-1:-1:-1;;;27129:160:0;;17989:2:1;27129:160:0;;;17971:21:1;18028:2;18008:18;;;18001:30;18067:34;18047:18;;;18040:62;-1:-1:-1;;;18118:18:1;;;18111:48;18176:19;;27129:160:0;17961:240:1;27129:160:0;11601:10;27302:16;27424:393;27448:8;:15;27444:1;:19;27424:393;;;27485:15;27503:8;27512:1;27503:11;;;;;;-1:-1:-1;;;27503:11:0;;;;;;;;;;;;;;;27485:29;;27529:14;27546:7;27554:1;27546:10;;;;;;-1:-1:-1;;;27546:10:0;;;;;;;;;;;;;;;27529:27;;27600:131;27647:6;27600:131;;;;;;;;;;;;;;;;;:9;:18;27610:7;27600:18;;;;;;;;;;;:24;27619:4;-1:-1:-1;;;;;27600:24:0;-1:-1:-1;;;;;27600:24:0;;;;;;;;;;;;;:28;;:131;;;;;:::i;:::-;27573:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27573:24:0;;;;;;;;;;:158;;;;27771:22;;;;;;:34;;27798:6;27771:26;:34::i;:::-;27746:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27746:22:0;;;;;;;;;;:59;;;;-1:-1:-1;27465:3:0;;;:::i;:::-;;;27424:393;;;;27864:2;-1:-1:-1;;;;;27834:52:0;27858:4;-1:-1:-1;;;;;27834:52:0;27848:8;-1:-1:-1;;;;;27834:52:0;;27868:8;27878:7;27834:52;;;;;;;:::i;:::-;;;;;;;;27899:80;27935:8;27945:4;27951:2;27955:8;27965:7;27974:4;27899:35;:80::i;:::-;26707:1280;;;;;;:::o;19251:117::-;19328:32;;;;:14;;:32;;;;;:::i;:::-;;19251:117;:::o;21173:634::-;21337:16;21398:3;:10;21379:8;:15;:29;21371:83;;;;-1:-1:-1;;;21371:83:0;;21134:2:1;21371:83:0;;;21116:21:1;21173:2;21153:18;;;21146:30;21212:34;21192:18;;;21185:62;-1:-1:-1;;;21263:18:1;;;21256:39;21312:19;;21371:83:0;21106:231:1;21371:83:0;21467:30;21514:8;:15;-1:-1:-1;;;;;21500:30:0;;;;;-1:-1:-1;;;21500:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21500:30:0;;21467:63;;21548:9;21543:224;21567:8;:15;21563:1;:19;21543:224;;;21635:1;-1:-1:-1;;;;;21612:25:0;:8;21621:1;21612:11;;;;;;-1:-1:-1;;;21612:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21612:25:0;;;21604:87;;;;-1:-1:-1;;;21604:87:0;;15574:2:1;21604:87:0;;;15556:21:1;15613:2;15593:18;;;15586:30;15652:34;15632:18;;;15625:62;-1:-1:-1;;;15703:18:1;;;15696:47;15760:19;;21604:87:0;15546:239:1;21604:87:0;21725:9;:17;21735:3;21739:1;21735:6;;;;;;-1:-1:-1;;;21735:6:0;;;;;;;;;;;;;;;21725:17;;;;;;;;;;;:30;21743:8;21752:1;21743:11;;;;;;-1:-1:-1;;;21743:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21725:30:0;-1:-1:-1;;;;;21725:30:0;;;;;;;;;;;;;21706:13;21720:1;21706:16;;;;;;-1:-1:-1;;;21706:16:0;;;;;;;;;;;;;;;;;;:49;21584:3;;;:::i;:::-;;;21543:224;;;-1:-1:-1;21786:13:0;21173:634;-1:-1:-1;;;21173:634:0:o;35846:153::-;35953:38;35964:7;35973:8;35983:7;35953:10;:38::i;34602:216::-;34391:5;;34672:4;;-1:-1:-1;;;;;34391:5:0;34400:10;34391:19;34383:64;;;;-1:-1:-1;;;34383:64:0;;19592:2:1;34383:64:0;;;19574:21:1;;;19611:18;;;19604:30;19670:34;19650:18;;;19643:62;19722:18;;34383:64:0;19564:182:1;34383:64:0;-1:-1:-1;;;;;34696:22:0;::::1;34688:73;;;::::0;-1:-1:-1;;;34688:73:0;;15992:2:1;34688:73:0::1;::::0;::::1;15974:21:1::0;16031:2;16011:18;;;16004:30;16070:34;16050:18;;;16043:62;-1:-1:-1;;;16121:18:1;;;16114:36;16167:19;;34688:73:0::1;15964:228:1::0;34688:73:0::1;-1:-1:-1::0;34772:5:0::1;:16:::0;;-1:-1:-1;;;;;;34772:16:0::1;-1:-1:-1::0;;;;;34772:16:0;::::1;;::::0;;-1:-1:-1;34458:1:0::1;34602:216:::0;;;:::o;17991:104::-;18047:13;18080:7;18073:14;;;;;:::i;22169:311::-;11601:10;-1:-1:-1;;;;;22272:24:0;;;;22264:78;;;;-1:-1:-1;;;22264:78:0;;20724:2:1;22264:78:0;;;20706:21:1;20763:2;20743:18;;;20736:30;20802:34;20782:18;;;20775:62;-1:-1:-1;;;20853:18:1;;;20846:39;20902:19;;22264:78:0;20696:231:1;22264:78:0;11601:10;22355:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22355:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22355:53:0;;;;;;;;;;22424:48;;13451:41:1;;;22355:42:0;;11601:10;22424:48;;13424:18:1;22424:48:0;;;;;;;22169:311;;:::o;35731:107::-;35796:34;35802:10;35814:7;35823:6;35796:5;:34::i;17241:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19589:556::-;19662:13;19696:16;19704:7;19696;:16::i;:::-;19688:77;;;;-1:-1:-1;;;19688:77:0;;19953:2:1;19688:77:0;;;19935:21:1;19992:2;19972:18;;;19965:30;20031:34;20011:18;;;20004:62;-1:-1:-1;;;20082:18:1;;;20075:46;20138:19;;19688:77:0;19925:238:1;19688:77:0;19776:23;19802:19;;;:10;:19;;;;;19776:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19832:18;19853:14;19832:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19890:4;19884:18;19906:1;19884:23;19880:72;;;-1:-1:-1;19931:9:0;19589:556;-1:-1:-1;;19589:556:0:o;19880:72::-;19966:23;;:27;19962:108;;20041:4;20047:9;20024:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20010:48;;;;19589:556;;;:::o;19962:108::-;20111:4;20117:18;:7;:16;:18::i;:::-;20094:42;;;;;;;;;:::i;35517:206::-;35616:21;35627:3;35632:4;35616:10;:21::i;:::-;35648:33;35654:9;;35665:6;35673:3;35677;35648:5;:33::i;:::-;35704:9;;:11;;35714:1;35704:11;:::i;:::-;35692:9;:23;-1:-1:-1;;;;35517:206:0:o;24092:964::-;-1:-1:-1;;;;;24323:16:0;;24315:66;;;;-1:-1:-1;;;24315:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24414:20:0;;11601:10;24414:20;;:60;;-1:-1:-1;24438:36:0;24455:4;11601:10;22769:160;:::i;24438:36::-;24392:151;;;;-1:-1:-1;;;24392:151:0;;16755:2:1;24392:151:0;;;16737:21:1;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;-1:-1:-1;;;16884:18:1;;;16877:39;16933:19;;24392:151:0;16727:231:1;24392:151:0;11601:10;24600:101;11601:10;24631:4;24637:2;24641:26;24659:7;24641:17;:26::i;:::-;24669:25;24687:6;24669:17;:25::i;:::-;26707:1280;;;;;;24600:101;24741:82;24770:6;24741:82;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24741:24:0;;;;;;;;;;;:82;:28;:82::i;:::-;24714:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24714:24:0;;;;;;;;;;:109;;;;24859:22;;;;;;:34;;24886:6;24859:26;:34::i;:::-;24834:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24834:22:0;;;;;;;;;;;;;:59;;;;24911:51;;22811:25:1;;;22852:18;;;22845:34;;;24911:51:0;;;;;;;;;22784:18:1;24911:51:0;;;;;;;24975:73;25006:8;25016:4;25022:2;25026:7;25035:6;25043:4;24975:30;:73::i;20153:127::-;20218:4;20242:30;:12;20264:7;20242:21;:30::i;:::-;20235:37;20153:127;-1:-1:-1;;20153:127:0:o;13109:192::-;13195:7;13231:12;13223:6;;;;13215:29;;;;-1:-1:-1;;;13215:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13255:9:0;13267:5;13271:1;13267;:5;:::i;:::-;13255:17;-1:-1:-1;;13109:192:0;;;;;;:::o;12657:181::-;12715:7;;12747:5;12751:1;12747;:5;:::i;:::-;12735:17;;12776:1;12771;:6;;12763:46;;;;-1:-1:-1;;;12763:46:0;;16399:2:1;12763:46:0;;;16381:21:1;16438:2;16418:18;;;16411:30;16477:29;16457:18;;;16450:57;16524:18;;12763:46:0;16371:177:1;32950:809:0;-1:-1:-1;;;;;33209:13:0;;14611:20;14650:8;33205:547;;33245:84;;-1:-1:-1;;;33245:84:0;;-1:-1:-1;;;;;33245:43:0;;;;;:84;;33289:8;;33299:4;;33305:8;;33315:7;;33324:4;;33245:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33245:84:0;;;;;;;;-1:-1:-1;;33245:84:0;;;;;;;;;;;;:::i;:::-;;;33241:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33614:6;33607:14;;-1:-1:-1;;;33607:14:0;;;;;;;;:::i;33241:500::-;;;33663:62;;-1:-1:-1;;;33663:62:0;;14332:2:1;33663:62:0;;;14314:21:1;14371:2;14351:18;;;14344:30;14410:34;14390:18;;;14383:62;-1:-1:-1;;;14461:18:1;;;14454:50;14521:19;;33663:62:0;14304:242:1;33241:500:0;-1:-1:-1;;;;;;33379:64:0;;-1:-1:-1;;;33379:64:0;33375:163;;33468:50;;-1:-1:-1;;;33468:50:0;;;;;;;:::i;33375:163::-;33330:223;32950:809;;;;;;:::o;31155:756::-;-1:-1:-1;;;;;31281:21:0;;31273:69;;;;-1:-1:-1;;;31273:69:0;;;;;;;:::i;:::-;31380:7;:14;31361:8;:15;:33;31353:86;;;;-1:-1:-1;;;31353:86:0;;;;;;;:::i;:::-;31496:74;;;;;;;;;31452:16;31496:74;;;;11601:10;;31583:240;31604:8;:15;31600:1;:19;31583:240;;;31675:136;31729:7;31737:1;31729:10;;;;;;-1:-1:-1;;;31729:10:0;;;;;;;;;;;;;;;31675:136;;;;;;;;;;;;;;;;;:9;:22;31685:8;31694:1;31685:11;;;;;;-1:-1:-1;;;31685:11:0;;;;;;;;;;;;;;;31675:22;;;;;;;;;;;:31;31698:7;-1:-1:-1;;;;;31675:31:0;-1:-1:-1;;;;;31675:31:0;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;31641:9;:22;31651:8;31660:1;31651:11;;;;;;-1:-1:-1;;;31651:11:0;;;;;;;;;;;;;;;31641:22;;;;;;;;;;;:31;31664:7;-1:-1:-1;;;;;31641:31:0;-1:-1:-1;;;;;31641:31:0;;;;;;;;;;;;:170;;;;31621:3;;;;;:::i;:::-;;;;31583:240;;;;31881:1;-1:-1:-1;;;;;31840:63:0;31864:7;-1:-1:-1;;;;;31840:63:0;31854:8;-1:-1:-1;;;;;31840:63:0;;31885:8;31895:7;31840:63;;;;;;;:::i;:::-;;;;;;;;31155:756;;;;:::o;30325:680::-;30426:16;30434:7;30426;:16::i;:::-;30418:78;;;;-1:-1:-1;;;30418:78:0;;17165:2:1;30418:78:0;;;17147:21:1;17204:2;17184:18;;;17177:30;17243:34;17223:18;;;17216:62;-1:-1:-1;;;17294:18:1;;;17287:47;17351:19;;30418:78:0;17137:239:1;30418:78:0;-1:-1:-1;;;;;30515:21:0;;30507:69;;;;-1:-1:-1;;;30507:69:0;;;;;;;:::i;:::-;11601:10;30633:110;11601:10;30664:7;30589:16;30685:26;30703:7;30685:17;:26::i;:::-;30713:25;30731:6;30713:17;:25::i;:::-;-1:-1:-1;;30633:110:0;;;;;;;;;-1:-1:-1;30633:110:0;;-1:-1:-1;;;26707:1280:0;30633:110;30786:129;30832:6;30786:129;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30786:27:0;;;;;;;;;;;:129;:31;:129::i;:::-;30756:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30756:27:0;;;;;;;;;;;;:159;;;;30935:62;;22811:25:1;;;22852:18;;;22845:34;;;30756:18:0;;30935:62;;;;;22784:18:1;30935:62:0;22766:119:1;92:557:0;148:13;180:10;176:53;;-1:-1:-1;;207:10:0;;;;;;;;;;;;-1:-1:-1;;;207:10:0;;;;;92:557::o;176:53::-;254:5;239:12;295:78;302:9;;295:78;;328:8;;;;:::i;:::-;;-1:-1:-1;351:10:0;;-1:-1:-1;359:2:0;351:10;;:::i;:::-;;;295:78;;;383:19;415:6;-1:-1:-1;;;;;405:17:0;;;;;-1:-1:-1;;;405:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;405:17:0;-1:-1:-1;383:39:0;-1:-1:-1;433:13:0;449:10;458:1;449:6;:10;:::i;:::-;433:26;;477:5;470:12;;493:117;500:9;;493:117;;562:9;569:2;562:4;:9;:::i;:::-;557:14;;:2;:14;:::i;:::-;544:29;;526:6;533:7;;;;:::i;:::-;;;526:15;;;;;;-1:-1:-1;;;526:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;526:47:0;;;;;;;;-1:-1:-1;588:10:0;596:2;588:10;;:::i;:::-;;;493:117;;;-1:-1:-1;634:6:0;92:557;-1:-1:-1;;;;92:557:0:o;35190:319::-;35277:12;35319:4;35324:8;35302:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35292:42;;;;;;35277:57;;35362:104;35435:4;35382:58;;;;;;;10828:66:1;10816:79;;10920:2;10911:12;;10904:28;;;;10957:2;10948:12;;10806:160;35382:58:0;;;;-1:-1:-1;;35382:58:0;;;;;;;;;35372:69;;35382:58;35372:69;;;;35443:6;;35451;;;;35459;;;;35443;35362:104;;;;;;;;13730:25:1;;;;13803:4;13791:17;13771:18;;;13764:45;;;;13825:18;;;13818:34;;;;13868:18;;;13861:34;13702:19;;35362:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35362:104:0;;-1:-1:-1;;35362:104:0;;35353:5;;-1:-1:-1;;;;;35353:5:0;;;:113;;;;-1:-1:-1;35345:156:0;;;;-1:-1:-1;;;35345:156:0;;18408:2:1;35345:156:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:32;18466:18;;;18459:60;18536:18;;35345:156:0;18380:180:1;28392:634:0;28504:16;28512:7;28504;:16::i;:::-;28503:17;28495:59;;;;-1:-1:-1;;;28495:59:0;;21953:2:1;28495:59:0;;;21935:21:1;21992:2;21972:18;;;21965:30;22031:31;22011:18;;;22004:59;22080:18;;28495:59:0;21925:179:1;28495:59:0;28573:12;28565:50;;;;-1:-1:-1;;;28565:50:0;;20370:2:1;28565:50:0;;;20352:21:1;20409:2;20389:18;;;20382:30;20448:27;20428:18;;;20421:55;20493:18;;28565:50:0;20342:175:1;28565:50:0;28655:1;28640:4;28634:18;:22;28626:52;;;;-1:-1:-1;;;28626:52:0;;22311:2:1;28626:52:0;;;22293:21:1;22350:2;22330:18;;;22323:30;-1:-1:-1;;;22369:18:1;;;22362:47;22426:18;;28626:52:0;22283:167:1;28626:52:0;28691:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;28691:30:0;28711:10;28691:30;;;;;;28732:37;;:12;;28700:7;;28732:16;:37::i;:::-;-1:-1:-1;28780:20:0;;;;:11;:20;;;;;;;;:27;;;28818:9;:18;;;;;28837:10;28818:30;;;;;;;:40;;;28869:27;28792:7;28891:4;28869:12;:27::i;:::-;28914:70;;;22811:25:1;;;22867:2;22852:18;;22845:34;;;28955:10:0;;28949:3;;28955:10;;28914:70;;22784:18:1;28914:70:0;;;;;;;29010:7;29000:18;29004:4;29000:18;;;;;;:::i;:::-;;;;;;;;28392:634;;;;:::o;33767:198::-;33887:16;;;33901:1;33887:16;;;;;;;;;33833;;33862:22;;33887:16;;;;;;;;;;;;-1:-1:-1;33887:16:0;33862:41;;33925:7;33914:5;33920:1;33914:8;;;;;;-1:-1:-1;;;33914:8:0;;;;;;;;;;;;;;;;;;:18;33952:5;33767:198;-1:-1:-1;;33767:198:0:o;32170:772::-;-1:-1:-1;;;;;32404:13:0;;14611:20;14650:8;32400:535;;32440:77;;-1:-1:-1;;;32440:77:0;;-1:-1:-1;;;;;32440:38:0;;;;;:77;;32479:8;;32489:4;;32495:7;;32504:6;;32512:4;;32440:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32440:77:0;;;;;;;;-1:-1:-1;;32440:77:0;;;;;;;;;;;;:::i;:::-;;;32436:488;;;;:::i;:::-;-1:-1:-1;;;;;;32567:59:0;;-1:-1:-1;;;32567:59:0;32563:158;;32651:50;;-1:-1:-1;;;32651:50:0;;;;;;;:::i;3939:151::-;4023:4;2130:17;;;:12;;;:17;;;;;;:22;;4047:35;2035:125;3596:185;3685:4;3709:64;3714:3;3734;-1:-1:-1;;;;;3748:23:0;;3709:4;:64::i;:::-;3702:71;3596:185;-1:-1:-1;;;;3596:185:0:o;874:470::-;950:4;986:17;;;:12;;;:17;;;;;;1020:13;1016:321;;-1:-1:-1;;1105:38:0;;;;;;;;;;;;;;;;;;1087:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1179:19;;1159:17;;;:12;;;:17;;;;;;;:39;1213:11;;1016:321;1293:5;1257:3;1270:12;1281:1;1270:8;:12;:::i;:::-;1257:26;;;;;;-1:-1:-1;;;1257:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1320:5;1313:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:755;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:163;768:2;765:1;762:9;754:163;;;825:17;;813:30;;863:12;;;;895;;;;786:1;779:9;754:163;;;-1:-1:-1;935:6:1;;256:691;-1:-1:-1;;;;;;;256:691:1:o;952:575::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1069:5;1062;1055:20;1014:2;1109:6;1096:20;-1:-1:-1;;;;;1131:2:1;1128:26;1125:2;;;1157:18;;:::i;:::-;1206:2;1200:9;1218:67;1273:2;1254:13;;-1:-1:-1;;1250:27:1;1279:4;1246:38;1200:9;1218:67;:::i;:::-;1309:2;1301:6;1294:18;1355:3;1348:4;1343:2;1335:6;1331:15;1327:26;1324:35;1321:2;;;1376:5;1369;1362:20;1321:2;1444;1437:4;1429:6;1425:17;1418:4;1410:6;1406:17;1393:54;1467:15;;;1484:4;1463:26;1456:41;;;;1471:6;1004:523;-1:-1:-1;;1004:523:1:o;1532:196::-;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:2;;;1665:6;1657;1650:22;1612:2;1693:29;1712:9;1693:29;:::i;1733:270::-;1801:6;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;1820:183;;;;;:::o;2008:983::-;2162:6;2170;2178;2186;2194;2247:3;2235:9;2226:7;2222:23;2218:33;2215:2;;;2269:6;2261;2254:22;2215:2;2297:29;2316:9;2297:29;:::i;:::-;2287:39;;2345:38;2379:2;2368:9;2364:18;2345:38;:::i;:::-;2335:48;;2434:2;2423:9;2419:18;2406:32;-1:-1:-1;;;;;2498:2:1;2490:6;2487:14;2484:2;;;2519:6;2511;2504:22;2484:2;2547:61;2600:7;2591:6;2580:9;2576:22;2547:61;:::i;:::-;2537:71;;2661:2;2650:9;2646:18;2633:32;2617:48;;2690:2;2680:8;2677:16;2674:2;;;2711:6;2703;2696:22;2674:2;2739:63;2794:7;2783:8;2772:9;2768:24;2739:63;:::i;:::-;2729:73;;2855:3;2844:9;2840:19;2827:33;2811:49;;2885:2;2875:8;2872:16;2869:2;;;2906:6;2898;2891:22;2869:2;;2934:51;2977:7;2966:8;2955:9;2951:24;2934:51;:::i;:::-;2924:61;;;2205:786;;;;;;;;:::o;2996:626::-;3100:6;3108;3116;3124;3132;3185:3;3173:9;3164:7;3160:23;3156:33;3153:2;;;3207:6;3199;3192:22;3153:2;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3419:2;3408:9;3404:18;3391:32;3381:42;;3474:3;3463:9;3459:19;3446:33;-1:-1:-1;;;;;3494:6:1;3491:30;3488:2;;;3539:6;3531;3524:22;3488:2;3567:49;3608:7;3599:6;3588:9;3584:22;3567:49;:::i;3627:699::-;3754:6;3762;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3872:29;3891:9;3872:29;:::i;:::-;3862:39;;3952:2;3941:9;3937:18;3924:32;-1:-1:-1;;;;;4016:2:1;4008:6;4005:14;4002:2;;;4037:6;4029;4022:22;4002:2;4065:61;4118:7;4109:6;4098:9;4094:22;4065:61;:::i;:::-;4055:71;;4179:2;4168:9;4164:18;4151:32;4135:48;;4208:2;4198:8;4195:16;4192:2;;;4229:6;4221;4214:22;4192:2;;4257:63;4312:7;4301:8;4290:9;4286:24;4257:63;:::i;:::-;4247:73;;;3781:545;;;;;:::o;4331:367::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:2;;;4478:6;4470;4463:22;4425:2;4506:29;4525:9;4506:29;:::i;:::-;4496:39;;4585:2;4574:9;4570:18;4557:32;4632:5;4625:13;4618:21;4611:5;4608:32;4598:2;;4659:6;4651;4644:22;4598:2;4687:5;4677:15;;;4415:283;;;;;:::o;4703:264::-;4771:6;4779;4832:2;4820:9;4811:7;4807:23;4803:32;4800:2;;;4853:6;4845;4838:22;4800:2;4881:29;4900:9;4881:29;:::i;:::-;4871:39;4957:2;4942:18;;;;4929:32;;-1:-1:-1;;;4790:177:1:o;4972:1274::-;5090:6;5098;5151:2;5139:9;5130:7;5126:23;5122:32;5119:2;;;5172:6;5164;5157:22;5119:2;5217:9;5204:23;-1:-1:-1;;;;;5287:2:1;5279:6;5276:14;5273:2;;;5308:6;5300;5293:22;5273:2;5351:6;5340:9;5336:22;5326:32;;5396:7;5389:4;5385:2;5381:13;5377:27;5367:2;;5423:6;5415;5408:22;5367:2;5464;5451:16;5486:4;5509:43;5549:2;5509:43;:::i;:::-;5581:2;5575:9;5593:31;5621:2;5613:6;5593:31;:::i;:::-;5659:18;;;5693:15;;;;-1:-1:-1;5728:11:1;;;5770:1;5766:10;;;5758:19;;5754:28;;5751:41;-1:-1:-1;5748:2:1;;;5810:6;5802;5795:22;5748:2;5837:6;5828:15;;5852:169;5866:2;5863:1;5860:9;5852:169;;;5923:23;5942:3;5923:23;:::i;:::-;5911:36;;5884:1;5877:9;;;;;5967:12;;;;5999;;5852:169;;;-1:-1:-1;6040:6:1;-1:-1:-1;;6084:18:1;;6071:32;;-1:-1:-1;;6115:16:1;;;6112:2;;;6149:6;6141;6134:22;6112:2;;6177:63;6232:7;6221:8;6210:9;6206:24;6177:63;:::i;:::-;6167:73;;;5109:1137;;;;;:::o;6251:255::-;6309:6;6362:2;6350:9;6341:7;6337:23;6333:32;6330:2;;;6383:6;6375;6368:22;6330:2;6427:9;6414:23;6446:30;6470:5;6446:30;:::i;6511:259::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:2;;;6654:6;6646;6639:22;6601:2;6691:9;6685:16;6710:30;6734:5;6710:30;:::i;6775:341::-;6844:6;6897:2;6885:9;6876:7;6872:23;6868:32;6865:2;;;6918:6;6910;6903:22;6865:2;6963:9;6950:23;-1:-1:-1;;;;;6988:6:1;6985:30;6982:2;;;7033:6;7025;7018:22;6982:2;7061:49;7102:7;7093:6;7082:9;7078:22;7061:49;:::i;7121:992::-;7239:6;7247;7255;7263;7307:9;7298:7;7294:23;7337:3;7333:2;7329:12;7326:2;;;7359:6;7351;7344:22;7326:2;7404:9;7391:23;-1:-1:-1;;;;;7429:6:1;7426:30;7423:2;;;7474:6;7466;7459:22;7423:2;7502:49;7543:7;7534:6;7523:9;7519:22;7502:49;:::i;:::-;7492:59;-1:-1:-1;;7598:2:1;7583:18;;7570:32;;-1:-1:-1;7649:2:1;7634:18;;7621:32;;-1:-1:-1;7687:2:1;-1:-1:-1;;7669:16:1;;7665:25;7662:2;;;7708:6;7700;7693:22;7662:2;;7746;7740:9;7758:32;7783:6;7758:32;:::i;:::-;7840:2;7829:9;7825:18;7812:32;7884:4;7877:5;7873:16;7866:5;7863:27;7853:2;;7909:6;7901;7894:22;7853:2;7927:21;;8009:3;7994:19;;7981:33;7976:2;7964:15;;7957:58;8076:3;8061:19;;;8048:33;8043:2;8031:15;;8024:58;-1:-1:-1;7274:839:1;;;;-1:-1:-1;7274:839:1;;7934:6;7274:839::o;8118:190::-;8177:6;8230:2;8218:9;8209:7;8205:23;8201:32;8198:2;;;8251:6;8243;8236:22;8198:2;-1:-1:-1;8279:23:1;;8188:120;-1:-1:-1;8188:120:1:o;8313:409::-;8391:6;8399;8452:2;8440:9;8431:7;8427:23;8423:32;8420:2;;;8473:6;8465;8458:22;8420:2;8514:9;8501:23;8491:33;;8575:2;8564:9;8560:18;8547:32;-1:-1:-1;;;;;8594:6:1;8591:30;8588:2;;;8639:6;8631;8624:22;8588:2;8667:49;8708:7;8699:6;8688:9;8684:22;8667:49;:::i;8727:258::-;8795:6;8803;8856:2;8844:9;8835:7;8831:23;8827:32;8824:2;;;8877:6;8869;8862:22;8824:2;-1:-1:-1;;8905:23:1;;;8975:2;8960:18;;;8947:32;;-1:-1:-1;8814:171:1:o;8990:437::-;9043:3;9081:5;9075:12;9108:6;9103:3;9096:19;9134:4;9163:2;9158:3;9154:12;9147:19;;9200:2;9193:5;9189:14;9221:3;9233:169;9247:6;9244:1;9241:13;9233:169;;;9308:13;;9296:26;;9342:12;;;;9377:15;;;;9269:1;9262:9;9233:169;;;-1:-1:-1;9418:3:1;;9051:376;-1:-1:-1;;;;;9051:376:1:o;9432:257::-;9473:3;9511:5;9505:12;9538:6;9533:3;9526:19;9554:63;9610:6;9603:4;9598:3;9594:14;9587:4;9580:5;9576:16;9554:63;:::i;:::-;9671:2;9650:15;-1:-1:-1;;9646:29:1;9637:39;;;;9678:4;9633:50;;9481:208;-1:-1:-1;;9481:208:1:o;9694:412::-;9923:26;9919:31;9910:6;9906:2;9902:15;9898:53;9893:3;9886:66;9868:3;9981:6;9975:13;9997:62;10052:6;10047:2;10042:3;10038:12;10031:4;10023:6;10019:17;9997:62;:::i;:::-;10079:16;;;;10097:2;10075:25;;9876:230;-1:-1:-1;;;9876:230:1:o;10111:470::-;10290:3;10328:6;10322:13;10344:53;10390:6;10385:3;10378:4;10370:6;10366:17;10344:53;:::i;:::-;10460:13;;10419:16;;;;10482:57;10460:13;10419:16;10516:4;10504:17;;10482:57;:::i;:::-;10555:20;;10298:283;-1:-1:-1;;;;10298:283:1:o;11179:826::-;-1:-1:-1;;;;;11576:15:1;;;11558:34;;11628:15;;11623:2;11608:18;;11601:43;11538:3;11675:2;11660:18;;11653:31;;;11501:4;;11707:57;;11744:19;;11736:6;11707:57;:::i;:::-;11812:9;11804:6;11800:22;11795:2;11784:9;11780:18;11773:50;11846:44;11883:6;11875;11846:44;:::i;:::-;11832:58;;11939:9;11931:6;11927:22;11921:3;11910:9;11906:19;11899:51;11967:32;11992:6;11984;11967:32;:::i;:::-;11959:40;11510:495;-1:-1:-1;;;;;;;;11510:495:1:o;12010:560::-;-1:-1:-1;;;;;12307:15:1;;;12289:34;;12359:15;;12354:2;12339:18;;12332:43;12406:2;12391:18;;12384:34;;;12449:2;12434:18;;12427:34;;;12269:3;12492;12477:19;;12470:32;;;12232:4;;12519:45;;12544:19;;12536:6;12519:45;:::i;:::-;12511:53;12241:329;-1:-1:-1;;;;;;;12241:329:1:o;12575:261::-;12754:2;12743:9;12736:21;12717:4;12774:56;12826:2;12815:9;12811:18;12803:6;12774:56;:::i;12841:465::-;13098:2;13087:9;13080:21;13061:4;13124:56;13176:2;13165:9;13161:18;13153:6;13124:56;:::i;:::-;13228:9;13220:6;13216:22;13211:2;13200:9;13196:18;13189:50;13256:44;13293:6;13285;13256:44;:::i;:::-;13248:52;13070:236;-1:-1:-1;;;;;13070:236:1:o;13906:219::-;14055:2;14044:9;14037:21;14018:4;14075:44;14115:2;14104:9;14100:18;14092:6;14075:44;:::i;14551:404::-;14753:2;14735:21;;;14792:2;14772:18;;;14765:30;14831:34;14826:2;14811:18;;14804:62;-1:-1:-1;;;14897:2:1;14882:18;;14875:38;14945:3;14930:19;;14725:230::o;17381:401::-;17583:2;17565:21;;;17622:2;17602:18;;;17595:30;17661:34;17656:2;17641:18;;17634:62;-1:-1:-1;;;17727:2:1;17712:18;;17705:35;17772:3;17757:19;;17555:227::o;18986:399::-;19188:2;19170:21;;;19227:2;19207:18;;;19200:30;19266:34;19261:2;19246:18;;19239:62;-1:-1:-1;;;19332:2:1;19317:18;;19310:33;19375:3;19360:19;;19160:225::o;21342:404::-;21544:2;21526:21;;;21583:2;21563:18;;;21556:30;21622:34;21617:2;21602:18;;21595:62;-1:-1:-1;;;21688:2:1;21673:18;;21666:38;21736:3;21721:19;;21516:230::o;22890:183::-;22950:4;-1:-1:-1;;;;;22975:6:1;22972:30;22969:2;;;23005:18;;:::i;:::-;-1:-1:-1;23050:1:1;23046:14;23062:4;23042:25;;22959:114::o;23078:128::-;23118:3;23149:1;23145:6;23142:1;23139:13;23136:2;;;23155:18;;:::i;:::-;-1:-1:-1;23191:9:1;;23126:80::o;23211:120::-;23251:1;23277;23267:2;;23282:18;;:::i;:::-;-1:-1:-1;23316:9:1;;23257:74::o;23336:125::-;23376:4;23404:1;23401;23398:8;23395:2;;;23409:18;;:::i;:::-;-1:-1:-1;23446:9:1;;23385:76::o;23466:258::-;23538:1;23548:113;23562:6;23559:1;23556:13;23548:113;;;23638:11;;;23632:18;23619:11;;;23612:39;23584:2;23577:10;23548:113;;;23679:6;23676:1;23673:13;23670:2;;;23714:1;23705:6;23700:3;23696:16;23689:27;23670:2;;23519:205;;;:::o;23729:136::-;23768:3;23796:5;23786:2;;23805:18;;:::i;:::-;-1:-1:-1;;;23841:18:1;;23776:89::o;23870:380::-;23949:1;23945:12;;;;23992;;;24013:2;;24067:4;24059:6;24055:17;24045:27;;24013:2;24120;24112:6;24109:14;24089:18;24086:38;24083:2;;;24166:10;24161:3;24157:20;24154:1;24147:31;24201:4;24198:1;24191:15;24229:4;24226:1;24219:15;24083:2;;23925:325;;;:::o;24255:223::-;24341:2;24333:6;24329:15;24410:6;24398:10;24395:22;-1:-1:-1;;;;;24362:10:1;24359:34;24356:62;24353:2;;;24421:18;;:::i;:::-;24457:2;24450:22;-1:-1:-1;24301:177:1:o;24483:249::-;24593:2;24574:13;;-1:-1:-1;;24570:27:1;24558:40;;-1:-1:-1;;;;;24613:34:1;;24649:22;;;24610:62;24607:2;;;24675:18;;:::i;:::-;24711:2;24704:22;-1:-1:-1;;24530:202:1:o;24737:135::-;24776:3;-1:-1:-1;;24797:17:1;;24794:2;;;24817:18;;:::i;:::-;-1:-1:-1;24864:1:1;24853:13;;24784:88::o;24877:112::-;24909:1;24935;24925:2;;24940:18;;:::i;:::-;-1:-1:-1;24974:9:1;;24915:74::o;24994:127::-;25055:10;25050:3;25046:20;25043:1;25036:31;25086:4;25083:1;25076:15;25110:4;25107:1;25100:15;25126:127;25187:10;25182:3;25178:20;25175:1;25168:31;25218:4;25215:1;25208:15;25242:4;25239:1;25232:15;25258:127;25319:10;25314:3;25310:20;25307:1;25300:31;25350:4;25347:1;25340:15;25374:4;25371:1;25364:15;25390:185;25425:3;25467:1;25449:16;25446:23;25443:2;;;25517:1;25512:3;25507;25492:27;25548:10;25543:3;25539:20;25443:2;25433:142;:::o;25580:671::-;25619:3;25661:4;25643:16;25640:26;25637:2;;;25627:624;:::o;25637:2::-;25703;25697:9;-1:-1:-1;;25768:16:1;25764:25;;25761:1;25697:9;25740:50;25819:4;25813:11;25843:16;-1:-1:-1;;;;;25949:2:1;25942:4;25934:6;25930:17;25927:25;25922:2;25914:6;25911:14;25908:45;25905:2;;;25956:5;;;;;25627:624;:::o;25905:2::-;25993:6;25987:4;25983:17;25972:28;;26029:3;26023:10;26056:2;26048:6;26045:14;26042:2;;;26062:5;;;;;;25627:624;:::o;26042:2::-;26146;26127:16;26121:4;26117:27;26113:36;26106:4;26097:6;26092:3;26088:16;26084:27;26081:69;26078:2;;;26153:5;;;;;;25627:624;:::o;26078:2::-;26169:57;26220:4;26211:6;26203;26199:19;26195:30;26189:4;26169:57;:::i;:::-;-1:-1:-1;26242:3:1;;25627:624;-1:-1:-1;;;;;25627:624:1:o;26256:131::-;-1:-1:-1;;;;;;26330:32:1;;26320:43;;26310:2;;26377:1;26374;26367:12;26310:2;26300:87;:::o
Swarm Source
ipfs://f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.