ERC-721
Overview
Max Total Supply
0 Pirates Migrated
Holders
252
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 Pirates MigratedLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Pirates
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/security/Pausable.sol"; import "./ERC721.sol"; import "./interfaces/IPirates.sol"; import "./interfaces/ITPirates.sol"; import "./interfaces/IHPirates.sol"; import "./interfaces/IOrbitalBlockade.sol"; import "./interfaces/IRandomizer.sol"; import "./interfaces/IEON.sol"; contract Pirates is IPirates, ERC721, Pausable { struct LastWrite { uint64 time; uint64 blockNum; } event PirateNamed(uint256 indexed tokenId, string newName); event PirateMinted(uint256 indexed tokenId); event PirateStolen(uint256 indexed tokenId); // tally of the number of pirates that have been minted uint16 public override piratesMinted; // an arbatrary counter to dish out IDs uint16 public override minted; // uint256 public migrated; // toggle naming bool public namingActive; // number of max pirates that can exist with the total minted to keep a 10:1 ratio uint256 public constant MAX_PIRATES = 6000; // cost to name uint256 public constant costToName = 2000 ether; //2000 EON // mapping from tokenId to a struct containing the colonist token's traits mapping(uint256 => Pirate) public tokenTraitsPirate; // mapping from tokenId to a stuct containing the honors pirates mapping(uint256 => HPirates) public tokenTraitsHonors; mapping(uint256 => bool) public isHonors; // mapping from hashed(tokenTrait) to the tokenId it's associated with // used to ensure there are no duplicates mapping(uint256 => uint256) public existingCombinations; // Mapping from token ID to name mapping(uint256 => string) private _tokenName; mapping(uint256 => bool) private _hasName; // Mapping if certain name string has already been reserved mapping(string => bool) private _nameReserved; // Tracks the last block and timestamp that a caller has written to state. // Disallow some access to functions if they occur while a change is being written. mapping(address => LastWrite) private lastWriteAddress; mapping(uint256 => LastWrite) private lastWriteToken; // list of probabilities for each trait type uint8[][9] public rarities; uint8[][9] public aliases; // reference to the orbital for transfers without approval IOrbitalBlockade public orbital; // reference to Traits ITPirates public traits; // reference to honors traits IHPirates public honorTraits; //reference to Randomizer IRandomizer public randomizer; //referenve to EON IEON public EON; //reference to the original pirates contract IPirates public originalPirates; address public auth; // address => used in allowing system communication between contracts mapping(address => bool) private admins; // Imperial Guild Treasury address private imperialGuildTreasury; /** * instantiates contract and rarity tables */ constructor() ERC721("ShatteredEon", "Pirates Migrated") { minted = 151; piratesMinted = 151; _pause(); auth = msg.sender; admins[msg.sender] = true; //PIRATES //sky rarities[0] = [200, 200, 200, 200, 200, 255]; aliases[0] = [1, 2, 0, 4, 3, 5]; //cockpit rarities[1] = [255]; aliases[1] = [0]; //base rarities[2] = [ 255, 255, 255, 255, 200, 200, 200, 200, 40, 40, 40, 40, 150, 150, 150, 150, 255, 255, 255, 255 ]; aliases[2] = [ 16, 17, 18, 19, 7, 6, 5, 4, 3, 2, 1, 0, 16, 17, 18, 19, 0, 1, 2, 3 ]; //engine rarities[3] = [ 150, 150, 150, 150, 255, 255, 255, 255, 100, 100, 100, 100, 255, 255, 255, 255, 40, 40, 40, 40 ]; aliases[3] = [ 8, 9, 10, 11, 12, 13, 14, 15, 15, 14, 13, 12, 7, 6, 5, 4, 8, 9, 10, 11 ]; //nose rarities[4] = [ 255, 255, 255, 255, 150, 150, 150, 150, 255, 255, 255, 255, 120, 120, 120, 120, 40, 40, 40, 40 ]; aliases[4] = [ 0, 1, 2, 3, 15, 14, 13, 12, 11, 10, 9, 8, 3, 2, 1, 0, 12, 13, 14, 15 ]; //wing rarities[5] = [ 120, 120, 120, 120, 40, 40, 40, 40, 150, 150, 150, 150, 255, 255, 255, 255, 255, 255, 255, 255 ]; aliases[5] = [ 19, 18, 17, 16, 3, 2, 1, 0, 0, 1, 2, 3, 19, 18, 17, 16, 15, 14, 13, 12 ]; //weapon1 rarities[6] = [255, 150, 220, 220, 120, 30]; aliases[6] = [0, 0, 0, 0, 0, 0]; //weapon2 rarities[7] = [255, 150, 30, 100, 20, 200]; aliases[7] = [0, 0, 0, 0, 0, 0]; //rank rarities[8] = [12, 160, 73, 255]; aliases[8] = [2, 3, 3, 3]; } modifier requireContractsSet() { require( address(traits) != address(0) && address(orbital) != address(0) && address(randomizer) != address(0) ); _; } modifier blockIfChangingAddress() { require(admins[msg.sender] || lastWriteAddress[tx.origin].blockNum < block.number, "Your trying the cheat"); _; } modifier blockIfChangingToken(uint256 tokenId) { require(admins[msg.sender] || lastWriteToken[tokenId].blockNum < block.number, "Your trying the cheat"); _; } modifier onlyOwner() { require(msg.sender == auth); _; } function setContracts( address _traits, address _honorTraits, address _orbital, address _rand, address _eon, address _originalPirates ) external onlyOwner { traits = ITPirates(_traits); honorTraits = IHPirates(_honorTraits); orbital = IOrbitalBlockade(_orbital); randomizer = IRandomizer(_rand); EON = IEON(_eon); originalPirates = IPirates(_originalPirates); } /*/////////////////////////////////////////////////////////////// EXTERNAL //////////////////////////////////////////////////////////////*/ function _mintPirate(address recipient, uint256 seed) external override whenNotPaused { require(admins[msg.sender], "Only Admins"); require(piratesMinted + 1 <= MAX_PIRATES, "Pirate forces are full"); minted++; piratesMinted++; generatePirate(minted, seed); if (tx.origin != recipient && recipient != address(orbital)) { // Stolen! emit PirateStolen(minted); } _mint(recipient, minted); } function _mintHonors(address recipient, uint8 id) external whenNotPaused onlyOwner { require(minted + 1 <= MAX_PIRATES, "All Pirates Minted"); minted++; piratesMinted++; generateHonors(minted, id); _mint(recipient, minted); } /** * Burn a token - any game logic should be handled before this function. */ function burn(uint256 tokenId) external override whenNotPaused { require(admins[msg.sender]); require(ownerOf[tokenId] == tx.origin, "not owner"); _burn(tokenId); } function transferFrom( address from, address to, uint256 id ) public override(ERC721, IPirates) { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); // allow admin contracts to send without approval if (!admins[msg.sender]) { require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function generatePirate(uint256 tokenId, uint256 seed) internal returns (Pirate memory p) { p = selectPiTraits(seed); if (existingCombinations[structToHashPi(p)] == 0) { tokenTraitsPirate[tokenId] = p; existingCombinations[structToHashPi(p)] = tokenId; emit PirateMinted(tokenId); return p; } return generatePirate(tokenId, randomizer.random(seed)); } function generateHonors(uint256 tokenId, uint8 id) internal returns (HPirates memory r) { r.Legendary = id; tokenTraitsHonors[minted] = r; isHonors[minted] = true; emit PirateMinted(tokenId); return r; } /** * uses A.J. Walker's Alias algorithm for O(1) rarity table lookup * ensuring O(1) instead of O(n) reduces mint cost by more than 50% * probability & alias tables are generated off-chain beforehand * @param seed portion of the 256 bit seed to remove trait correlation * @param traitType the trait type to select a trait for * @return the ID of the randomly selected trait */ function selectTrait(uint16 seed, uint8 traitType) internal view returns (uint8) { uint8 trait = uint8(seed) % uint8(rarities[traitType].length); // If a selected random trait probability is selected (biased coin) return that trait if (seed >> 8 < rarities[traitType][trait]) return trait; return aliases[traitType][trait]; } function selectPiTraits(uint256 seed) internal view returns (Pirate memory p) { p.isPirate = true; seed >>= 16; p.sky = selectTrait(uint16(seed & 0xFFFF), 0); seed >>= 16; p.cockpit = selectTrait(uint16(seed & 0xFFFF), 1); seed >>= 16; p.base = selectTrait(uint16(seed & 0xFFFF), 2); seed >>= 16; p.engine = selectTrait(uint16(seed & 0xFFFF), 3); seed >>= 16; p.nose = selectTrait(uint16(seed & 0xFFFF), 4); seed >>= 16; p.wing = selectTrait(uint16(seed & 0xFFFF), 5); seed >>= 16; p.weapon1 = selectTrait(uint16(seed & 0xFFFF), 6); seed >>= 16; p.weapon2 = selectTrait(uint16(seed & 0xFFFF), 7); seed >>= 16; p.rank = selectTrait(uint16(seed & 0xFFFF), 8); } function structToHashPi(Pirate memory q) internal pure returns (uint256) { return uint256( keccak256( abi.encodePacked( q.sky, q.cockpit, q.base, q.engine, q.nose, q.wing, q.weapon1, q.weapon2, q.rank ) ) ); } function updateOriginAccess(uint16[] memory tokenIds) external override { require(admins[_msgSender()], "Only admins can call this"); uint64 blockNum = uint64(block.number); uint64 time = uint64(block.timestamp); lastWriteAddress[tx.origin] = LastWrite(time, blockNum); for (uint256 i = 0; i < tokenIds.length; i++) { lastWriteToken[tokenIds[i]] = LastWrite(time, blockNum); } } function tokenNameByIndex(uint256 index) public view returns (string memory) { return _tokenName[index]; } function isNameReserved(string memory nameString) public view returns (bool) { return _nameReserved[toLower(nameString)]; } function hasBeenNamed(uint256 tokenId) public view returns (bool) { return _hasName[tokenId]; } function namePirate(uint256 tokenId, string memory newName) public { require(namingActive == true, "naming not yet availanle"); require(ownerOf[tokenId] == msg.sender, "Not your pirate to name"); require(hasBeenNamed(tokenId) == false, "Pirate already named"); require(validateName(newName) == true, "Not a valid name"); require(isNameReserved(newName) == false, "Name already reserved"); // IERC20(_eonAddress).transferFrom(msg.sender, address(this), NAME_CHANGE_PRICE); toggleReserveName(newName, true); toggleHasName(tokenId, true); _tokenName[tokenId] = newName; EON.burn(msg.sender, costToName); emit PirateNamed(tokenId, newName); } /** * @dev Reserves the name if isReserve is set to true, de-reserves if set to false */ function toggleReserveName(string memory str, bool isReserve) internal { _nameReserved[toLower(str)] = isReserve; } function toggleHasName(uint256 tokenId, bool hasName) internal { _hasName[tokenId] = hasName; } /** * @dev Check if the name string is valid (Alphanumeric and spaces without leading or trailing space) */ function validateName(string memory str) public pure returns (bool) { bytes memory b = bytes(str); if (b.length < 1) return false; if (b.length > 25) return false; // Cannot be longer than 25 characters if (b[0] == 0x20) return false; // Leading space if (b[b.length - 1] == 0x20) return false; // Trailing space bytes1 lastChar = b[0]; for (uint256 i; i < b.length; i++) { bytes1 char = b[i]; if (char == 0x20 && lastChar == 0x20) return false; // Cannot contain continous spaces if ( !(char >= 0x30 && char <= 0x39) && //9-0 !(char >= 0x41 && char <= 0x5A) && //A-Z !(char >= 0x61 && char <= 0x7A) && //a-z !(char == 0x20) //space ) return false; lastChar = char; } return true; } /** * @dev Converts the string to lowercase */ function toLower(string memory str) public pure returns (string memory) { bytes memory bStr = bytes(str); bytes memory bLower = new bytes(bStr.length); for (uint256 i = 0; i < bStr.length; i++) { // Uppercase character if ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) { bLower[i] = bytes1(uint8(bStr[i]) + 32); } else { bLower[i] = bStr[i]; } } return string(bLower); } /** * creates identical tokens in the new contract * and burns any original tokens * @param tokenIds the ids of the tokens to migrate */ function migrate(uint16[] calldata tokenIds) external whenNotPaused { for (uint16 i = 0; i < tokenIds.length; i++) { require(originalPirates.isOwner(tokenIds[i]) == msg.sender, "THIEF!"); tokenTraitsPirate[tokenIds[i]] = originalPirates.getTokenTraitsPirate(tokenIds[i]); originalPirates.burn(tokenIds[i]); _mint(address(orbital), tokenIds[i]); migrated++; } orbital.addPiratesToCrew(msg.sender, tokenIds); } /** * enables owner to pause / unpause minting */ function setPaused(bool _paused) external requireContractsSet onlyOwner { if (_paused) _pause(); else _unpause(); } function getBalance(address tokenOwner) public view returns (uint256) { //Prevent chencking balance in the same block it's being modified.. require( admins[msg.sender] || lastWriteAddress[tokenOwner].blockNum < block.number, "no checking balance in the same block it's being modified" ); return balanceOf[tokenOwner]; } function getTokenWriteBlock(uint256 tokenId) external view override returns(uint64) { require( admins[msg.sender], "Only admins can call this" ); return lastWriteToken[tokenId].blockNum; } /** * enables an address to mint / burn * @param addr the address to enable */ function addAdmin(address addr) external onlyOwner { admins[addr] = true; } /** * disables an address from minting / burning * @param addr the address to disbale */ function removeAdmin(address addr) external onlyOwner { admins[addr] = false; } function transferOwnership(address newOwner) external onlyOwner { auth = newOwner; } function toggleNameing(bool _namingActive) external onlyOwner { namingActive = _namingActive; } function setImperialGuildTreasury(address _imperialTreasury) external onlyOwner { imperialGuildTreasury = _imperialTreasury; } /** Traits */ function getTokenTraitsPirate(uint256 tokenId) external view override blockIfChangingAddress blockIfChangingToken (tokenId) returns (Pirate memory) { return tokenTraitsPirate[tokenId]; } function getTokenTraitsHonors(uint256 tokenId) external view override returns (HPirates memory) { return tokenTraitsHonors[tokenId]; } function tokenURI(uint256 tokenId) public view override blockIfChangingAddress blockIfChangingToken (tokenId) returns (string memory) { if (isHonors[tokenId]) { return honorTraits.tokenURI(tokenId); } return traits.tokenURI(tokenId); } function isOwner(uint256 tokenId) blockIfChangingToken(tokenId) public view returns (address) { address addr = ownerOf[tokenId]; return addr; } function safeTransferFrom( address from, address to, uint256 id ) public override(ERC721, IPirates) blockIfChangingToken(id) { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public override(ERC721, IPirates) blockIfChangingToken(id) { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } // For OpenSeas function owner() public view virtual returns (address) { return auth; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) /// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC. abstract contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); event Approval( address indexed owner, address indexed spender, uint256 indexed tokenId ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => uint256) internal balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = ownerOf[id]; require( msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED" ); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { balanceOf[to]++; } ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = ownerOf[id]; require(ownerOf[id] != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { balanceOf[owner]--; } delete ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) interface ERC721TokenReceiver { function onERC721Received( address operator, address from, uint256 id, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IEON { function mint(address to, uint256 amount) external; function burn(address from, uint256 amount) external; function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IHPirates { function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IOrbitalBlockade { function addPiratesToCrew(address account, uint16[] calldata tokenIds) external; function claimPiratesFromCrew(address account, uint16[] calldata tokenIds, bool unstake) external; function payPirateTax(uint256 amount) external; function randomPirateOwner(uint256 seed) external view returns (address); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IPirates { // struct to store each Colonist's traits struct Pirate { bool isPirate; uint8 sky; uint8 cockpit; uint8 base; uint8 engine; uint8 nose; uint8 wing; uint8 weapon1; uint8 weapon2; uint8 rank; } struct HPirates { uint8 Legendary; } function transferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) external; function minted() external returns (uint16); function piratesMinted() external returns (uint16); function isOwner(uint256 tokenId) external view returns (address); function _mintPirate(address recipient, uint256 seed) external; function burn(uint256 tokenId) external; function getTokenTraitsPirate(uint256 tokenId) external view returns (Pirate memory); function getTokenTraitsHonors(uint256 tokenId) external view returns (HPirates memory); function tokenNameByIndex(uint256 index) external view returns (string memory); function isHonors(uint256 tokenId) external view returns (bool); function updateOriginAccess(uint16[] memory tokenIds) external; function getTokenWriteBlock(uint256 tokenId) external view returns(uint64); function hasBeenNamed(uint256 tokenId) external view returns (bool); function namePirate(uint256 tokenId, string memory newName) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IRandomizer { function random(uint256) external returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ITPirates { function tokenURI(uint256 tokenId) external view returns (string memory); }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "details": { "constantOptimizer": true, "cse": true, "deduplicate": true, "inliner": true, "jumpdestRemover": true, "orderLiterals": true, "peephole": true, "yul": true, "yulDetails": { "optimizerSteps": "dhfoDgvulfnTUtnIf", "stackAllocation": true } }, "runs": 2000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PirateMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"newName","type":"string"}],"name":"PirateNamed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PirateStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"EON","outputs":[{"internalType":"contract IEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PIRATES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint8","name":"id","type":"uint8"}],"name":"_mintHonors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"_mintPirate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"costToName","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"existingCombinations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraitsHonors","outputs":[{"components":[{"internalType":"uint8","name":"Legendary","type":"uint8"}],"internalType":"struct IPirates.HPirates","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraitsPirate","outputs":[{"components":[{"internalType":"bool","name":"isPirate","type":"bool"},{"internalType":"uint8","name":"sky","type":"uint8"},{"internalType":"uint8","name":"cockpit","type":"uint8"},{"internalType":"uint8","name":"base","type":"uint8"},{"internalType":"uint8","name":"engine","type":"uint8"},{"internalType":"uint8","name":"nose","type":"uint8"},{"internalType":"uint8","name":"wing","type":"uint8"},{"internalType":"uint8","name":"weapon1","type":"uint8"},{"internalType":"uint8","name":"weapon2","type":"uint8"},{"internalType":"uint8","name":"rank","type":"uint8"}],"internalType":"struct IPirates.Pirate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenWriteBlock","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasBeenNamed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honorTraits","outputs":[{"internalType":"contract IHPirates","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isHonors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nameString","type":"string"}],"name":"isNameReserved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newName","type":"string"}],"name":"namePirate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"namingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orbital","outputs":[{"internalType":"contract IOrbitalBlockade","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalPirates","outputs":[{"internalType":"contract IPirates","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piratesMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRandomizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_honorTraits","type":"address"},{"internalType":"address","name":"_orbital","type":"address"},{"internalType":"address","name":"_rand","type":"address"},{"internalType":"address","name":"_eon","type":"address"},{"internalType":"address","name":"_originalPirates","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_imperialTreasury","type":"address"}],"name":"setImperialGuildTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"toLower","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_namingActive","type":"bool"}],"name":"toggleNameing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenNameByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTraitsHonors","outputs":[{"internalType":"uint8","name":"Legendary","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTraitsPirate","outputs":[{"internalType":"bool","name":"isPirate","type":"bool"},{"internalType":"uint8","name":"sky","type":"uint8"},{"internalType":"uint8","name":"cockpit","type":"uint8"},{"internalType":"uint8","name":"base","type":"uint8"},{"internalType":"uint8","name":"engine","type":"uint8"},{"internalType":"uint8","name":"nose","type":"uint8"},{"internalType":"uint8","name":"wing","type":"uint8"},{"internalType":"uint8","name":"weapon1","type":"uint8"},{"internalType":"uint8","name":"weapon2","type":"uint8"},{"internalType":"uint8","name":"rank","type":"uint8"}],"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":"traits","outputs":[{"internalType":"contract ITPirates","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"updateOriginAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"validateName","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604080518082018252600c81526b29b430ba3a32b932b222b7b760a11b60208083019182528351808501909452601084526f141a5c985d195cc8135a59dc985d195960821b9084015281519192916200006e9160009162000954565b5080516200008490600190602084019062000954565b50506006805464ffffffffff1916639700970017905550620000a5620008d6565b602a80546001600160a01b031916339081179091556000908152602b6020908152604091829020805460ff19166001179055815160c08101835260c880825291810182905291820181905260608201819052608082015260ff60a082015262000113906012906006620009e3565b506040805160c08101825260018152600260208201526000918101919091526004606082015260036080820152600560a08201526200015790601b906006620009e3565b50604080516020810190915260ff815262000177906013906001620009e3565b506040805160208101909152600081526200019790601c906001620009e3565b50604080516102808101825260ff808252602082018190529181018290526060810182905260c86080820181905260a0820181905260c0820181905260e08201526028610100820181905261012082018190526101408201819052610160820152609661018082018190526101a082018190526101c082018190526101e0820152610200810182905261022081018290526102408101829052610260810191909152620002489060149081620009e3565b5060408051610280810182526010808252601160208301819052601293830184905260136060840181905260076080850152600660a0850152600560c0850152600460e0850152600361010085018190526002610120860181905260016101408701819052600061016088018190526101808801969096526101a08701949094526101c08601969096526101e0850191909152610200840192909252610220830152610240820183905261026082015290601b906200030c929101906014620009e3565b506040805161028081018252609680825260208201819052918101829052606081019190915260ff6080820181905260a0820181905260c0820181905260e08201819052606461010083018190526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e08201526028610200820181905261022082018190526102408201819052610260820152620003be906015906014620009e3565b5060408051610280810182526008808252600960208301819052600a938301849052600b60608401819052600c60808501819052600d60a08601819052600e60c08701819052600f60e08801819052610100880152610120870152610140860152610160850152600761018085015260066101a085015260056101c085015260046101e08501526102008401929092526102208301526102408201929092526102608101919091526200047690601e906014620009e3565b50604080516102808101825260ff808252602082018190529181018290526060810182905260966080820181905260a0820181905260c0820181905260e0820152610100810182905261012081018290526101408101829052610160810191909152607861018082018190526101a082018190526101c082018190526101e0820152602861020082018190526102208201819052610240820181905261026082015262000528906016906014620009e3565b50604080516102808101825260008082526001602083018190526002938301849052600360608401819052600f60808501819052600e60a08601819052600d60c08701819052600c60e08801819052600b610100890152600a610120890152600961014089015260086101608901526101808801949094526101a08701979097526101c08601939093526101e0850193909352610200840152610220830193909352610240820192909252610260810191909152620005ec90601f906014620009e3565b506040805161028081018252607880825260208201819052918101829052606081019190915260286080820181905260a0820181905260c0820181905260e0820152609661010082018190526101208201819052610140820181905261016082015260ff61018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082018190526102608201526200069e906017906014620009e3565b5060408051610280810182526013808252601260208084018290526011948401859052601060608501819052600360808601819052600260a08701819052600160c08801819052600060e089018190526101008901526101208801526101408701526101608601526101808501939093526101a08401919091526101c08301939093526101e0820152600f610200820152600e610220820152600d610240820152600c6102608201526200075591906014620009e3565b506040805160c08101825260ff81526096602082015260dc918101829052606081019190915260786080820152601e60a082015262000799906018906006620009e3565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152620007dc906021906006620009e3565b506040805160c08101825260ff815260966020820152601e91810191909152606460608201526014608082015260c860a082015262000820906019906006620009e3565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915262000863906022906006620009e3565b5060408051608081018252600c815260a0602082015260499181019190915260ff60608201526200089990601a906004620009e3565b5060408051608081018252600281526003602082018190529181018290526060810191909152620008cf906023906004620009e3565b5062000b4c565b60065460ff1615620009055760405162461bcd60e51b8152600401620008fc9062000a9d565b60405180910390fd5b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200093b3390565b6040516200094a919062000af5565b60405180910390a1565b828054620009629062000b1b565b90600052602060002090601f016020900481019282620009865760008555620009d1565b82601f10620009a157805160ff1916838001178555620009d1565b82800160010185558215620009d1579182015b82811115620009d1578251825591602001919060010190620009b4565b50620009df92915062000a86565b5090565b82805482825590600052602060002090601f01602090048101928215620009d15791602002820160005b8382111562000a4d57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262000a0d565b801562000a7c5782816101000a81549060ff021916905560010160208160000104928301926001030262000a4d565b5050620009df9291505b5b80821115620009df576000815560010162000a87565b6020808252810162000acc81601081526f14185d5cd8589b194e881c185d5cd95960821b602082015260400190565b92915050565b60006001600160a01b03821662000acc565b62000aef8162000ad2565b82525050565b6020810162000acc828462000ae4565b634e487b7160e01b600052602260045260246000fd5b60028104600182168062000b3057607f821691505b6020821081141562000b465762000b4662000b05565b50919050565b6145488062000b5c6000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370480275116101d3578063b88d4fde11610104578063e985e9c5116100a2578063eed4b34c1161007c578063eed4b34c146108e4578063f10fb584146108f7578063f2fde38b1461090a578063f8b2cb4f1461091d57600080fd5b8063e985e9c51461088d578063ebd17368146108bb578063edca3f17146108db57600080fd5b8063ddcbd86b116100de578063ddcbd86b146107a3578063de9375f214610844578063e1fc334f14610857578063e60738691461086a57600080fd5b8063b88d4fde1461075a578063c87b56dd1461076d578063d41d416d1461078057600080fd5b806395d89b4111610171578063a1b8f3741161014b578063a1b8f374146106cd578063a22cb465146106ed578063b07ba6a714610700578063b6a719531461074757600080fd5b806395d89b411461069f5780639e1bd408146106a75780639ffdb65a146106ba57600080fd5b806383c79d43116101ad57806383c79d43146106485780638da5cb5b146106585780638f58e7a8146106695780639416b4231461068c57600080fd5b8063704802751461060f57806370c124cc1461062257806375ab9b761461063557600080fd5b80632463a55a116102ad57806342966c681161024b5780635c975abb116102255780635c975abb146105b55780636352211e146105c05780636ca865ba146105e95780636d522418146105fc57600080fd5b806342966c681461058057806347486c75146105935780634f02c420146105a057600080fd5b806335ca838b1161028757806335ca838b14610534578063368383911461054757806339c7639c1461055a57806342842e0e1461056d57600080fd5b80632463a55a146104eb5780632c678c64146104fe57806333df4b2c1461051457600080fd5b806315b56d101161031a5780631785f53c116102f45780631785f53c1461049257806318d21284146104a55780631a2fbc7c146104c557806323b872dd146104d857600080fd5b806315b56d101461044c578063165272311461045f57806316c38b3c1461047f57600080fd5b806306fdde031161035657806306fdde03146103db578063081812fc146103f0578063095ea7b3146104265780631509f2941461043957600080fd5b806301ffc9a71461037d57806302815835146103a6578063046b07aa146103bb575b600080fd5b61039061038b3660046130e3565b610930565b60405161039d9190613116565b60405180910390f35b6103b96103b4366004613137565b610a15565b005b6006546103ce90610100900461ffff1681565b60405161039d9190613162565b6103e3610a3f565b60405161039d91906131ce565b6104196103fe3660046131f0565b6004602052600090815260409020546001600160a01b031681565b60405161039d919061322b565b6103b961043436600461324d565b610acd565b6103b961044736600461328a565b610ba4565b61039061045a36600461339e565b610bea565b602454610472906001600160a01b031681565b60405161039d919061341b565b6103b961048d366004613137565b610c1d565b6103b96104a036600461328a565b610c90565b6104b86104b33660046131f0565b610cc8565b60405161039d91906134f2565b6103b96104d3366004613501565b610e8e565b6103b96104e636600461354f565b611069565b6103b96104f936600461359f565b6111f2565b61050760075481565b60405161039d919061362f565b61052761052236600461363d565b611285565b60405161039d919061365f565b6103b9610542366004613723565b6112cb565b61052761055536600461363d565b611437565b6104196105683660046131f0565b611447565b6103b961057b36600461354f565b6114bf565b6103b961058e3660046131f0565b611605565b6008546103909060ff1681565b6006546103ce906301000000900461ffff1681565b60065460ff16610390565b6104196105ce3660046131f0565b6003602052600090815260409020546001600160a01b031681565b602854610472906001600160a01b031681565b6103e361060a3660046131f0565b611683565b6103b961061d36600461328a565b611725565b6103b961063036600461324d565b611760565b602654610472906001600160a01b031681565b610507686c6b935b8bbd40000081565b602a546001600160a01b0316610419565b6103906106773660046131f0565b6000908152600e602052604090205460ff1690565b6103e361069a36600461339e565b6118fb565b6103e3611a8e565b6103b96106b53660046137b0565b611a9b565b6103906106c836600461339e565b611f15565b6105076106db3660046131f0565b600c6020526000908152604090205481565b6103b96106fb3660046137f8565b6121cc565b61073a61070e3660046131f0565b6040805160208082018352600091829052928152600a835281902081519283019091525460ff16815290565b60405161039d9190613837565b6103b9610755366004613859565b61223b565b6103b961076836600461388c565b612356565b6103e361077b3660046131f0565b6124a5565b61052761078e3660046131f0565b600a6020526000908152604090205460ff1681565b61082e6107b13660046131f0565b60096020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204811691650100000000008104821691660100000000000082048116916701000000000000008104821691600160401b820481169169010000000000000000009004168a565b60405161039d9a9998979695949392919061390b565b602a54610419906001600160a01b031681565b602554610472906001600160a01b031681565b6103906108783660046131f0565b600b6020526000908152604090205460ff1681565b61039061089b3660046139a0565b600560209081526000928352604080842090915290825290205460ff1681565b6108ce6108c93660046131f0565b61269e565b60405161039d91906139e3565b61050761177081565b602954610472906001600160a01b031681565b602754610472906001600160a01b031681565b6103b961091836600461328a565b6126f1565b61050761092b36600461328a565b612737565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806109c357507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610a0f57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b602a546001600160a01b03163314610a2c57600080fd5b6008805460ff1916911515919091179055565b60008054610a4c90613a07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7890613a07565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b031633811480610b1657506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610b3b5760405162461bcd60e51b8152600401610b3290613a62565b60405180910390fd5b600082815260046020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602a546001600160a01b03163314610bbb57600080fd5b602c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000600f610bf7836118fb565b604051610c049190613a94565b9081526040519081900360200190205460ff1692915050565b6025546001600160a01b031615801590610c4157506024546001600160a01b031615155b8015610c5757506027546001600160a01b031615155b610c6057600080fd5b602a546001600160a01b03163314610c7757600080fd5b8015610c8857610c856127b6565b50565b610c85612825565b602a546001600160a01b03163314610ca757600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19169055565b604080516101408101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301829052338252602b9052919091205460ff1680610d5357503260009081526010602052604090205443600160401b90910467ffffffffffffffff16105b610d6f5760405162461bcd60e51b8152600401610b3290613ad0565b336000908152602b6020526040902054829060ff1680610dae575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b610dca5760405162461bcd60e51b8152600401610b3290613ad0565b600083815260096020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152600160401b8104841692820192909252690100000000000000000090910490911661012082015291505b50919050565b60085460ff161515600114610eb55760405162461bcd60e51b8152600401610b3290613b12565b6000828152600360205260409020546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610b3290613b54565b6000828152600e602052604090205460ff1615610f1a5760405162461bcd60e51b8152600401610b3290613b96565b610f2381611f15565b1515600114610f445760405162461bcd60e51b8152600401610b3290613bd8565b610f4d81610bea565b15610f6a5760405162461bcd60e51b8152600401610b3290613c1a565b610f75816001612878565b6000828152600e60209081526040808320805460ff19166001179055600d82529091208251610fa692840190613010565b506028546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690639dc29fac90610ffb903390686c6b935b8bbd40000090600401613c2a565b600060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b50505050817ff82afa02631c3ed951c54b199dcaaa44d042ba6804e1e1dc55d4f3998b5c6e768260405161105d91906131ce565b60405180910390a25050565b6000818152600360205260409020546001600160a01b038481169116146110a25760405162461bcd60e51b8152600401610b3290613c77565b6001600160a01b0382166110c85760405162461bcd60e51b8152600401610b3290613cb9565b336000908152602b602052604090205460ff1661115657336001600160a01b038416148061110c57506000818152600460205260409020546001600160a01b031633145b8061113a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6111565760405162461bcd60e51b8152600401610b3290613a62565b6001600160a01b03808416600081815260026020908152604080832080546000190190559386168083528483208054600101905585835260038252848320805473ffffffffffffffffffffffffffffffffffffffff199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b602a546001600160a01b0316331461120957600080fd5b6025805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0398891617909155602680548216968816969096179095556024805486169487169490941790935560278054851692861692909217909155602880548416918516919091179055602980549092169216919091179055565b6012826009811061129557600080fd5b0181815481106112a457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b336000908152602b602052604090205460ff166112fa5760405162461bcd60e51b8152600401610b3290613cfb565b60408051808201825267ffffffffffffffff42818116835243828116602080860191825232600090815260109091529586209451855491518516600160401b027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921694169390931792909217909255915b83518110156114315760405180604001604052808367ffffffffffffffff1681526020018467ffffffffffffffff16815250601160008684815181106113b5576113b5613d0b565b60209081029190910181015161ffff1682528181019290925260400160002082518154939092015167ffffffffffffffff908116600160401b027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169216919091179190911790558061142981613d37565b91505061136d565b50505050565b601b826009811061129557600080fd5b336000908152602b6020526040812054829060ff1680611486575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b6114a25760405162461bcd60e51b8152600401610b3290613ad0565b50506000908152600360205260409020546001600160a01b031690565b336000908152602b6020526040902054819060ff16806114fe575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b61151a5760405162461bcd60e51b8152600401610b3290613ad0565b611525848484611069565b6001600160a01b0383163b15806115e957506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0385169063150b7a029061158290339089908890600401613d52565b6020604051808303816000875af11580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613d9f565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6114315760405162461bcd60e51b8152600401610b3290613df2565b60065460ff16156116285760405162461bcd60e51b8152600401610b3290613e34565b336000908152602b602052604090205460ff1661164457600080fd5b6000818152600360205260409020546001600160a01b0316321461167a5760405162461bcd60e51b8152600401610b3290613e76565b610c85816128b5565b6000818152600d602052604090208054606091906116a090613a07565b80601f01602080910402602001604051908101604052809291908181526020018280546116cc90613a07565b80156117195780601f106116ee57610100808354040283529160200191611719565b820191906000526020600020905b8154815290600101906020018083116116fc57829003601f168201915b50505050509050919050565b602a546001600160a01b0316331461173c57600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19166001179055565b60065460ff16156117835760405162461bcd60e51b8152600401610b3290613e34565b336000908152602b602052604090205460ff166117b25760405162461bcd60e51b8152600401610b3290613eb8565b600654611770906117cd90610100900461ffff166001613ec8565b61ffff1611156117ef5760405162461bcd60e51b8152600401610b3290613f23565b600680546301000000900461ffff1690600361180a83613f33565b825461ffff91821661010093840a908102908302199091161790925560068054919091049091169150600161183e83613f33565b91906101000a81548161ffff021916908361ffff16021790555050611877600660039054906101000a900461ffff1661ffff1682612972565b50326001600160a01b0383161480159061189f57506024546001600160a01b03838116911614155b156118de57600654604051630100000090910461ffff16907fc5ba9b981116d2c5dee43379fd5b23fb0248800776ae0f450bdd57f81e898a4490600090a25b6006546118f79083906301000000900461ffff16612c10565b5050565b606060008290506000815167ffffffffffffffff81111561191e5761191e6132ab565b6040519080825280601f01601f191660200182016040528015611948576020820181803683370190505b50905060005b8251811015611a8657604183828151811061196b5761196b613d0b565b016020015160f81c1080159061199b5750605a83828151811061199057611990613d0b565b016020015160f81c11155b15611a15578281815181106119b2576119b2613d0b565b602001015160f81c60f81b60f81c60206119cc9190613f4e565b60f81b8282815181106119e1576119e1613d0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a74565b828181518110611a2757611a27613d0b565b602001015160f81c60f81b828281518110611a4457611a44613d0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b80611a7e81613d37565b91505061194e565b509392505050565b60018054610a4c90613a07565b60065460ff1615611abe5760405162461bcd60e51b8152600401610b3290613e34565b60005b61ffff8116821115611e915760295433906001600160a01b03166339c7639c858561ffff8616818110611af657611af6613d0b565b9050602002016020810190611b0b9190613f6f565b6040518263ffffffff1660e01b8152600401611b279190613fa9565b602060405180830381865afa158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b689190613fc2565b6001600160a01b031614611b8e5760405162461bcd60e51b8152600401610b3290614015565b6029546001600160a01b03166318d21284848461ffff8516818110611bb557611bb5613d0b565b9050602002016020810190611bca9190613f6f565b6040518263ffffffff1660e01b8152600401611be69190613fa9565b61014060405180830381865afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c289190614118565b6009600085858561ffff16818110611c4257611c42613d0b565b9050602002016020810190611c579190613f6f565b61ffff908116825260208083019390935260409182016000208451815494860151938601516060870151608088015160a089015160c08a015160e08b0151610100808d0151610120909d015161ffff19909c1697151561ff0019169790971760ff9a8b169097029690961763ffff0000191662010000958a169590950263ff0000001916949094176301000000938916939093029290921765ffff0000000019166401000000009188169190910265ff000000000019161765010000000000918716919091021767ffff000000000000191666010000000000009186169190910267ff00000000000000191617670100000000000000918516919091021769ffff00000000000000001916600160401b9584169590950269ff00000000000000000019169490941769010000000000000000009290931691909102919091179091556029546001600160a01b0316906342966c6890859085908516818110611dc157611dc1613d0b565b9050602002016020810190611dd69190613f6f565b6040518263ffffffff1660e01b8152600401611df29190613fa9565b600060405180830381600087803b158015611e0c57600080fd5b505af1158015611e20573d6000803e3d6000fd5b5050602454611e6992506001600160a01b03169050848461ffff8516818110611e4b57611e4b613d0b565b9050602002016020810190611e609190613f6f565b61ffff16612c10565b60078054906000611e7983613d37565b91905055508080611e8990613f33565b915050611ac1565b506024546040517fa36410330000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a364103390611edf903390869086906004016141a3565b600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b505050505050565b600080829050600181511015611f2e5750600092915050565b601981511115611f415750600092915050565b80600081518110611f5457611f54613d0b565b6020910101516001600160f81b031916600160fd1b1415611f785750600092915050565b8060018251611f8791906141c4565b81518110611f9757611f97613d0b565b6020910101516001600160f81b031916600160fd1b1415611fbb5750600092915050565b600081600081518110611fd057611fd0613d0b565b01602001516001600160f81b031916905060005b82518110156121c157600083828151811061200157612001613d0b565b01602001516001600160f81b0319169050600160fd1b811480156120325750600160fd1b6001600160f81b03198416145b156120435750600095945050505050565b7f30000000000000000000000000000000000000000000000000000000000000006001600160f81b03198216108015906120a757507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b15801561211557507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061211357507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b801561218257507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061218057507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b801561219c5750600160fd1b6001600160f81b0319821614155b156121ad5750600095945050505050565b9150806121b981613d37565b915050611fe4565b506001949350505050565b3360008181526005602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061222f908590613116565b60405180910390a35050565b60065460ff161561225e5760405162461bcd60e51b8152600401610b3290613e34565b602a546001600160a01b0316331461227557600080fd5b60065461177090612292906301000000900461ffff166001613ec8565b61ffff1611156122b45760405162461bcd60e51b8152600401610b329061420d565b600680546301000000900461ffff169060036122cf83613f33565b825461ffff91821661010093840a908102908302199091161790925560068054919091049091169150600161230383613f33565b91906101000a81548161ffff021916908361ffff1602179055505061233c600660039054906101000a900461ffff1661ffff1682612ce3565b506006546118f79083906301000000900461ffff16612c10565b336000908152602b6020526040902054829060ff1680612395575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b6123b15760405162461bcd60e51b8152600401610b3290613ad0565b6123bc858585611069565b6001600160a01b0384163b158061248257506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063150b7a029061241b9033908a908990899060040161421d565b6020604051808303816000875af115801561243a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245e9190613d9f565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b61249e5760405162461bcd60e51b8152600401610b3290613df2565b5050505050565b336000908152602b602052604090205460609060ff16806124e657503260009081526010602052604090205443600160401b90910467ffffffffffffffff16105b6125025760405162461bcd60e51b8152600401610b3290613ad0565b336000908152602b6020526040902054829060ff1680612541575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b61255d5760405162461bcd60e51b8152600401610b3290613ad0565b6000838152600b602052604090205460ff1615612609576026546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd906125bd90869060040161362f565b600060405180830381865afa1580156125da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261260291908101906142b9565b9150610e88565b6025546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd9061265290869060040161362f565b600060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269791908101906142b9565b9392505050565b336000908152602b602052604081205460ff166126cd5760405162461bcd60e51b8152600401610b3290613cfb565b50600090815260116020526040902054600160401b900467ffffffffffffffff1690565b602a546001600160a01b0316331461270857600080fd5b602a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b336000908152602b602052604081205460ff168061277e57506001600160a01b03821660009081526010602052604090205443600160401b90910467ffffffffffffffff16105b61279a5760405162461bcd60e51b8152600401610b32906142f4565b506001600160a01b031660009081526002602052604090205490565b60065460ff16156127d95760405162461bcd60e51b8152600401610b3290613e34565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861280e3390565b60405161281b919061322b565b60405180910390a1565b60065460ff166128475760405162461bcd60e51b8152600401610b3290614387565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361280e565b80600f612884846118fb565b6040516128919190613a94565b908152604051908190036020019020805491151560ff199092169190911790555050565b6000818152600360205260409020546001600160a01b0316806128ea5760405162461bcd60e51b8152600401610b32906143c9565b6001600160a01b0381166000818152600260209081526040808320805460001901905585835260038252808320805473ffffffffffffffffffffffffffffffffffffffff1990811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526129cc82612d6d565b9050600c60006129db83612ed4565b81526020019081526020016000205460001415612b795760008381526009602090815260408083208451815493860151928601516060870151608088015160a089015160c08a015160e08b0151610100808d01516101208e015161ffff19909c1698151561ff0019169890981760ff9a8b169091021763ffff0000191662010000968a169690960263ff0000001916959095176301000000948916949094029390931765ffff0000000019166401000000009288169290920265ff000000000019169190911765010000000000918716919091021767ffff000000000000191666010000000000009186169190910267ff00000000000000191617670100000000000000918516919091021769ffff00000000000000001916600160401b9184169190910269ff000000000000000000191617690100000000000000000092909316919091029190911790558390600c90612b3584612ed4565b815260200190815260200160002081905550827fa3ba0e0a42560fe2a8ab34eb02d0456175176330eb0198f660592c8464cb975860405160405180910390a2610a0f565b6027546040517fb863bd370000000000000000000000000000000000000000000000000000000081526126979185916001600160a01b039091169063b863bd3790612bc890879060040161362f565b6020604051808303816000875af1158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b91906143e4565b612972565b6001600160a01b038216612c365760405162461bcd60e51b8152600401610b3290613cb9565b6000818152600360205260409020546001600160a01b031615612c6b5760405162461bcd60e51b8152600401610b3290614437565b6001600160a01b0382166000818152600260209081526040808320805460010190558483526003909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604080516020808201835260ff84811683526006805461ffff63010000009182900481166000908152600a865287812087518154961660ff19968716179055925491909104168152600b909252838220805490911660011790559151909184917fa3ba0e0a42560fe2a8ab34eb02d0456175176330eb0198f660592c8464cb97589190a292915050565b6040805161014081018252600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526001815260109290921c9190612dd59061ffff841690612f34565b60ff16602082015260109190911c90612df361ffff83166001612f34565b60ff16604082015260109190911c90612e1161ffff83166002612f34565b60ff16606082015260109190911c90612e2f61ffff83166003612f34565b60ff16608082015260109190911c90612e4d61ffff83166004612f34565b60ff1660a082015260109190911c90612e6b61ffff83166005612f34565b60ff1660c082015260109190911c90612e8961ffff83166006612f34565b60ff1660e082015260109190911c90612ea761ffff83166007612f34565b60ff1661010082015260109190911c90612ec661ffff83166008612f34565b60ff16610120820152919050565b6020808201516040808401516060850151608086015160a087015160c088015160e08901516101008a01516101208b0151975160009a612f169a99910161445f565b60408051601f19818403018152919052805160209091012092915050565b60008060128360ff1660098110612f4d57612f4d613d0b565b0154612f5990856144f7565b905060128360ff1660098110612f7157612f71613d0b565b018160ff1681548110612f8657612f86613d0b565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c9091161015612fbc579050610a0f565b601b8360ff1660098110612fd257612fd2613d0b565b018160ff1681548110612fe757612fe7613d0b565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b82805461301c90613a07565b90600052602060002090601f01602090048101928261303e5760008555613084565b82601f1061305757805160ff1916838001178555613084565b82800160010185558215613084579182015b82811115613084578251825591602001919060010190613069565b50613090929150613094565b5090565b5b808211156130905760008155600101613095565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610c8557600080fd5b8035610a0f816130a9565b6000602082840312156130f8576130f8600080fd5b600061310484846130d8565b949350505050565b8015155b82525050565b60208101610a0f828461310c565b8015156130cd565b8035610a0f81613124565b60006020828403121561314c5761314c600080fd5b6000613104848461312c565b61ffff8116613110565b60208101610a0f8284613158565b60005b8381101561318b578181015183820152602001613173565b838111156114315750506000910152565b60006131a6825190565b8084526020840193506131bd818560208601613170565b601f01601f19169290920192915050565b60208082528101612697818461319c565b806130cd565b8035610a0f816131df565b60006020828403121561320557613205600080fd5b600061310484846131e5565b60006001600160a01b038216610a0f565b61311081613211565b60208101610a0f8284613222565b6130cd81613211565b8035610a0f81613239565b6000806040838503121561326357613263600080fd5b600061326f8585613242565b9250506020613280858286016131e5565b9150509250929050565b60006020828403121561329f5761329f600080fd5b60006131048484613242565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156132e7576132e76132ab565b6040525050565b60006132f960405190565b905061330582826132c1565b919050565b600067ffffffffffffffff821115613324576133246132ab565b601f19601f83011660200192915050565b82818337506000910152565b600061335461334f8461330a565b6132ee565b90508281526020810184848401111561336f5761336f600080fd5b611a86848285613335565b600082601f83011261338e5761338e600080fd5b8135613104848260208601613341565b6000602082840312156133b3576133b3600080fd5b813567ffffffffffffffff8111156133cd576133cd600080fd5b6131048482850161337a565b6000610a0f6001600160a01b0383166133f0565b90565b6001600160a01b031690565b6000610a0f826133d9565b6000610a0f826133fc565b61311081613407565b60208101610a0f8284613412565b60ff8116613110565b805161343e838261310c565b5060208101516134516020840182613429565b5060408101516134646040840182613429565b5060608101516134776060840182613429565b50608081015161348a6080840182613429565b5060a081015161349d60a0840182613429565b5060c08101516134b060c0840182613429565b5060e08101516134c360e0840182613429565b506101008101516134d8610100840182613429565b506101208101516134ed610120840182613429565b505050565b6101408101610a0f8284613432565b6000806040838503121561351757613517600080fd5b600061352385856131e5565b925050602083013567ffffffffffffffff81111561354357613543600080fd5b6132808582860161337a565b60008060006060848603121561356757613567600080fd5b60006135738686613242565b935050602061358486828701613242565b9250506040613595868287016131e5565b9150509250925092565b60008060008060008060c087890312156135bb576135bb600080fd5b60006135c78989613242565b96505060206135d889828a01613242565b95505060406135e989828a01613242565b94505060606135fa89828a01613242565b935050608061360b89828a01613242565b92505060a061361c89828a01613242565b9150509295509295509295565b80613110565b60208101610a0f8284613629565b6000806040838503121561365357613653600080fd5b600061326f85856131e5565b60208101610a0f8284613429565b600067ffffffffffffffff821115613687576136876132ab565b5060209081020190565b61ffff81166130cd565b8035610a0f81613691565b60006136b461334f8461366d565b838152905060208082019084028301858111156136d3576136d3600080fd5b835b818110156136f5576136e7878261369b565b8352602092830192016136d5565b5050509392505050565b600082601f83011261371357613713600080fd5b81356131048482602086016136a6565b60006020828403121561373857613738600080fd5b813567ffffffffffffffff81111561375257613752600080fd5b613104848285016136ff565b60008083601f84011261377357613773600080fd5b50813567ffffffffffffffff81111561378e5761378e600080fd5b6020830191508360208202830111156137a9576137a9600080fd5b9250929050565b600080602083850312156137c6576137c6600080fd5b823567ffffffffffffffff8111156137e0576137e0600080fd5b6137ec8582860161375e565b92509250509250929050565b6000806040838503121561380e5761380e600080fd5b600061381a8585613242565b92505060206132808582860161312c565b80516134ed8382613429565b60208101610a0f828461382b565b60ff81166130cd565b8035610a0f81613845565b6000806040838503121561386f5761386f600080fd5b600061387b8585613242565b92505060206132808582860161384e565b600080600080608085870312156138a5576138a5600080fd5b60006138b18787613242565b94505060206138c287828801613242565b93505060406138d3878288016131e5565b925050606085013567ffffffffffffffff8111156138f3576138f3600080fd5b6138ff8782880161337a565b91505092959194509250565b610140810161391a828d61310c565b613927602083018c613429565b613934604083018b613429565b613941606083018a613429565b61394e6080830189613429565b61395b60a0830188613429565b61396860c0830187613429565b61397560e0830186613429565b613983610100830185613429565b613991610120830184613429565b9b9a5050505050505050505050565b600080604083850312156139b6576139b6600080fd5b60006139c28585613242565b925050602061328085828601613242565b67ffffffffffffffff8116613110565b60208101610a0f82846139d3565b634e487b7160e01b600052602260045260246000fd5b600281046001821680613a1b57607f821691505b60208210811415610e8857610e886139f1565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290505b60200190565b60208082528101610a0f81613a2e565b6000613a7c825190565b613a8a818560208601613170565b9290920192915050565b610a0f8183613a72565b60158152602081017f596f757220747279696e6720746865206368656174000000000000000000000081529050613a5c565b60208082528101610a0f81613a9e565b60188152602081017f6e616d696e67206e6f742079657420617661696c616e6c65000000000000000081529050613a5c565b60208082528101610a0f81613ae0565b60178152602081017f4e6f7420796f75722070697261746520746f206e616d6500000000000000000081529050613a5c565b60208082528101610a0f81613b22565b60148152602081017f50697261746520616c7265616479206e616d656400000000000000000000000081529050613a5c565b60208082528101610a0f81613b64565b60108152602081017f4e6f7420612076616c6964206e616d650000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613ba6565b60158152602081017f4e616d6520616c7265616479207265736572766564000000000000000000000081529050613a5c565b60208082528101610a0f81613be8565b60408101613c388285613222565b6126976020830184613629565b600a8152602081017f57524f4e475f46524f4d0000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613c45565b60118152602081017f494e56414c49445f524543495049454e5400000000000000000000000000000081529050613a5c565b60208082528101610a0f81613c87565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c20746869730000000000000081529050613a5c565b60208082528101610a0f81613cc9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613d4b57613d4b613d21565b5060010190565b60808101613d608286613222565b613d6d6020830185613222565b613d7a6040830184613629565b818103606083015260008152602081015b95945050505050565b8051610a0f816130a9565b600060208284031215613db457613db4600080fd5b60006131048484613d94565b60108152602081017f554e534146455f524543495049454e540000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613dc0565b60108152602081017f5061757361626c653a207061757365640000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e02565b60098152602081017f6e6f74206f776e6572000000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e44565b600b8152602081017f4f6e6c792041646d696e7300000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e86565b61ffff8116905061ffff8216915060008261ffff03821115613eec57613eec613d21565b500190565b60168152602081017f50697261746520666f72636573206172652066756c6c0000000000000000000081529050613a5c565b60208082528101610a0f81613ef1565b61ffff81169050600061ffff821415613d4b57613d4b613d21565b60ff8116905060ff8216915060008260ff03821115613eec57613eec613d21565b600060208284031215613f8457613f84600080fd5b6000613104848461369b565b6000610a0f6133ed61ffff841681565b61311081613f90565b60208101610a0f8284613fa0565b8051610a0f81613239565b600060208284031215613fd757613fd7600080fd5b60006131048484613fb7565b60068152602081017f544849454621000000000000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613fe3565b8051610a0f81613124565b8051610a0f81613845565b6000610140828403121561405157614051600080fd5b61405c6101406132ee565b9050600061406a8484614025565b90820152602061407c84848301614030565b90820152604061408e84848301614030565b9082015260606140a084848301614030565b9082015260806140b284848301614030565b9082015260a06140c484848301614030565b9082015260c06140d684848301614030565b9082015260e06140e884848301614030565b908201526101006140fb84848301614030565b9082015261012061410e84848301614030565b9082015292915050565b6000610140828403121561412e5761412e600080fd5b6000613104848461403b565b6141448282613158565b5060200190565b506000610a0f602083018361369b565b8183526020830192506000818060005b858110156141985761417d828461414b565b614187888261413a565b97505060208201915060010161416b565b509495945050505050565b604081016141b18286613222565b8181036020830152613d8b81848661415b565b6000828210156141d6576141d6613d21565b500390565b60128152602081017f416c6c2050697261746573204d696e746564000000000000000000000000000081529050613a5c565b60208082528101610a0f816141db565b6080810161422b8287613222565b6142386020830186613222565b6142456040830185613629565b8181036060830152614257818461319c565b9695505050505050565b600061426f61334f8461330a565b90508281526020810184848401111561428a5761428a600080fd5b611a86848285613170565b600082601f8301126142a9576142a9600080fd5b8151613104848260208601614261565b6000602082840312156142ce576142ce600080fd5b815167ffffffffffffffff8111156142e8576142e8600080fd5b61310484828501614295565b60208082528101610a0f81603981527f6e6f20636865636b696e672062616c616e636520696e207468652073616d652060208201527f626c6f636b2069742773206265696e67206d6f64696669656400000000000000604082015260600190565b60148152602081017f5061757361626c653a206e6f742070617573656400000000000000000000000081529050613a5c565b60208082528101610a0f81614355565b600a8152602081017f4e4f545f4d494e5445440000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81614397565b8051610a0f816131df565b6000602082840312156143f9576143f9600080fd5b600061310484846143d9565b600e8152602081017f414c52454144595f4d494e54454400000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81614405565b6000610a0f8260f81b90565b61311060ff8216614447565b614469818b614453565b600101614476818a614453565b6001016144838189614453565b6001016144908188614453565b60010161449d8187614453565b6001016144aa8186614453565b6001016144b78185614453565b6001016144c48184614453565b6001016144d18183614453565b6001019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b60ff918216911660008261450d5761450d6144e1565b50069056fea2646970667358221220631276743fb4245f2baf966a5c6faa318730a8d6955b5a3d77b0cfc2d9599af064736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103785760003560e01c806370480275116101d3578063b88d4fde11610104578063e985e9c5116100a2578063eed4b34c1161007c578063eed4b34c146108e4578063f10fb584146108f7578063f2fde38b1461090a578063f8b2cb4f1461091d57600080fd5b8063e985e9c51461088d578063ebd17368146108bb578063edca3f17146108db57600080fd5b8063ddcbd86b116100de578063ddcbd86b146107a3578063de9375f214610844578063e1fc334f14610857578063e60738691461086a57600080fd5b8063b88d4fde1461075a578063c87b56dd1461076d578063d41d416d1461078057600080fd5b806395d89b4111610171578063a1b8f3741161014b578063a1b8f374146106cd578063a22cb465146106ed578063b07ba6a714610700578063b6a719531461074757600080fd5b806395d89b411461069f5780639e1bd408146106a75780639ffdb65a146106ba57600080fd5b806383c79d43116101ad57806383c79d43146106485780638da5cb5b146106585780638f58e7a8146106695780639416b4231461068c57600080fd5b8063704802751461060f57806370c124cc1461062257806375ab9b761461063557600080fd5b80632463a55a116102ad57806342966c681161024b5780635c975abb116102255780635c975abb146105b55780636352211e146105c05780636ca865ba146105e95780636d522418146105fc57600080fd5b806342966c681461058057806347486c75146105935780634f02c420146105a057600080fd5b806335ca838b1161028757806335ca838b14610534578063368383911461054757806339c7639c1461055a57806342842e0e1461056d57600080fd5b80632463a55a146104eb5780632c678c64146104fe57806333df4b2c1461051457600080fd5b806315b56d101161031a5780631785f53c116102f45780631785f53c1461049257806318d21284146104a55780631a2fbc7c146104c557806323b872dd146104d857600080fd5b806315b56d101461044c578063165272311461045f57806316c38b3c1461047f57600080fd5b806306fdde031161035657806306fdde03146103db578063081812fc146103f0578063095ea7b3146104265780631509f2941461043957600080fd5b806301ffc9a71461037d57806302815835146103a6578063046b07aa146103bb575b600080fd5b61039061038b3660046130e3565b610930565b60405161039d9190613116565b60405180910390f35b6103b96103b4366004613137565b610a15565b005b6006546103ce90610100900461ffff1681565b60405161039d9190613162565b6103e3610a3f565b60405161039d91906131ce565b6104196103fe3660046131f0565b6004602052600090815260409020546001600160a01b031681565b60405161039d919061322b565b6103b961043436600461324d565b610acd565b6103b961044736600461328a565b610ba4565b61039061045a36600461339e565b610bea565b602454610472906001600160a01b031681565b60405161039d919061341b565b6103b961048d366004613137565b610c1d565b6103b96104a036600461328a565b610c90565b6104b86104b33660046131f0565b610cc8565b60405161039d91906134f2565b6103b96104d3366004613501565b610e8e565b6103b96104e636600461354f565b611069565b6103b96104f936600461359f565b6111f2565b61050760075481565b60405161039d919061362f565b61052761052236600461363d565b611285565b60405161039d919061365f565b6103b9610542366004613723565b6112cb565b61052761055536600461363d565b611437565b6104196105683660046131f0565b611447565b6103b961057b36600461354f565b6114bf565b6103b961058e3660046131f0565b611605565b6008546103909060ff1681565b6006546103ce906301000000900461ffff1681565b60065460ff16610390565b6104196105ce3660046131f0565b6003602052600090815260409020546001600160a01b031681565b602854610472906001600160a01b031681565b6103e361060a3660046131f0565b611683565b6103b961061d36600461328a565b611725565b6103b961063036600461324d565b611760565b602654610472906001600160a01b031681565b610507686c6b935b8bbd40000081565b602a546001600160a01b0316610419565b6103906106773660046131f0565b6000908152600e602052604090205460ff1690565b6103e361069a36600461339e565b6118fb565b6103e3611a8e565b6103b96106b53660046137b0565b611a9b565b6103906106c836600461339e565b611f15565b6105076106db3660046131f0565b600c6020526000908152604090205481565b6103b96106fb3660046137f8565b6121cc565b61073a61070e3660046131f0565b6040805160208082018352600091829052928152600a835281902081519283019091525460ff16815290565b60405161039d9190613837565b6103b9610755366004613859565b61223b565b6103b961076836600461388c565b612356565b6103e361077b3660046131f0565b6124a5565b61052761078e3660046131f0565b600a6020526000908152604090205460ff1681565b61082e6107b13660046131f0565b60096020526000908152604090205460ff808216916101008104821691620100008204811691630100000081048216916401000000008204811691650100000000008104821691660100000000000082048116916701000000000000008104821691600160401b820481169169010000000000000000009004168a565b60405161039d9a9998979695949392919061390b565b602a54610419906001600160a01b031681565b602554610472906001600160a01b031681565b6103906108783660046131f0565b600b6020526000908152604090205460ff1681565b61039061089b3660046139a0565b600560209081526000928352604080842090915290825290205460ff1681565b6108ce6108c93660046131f0565b61269e565b60405161039d91906139e3565b61050761177081565b602954610472906001600160a01b031681565b602754610472906001600160a01b031681565b6103b961091836600461328a565b6126f1565b61050761092b36600461328a565b612737565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806109c357507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610a0f57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b602a546001600160a01b03163314610a2c57600080fd5b6008805460ff1916911515919091179055565b60008054610a4c90613a07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7890613a07565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b031633811480610b1657506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610b3b5760405162461bcd60e51b8152600401610b3290613a62565b60405180910390fd5b600082815260046020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602a546001600160a01b03163314610bbb57600080fd5b602c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000600f610bf7836118fb565b604051610c049190613a94565b9081526040519081900360200190205460ff1692915050565b6025546001600160a01b031615801590610c4157506024546001600160a01b031615155b8015610c5757506027546001600160a01b031615155b610c6057600080fd5b602a546001600160a01b03163314610c7757600080fd5b8015610c8857610c856127b6565b50565b610c85612825565b602a546001600160a01b03163314610ca757600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19169055565b604080516101408101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301829052338252602b9052919091205460ff1680610d5357503260009081526010602052604090205443600160401b90910467ffffffffffffffff16105b610d6f5760405162461bcd60e51b8152600401610b3290613ad0565b336000908152602b6020526040902054829060ff1680610dae575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b610dca5760405162461bcd60e51b8152600401610b3290613ad0565b600083815260096020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152600160401b8104841692820192909252690100000000000000000090910490911661012082015291505b50919050565b60085460ff161515600114610eb55760405162461bcd60e51b8152600401610b3290613b12565b6000828152600360205260409020546001600160a01b03163314610eeb5760405162461bcd60e51b8152600401610b3290613b54565b6000828152600e602052604090205460ff1615610f1a5760405162461bcd60e51b8152600401610b3290613b96565b610f2381611f15565b1515600114610f445760405162461bcd60e51b8152600401610b3290613bd8565b610f4d81610bea565b15610f6a5760405162461bcd60e51b8152600401610b3290613c1a565b610f75816001612878565b6000828152600e60209081526040808320805460ff19166001179055600d82529091208251610fa692840190613010565b506028546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690639dc29fac90610ffb903390686c6b935b8bbd40000090600401613c2a565b600060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b50505050817ff82afa02631c3ed951c54b199dcaaa44d042ba6804e1e1dc55d4f3998b5c6e768260405161105d91906131ce565b60405180910390a25050565b6000818152600360205260409020546001600160a01b038481169116146110a25760405162461bcd60e51b8152600401610b3290613c77565b6001600160a01b0382166110c85760405162461bcd60e51b8152600401610b3290613cb9565b336000908152602b602052604090205460ff1661115657336001600160a01b038416148061110c57506000818152600460205260409020546001600160a01b031633145b8061113a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6111565760405162461bcd60e51b8152600401610b3290613a62565b6001600160a01b03808416600081815260026020908152604080832080546000190190559386168083528483208054600101905585835260038252848320805473ffffffffffffffffffffffffffffffffffffffff199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b602a546001600160a01b0316331461120957600080fd5b6025805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0398891617909155602680548216968816969096179095556024805486169487169490941790935560278054851692861692909217909155602880548416918516919091179055602980549092169216919091179055565b6012826009811061129557600080fd5b0181815481106112a457600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b336000908152602b602052604090205460ff166112fa5760405162461bcd60e51b8152600401610b3290613cfb565b60408051808201825267ffffffffffffffff42818116835243828116602080860191825232600090815260109091529586209451855491518516600160401b027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921694169390931792909217909255915b83518110156114315760405180604001604052808367ffffffffffffffff1681526020018467ffffffffffffffff16815250601160008684815181106113b5576113b5613d0b565b60209081029190910181015161ffff1682528181019290925260400160002082518154939092015167ffffffffffffffff908116600160401b027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169216919091179190911790558061142981613d37565b91505061136d565b50505050565b601b826009811061129557600080fd5b336000908152602b6020526040812054829060ff1680611486575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b6114a25760405162461bcd60e51b8152600401610b3290613ad0565b50506000908152600360205260409020546001600160a01b031690565b336000908152602b6020526040902054819060ff16806114fe575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b61151a5760405162461bcd60e51b8152600401610b3290613ad0565b611525848484611069565b6001600160a01b0383163b15806115e957506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0385169063150b7a029061158290339089908890600401613d52565b6020604051808303816000875af11580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613d9f565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6114315760405162461bcd60e51b8152600401610b3290613df2565b60065460ff16156116285760405162461bcd60e51b8152600401610b3290613e34565b336000908152602b602052604090205460ff1661164457600080fd5b6000818152600360205260409020546001600160a01b0316321461167a5760405162461bcd60e51b8152600401610b3290613e76565b610c85816128b5565b6000818152600d602052604090208054606091906116a090613a07565b80601f01602080910402602001604051908101604052809291908181526020018280546116cc90613a07565b80156117195780601f106116ee57610100808354040283529160200191611719565b820191906000526020600020905b8154815290600101906020018083116116fc57829003601f168201915b50505050509050919050565b602a546001600160a01b0316331461173c57600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19166001179055565b60065460ff16156117835760405162461bcd60e51b8152600401610b3290613e34565b336000908152602b602052604090205460ff166117b25760405162461bcd60e51b8152600401610b3290613eb8565b600654611770906117cd90610100900461ffff166001613ec8565b61ffff1611156117ef5760405162461bcd60e51b8152600401610b3290613f23565b600680546301000000900461ffff1690600361180a83613f33565b825461ffff91821661010093840a908102908302199091161790925560068054919091049091169150600161183e83613f33565b91906101000a81548161ffff021916908361ffff16021790555050611877600660039054906101000a900461ffff1661ffff1682612972565b50326001600160a01b0383161480159061189f57506024546001600160a01b03838116911614155b156118de57600654604051630100000090910461ffff16907fc5ba9b981116d2c5dee43379fd5b23fb0248800776ae0f450bdd57f81e898a4490600090a25b6006546118f79083906301000000900461ffff16612c10565b5050565b606060008290506000815167ffffffffffffffff81111561191e5761191e6132ab565b6040519080825280601f01601f191660200182016040528015611948576020820181803683370190505b50905060005b8251811015611a8657604183828151811061196b5761196b613d0b565b016020015160f81c1080159061199b5750605a83828151811061199057611990613d0b565b016020015160f81c11155b15611a15578281815181106119b2576119b2613d0b565b602001015160f81c60f81b60f81c60206119cc9190613f4e565b60f81b8282815181106119e1576119e1613d0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a74565b828181518110611a2757611a27613d0b565b602001015160f81c60f81b828281518110611a4457611a44613d0b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b80611a7e81613d37565b91505061194e565b509392505050565b60018054610a4c90613a07565b60065460ff1615611abe5760405162461bcd60e51b8152600401610b3290613e34565b60005b61ffff8116821115611e915760295433906001600160a01b03166339c7639c858561ffff8616818110611af657611af6613d0b565b9050602002016020810190611b0b9190613f6f565b6040518263ffffffff1660e01b8152600401611b279190613fa9565b602060405180830381865afa158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b689190613fc2565b6001600160a01b031614611b8e5760405162461bcd60e51b8152600401610b3290614015565b6029546001600160a01b03166318d21284848461ffff8516818110611bb557611bb5613d0b565b9050602002016020810190611bca9190613f6f565b6040518263ffffffff1660e01b8152600401611be69190613fa9565b61014060405180830381865afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c289190614118565b6009600085858561ffff16818110611c4257611c42613d0b565b9050602002016020810190611c579190613f6f565b61ffff908116825260208083019390935260409182016000208451815494860151938601516060870151608088015160a089015160c08a015160e08b0151610100808d0151610120909d015161ffff19909c1697151561ff0019169790971760ff9a8b169097029690961763ffff0000191662010000958a169590950263ff0000001916949094176301000000938916939093029290921765ffff0000000019166401000000009188169190910265ff000000000019161765010000000000918716919091021767ffff000000000000191666010000000000009186169190910267ff00000000000000191617670100000000000000918516919091021769ffff00000000000000001916600160401b9584169590950269ff00000000000000000019169490941769010000000000000000009290931691909102919091179091556029546001600160a01b0316906342966c6890859085908516818110611dc157611dc1613d0b565b9050602002016020810190611dd69190613f6f565b6040518263ffffffff1660e01b8152600401611df29190613fa9565b600060405180830381600087803b158015611e0c57600080fd5b505af1158015611e20573d6000803e3d6000fd5b5050602454611e6992506001600160a01b03169050848461ffff8516818110611e4b57611e4b613d0b565b9050602002016020810190611e609190613f6f565b61ffff16612c10565b60078054906000611e7983613d37565b91905055508080611e8990613f33565b915050611ac1565b506024546040517fa36410330000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a364103390611edf903390869086906004016141a3565b600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b505050505050565b600080829050600181511015611f2e5750600092915050565b601981511115611f415750600092915050565b80600081518110611f5457611f54613d0b565b6020910101516001600160f81b031916600160fd1b1415611f785750600092915050565b8060018251611f8791906141c4565b81518110611f9757611f97613d0b565b6020910101516001600160f81b031916600160fd1b1415611fbb5750600092915050565b600081600081518110611fd057611fd0613d0b565b01602001516001600160f81b031916905060005b82518110156121c157600083828151811061200157612001613d0b565b01602001516001600160f81b0319169050600160fd1b811480156120325750600160fd1b6001600160f81b03198416145b156120435750600095945050505050565b7f30000000000000000000000000000000000000000000000000000000000000006001600160f81b03198216108015906120a757507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b15801561211557507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061211357507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b801561218257507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061218057507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b801561219c5750600160fd1b6001600160f81b0319821614155b156121ad5750600095945050505050565b9150806121b981613d37565b915050611fe4565b506001949350505050565b3360008181526005602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061222f908590613116565b60405180910390a35050565b60065460ff161561225e5760405162461bcd60e51b8152600401610b3290613e34565b602a546001600160a01b0316331461227557600080fd5b60065461177090612292906301000000900461ffff166001613ec8565b61ffff1611156122b45760405162461bcd60e51b8152600401610b329061420d565b600680546301000000900461ffff169060036122cf83613f33565b825461ffff91821661010093840a908102908302199091161790925560068054919091049091169150600161230383613f33565b91906101000a81548161ffff021916908361ffff1602179055505061233c600660039054906101000a900461ffff1661ffff1682612ce3565b506006546118f79083906301000000900461ffff16612c10565b336000908152602b6020526040902054829060ff1680612395575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b6123b15760405162461bcd60e51b8152600401610b3290613ad0565b6123bc858585611069565b6001600160a01b0384163b158061248257506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063150b7a029061241b9033908a908990899060040161421d565b6020604051808303816000875af115801561243a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245e9190613d9f565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b61249e5760405162461bcd60e51b8152600401610b3290613df2565b5050505050565b336000908152602b602052604090205460609060ff16806124e657503260009081526010602052604090205443600160401b90910467ffffffffffffffff16105b6125025760405162461bcd60e51b8152600401610b3290613ad0565b336000908152602b6020526040902054829060ff1680612541575060008181526011602052604090205443600160401b90910467ffffffffffffffff16105b61255d5760405162461bcd60e51b8152600401610b3290613ad0565b6000838152600b602052604090205460ff1615612609576026546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd906125bd90869060040161362f565b600060405180830381865afa1580156125da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261260291908101906142b9565b9150610e88565b6025546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd9061265290869060040161362f565b600060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269791908101906142b9565b9392505050565b336000908152602b602052604081205460ff166126cd5760405162461bcd60e51b8152600401610b3290613cfb565b50600090815260116020526040902054600160401b900467ffffffffffffffff1690565b602a546001600160a01b0316331461270857600080fd5b602a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b336000908152602b602052604081205460ff168061277e57506001600160a01b03821660009081526010602052604090205443600160401b90910467ffffffffffffffff16105b61279a5760405162461bcd60e51b8152600401610b32906142f4565b506001600160a01b031660009081526002602052604090205490565b60065460ff16156127d95760405162461bcd60e51b8152600401610b3290613e34565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861280e3390565b60405161281b919061322b565b60405180910390a1565b60065460ff166128475760405162461bcd60e51b8152600401610b3290614387565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361280e565b80600f612884846118fb565b6040516128919190613a94565b908152604051908190036020019020805491151560ff199092169190911790555050565b6000818152600360205260409020546001600160a01b0316806128ea5760405162461bcd60e51b8152600401610b32906143c9565b6001600160a01b0381166000818152600260209081526040808320805460001901905585835260038252808320805473ffffffffffffffffffffffffffffffffffffffff1990811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091526129cc82612d6d565b9050600c60006129db83612ed4565b81526020019081526020016000205460001415612b795760008381526009602090815260408083208451815493860151928601516060870151608088015160a089015160c08a015160e08b0151610100808d01516101208e015161ffff19909c1698151561ff0019169890981760ff9a8b169091021763ffff0000191662010000968a169690960263ff0000001916959095176301000000948916949094029390931765ffff0000000019166401000000009288169290920265ff000000000019169190911765010000000000918716919091021767ffff000000000000191666010000000000009186169190910267ff00000000000000191617670100000000000000918516919091021769ffff00000000000000001916600160401b9184169190910269ff000000000000000000191617690100000000000000000092909316919091029190911790558390600c90612b3584612ed4565b815260200190815260200160002081905550827fa3ba0e0a42560fe2a8ab34eb02d0456175176330eb0198f660592c8464cb975860405160405180910390a2610a0f565b6027546040517fb863bd370000000000000000000000000000000000000000000000000000000081526126979185916001600160a01b039091169063b863bd3790612bc890879060040161362f565b6020604051808303816000875af1158015612be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0b91906143e4565b612972565b6001600160a01b038216612c365760405162461bcd60e51b8152600401610b3290613cb9565b6000818152600360205260409020546001600160a01b031615612c6b5760405162461bcd60e51b8152600401610b3290614437565b6001600160a01b0382166000818152600260209081526040808320805460010190558483526003909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604080516020808201835260ff84811683526006805461ffff63010000009182900481166000908152600a865287812087518154961660ff19968716179055925491909104168152600b909252838220805490911660011790559151909184917fa3ba0e0a42560fe2a8ab34eb02d0456175176330eb0198f660592c8464cb97589190a292915050565b6040805161014081018252600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526001815260109290921c9190612dd59061ffff841690612f34565b60ff16602082015260109190911c90612df361ffff83166001612f34565b60ff16604082015260109190911c90612e1161ffff83166002612f34565b60ff16606082015260109190911c90612e2f61ffff83166003612f34565b60ff16608082015260109190911c90612e4d61ffff83166004612f34565b60ff1660a082015260109190911c90612e6b61ffff83166005612f34565b60ff1660c082015260109190911c90612e8961ffff83166006612f34565b60ff1660e082015260109190911c90612ea761ffff83166007612f34565b60ff1661010082015260109190911c90612ec661ffff83166008612f34565b60ff16610120820152919050565b6020808201516040808401516060850151608086015160a087015160c088015160e08901516101008a01516101208b0151975160009a612f169a99910161445f565b60408051601f19818403018152919052805160209091012092915050565b60008060128360ff1660098110612f4d57612f4d613d0b565b0154612f5990856144f7565b905060128360ff1660098110612f7157612f71613d0b565b018160ff1681548110612f8657612f86613d0b565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c9091161015612fbc579050610a0f565b601b8360ff1660098110612fd257612fd2613d0b565b018160ff1681548110612fe757612fe7613d0b565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b82805461301c90613a07565b90600052602060002090601f01602090048101928261303e5760008555613084565b82601f1061305757805160ff1916838001178555613084565b82800160010185558215613084579182015b82811115613084578251825591602001919060010190613069565b50613090929150613094565b5090565b5b808211156130905760008155600101613095565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610c8557600080fd5b8035610a0f816130a9565b6000602082840312156130f8576130f8600080fd5b600061310484846130d8565b949350505050565b8015155b82525050565b60208101610a0f828461310c565b8015156130cd565b8035610a0f81613124565b60006020828403121561314c5761314c600080fd5b6000613104848461312c565b61ffff8116613110565b60208101610a0f8284613158565b60005b8381101561318b578181015183820152602001613173565b838111156114315750506000910152565b60006131a6825190565b8084526020840193506131bd818560208601613170565b601f01601f19169290920192915050565b60208082528101612697818461319c565b806130cd565b8035610a0f816131df565b60006020828403121561320557613205600080fd5b600061310484846131e5565b60006001600160a01b038216610a0f565b61311081613211565b60208101610a0f8284613222565b6130cd81613211565b8035610a0f81613239565b6000806040838503121561326357613263600080fd5b600061326f8585613242565b9250506020613280858286016131e5565b9150509250929050565b60006020828403121561329f5761329f600080fd5b60006131048484613242565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156132e7576132e76132ab565b6040525050565b60006132f960405190565b905061330582826132c1565b919050565b600067ffffffffffffffff821115613324576133246132ab565b601f19601f83011660200192915050565b82818337506000910152565b600061335461334f8461330a565b6132ee565b90508281526020810184848401111561336f5761336f600080fd5b611a86848285613335565b600082601f83011261338e5761338e600080fd5b8135613104848260208601613341565b6000602082840312156133b3576133b3600080fd5b813567ffffffffffffffff8111156133cd576133cd600080fd5b6131048482850161337a565b6000610a0f6001600160a01b0383166133f0565b90565b6001600160a01b031690565b6000610a0f826133d9565b6000610a0f826133fc565b61311081613407565b60208101610a0f8284613412565b60ff8116613110565b805161343e838261310c565b5060208101516134516020840182613429565b5060408101516134646040840182613429565b5060608101516134776060840182613429565b50608081015161348a6080840182613429565b5060a081015161349d60a0840182613429565b5060c08101516134b060c0840182613429565b5060e08101516134c360e0840182613429565b506101008101516134d8610100840182613429565b506101208101516134ed610120840182613429565b505050565b6101408101610a0f8284613432565b6000806040838503121561351757613517600080fd5b600061352385856131e5565b925050602083013567ffffffffffffffff81111561354357613543600080fd5b6132808582860161337a565b60008060006060848603121561356757613567600080fd5b60006135738686613242565b935050602061358486828701613242565b9250506040613595868287016131e5565b9150509250925092565b60008060008060008060c087890312156135bb576135bb600080fd5b60006135c78989613242565b96505060206135d889828a01613242565b95505060406135e989828a01613242565b94505060606135fa89828a01613242565b935050608061360b89828a01613242565b92505060a061361c89828a01613242565b9150509295509295509295565b80613110565b60208101610a0f8284613629565b6000806040838503121561365357613653600080fd5b600061326f85856131e5565b60208101610a0f8284613429565b600067ffffffffffffffff821115613687576136876132ab565b5060209081020190565b61ffff81166130cd565b8035610a0f81613691565b60006136b461334f8461366d565b838152905060208082019084028301858111156136d3576136d3600080fd5b835b818110156136f5576136e7878261369b565b8352602092830192016136d5565b5050509392505050565b600082601f83011261371357613713600080fd5b81356131048482602086016136a6565b60006020828403121561373857613738600080fd5b813567ffffffffffffffff81111561375257613752600080fd5b613104848285016136ff565b60008083601f84011261377357613773600080fd5b50813567ffffffffffffffff81111561378e5761378e600080fd5b6020830191508360208202830111156137a9576137a9600080fd5b9250929050565b600080602083850312156137c6576137c6600080fd5b823567ffffffffffffffff8111156137e0576137e0600080fd5b6137ec8582860161375e565b92509250509250929050565b6000806040838503121561380e5761380e600080fd5b600061381a8585613242565b92505060206132808582860161312c565b80516134ed8382613429565b60208101610a0f828461382b565b60ff81166130cd565b8035610a0f81613845565b6000806040838503121561386f5761386f600080fd5b600061387b8585613242565b92505060206132808582860161384e565b600080600080608085870312156138a5576138a5600080fd5b60006138b18787613242565b94505060206138c287828801613242565b93505060406138d3878288016131e5565b925050606085013567ffffffffffffffff8111156138f3576138f3600080fd5b6138ff8782880161337a565b91505092959194509250565b610140810161391a828d61310c565b613927602083018c613429565b613934604083018b613429565b613941606083018a613429565b61394e6080830189613429565b61395b60a0830188613429565b61396860c0830187613429565b61397560e0830186613429565b613983610100830185613429565b613991610120830184613429565b9b9a5050505050505050505050565b600080604083850312156139b6576139b6600080fd5b60006139c28585613242565b925050602061328085828601613242565b67ffffffffffffffff8116613110565b60208101610a0f82846139d3565b634e487b7160e01b600052602260045260246000fd5b600281046001821680613a1b57607f821691505b60208210811415610e8857610e886139f1565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290505b60200190565b60208082528101610a0f81613a2e565b6000613a7c825190565b613a8a818560208601613170565b9290920192915050565b610a0f8183613a72565b60158152602081017f596f757220747279696e6720746865206368656174000000000000000000000081529050613a5c565b60208082528101610a0f81613a9e565b60188152602081017f6e616d696e67206e6f742079657420617661696c616e6c65000000000000000081529050613a5c565b60208082528101610a0f81613ae0565b60178152602081017f4e6f7420796f75722070697261746520746f206e616d6500000000000000000081529050613a5c565b60208082528101610a0f81613b22565b60148152602081017f50697261746520616c7265616479206e616d656400000000000000000000000081529050613a5c565b60208082528101610a0f81613b64565b60108152602081017f4e6f7420612076616c6964206e616d650000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613ba6565b60158152602081017f4e616d6520616c7265616479207265736572766564000000000000000000000081529050613a5c565b60208082528101610a0f81613be8565b60408101613c388285613222565b6126976020830184613629565b600a8152602081017f57524f4e475f46524f4d0000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613c45565b60118152602081017f494e56414c49445f524543495049454e5400000000000000000000000000000081529050613a5c565b60208082528101610a0f81613c87565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c20746869730000000000000081529050613a5c565b60208082528101610a0f81613cc9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613d4b57613d4b613d21565b5060010190565b60808101613d608286613222565b613d6d6020830185613222565b613d7a6040830184613629565b818103606083015260008152602081015b95945050505050565b8051610a0f816130a9565b600060208284031215613db457613db4600080fd5b60006131048484613d94565b60108152602081017f554e534146455f524543495049454e540000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613dc0565b60108152602081017f5061757361626c653a207061757365640000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e02565b60098152602081017f6e6f74206f776e6572000000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e44565b600b8152602081017f4f6e6c792041646d696e7300000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613e86565b61ffff8116905061ffff8216915060008261ffff03821115613eec57613eec613d21565b500190565b60168152602081017f50697261746520666f72636573206172652066756c6c0000000000000000000081529050613a5c565b60208082528101610a0f81613ef1565b61ffff81169050600061ffff821415613d4b57613d4b613d21565b60ff8116905060ff8216915060008260ff03821115613eec57613eec613d21565b600060208284031215613f8457613f84600080fd5b6000613104848461369b565b6000610a0f6133ed61ffff841681565b61311081613f90565b60208101610a0f8284613fa0565b8051610a0f81613239565b600060208284031215613fd757613fd7600080fd5b60006131048484613fb7565b60068152602081017f544849454621000000000000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81613fe3565b8051610a0f81613124565b8051610a0f81613845565b6000610140828403121561405157614051600080fd5b61405c6101406132ee565b9050600061406a8484614025565b90820152602061407c84848301614030565b90820152604061408e84848301614030565b9082015260606140a084848301614030565b9082015260806140b284848301614030565b9082015260a06140c484848301614030565b9082015260c06140d684848301614030565b9082015260e06140e884848301614030565b908201526101006140fb84848301614030565b9082015261012061410e84848301614030565b9082015292915050565b6000610140828403121561412e5761412e600080fd5b6000613104848461403b565b6141448282613158565b5060200190565b506000610a0f602083018361369b565b8183526020830192506000818060005b858110156141985761417d828461414b565b614187888261413a565b97505060208201915060010161416b565b509495945050505050565b604081016141b18286613222565b8181036020830152613d8b81848661415b565b6000828210156141d6576141d6613d21565b500390565b60128152602081017f416c6c2050697261746573204d696e746564000000000000000000000000000081529050613a5c565b60208082528101610a0f816141db565b6080810161422b8287613222565b6142386020830186613222565b6142456040830185613629565b8181036060830152614257818461319c565b9695505050505050565b600061426f61334f8461330a565b90508281526020810184848401111561428a5761428a600080fd5b611a86848285613170565b600082601f8301126142a9576142a9600080fd5b8151613104848260208601614261565b6000602082840312156142ce576142ce600080fd5b815167ffffffffffffffff8111156142e8576142e8600080fd5b61310484828501614295565b60208082528101610a0f81603981527f6e6f20636865636b696e672062616c616e636520696e207468652073616d652060208201527f626c6f636b2069742773206265696e67206d6f64696669656400000000000000604082015260600190565b60148152602081017f5061757361626c653a206e6f742070617573656400000000000000000000000081529050613a5c565b60208082528101610a0f81614355565b600a8152602081017f4e4f545f4d494e5445440000000000000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81614397565b8051610a0f816131df565b6000602082840312156143f9576143f9600080fd5b600061310484846143d9565b600e8152602081017f414c52454144595f4d494e54454400000000000000000000000000000000000081529050613a5c565b60208082528101610a0f81614405565b6000610a0f8260f81b90565b61311060ff8216614447565b614469818b614453565b600101614476818a614453565b6001016144838189614453565b6001016144908188614453565b60010161449d8187614453565b6001016144aa8186614453565b6001016144b78185614453565b6001016144c48184614453565b6001016144d18183614453565b6001019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b60ff918216911660008261450d5761450d6144e1565b50069056fea2646970667358221220631276743fb4245f2baf966a5c6faa318730a8d6955b5a3d77b0cfc2d9599af064736f6c634300080b0033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.