Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 670 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 52576003 | 327 days ago | IN | 0 POL | 0.00112625 | ||||
Safe Transfer Fr... | 52575971 | 327 days ago | IN | 0 POL | 0.00185075 | ||||
Set Approval For... | 47803334 | 449 days ago | IN | 0 POL | 0.00384593 | ||||
Set Approval For... | 43914037 | 548 days ago | IN | 0 POL | 0.03192757 | ||||
Set Approval For... | 36696930 | 733 days ago | IN | 0 POL | 0.0019264 | ||||
Set Approval For... | 36696836 | 733 days ago | IN | 0 POL | 0.00217539 | ||||
Burn | 36244890 | 744 days ago | IN | 0 POL | 0.00096796 | ||||
Set Approval For... | 35205957 | 770 days ago | IN | 0 POL | 0.00427034 | ||||
Mint | 34270276 | 793 days ago | IN | 0 POL | 0.14006859 | ||||
Mint | 34269601 | 793 days ago | IN | 0 POL | 0.17727375 | ||||
Set Approval For... | 34246383 | 793 days ago | IN | 0 POL | 0.00072633 | ||||
Mint | 34165242 | 795 days ago | IN | 0 POL | 0.00808956 | ||||
Mint | 34165144 | 795 days ago | IN | 0 POL | 0.00808992 | ||||
Mint | 34138502 | 796 days ago | IN | 0 POL | 0.00837074 | ||||
Set Approval For... | 34138491 | 796 days ago | IN | 0 POL | 0.00138369 | ||||
Set Approval For... | 34030047 | 798 days ago | IN | 0 POL | 0.00138369 | ||||
Mint | 33979406 | 800 days ago | IN | 0 POL | 0.00809028 | ||||
Mint | 33979273 | 800 days ago | IN | 0 POL | 0.00809028 | ||||
Mint | 33979104 | 800 days ago | IN | 0 POL | 0.00808884 | ||||
Mint | 33978879 | 800 days ago | IN | 0 POL | 0.00868464 | ||||
Mint | 33978865 | 800 days ago | IN | 0 POL | 0.00808992 | ||||
Mint | 33978576 | 800 days ago | IN | 0 POL | 0.00808992 | ||||
Set Approval For... | 33978531 | 800 days ago | IN | 0 POL | 0.00138741 | ||||
Mint | 33770867 | 805 days ago | IN | 0 POL | 0.00889351 | ||||
Mint | 33770779 | 805 days ago | IN | 0 POL | 0.00984504 |
Loading...
Loading
Contract Name:
SandStorm
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-02-14 */ // 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); event tokenBaseURI(string value); 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; } } 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 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 = "https://gateway.pinata.cloud/ipfs/"; // 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) internal { _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) internal { tokenURIPrefix = _tokenURIPrefix; emit tokenBaseURI(_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" ); require( _balances[tokenId][from] >= amount,"ERC1155: insufficient balance for transfer"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(tokenId), _asSingletonArray(amount), data); _balances[tokenId][from] = _balances[tokenId][from] - amount; _balances[tokenId][to] = _balances[tokenId][to] + 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]; require( _balances[tokenId][from] >= amount,"ERC1155: insufficient balance for transfer"); _balances[tokenId][from] = _balances[tokenId][from] - amount; _balances[tokenId][to] = _balances[tokenId][to] + 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] + _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"); require( _balances[tokenId][account] >= amount,"ERC1155: insufficient balance for transfer"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(tokenId), _asSingletonArray(amount), ""); _balances[tokenId][account] = _balances[tokenId][account] - amount; 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++) { require( _balances[tokenIds[i]][account] >= amounts[i],"ERC1155: insufficient balance for transfer"); _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account] - amounts[i]; } 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 SandStorm is ERC1155 { uint256 newItemId = 1; address public owner; mapping(uint256 => bool) private usedNonce; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); struct Sign { uint8 v; bytes32 r; bytes32 s; uint256 nonce; } constructor (string memory name, string memory symbol) ERC1155 (name, symbol) { owner = msg.sender; } 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 transferOwnership(address newOwner) external onlyOwner returns(bool){ require(newOwner != address(0), "Ownable: new owner is the zero address"); owner = newOwner; emit OwnershipTransferred(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, address caller, Sign memory sign) internal view { bytes32 hash = keccak256(abi.encodePacked(this, caller, tokenURI, sign.nonce)); 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) external { require(!usedNonce[sign.nonce], "Nonce : Invalid Nonce"); usedNonce[sign.nonce] = true; verifySign(uri, _msgSender(), sign); _mint(newItemId, supply, uri,fee); newItemId = newItemId + 1; } function setBaseURI(string memory _baseURI) external onlyOwner{ _setTokenURIPrefix(_baseURI); } function burn(uint256 tokenId, uint256 supply) external { _burn(msg.sender, tokenId, supply); } function burnBatch(uint256[] memory tokenIds, uint256[] memory amounts) external { _burnBatch(msg.sender, tokenIds, amounts); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"tokenBaseURI","type":"event"},{"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":"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":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct SandStorm.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":"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":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052602260808181529062002c4960a0398051620000299160059160209091019062000164565b506001600b553480156200003c57600080fd5b5060405162002c6b38038062002c6b8339810160408190526200005f91620002bd565b8181620000736301ffc9a760e01b620000e0565b81516200008890600990602085019062000164565b5080516200009e90600a90602084019062000164565b50620000b1636cdb3d1360e11b620000e0565b620000c36303a24d0760e21b620000e0565b5050600c80546001600160a01b0319163317905550620003779050565b6001600160e01b031980821614156200013f5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054620001729062000324565b90600052602060002090601f016020900481019282620001965760008555620001e1565b82601f10620001b157805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e1578251825591602001919060010190620001c4565b50620001ef929150620001f3565b5090565b5b80821115620001ef5760008155600101620001f4565b600082601f8301126200021b578081fd5b81516001600160401b038082111562000238576200023862000361565b604051601f8301601f19908116603f0116810190828211818310171562000263576200026362000361565b816040528381526020925086838588010111156200027f578485fd5b8491505b83821015620002a2578582018301518183018401529082019062000283565b83821115620002b357848385830101525b9695505050505050565b60008060408385031215620002d0578182fd5b82516001600160401b0380821115620002e7578384fd5b620002f5868387016200020a565b935060208501519150808211156200030b578283fd5b506200031a858286016200020a565b9150509250929050565b600181811c908216806200033957607f821691505b602082108114156200035b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6128c280620003876000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063c87b56dd11610071578063c87b56dd1461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c3c7945514610259578063c57dc2351461026c57600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004612070565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046121ac565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906124ba565b6101b06101ab366004611f2f565b6104c7565b005b6101c56101c0366004612099565b610748565b6040516101429190612479565b6101b06101e03660046121e4565b61097a565b6101b06101f3366004612163565b6109e0565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109ef565b6101b0610239366004612036565b6109fe565b6101b061024c3660046122d3565b610ad5565b610190610ae0565b6101b0610267366004612216565b610b6e565b61013861027a3660046122bb565b60009081526002602052604090205490565b61019061029a3660046122bb565b610c1e565b61020b6102ad3660046122bb565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611efd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611fd4565b610e14565b610178610325366004611ee3565b610ff1565b600061033582611105565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906126d8565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906125e7565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106da5760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526003835260408082206001600160a01b038e168352909352919091205490915081111561063c5760405162461bcd60e51b815260040161039a9061259d565b60008281526003602090815260408083206001600160a01b038d16845290915290205461066a90829061267e565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106a2908290612652565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106d381612764565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161072a92919061248c565b60405180910390a4610740818787878787611118565b505050505050565b606081518351146107ad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107d657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ff578160200160208202803683370190505b50905060005b84518110156109725760006001600160a01b031685828151811061083957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108b25760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061090e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061095757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261096b81612764565b9050610805565b509392505050565b600c546001600160a01b031633146109d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109dd8161128c565b50565b6109eb3383836112da565b5050565b6060600a8054610444906126d8565b336001600160a01b0383161415610a695760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109eb338383611545565b60058054610aed906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906126d8565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b505050505081565b60608101516000908152600d602052604090205460ff1615610bca5760405162461bcd60e51b81526020600482015260156024820152744e6f6e6365203a20496e76616c6964204e6f6e636560581b604482015260640161039a565b60608101516000908152600d60205260409020805460ff19166001179055610bf984610bf33390565b836116db565b610c07600b5484868561182a565b600b54610c15906001612652565b600b5550505050565b6060610c2982611105565b610c8e5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610ca7906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd3906126d8565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b50505050509050600060058054610d36906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d62906126d8565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b50505050509050805160001415610dc7575092915050565b815115610df9578082604051602001610de19291906123a7565b60405160208183030381529060405292505050919050565b80610e03856119f0565b604051602001610de19291906123a7565b6001600160a01b038416610e3a5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b038516331480610e565750610e5685336102d6565b610eb45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b60008381526003602090815260408083206001600160a01b0389168452909152902054821115610ef65760405162461bcd60e51b815260040161039a9061259d565b33610f16818787610f0688611b22565b610f0f88611b22565b5050505050565b60008481526003602090815260408083206001600160a01b038a168452909152902054610f4490849061267e565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f7c908490612652565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610740818787878787611b7b565b600c546000906001600160a01b0316331461104e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b0382166110b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c80546001600160a01b0319166001600160a01b03841690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35060015b919050565b6000611112600783611c45565b92915050565b6001600160a01b0384163b156107405760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061115c90899089908890889088906004016123d6565b602060405180830381600087803b15801561117657600080fd5b505af19250505080156111a6575060408051601f3d908101601f191682019092526111a3918101906121c8565b60015b611253576111b26127d5565b806308c379a014156111ec57506111c76127ed565b806111d257506111ee565b8060405162461bcd60e51b815260040161039a91906124ba565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b50505050505050565b805161129f906005906020840190611d51565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112cf91906124ba565b60405180910390a150565b6001600160a01b0383166113005760405162461bcd60e51b815260040161039a9061255a565b80518251146113215760405162461bcd60e51b815260040161039a906125e7565b604080516020810190915260009081905233905b83518110156114e65782818151811061135e57634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061138a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205410156113e25760405162461bcd60e51b815260040161039a9061259d565b82818151811061140257634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054611472919061267e565b6003600086848151811061149657634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114de90612764565b915050611335565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161153792919061248c565b60405180910390a450505050565b61154e82611105565b6115b45760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115da5760405162461bcd60e51b815260040161039a9061255a565b60008281526003602090815260408083206001600160a01b038716845290915290205481111561161c5760405162461bcd60e51b815260040161039a9061259d565b3361164c8185600061162d87611b22565b61163687611b22565b5050604080516020810190915260009052505050565b60008381526003602090815260408083206001600160a01b038816845290915290205461167a90839061267e565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611537565b600030838584606001516040516020016116f8949392919061235a565b60405160208183030381529060405280519060200120905060018160405160200161174f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa1580156117bb573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118245760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61183384611105565b156118805760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826118cd5760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b60008251116119125760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b03191633908117909155611941906007908690611c60565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119728483611c7e565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119e291906124ba565b60405180910390a250505050565b606081611a145750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a3e5780611a2881612764565b9150611a379050600a8361266a565b9150611a18565b6000816001600160401b03811115611a6657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a90576020820181803683370190505b5090506000611aa060018461267e565b90508593505b8315611b1957611ab7600a8561277f565b611ac2906030612652565b60f81b8282611ad0816126c1565b935081518110611af057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b12600a8561266a565b9350611aa6565b50949350505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107405760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611bbf9089908990889088908890600401612434565b602060405180830381600087803b158015611bd957600080fd5b505af1925050508015611c09575060408051601f3d908101601f19168201909252611c06918101906121c8565b60015b611c15576111b26127d5565b6001600160e01b0319811663f23a6e6160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b600081815260018301602052604081205415155b9392505050565b6000611c7684846001600160a01b038516611ca2565b949350505050565b60008281526006602090815260409091208251611c9d92840190611d51565b505050565b600082815260018401602052604081205480611d07575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c59565b8285611d1460018461267e565b81548110611d3257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611c59565b828054611d5d906126d8565b90600052602060002090601f016020900481019282611d7f5760008555611dc5565b82601f10611d9857805160ff1916838001178555611dc5565b82800160010185558215611dc5579182015b82811115611dc5578251825591602001919060010190611daa565b50611dd1929150611dd5565b5090565b5b80821115611dd15760008155600101611dd6565b80356001600160a01b038116811461110057600080fd5b600082601f830112611e11578081fd5b81356020611e1e8261262f565b604051611e2b8282612738565b8381528281019150858301600585901b87018401881015611e4a578586fd5b855b85811015611e6857813584529284019290840190600101611e4c565b5090979650505050505050565b600082601f830112611e85578081fd5b81356001600160401b03811115611e9e57611e9e6127bf565b604051611eb5601f8301601f191660200182612738565b818152846020838601011115611ec9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611ef4578081fd5b611c5982611dea565b60008060408385031215611f0f578081fd5b611f1883611dea565b9150611f2660208401611dea565b90509250929050565b600080600080600060a08688031215611f46578081fd5b611f4f86611dea565b9450611f5d60208701611dea565b935060408601356001600160401b0380821115611f78578283fd5b611f8489838a01611e01565b94506060880135915080821115611f99578283fd5b611fa589838a01611e01565b93506080880135915080821115611fba578283fd5b50611fc788828901611e75565b9150509295509295909350565b600080600080600060a08688031215611feb578081fd5b611ff486611dea565b945061200260208701611dea565b9350604086013592506060860135915060808601356001600160401b0381111561202a578182fd5b611fc788828901611e75565b60008060408385031215612048578182fd5b61205183611dea565b915060208301358015158114612065578182fd5b809150509250929050565b60008060408385031215612082578182fd5b61208b83611dea565b946020939093013593505050565b600080604083850312156120ab578182fd5b82356001600160401b03808211156120c1578384fd5b818501915085601f8301126120d4578384fd5b813560206120e18261262f565b6040516120ee8282612738565b8381528281019150858301600585901b870184018b101561210d578889fd5b8896505b848710156121365761212281611dea565b835260019690960195918301918301612111565b509650508601359250508082111561214c578283fd5b5061215985828601611e01565b9150509250929050565b60008060408385031215612175578182fd5b82356001600160401b038082111561218b578384fd5b61219786838701611e01565b9350602085013591508082111561214c578283fd5b6000602082840312156121bd578081fd5b8135611c5981612876565b6000602082840312156121d9578081fd5b8151611c5981612876565b6000602082840312156121f5578081fd5b81356001600160401b0381111561220a578182fd5b611c7684828501611e75565b60008060008084860360e081121561222c578283fd5b85356001600160401b03811115612241578384fd5b61224d88828901611e75565b95505060208601359350604086013592506080605f198201121561226f578182fd5b5060405161227c81612713565b606086013560ff8116811461228f578283fd5b81526080860135602082015260a0860135604082015260c0909501356060860152509194909350909190565b6000602082840312156122cc578081fd5b5035919050565b600080604083850312156122e5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561232357815187529582019590820190600101612307565b509495945050505050565b60008151808452612346816020860160208601612695565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808760601b168352808660601b166014840152508351612391816028850160208801612695565b6028920191820192909252604801949350505050565b600083516123b9818460208801612695565b8351908301906123cd818360208801612695565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612402908301866122f4565b828103606084015261241481866122f4565b90508281036080840152612428818561232e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061246e9083018461232e565b979650505050505050565b602081526000611c5960208301846122f4565b60408152600061249f60408301856122f4565b82810360208401526124b181856122f4565b95945050505050565b602081526000611c59602083018461232e565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b03821115612648576126486127bf565b5060051b60200190565b6000821982111561266557612665612793565b500190565b600082612679576126796127a9565b500490565b60008282101561269057612690612793565b500390565b60005b838110156126b0578181015183820152602001612698565b838111156118245750506000910152565b6000816126d0576126d0612793565b506000190190565b600181811c908216806126ec57607f821691505b6020821081141561270d57634e487b7160e01b600052602260045260246000fd5b50919050565b608081018181106001600160401b0382111715612732576127326127bf565b60405250565b601f8201601f191681016001600160401b038111828210171561275d5761275d6127bf565b6040525050565b600060001982141561277857612778612793565b5060010190565b60008261278e5761278e6127a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127ea57600481823e5160e01c5b90565b600060443d10156127fb5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561282a57505050505090565b82850191508151818111156128425750505050505090565b843d870101602082850101111561285c5750505050505090565b61286b60208286010187612738565b509095945050505050565b6001600160e01b0319811681146109dd57600080fdfea2646970667358221220c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a64736f6c6343000804003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000953616e6453746f726d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534d544100000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063c87b56dd11610071578063c87b56dd1461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c3c7945514610259578063c57dc2351461026c57600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004612070565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046121ac565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906124ba565b6101b06101ab366004611f2f565b6104c7565b005b6101c56101c0366004612099565b610748565b6040516101429190612479565b6101b06101e03660046121e4565b61097a565b6101b06101f3366004612163565b6109e0565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109ef565b6101b0610239366004612036565b6109fe565b6101b061024c3660046122d3565b610ad5565b610190610ae0565b6101b0610267366004612216565b610b6e565b61013861027a3660046122bb565b60009081526002602052604090205490565b61019061029a3660046122bb565b610c1e565b61020b6102ad3660046122bb565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611efd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611fd4565b610e14565b610178610325366004611ee3565b610ff1565b600061033582611105565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906126d8565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906125e7565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106da5760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526003835260408082206001600160a01b038e168352909352919091205490915081111561063c5760405162461bcd60e51b815260040161039a9061259d565b60008281526003602090815260408083206001600160a01b038d16845290915290205461066a90829061267e565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106a2908290612652565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106d381612764565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161072a92919061248c565b60405180910390a4610740818787878787611118565b505050505050565b606081518351146107ad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107d657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ff578160200160208202803683370190505b50905060005b84518110156109725760006001600160a01b031685828151811061083957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108b25760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061090e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061095757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261096b81612764565b9050610805565b509392505050565b600c546001600160a01b031633146109d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109dd8161128c565b50565b6109eb3383836112da565b5050565b6060600a8054610444906126d8565b336001600160a01b0383161415610a695760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109eb338383611545565b60058054610aed906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906126d8565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b505050505081565b60608101516000908152600d602052604090205460ff1615610bca5760405162461bcd60e51b81526020600482015260156024820152744e6f6e6365203a20496e76616c6964204e6f6e636560581b604482015260640161039a565b60608101516000908152600d60205260409020805460ff19166001179055610bf984610bf33390565b836116db565b610c07600b5484868561182a565b600b54610c15906001612652565b600b5550505050565b6060610c2982611105565b610c8e5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610ca7906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd3906126d8565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b50505050509050600060058054610d36906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d62906126d8565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b50505050509050805160001415610dc7575092915050565b815115610df9578082604051602001610de19291906123a7565b60405160208183030381529060405292505050919050565b80610e03856119f0565b604051602001610de19291906123a7565b6001600160a01b038416610e3a5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b038516331480610e565750610e5685336102d6565b610eb45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b60008381526003602090815260408083206001600160a01b0389168452909152902054821115610ef65760405162461bcd60e51b815260040161039a9061259d565b33610f16818787610f0688611b22565b610f0f88611b22565b5050505050565b60008481526003602090815260408083206001600160a01b038a168452909152902054610f4490849061267e565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f7c908490612652565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610740818787878787611b7b565b600c546000906001600160a01b0316331461104e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b0382166110b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c80546001600160a01b0319166001600160a01b03841690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35060015b919050565b6000611112600783611c45565b92915050565b6001600160a01b0384163b156107405760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061115c90899089908890889088906004016123d6565b602060405180830381600087803b15801561117657600080fd5b505af19250505080156111a6575060408051601f3d908101601f191682019092526111a3918101906121c8565b60015b611253576111b26127d5565b806308c379a014156111ec57506111c76127ed565b806111d257506111ee565b8060405162461bcd60e51b815260040161039a91906124ba565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b50505050505050565b805161129f906005906020840190611d51565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112cf91906124ba565b60405180910390a150565b6001600160a01b0383166113005760405162461bcd60e51b815260040161039a9061255a565b80518251146113215760405162461bcd60e51b815260040161039a906125e7565b604080516020810190915260009081905233905b83518110156114e65782818151811061135e57634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061138a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205410156113e25760405162461bcd60e51b815260040161039a9061259d565b82818151811061140257634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054611472919061267e565b6003600086848151811061149657634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114de90612764565b915050611335565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161153792919061248c565b60405180910390a450505050565b61154e82611105565b6115b45760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115da5760405162461bcd60e51b815260040161039a9061255a565b60008281526003602090815260408083206001600160a01b038716845290915290205481111561161c5760405162461bcd60e51b815260040161039a9061259d565b3361164c8185600061162d87611b22565b61163687611b22565b5050604080516020810190915260009052505050565b60008381526003602090815260408083206001600160a01b038816845290915290205461167a90839061267e565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611537565b600030838584606001516040516020016116f8949392919061235a565b60405160208183030381529060405280519060200120905060018160405160200161174f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa1580156117bb573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118245760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61183384611105565b156118805760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826118cd5760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b60008251116119125760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b03191633908117909155611941906007908690611c60565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119728483611c7e565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119e291906124ba565b60405180910390a250505050565b606081611a145750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a3e5780611a2881612764565b9150611a379050600a8361266a565b9150611a18565b6000816001600160401b03811115611a6657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a90576020820181803683370190505b5090506000611aa060018461267e565b90508593505b8315611b1957611ab7600a8561277f565b611ac2906030612652565b60f81b8282611ad0816126c1565b935081518110611af057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b12600a8561266a565b9350611aa6565b50949350505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107405760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611bbf9089908990889088908890600401612434565b602060405180830381600087803b158015611bd957600080fd5b505af1925050508015611c09575060408051601f3d908101601f19168201909252611c06918101906121c8565b60015b611c15576111b26127d5565b6001600160e01b0319811663f23a6e6160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b600081815260018301602052604081205415155b9392505050565b6000611c7684846001600160a01b038516611ca2565b949350505050565b60008281526006602090815260409091208251611c9d92840190611d51565b505050565b600082815260018401602052604081205480611d07575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c59565b8285611d1460018461267e565b81548110611d3257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611c59565b828054611d5d906126d8565b90600052602060002090601f016020900481019282611d7f5760008555611dc5565b82601f10611d9857805160ff1916838001178555611dc5565b82800160010185558215611dc5579182015b82811115611dc5578251825591602001919060010190611daa565b50611dd1929150611dd5565b5090565b5b80821115611dd15760008155600101611dd6565b80356001600160a01b038116811461110057600080fd5b600082601f830112611e11578081fd5b81356020611e1e8261262f565b604051611e2b8282612738565b8381528281019150858301600585901b87018401881015611e4a578586fd5b855b85811015611e6857813584529284019290840190600101611e4c565b5090979650505050505050565b600082601f830112611e85578081fd5b81356001600160401b03811115611e9e57611e9e6127bf565b604051611eb5601f8301601f191660200182612738565b818152846020838601011115611ec9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611ef4578081fd5b611c5982611dea565b60008060408385031215611f0f578081fd5b611f1883611dea565b9150611f2660208401611dea565b90509250929050565b600080600080600060a08688031215611f46578081fd5b611f4f86611dea565b9450611f5d60208701611dea565b935060408601356001600160401b0380821115611f78578283fd5b611f8489838a01611e01565b94506060880135915080821115611f99578283fd5b611fa589838a01611e01565b93506080880135915080821115611fba578283fd5b50611fc788828901611e75565b9150509295509295909350565b600080600080600060a08688031215611feb578081fd5b611ff486611dea565b945061200260208701611dea565b9350604086013592506060860135915060808601356001600160401b0381111561202a578182fd5b611fc788828901611e75565b60008060408385031215612048578182fd5b61205183611dea565b915060208301358015158114612065578182fd5b809150509250929050565b60008060408385031215612082578182fd5b61208b83611dea565b946020939093013593505050565b600080604083850312156120ab578182fd5b82356001600160401b03808211156120c1578384fd5b818501915085601f8301126120d4578384fd5b813560206120e18261262f565b6040516120ee8282612738565b8381528281019150858301600585901b870184018b101561210d578889fd5b8896505b848710156121365761212281611dea565b835260019690960195918301918301612111565b509650508601359250508082111561214c578283fd5b5061215985828601611e01565b9150509250929050565b60008060408385031215612175578182fd5b82356001600160401b038082111561218b578384fd5b61219786838701611e01565b9350602085013591508082111561214c578283fd5b6000602082840312156121bd578081fd5b8135611c5981612876565b6000602082840312156121d9578081fd5b8151611c5981612876565b6000602082840312156121f5578081fd5b81356001600160401b0381111561220a578182fd5b611c7684828501611e75565b60008060008084860360e081121561222c578283fd5b85356001600160401b03811115612241578384fd5b61224d88828901611e75565b95505060208601359350604086013592506080605f198201121561226f578182fd5b5060405161227c81612713565b606086013560ff8116811461228f578283fd5b81526080860135602082015260a0860135604082015260c0909501356060860152509194909350909190565b6000602082840312156122cc578081fd5b5035919050565b600080604083850312156122e5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561232357815187529582019590820190600101612307565b509495945050505050565b60008151808452612346816020860160208601612695565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808760601b168352808660601b166014840152508351612391816028850160208801612695565b6028920191820192909252604801949350505050565b600083516123b9818460208801612695565b8351908301906123cd818360208801612695565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612402908301866122f4565b828103606084015261241481866122f4565b90508281036080840152612428818561232e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061246e9083018461232e565b979650505050505050565b602081526000611c5960208301846122f4565b60408152600061249f60408301856122f4565b82810360208401526124b181856122f4565b95945050505050565b602081526000611c59602083018461232e565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b03821115612648576126486127bf565b5060051b60200190565b6000821982111561266557612665612793565b500190565b600082612679576126796127a9565b500490565b60008282101561269057612690612793565b500390565b60005b838110156126b0578181015183820152602001612698565b838111156118245750506000910152565b6000816126d0576126d0612793565b506000190190565b600181811c908216806126ec57607f821691505b6020821081141561270d57634e487b7160e01b600052602260045260246000fd5b50919050565b608081018181106001600160401b0382111715612732576127326127bf565b60405250565b601f8201601f191681016001600160401b038111828210171561275d5761275d6127bf565b6040525050565b600060001982141561277857612778612793565b5060010190565b60008261278e5761278e6127a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127ea57600481823e5160e01c5b90565b600060443d10156127fb5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561282a57505050505090565b82850191508151818111156128425750505050505090565b843d870101602082850101111561285c5750505050505090565b61286b60208286010187612738565b509095945050505050565b6001600160e01b0319811681146109dd57600080fdfea2646970667358221220c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000953616e6453746f726d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534d544100000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): SandStorm
Arg [1] : symbol (string): SMTA
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 53616e6453746f726d0000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 534d544100000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
32148:2445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18633:325;;;;;;:::i;:::-;;:::i;:::-;;;22780:25:1;;;22768:2;22753:18;18633:325:0;;;;;;;;12151:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12252:33:0;12228:4;12252:33;;;;;;;;;;;;;;12151:142;;;;13250:14:1;;13243:22;13225:41;;13213:2;13198:18;12151:142:0;13180:92:1;15929:100:0;;;:::i;:::-;;;;;;;:::i;24858:1281::-;;;;;;:::i;:::-;;:::i;:::-;;19268:634;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34214:110::-;;;;;;:::i;:::-;;:::i;34449:141::-;;;;;;:::i;:::-;;:::i;32215:20::-;;;;;-1:-1:-1;;;;;32215:20:0;;;;;;-1:-1:-1;;;;;10909:32:1;;;10891:51;;10879:2;10864:18;32215:20:0;10846:102:1;16037:104:0;;;:::i;20264:311::-;;;;;;:::i;:::-;;:::i;34332:109::-;;;;;;:::i;:::-;;:::i;15248:67::-;;;:::i;33876:330::-;;;;;;:::i;:::-;;:::i;16695:121::-;;;;;;:::i;:::-;16761:7;16788:20;;;:11;:20;;;;;;;16695:121;17684:556;;;;;;:::i;:::-;;:::i;16989:126::-;;;;;;:::i;:::-;17063:7;17090:17;;;:8;:17;;;;;;-1:-1:-1;;;;;17090:17:0;;16989:126;20864:160;;;;;;:::i;:::-;-1:-1:-1;;;;;20979:27:0;;;20955:4;20979:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;20864:160;22187:1020;;;;;;:::i;:::-;;:::i;32869:271::-;;;;;;:::i;:::-;;:::i;18633:325::-;18716:7;18744:16;18752:7;18744;:16::i;:::-;18736:81;;;;-1:-1:-1;;;18736:81:0;;18185:2:1;18736:81:0;;;18167:21:1;18224:2;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;-1:-1:-1;;;18314:18:1;;;18307:50;18374:19;;18736:81:0;;;;;;;;;-1:-1:-1;;;;;18836:21:0;;18828:77;;;;-1:-1:-1;;;18828:77:0;;14936:2:1;18828:77:0;;;14918:21:1;14975:2;14955:18;;;14948:30;15014:34;14994:18;;;14987:62;-1:-1:-1;;;15065:18:1;;;15058:41;15116:19;;18828:77:0;14908:233:1;18828:77:0;-1:-1:-1;18923:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;18923:27:0;;;;;;;;;;;;18633:325::o;15929:100::-;15983:13;16016:5;16009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15929:100;:::o;24858:1281::-;25133:7;:14;25114:8;:15;:33;25106:86;;;;-1:-1:-1;;;25106:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25211:16:0;;25203:66;;;;-1:-1:-1;;;25203:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25302:20:0;;11643:10;25302:20;;:60;;-1:-1:-1;25326:36:0;25343:4;11643:10;20864:160;:::i;25326:36::-;25280:160;;;;-1:-1:-1;;;25280:160:0;;17407:2:1;25280:160:0;;;17389:21:1;17446:2;17426:18;;;17419:30;17485:34;17465:18;;;17458:62;-1:-1:-1;;;17536:18:1;;;17529:48;17594:19;;25280:160:0;17379:240:1;25280:160:0;11643:10;25453:16;25575:394;25599:8;:15;25595:1;:19;25575:394;;;25636:15;25654:8;25663:1;25654:11;;;;;;-1:-1:-1;;;25654:11:0;;;;;;;;;;;;;;;25636:29;;25680:14;25697:7;25705:1;25697:10;;;;;;-1:-1:-1;;;25697:10:0;;;;;;;;;;;;;;;;;;;;25731:18;;;;:9;:18;;;;;;-1:-1:-1;;;;;25731:24:0;;;;;;;;;;;;25697:10;;-1:-1:-1;25731:34:0;-1:-1:-1;25731:34:0;25722:89;;;;-1:-1:-1;;;25722:89:0;;;;;;;:::i;:::-;25853:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25853:24:0;;;;;;;;;;:33;;25880:6;;25853:33;:::i;:::-;25826:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25826:24:0;;;;;;;;;;:60;;;;25926:22;;;;;;:31;;25951:6;;25926:31;:::i;:::-;25901:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25901:22:0;;;;;;;;;;:56;;;;-1:-1:-1;25616:3:0;;;:::i;:::-;;;25575:394;;;;26016:2;-1:-1:-1;;;;;25986:52:0;26010:4;-1:-1:-1;;;;;25986:52:0;26000:8;-1:-1:-1;;;;;25986:52:0;;26020:8;26030:7;25986:52;;;;;;;:::i;:::-;;;;;;;;26051:80;26087:8;26097:4;26103:2;26107:8;26117:7;26126:4;26051:35;:80::i;:::-;24858:1281;;;;;;:::o;19268:634::-;19432:16;19493:3;:10;19474:8;:15;:29;19466:83;;;;-1:-1:-1;;;19466:83:0;;20963:2:1;19466:83:0;;;20945:21:1;21002:2;20982:18;;;20975:30;21041:34;21021:18;;;21014:62;-1:-1:-1;;;21092:18:1;;;21085:39;21141:19;;19466:83:0;20935:231:1;19466:83:0;19562:30;19609:8;:15;-1:-1:-1;;;;;19595:30:0;;;;;-1:-1:-1;;;19595:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19595:30:0;;19562:63;;19643:9;19638:224;19662:8;:15;19658:1;:19;19638:224;;;19730:1;-1:-1:-1;;;;;19707:25:0;:8;19716:1;19707:11;;;;;;-1:-1:-1;;;19707:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19707:25:0;;;19699:87;;;;-1:-1:-1;;;19699:87:0;;15348:2:1;19699:87:0;;;15330:21:1;15387:2;15367:18;;;15360:30;15426:34;15406:18;;;15399:62;-1:-1:-1;;;15477:18:1;;;15470:47;15534:19;;19699:87:0;15320:239:1;19699:87:0;19820:9;:17;19830:3;19834:1;19830:6;;;;;;-1:-1:-1;;;19830:6:0;;;;;;;;;;;;;;;19820:17;;;;;;;;;;;:30;19838:8;19847:1;19838:11;;;;;;-1:-1:-1;;;19838:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19820:30:0;-1:-1:-1;;;;;19820:30:0;;;;;;;;;;;;;19801:13;19815:1;19801:16;;;;;;-1:-1:-1;;;19801:16:0;;;;;;;;;;;;;;;;;;:49;19679:3;;;:::i;:::-;;;19638:224;;;-1:-1:-1;19881:13:0;19268:634;-1:-1:-1;;;19268:634:0:o;34214:110::-;32658:5;;-1:-1:-1;;;;;32658:5:0;32667:10;32658:19;32650:64;;;;-1:-1:-1;;;32650:64:0;;19421:2:1;32650:64:0;;;19403:21:1;;;19440:18;;;19433:30;19499:34;19479:18;;;19472:62;19551:18;;32650:64:0;19393:182:1;32650:64:0;34288:28:::1;34307:8;34288:18;:28::i;:::-;34214:110:::0;:::o;34449:141::-;34541:41;34552:10;34564:8;34574:7;34541:10;:41::i;:::-;34449:141;;:::o;16037:104::-;16093:13;16126:7;16119:14;;;;;:::i;20264:311::-;11643:10;-1:-1:-1;;;;;20367:24:0;;;;20359:78;;;;-1:-1:-1;;;20359:78:0;;20553:2:1;20359:78:0;;;20535:21:1;20592:2;20572:18;;;20565:30;20631:34;20611:18;;;20604:62;-1:-1:-1;;;20682:18:1;;;20675:39;20731:19;;20359:78:0;20525:231:1;20359:78:0;11643:10;20450:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;20450:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;20450:53:0;;;;;;;;;;20519:48;;13225:41:1;;;20450:42:0;;11643:10;20519:48;;13198:18:1;20519:48:0;;;;;;;20264:311;;:::o;34332:109::-;34399:34;34405:10;34417:7;34426:6;34399:5;:34::i;15248:67::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33876:330::-;33996:10;;;;33986:21;;;;:9;:21;;;;;;;;33985:22;33977:56;;;;-1:-1:-1;;;33977:56:0;;21373:2:1;33977:56:0;;;21355:21:1;21412:2;21392:18;;;21385:30;-1:-1:-1;;;21431:18:1;;;21424:51;21492:18;;33977:56:0;21345:171:1;33977:56:0;34054:10;;;;34044:21;;;;:9;:21;;;;;:28;;-1:-1:-1;;34044:28:0;34068:4;34044:28;;;34083:35;34094:3;34099:12;11643:10;;11547:115;34099:12;34113:4;34083:10;:35::i;:::-;34129:33;34135:9;;34146:6;34154:3;34158;34129:5;:33::i;:::-;34185:9;;:13;;34197:1;34185:13;:::i;:::-;34173:9;:25;-1:-1:-1;;;;33876:330:0:o;17684:556::-;17757:13;17791:16;17799:7;17791;:16::i;:::-;17783:77;;;;-1:-1:-1;;;17783:77:0;;19782:2:1;17783:77:0;;;19764:21:1;19821:2;19801:18;;;19794:30;19860:34;19840:18;;;19833:62;-1:-1:-1;;;19911:18:1;;;19904:46;19967:19;;17783:77:0;19754:238:1;17783:77:0;17871:23;17897:19;;;:10;:19;;;;;17871:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17927:18;17948:14;17927:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17985:4;17979:18;18001:1;17979:23;17975:72;;;-1:-1:-1;18026:9:0;17684:556;-1:-1:-1;;17684:556:0:o;17975:72::-;18061:23;;:27;18057:108;;18136:4;18142:9;18119:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18105:48;;;;17684:556;;;:::o;18057:108::-;18206:4;18212:18;:7;:16;:18::i;:::-;18189:42;;;;;;;;;:::i;22187:1020::-;-1:-1:-1;;;;;22418:16:0;;22410:66;;;;-1:-1:-1;;;22410:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22509:20:0;;11643:10;22509:20;;:60;;-1:-1:-1;22533:36:0;22550:4;11643:10;20864:160;:::i;22533:36::-;22487:151;;;;-1:-1:-1;;;22487:151:0;;16173:2:1;22487:151:0;;;16155:21:1;16212:2;16192:18;;;16185:30;16251:34;16231:18;;;16224:62;-1:-1:-1;;;16302:18:1;;;16295:39;16351:19;;22487:151:0;16145:231:1;22487:151:0;22658:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22658:24:0;;;;;;;;;;:34;-1:-1:-1;22658:34:0;22649:89;;;;-1:-1:-1;;;22649:89:0;;;;;;;:::i;:::-;11643:10;22795:101;11643:10;22826:4;22832:2;22836:26;22854:7;22836:17;:26::i;:::-;22864:25;22882:6;22864:17;:25::i;:::-;24858:1281;;;;;;22795:101;22944:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22944:24:0;;;;;;;;;;:33;;22971:6;;22944:33;:::i;:::-;22917:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22917:24:0;;;;;;;;;;:60;;;;23013:22;;;;;;:31;;23038:6;;23013:31;:::i;:::-;22988:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22988:22:0;;;;;;;;;;;;;:56;;;;23062:51;;22990:25:1;;;23031:18;;;23024:34;;;23062:51:0;;;;;;;;;22963:18:1;23062:51:0;;;;;;;23126:73;23157:8;23167:4;23173:2;23177:7;23186:6;23194:4;23126:30;:73::i;32869:271::-;32658:5;;32941:4;;-1:-1:-1;;;;;32658:5:0;32667:10;32658:19;32650:64;;;;-1:-1:-1;;;32650:64:0;;19421:2:1;32650:64:0;;;19403:21:1;;;19440:18;;;19433:30;19499:34;19479:18;;;19472:62;19551:18;;32650:64:0;19393:182:1;32650:64:0;-1:-1:-1;;;;;32965:22:0;::::1;32957:73;;;::::0;-1:-1:-1;;;32957:73:0;;15766:2:1;32957:73:0::1;::::0;::::1;15748:21:1::0;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:36;15941:19;;32957:73:0::1;15738:228:1::0;32957:73:0::1;33041:5;:16:::0;;-1:-1:-1;;;;;;33041:16:0::1;-1:-1:-1::0;;;;;33041:16:0;::::1;::::0;;::::1;::::0;;;33073:37:::1;::::0;33041:16;;33073:37:::1;::::0;-1:-1:-1;;33073:37:0::1;-1:-1:-1::0;33128:4:0::1;32725:1;32869:271:::0;;;:::o;18248:127::-;18313:4;18337:30;:12;18359:7;18337:21;:30::i;:::-;18330:37;18248:127;-1:-1:-1;;18248:127:0:o;31126:809::-;-1:-1:-1;;;;;31385:13:0;;12651:20;12690:8;31381:547;;31421:84;;-1:-1:-1;;;31421:84:0;;-1:-1:-1;;;;;31421:43:0;;;;;:84;;31465:8;;31475:4;;31481:8;;31491:7;;31500:4;;31421:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31421:84:0;;;;;;;;-1:-1:-1;;31421:84:0;;;;;;;;;;;;:::i;:::-;;;31417:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;31790:6;31783:14;;-1:-1:-1;;;31783:14:0;;;;;;;;:::i;31417:500::-;;;31839:62;;-1:-1:-1;;;31839:62:0;;14106:2:1;31839:62:0;;;14088:21:1;14145:2;14125:18;;;14118:30;14184:34;14164:18;;;14157:62;-1:-1:-1;;;14235:18:1;;;14228:50;14295:19;;31839:62:0;14078:242:1;31417:500:0;-1:-1:-1;;;;;;31555:64:0;;-1:-1:-1;;;31555:64:0;31551:163;;31644:50;;-1:-1:-1;;;31644:50:0;;;;;;;:::i;31551:163::-;31506:223;31126:809;;;;;;:::o;17299:164::-;17378:32;;;;:14;;:32;;;;;:::i;:::-;;17426:29;17439:15;17426:29;;;;;;:::i;:::-;;;;;;;;17299:164;:::o;29312:775::-;-1:-1:-1;;;;;29438:21:0;;29430:69;;;;-1:-1:-1;;;29430:69:0;;;;;;;:::i;:::-;29537:7;:14;29518:8;:15;:33;29510:86;;;;-1:-1:-1;;;29510:86:0;;;;;;;:::i;:::-;29653:74;;;;;;;;;29609:16;29653:74;;;;11643:10;;29740:259;29761:8;:15;29757:1;:19;29740:259;;;29838:7;29846:1;29838:10;;;;;;-1:-1:-1;;;29838:10:0;;;;;;;;;;;;;;;29803:9;:22;29813:8;29822:1;29813:11;;;;;;-1:-1:-1;;;29813:11:0;;;;;;;;;;;;;;;29803:22;;;;;;;;;;;:31;29826:7;-1:-1:-1;;;;;29803:31:0;-1:-1:-1;;;;;29803:31:0;;;;;;;;;;;;;:45;;29794:100;;;;-1:-1:-1;;;29794:100:0;;;;;;;:::i;:::-;29977:7;29985:1;29977:10;;;;;;-1:-1:-1;;;29977:10:0;;;;;;;;;;;;;;;29943:9;:22;29953:8;29962:1;29953:11;;;;;;-1:-1:-1;;;29953:11:0;;;;;;;;;;;;;;;29943:22;;;;;;;;;;;:31;29966:7;-1:-1:-1;;;;;29943:31:0;-1:-1:-1;;;;;29943:31:0;;;;;;;;;;;;;:44;;;;:::i;:::-;29909:9;:22;29919:8;29928:1;29919:11;;;;;;-1:-1:-1;;;29919:11:0;;;;;;;;;;;;;;;29909:22;;;;;;;;;;;:31;29932:7;-1:-1:-1;;;;;29909:31:0;-1:-1:-1;;;;;29909:31:0;;;;;;;;;;;;:78;;;;29778:3;;;;;:::i;:::-;;;;29740:259;;;;30057:1;-1:-1:-1;;;;;30016:63:0;30040:7;-1:-1:-1;;;;;30016:63:0;30030:8;-1:-1:-1;;;;;30016:63:0;;30061:8;30071:7;30016:63;;;;;;;:::i;:::-;;;;;;;;29312:775;;;;:::o;28474:688::-;28575:16;28583:7;28575;:16::i;:::-;28567:78;;;;-1:-1:-1;;;28567:78:0;;16583:2:1;28567:78:0;;;16565:21:1;16622:2;16602:18;;;16595:30;16661:34;16641:18;;;16634:62;-1:-1:-1;;;16712:18:1;;;16705:47;16769:19;;28567:78:0;16555:239:1;28567:78:0;-1:-1:-1;;;;;28664:21:0;;28656:69;;;;-1:-1:-1;;;28656:69:0;;;;;;;:::i;:::-;28745:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;28745:27:0;;;;;;;;;;:37;-1:-1:-1;28745:37:0;28736:92;;;;-1:-1:-1;;;28736:92:0;;;;;;;:::i;:::-;11643:10;28883:110;11643:10;28914:7;28839:16;28935:26;28953:7;28935:17;:26::i;:::-;28963:25;28981:6;28963:17;:25::i;:::-;-1:-1:-1;;28883:110:0;;;;;;;;;-1:-1:-1;28883:110:0;;-1:-1:-1;;;24858:1281:0;28883:110;29036:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;29036:27:0;;;;;;;;;;:36;;29066:6;;29036:36;:::i;:::-;29006:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;29006:27:0;;;;;;;;;;;;:66;;;;29092:62;;22990:25:1;;;23031:18;;;23024:34;;;29006:18:0;;29092:62;;;;;22963:18:1;29092:62:0;22945:119:1;33512:356:0;33615:12;33657:4;33663:6;33671:8;33681:4;:10;;;33640:52;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33630:63;;;;;;33615:78;;33721:104;33794:4;33741:58;;;;;;;10602:66:1;10590:79;;10694:2;10685:12;;10678:28;;;;10731:2;10722:12;;10580:160;33741:58:0;;;;-1:-1:-1;;33741:58:0;;;;;;;;;33731:69;;33741:58;33731:69;;;;33802:6;;33810;;;;33818;;;;33802;33721:104;;;;;;;;13504:25:1;;;;13577:4;13565:17;13545:18;;;13538:45;;;;13599:18;;;13592:34;;;;13642:18;;;13635:34;13476:19;;33721:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33721:104:0;;-1:-1:-1;;33721:104:0;;33712:5;;-1:-1:-1;;;;;33712:5:0;;;:113;;;;-1:-1:-1;33704:156:0;;;;-1:-1:-1;;;33704:156:0;;17826:2:1;33704:156:0;;;17808:21:1;17865:2;17845:18;;;17838:30;17904:32;17884:18;;;17877:60;17954:18;;33704:156:0;17798:180:1;33704:156:0;33512:356;;;;:::o;26544:634::-;26656:16;26664:7;26656;:16::i;:::-;26655:17;26647:59;;;;-1:-1:-1;;;26647:59:0;;22132:2:1;26647:59:0;;;22114:21:1;22171:2;22151:18;;;22144:30;22210:31;22190:18;;;22183:59;22259:18;;26647:59:0;22104:179:1;26647:59:0;26725:12;26717:50;;;;-1:-1:-1;;;26717:50:0;;20199:2:1;26717:50:0;;;20181:21:1;20238:2;20218:18;;;20211:30;20277:27;20257:18;;;20250:55;20322:18;;26717:50:0;20171:175:1;26717:50:0;26807:1;26792:4;26786:18;:22;26778:52;;;;-1:-1:-1;;;26778:52:0;;22490:2:1;26778:52:0;;;22472:21:1;22529:2;22509:18;;;22502:30;-1:-1:-1;;;22548:18:1;;;22541:47;22605:18;;26778:52:0;22462:167:1;26778:52:0;26843:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;26843:30:0;26863:10;26843:30;;;;;;26884:37;;:12;;26852:7;;26884:16;:37::i;:::-;-1:-1:-1;26932:20:0;;;;:11;:20;;;;;;;;:27;;;26970:9;:18;;;;;26989:10;26970:30;;;;;;;:40;;;27021:27;26944:7;27043:4;27021:12;:27::i;:::-;27066:70;;;22990:25:1;;;23046:2;23031:18;;23024:34;;;27107:10:0;;27101:3;;27107:10;;27066:70;;22963:18:1;27066:70:0;;;;;;;27162:7;27152:18;27156:4;27152:18;;;;;;:::i;:::-;;;;;;;;26544:634;;;;:::o;91:557::-;147:13;179:10;175:53;;-1:-1:-1;;206:10:0;;;;;;;;;;;;-1:-1:-1;;;206:10:0;;;;;91:557::o;175:53::-;253:5;238:12;294:78;301:9;;294:78;;327:8;;;;:::i;:::-;;-1:-1:-1;350:10:0;;-1:-1:-1;358:2:0;350:10;;:::i;:::-;;;294:78;;;382:19;414:6;-1:-1:-1;;;;;404:17:0;;;;;-1:-1:-1;;;404:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;404:17:0;-1:-1:-1;382:39:0;-1:-1:-1;432:13:0;448:10;457:1;448:6;:10;:::i;:::-;432:26;;476:5;469:12;;492:117;499:9;;492:117;;561:9;568:2;561:4;:9;:::i;:::-;556:14;;:2;:14;:::i;:::-;543:29;;525:6;532:7;;;;:::i;:::-;;;525:15;;;;;;-1:-1:-1;;;525:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;525:47:0;;;;;;;;-1:-1:-1;587:10:0;595:2;587:10;;:::i;:::-;;;492:117;;;-1:-1:-1;633:6:0;91:557;-1:-1:-1;;;;91:557:0:o;31943:198::-;32063:16;;;32077:1;32063:16;;;;;;;;;32009;;32038:22;;32063:16;;;;;;;;;;;;-1:-1:-1;32063:16:0;32038:41;;32101:7;32090:5;32096:1;32090:8;;;;;;-1:-1:-1;;;32090:8:0;;;;;;;;;;;;;;;;;;:18;32128:5;31943:198;-1:-1:-1;;31943:198:0:o;30346:772::-;-1:-1:-1;;;;;30580:13:0;;12651:20;12690:8;30576:535;;30616:77;;-1:-1:-1;;;30616:77:0;;-1:-1:-1;;;;;30616:38:0;;;;;:77;;30655:8;;30665:4;;30671:7;;30680:6;;30688:4;;30616:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30616:77:0;;;;;;;;-1:-1:-1;;30616:77:0;;;;;;;;;;;;:::i;:::-;;;30612:488;;;;:::i;:::-;-1:-1:-1;;;;;;30743:59:0;;-1:-1:-1;;;30743:59:0;30739:158;;30827:50;;-1:-1:-1;;;30827:50:0;;;;;;;:::i;3938:151::-;4022:4;2129:17;;;:12;;;:17;;;;;;:22;;4046:35;4039:42;3938:151;-1:-1:-1;;;3938:151:0:o;3595:185::-;3684:4;3708:64;3713:3;3733;-1:-1:-1;;;;;3747:23:0;;3708:4;:64::i;:::-;3701:71;3595:185;-1:-1:-1;;;;3595:185:0:o;16405:111::-;16483:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;16405:111;;:::o;873:470::-;949:4;985:17;;;:12;;;:17;;;;;;1019:13;1015:321;;-1:-1:-1;;1104:38:0;;;;;;;;;;;;;;;;;;1086:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1178:19;;1158:17;;;:12;;;:17;;;;;;;:39;1212:11;;1015:321;1292:5;1256:3;1269:12;1280:1;1269:8;:12;:::i;:::-;1256:26;;;;;;-1:-1:-1;;;1256:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1319:5;1312: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:367::-;3692:6;3700;3753:2;3741:9;3732:7;3728:23;3724:32;3721:2;;;3774:6;3766;3759:22;3721:2;3802:29;3821:9;3802:29;:::i;:::-;3792:39;;3881:2;3870:9;3866:18;3853:32;3928:5;3921:13;3914:21;3907:5;3904:32;3894:2;;3955:6;3947;3940:22;3894:2;3983:5;3973:15;;;3711:283;;;;;:::o;3999:264::-;4067:6;4075;4128:2;4116:9;4107:7;4103:23;4099:32;4096:2;;;4149:6;4141;4134:22;4096:2;4177:29;4196:9;4177:29;:::i;:::-;4167:39;4253:2;4238:18;;;;4225:32;;-1:-1:-1;;;4086:177:1:o;4268:1274::-;4386:6;4394;4447:2;4435:9;4426:7;4422:23;4418:32;4415:2;;;4468:6;4460;4453:22;4415:2;4513:9;4500:23;-1:-1:-1;;;;;4583:2:1;4575:6;4572:14;4569:2;;;4604:6;4596;4589:22;4569:2;4647:6;4636:9;4632:22;4622:32;;4692:7;4685:4;4681:2;4677:13;4673:27;4663:2;;4719:6;4711;4704:22;4663:2;4760;4747:16;4782:4;4805:43;4845:2;4805:43;:::i;:::-;4877:2;4871:9;4889:31;4917:2;4909:6;4889:31;:::i;:::-;4955:18;;;4989:15;;;;-1:-1:-1;5024:11:1;;;5066:1;5062:10;;;5054:19;;5050:28;;5047:41;-1:-1:-1;5044:2:1;;;5106:6;5098;5091:22;5044:2;5133:6;5124:15;;5148:169;5162:2;5159:1;5156:9;5148:169;;;5219:23;5238:3;5219:23;:::i;:::-;5207:36;;5180:1;5173:9;;;;;5263:12;;;;5295;;5148:169;;;-1:-1:-1;5336:6:1;-1:-1:-1;;5380:18:1;;5367:32;;-1:-1:-1;;5411:16:1;;;5408:2;;;5445:6;5437;5430:22;5408:2;;5473:63;5528:7;5517:8;5506:9;5502:24;5473:63;:::i;:::-;5463:73;;;4405:1137;;;;;:::o;5547:625::-;5665:6;5673;5726:2;5714:9;5705:7;5701:23;5697:32;5694:2;;;5747:6;5739;5732:22;5694:2;5792:9;5779:23;-1:-1:-1;;;;;5862:2:1;5854:6;5851:14;5848:2;;;5883:6;5875;5868:22;5848:2;5911:61;5964:7;5955:6;5944:9;5940:22;5911:61;:::i;:::-;5901:71;;6025:2;6014:9;6010:18;5997:32;5981:48;;6054:2;6044:8;6041:16;6038:2;;;6075:6;6067;6060:22;6177:255;6235:6;6288:2;6276:9;6267:7;6263:23;6259:32;6256:2;;;6309:6;6301;6294:22;6256:2;6353:9;6340:23;6372:30;6396:5;6372:30;:::i;6437:259::-;6506:6;6559:2;6547:9;6538:7;6534:23;6530:32;6527:2;;;6580:6;6572;6565:22;6527:2;6617:9;6611:16;6636:30;6660:5;6636:30;:::i;6701:341::-;6770:6;6823:2;6811:9;6802:7;6798:23;6794:32;6791:2;;;6844:6;6836;6829:22;6791:2;6889:9;6876:23;-1:-1:-1;;;;;6914:6:1;6911:30;6908:2;;;6959:6;6951;6944:22;6908:2;6987:49;7028:7;7019:6;7008:9;7004:22;6987:49;:::i;7047:1062::-;7165:6;7173;7181;7189;7233:9;7224:7;7220:23;7263:3;7259:2;7255:12;7252:2;;;7285:6;7277;7270:22;7252:2;7330:9;7317:23;-1:-1:-1;;;;;7355:6:1;7352:30;7349:2;;;7400:6;7392;7385:22;7349:2;7428:49;7469:7;7460:6;7449:9;7445:22;7428:49;:::i;:::-;7418:59;-1:-1:-1;;7524:2:1;7509:18;;7496:32;;-1:-1:-1;7575:2:1;7560:18;;7547:32;;-1:-1:-1;7613:4:1;-1:-1:-1;;7595:16:1;;7591:27;7588:2;;;7636:6;7628;7621:22;7588:2;;7674;7668:9;7686:32;7711:6;7686:32;:::i;:::-;7768:2;7757:9;7753:18;7740:32;7812:4;7805:5;7801:16;7794:5;7791:27;7781:2;;7837:6;7829;7822:22;7781:2;7855:21;;7937:4;7922:20;;7909:34;7904:2;7892:15;;7885:59;8005:3;7990:19;;7977:33;7972:2;7960:15;;7953:58;8072:3;8057:19;;;8044:33;8039:2;8027:15;;8020:58;-1:-1:-1;7200:909:1;;;;-1:-1:-1;7200:909:1;;7862:6;7200:909::o;8114:190::-;8173:6;8226:2;8214:9;8205:7;8201:23;8197:32;8194:2;;;8247:6;8239;8232:22;8194:2;-1:-1:-1;8275:23:1;;8184:120;-1:-1:-1;8184:120:1:o;8309:258::-;8377:6;8385;8438:2;8426:9;8417:7;8413:23;8409:32;8406:2;;;8459:6;8451;8444:22;8406:2;-1:-1:-1;;8487:23:1;;;8557:2;8542:18;;;8529:32;;-1:-1:-1;8396:171:1:o;8572:437::-;8625:3;8663:5;8657:12;8690:6;8685:3;8678:19;8716:4;8745:2;8740:3;8736:12;8729:19;;8782:2;8775:5;8771:14;8803:3;8815:169;8829:6;8826:1;8823:13;8815:169;;;8890:13;;8878:26;;8924:12;;;;8959:15;;;;8851:1;8844:9;8815:169;;;-1:-1:-1;9000:3:1;;8633:376;-1:-1:-1;;;;;8633:376:1:o;9014:257::-;9055:3;9093:5;9087:12;9120:6;9115:3;9108:19;9136:63;9192:6;9185:4;9180:3;9176:14;9169:4;9162:5;9158:16;9136:63;:::i;:::-;9253:2;9232:15;-1:-1:-1;;9228:29:1;9219:39;;;;9260:4;9215:50;;9063:208;-1:-1:-1;;9063:208:1:o;9276:604::-;9509:3;9541:26;9537:31;9610:2;9601:6;9597:2;9593:15;9589:24;9584:3;9577:37;9665:2;9656:6;9652:2;9648:15;9644:24;9639:2;9634:3;9630:12;9623:46;;9698:6;9692:13;9714:62;9769:6;9764:2;9759:3;9755:12;9748:4;9740:6;9736:17;9714:62;:::i;:::-;9835:2;9795:16;;9827:11;;;9820:27;;;;9871:2;9863:11;;9517:363;-1:-1:-1;;;;9517:363:1:o;9885:470::-;10064:3;10102:6;10096:13;10118:53;10164:6;10159:3;10152:4;10144:6;10140:17;10118:53;:::i;:::-;10234:13;;10193:16;;;;10256:57;10234:13;10193:16;10290:4;10278:17;;10256:57;:::i;:::-;10329:20;;10072:283;-1:-1:-1;;;;10072:283:1:o;10953:826::-;-1:-1:-1;;;;;11350:15:1;;;11332:34;;11402:15;;11397:2;11382:18;;11375:43;11312:3;11449:2;11434:18;;11427:31;;;11275:4;;11481:57;;11518:19;;11510:6;11481:57;:::i;:::-;11586:9;11578:6;11574:22;11569:2;11558:9;11554:18;11547:50;11620:44;11657:6;11649;11620:44;:::i;:::-;11606:58;;11713:9;11705:6;11701:22;11695:3;11684:9;11680:19;11673:51;11741:32;11766:6;11758;11741:32;:::i;:::-;11733:40;11284:495;-1:-1:-1;;;;;;;;11284:495:1:o;11784:560::-;-1:-1:-1;;;;;12081:15:1;;;12063:34;;12133:15;;12128:2;12113:18;;12106:43;12180:2;12165:18;;12158:34;;;12223:2;12208:18;;12201:34;;;12043:3;12266;12251:19;;12244:32;;;12006:4;;12293:45;;12318:19;;12310:6;12293:45;:::i;:::-;12285:53;12015:329;-1:-1:-1;;;;;;;12015:329:1:o;12349:261::-;12528:2;12517:9;12510:21;12491:4;12548:56;12600:2;12589:9;12585:18;12577:6;12548:56;:::i;12615:465::-;12872:2;12861:9;12854:21;12835:4;12898:56;12950:2;12939:9;12935:18;12927:6;12898:56;:::i;:::-;13002:9;12994:6;12990:22;12985:2;12974:9;12970:18;12963:50;13030:44;13067:6;13059;13030:44;:::i;:::-;13022:52;12844:236;-1:-1:-1;;;;;12844:236:1:o;13680:219::-;13829:2;13818:9;13811:21;13792:4;13849:44;13889:2;13878:9;13874:18;13866:6;13849:44;:::i;14325:404::-;14527:2;14509:21;;;14566:2;14546:18;;;14539:30;14605:34;14600:2;14585:18;;14578:62;-1:-1:-1;;;14671:2:1;14656:18;;14649:38;14719:3;14704:19;;14499:230::o;16799:401::-;17001:2;16983:21;;;17040:2;17020:18;;;17013:30;17079:34;17074:2;17059:18;;17052:62;-1:-1:-1;;;17145:2:1;17130:18;;17123:35;17190:3;17175:19;;16973:227::o;18404:399::-;18606:2;18588:21;;;18645:2;18625:18;;;18618:30;18684:34;18679:2;18664:18;;18657:62;-1:-1:-1;;;18750:2:1;18735:18;;18728:33;18793:3;18778:19;;18578:225::o;18808:406::-;19010:2;18992:21;;;19049:2;19029:18;;;19022:30;19088:34;19083:2;19068:18;;19061:62;-1:-1:-1;;;19154:2:1;19139:18;;19132:40;19204:3;19189:19;;18982:232::o;21521:404::-;21723:2;21705:21;;;21762:2;21742:18;;;21735:30;21801:34;21796:2;21781:18;;21774:62;-1:-1:-1;;;21867:2:1;21852:18;;21845:38;21915:3;21900:19;;21695:230::o;23069:183::-;23129:4;-1:-1:-1;;;;;23154:6:1;23151:30;23148:2;;;23184:18;;:::i;:::-;-1:-1:-1;23229:1:1;23225:14;23241:4;23221:25;;23138:114::o;23257:128::-;23297:3;23328:1;23324:6;23321:1;23318:13;23315:2;;;23334:18;;:::i;:::-;-1:-1:-1;23370:9:1;;23305:80::o;23390:120::-;23430:1;23456;23446:2;;23461:18;;:::i;:::-;-1:-1:-1;23495:9:1;;23436:74::o;23515:125::-;23555:4;23583:1;23580;23577:8;23574:2;;;23588:18;;:::i;:::-;-1:-1:-1;23625:9:1;;23564:76::o;23645:258::-;23717:1;23727:113;23741:6;23738:1;23735:13;23727:113;;;23817:11;;;23811:18;23798:11;;;23791:39;23763:2;23756:10;23727:113;;;23858:6;23855:1;23852:13;23849:2;;;-1:-1:-1;;23893:1:1;23875:16;;23868:27;23698:205::o;23908:136::-;23947:3;23975:5;23965:2;;23984:18;;:::i;:::-;-1:-1:-1;;;24020:18:1;;23955:89::o;24049:380::-;24128:1;24124:12;;;;24171;;;24192:2;;24246:4;24238:6;24234:17;24224:27;;24192:2;24299;24291:6;24288:14;24268:18;24265:38;24262:2;;;24345:10;24340:3;24336:20;24333:1;24326:31;24380:4;24377:1;24370:15;24408:4;24405:1;24398:15;24262:2;;24104:325;;;:::o;24434:225::-;24520:4;24512:6;24508:17;24591:6;24579:10;24576:22;-1:-1:-1;;;;;24543:10:1;24540:34;24537:62;24534:2;;;24602:18;;:::i;:::-;24638:2;24631:22;-1:-1:-1;24480:179:1:o;24664:249::-;24774:2;24755:13;;-1:-1:-1;;24751:27:1;24739:40;;-1:-1:-1;;;;;24794:34:1;;24830:22;;;24791:62;24788:2;;;24856:18;;:::i;:::-;24892:2;24885:22;-1:-1:-1;;24711:202:1:o;24918:135::-;24957:3;-1:-1:-1;;24978:17:1;;24975:2;;;24998:18;;:::i;:::-;-1:-1:-1;25045:1:1;25034:13;;24965:88::o;25058:112::-;25090:1;25116;25106:2;;25121:18;;:::i;:::-;-1:-1:-1;25155:9:1;;25096:74::o;25175:127::-;25236:10;25231:3;25227:20;25224:1;25217:31;25267:4;25264:1;25257:15;25291:4;25288:1;25281:15;25307:127;25368:10;25363:3;25359:20;25356:1;25349:31;25399:4;25396:1;25389:15;25423:4;25420:1;25413:15;25439:127;25500:10;25495:3;25491:20;25488:1;25481:31;25531:4;25528:1;25521:15;25555:4;25552:1;25545:15;25571:185;25606:3;25648:1;25630:16;25627:23;25624:2;;;25698:1;25693:3;25688;25673:27;25729:10;25724:3;25720:20;25624:2;25614:142;:::o;25761:671::-;25800:3;25842:4;25824:16;25821:26;25818:2;;;25808:624;:::o;25818:2::-;25884;25878:9;-1:-1:-1;;25949:16:1;25945:25;;25942:1;25878:9;25921:50;26000:4;25994:11;26024:16;-1:-1:-1;;;;;26130:2:1;26123:4;26115:6;26111:17;26108:25;26103:2;26095:6;26092:14;26089:45;26086:2;;;26137:5;;;;;25808:624;:::o;26086:2::-;26174:6;26168:4;26164:17;26153:28;;26210:3;26204:10;26237:2;26229:6;26226:14;26223:2;;;26243:5;;;;;;25808:624;:::o;26223:2::-;26327;26308:16;26302:4;26298:27;26294:36;26287:4;26278:6;26273:3;26269:16;26265:27;26262:69;26259:2;;;26334:5;;;;;;25808:624;:::o;26259:2::-;26350:57;26401:4;26392:6;26384;26380:19;26376:30;26370:4;26350:57;:::i;:::-;-1:-1:-1;26423:3:1;;25808:624;-1:-1:-1;;;;;25808:624:1:o;26437:131::-;-1:-1:-1;;;;;;26511:32:1;;26501:43;;26491:2;;26558:1;26555;26548:12
Swarm Source
ipfs://c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.