ERC-721
Overview
Max Total Supply
356 LEODY
Holders
112
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 LEODYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LeoDynasty
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a); return c; } } interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event Mint(uint indexed index, address indexed minter); event Deposit(address indexed account, uint indexed amount); event Withdraw(address indexed account, uint indexed amount); event NewBid(address indexed bidder, uint indexed amount, uint indexed tokenId); event Trade(address indexed seller, address indexed buyer, uint indexed tokenId,uint amount); event SellNft(address indexed owner,uint indexed tokenId,uint indexed minPrice); event CancelSellNft(address indexed owner,uint indexed tokenId); event SaleIsStarted(); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } function grantRole(bytes32 role, address account) public virtual override { require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant"); _grantRole(role, account); } function revokeRole(bytes32 role, address account) public virtual override { require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke"); _revokeRole(role, account); } function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } contract ERC721 is Context, ERC165, AccessControl, IERC721, IERC721Metadata { using Address for address; using SafeMath for uint256; bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); string private _name; string private _symbol; string public _preSaleAddrs; string internal baseURI; uint internal price = 0.077 ether; uint256 internal tokensSold = 0; bool public _startSale = false; uint256 constant MAX_SUPPLY = 6789; address public royalty; mapping (uint => ForSale) public nftForSale; mapping (uint256 => address) private _owners; mapping (address => uint256) private _balances; mapping (uint256 => address) private _tokenApprovals; mapping (address => mapping (address => bool)) private _operatorApprovals; mapping (uint256 => string) private _tokenURIs; mapping (address => uint256[]) public tokensPerOwner; mapping(address => uint256[]) internal ownerToIds; mapping(uint256 => uint256) internal idToOwnerIndex; struct ForSale { uint nft_uid; address owner; address bidder; uint minValue; uint highestBid; } constructor (string memory name_, string memory symbol_,string memory baseURI_,address _royalty) { _name = name_; _symbol = symbol_; baseURI = baseURI_; royalty = _royalty; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165, AccessControl) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function totalSupply() public view returns (uint256) { return tokensSold; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_baseURI(), toString(tokenId))); } function _baseURI() internal view virtual returns (string memory) { return baseURI; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function _addNFToken(address _to, uint256 _tokenId) internal { require(_owners[_tokenId] == address(0), "Cannot add, already owned."); _owners[_tokenId] = _to; ownerToIds[_to].push(_tokenId); idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1); } function _removeNFToken(address _from, uint256 _tokenId) internal { require(_owners[_tokenId] == _from, "Incorrect owner."); delete _owners[_tokenId]; delete nftForSale[_tokenId]; uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId]; uint256 lastTokenIndex = ownerToIds[_from].length.sub(1); if (lastTokenIndex != tokenToRemoveIndex) { uint256 lastToken = ownerToIds[_from][lastTokenIndex]; ownerToIds[_from][tokenToRemoveIndex] = lastToken; idToOwnerIndex[lastToken] = tokenToRemoveIndex; } ownerToIds[_from].pop(); emit CancelSellNft(_msgSender(),_tokenId); } function _getAddrQuantity(address to) internal virtual returns (uint256 value) { return _balances[to]; } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; tokensSold += 1; tokensPerOwner[to].push(tokenId); _addNFToken(to, tokenId); emit Mint(tokenId, to); emit Transfer(address(0), to, tokenId); } function devMint(uint count, address recipient) external { require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI"); require(tokensSold+count <=6789, "The tokens limit has reached."); for (uint i = 0; i < count; i++) { uint256 _tokenId = tokensSold + 1; _mint(recipient, _tokenId); } } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; tokensPerOwner[owner].push(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); _approve(address(0), tokenId); _removeNFToken(from, tokenId); _addNFToken(to, tokenId); _balances[from] -= 1; _balances[to] += 1; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract LeoDynasty is ERC721 { using SafeMath for uint256; bool private lock = false; bool public contractPaused; uint256 constant CONTRACT_ROYALTY = 2;//Contract royalty in percent mapping (address => uint256) public ethBalance; constructor() ERC721("LeoDynasty", "LEODY", " https://leopards.world/json/", address(0xB0A0e9bF8e827877DC0C0a288026CF947a1FB95c)) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); } modifier nonReentrant { require(!lock, "ReentrancyGuard: reentrant call"); lock = true; _; lock = false; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return super.supportsInterface(interfaceId); } function pauseContract(bool _paused) external { require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract"); contractPaused = _paused; } function setBaseURI(string memory newURI) public returns (bool) { require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI"); baseURI = newURI; return true; } function changeRoyaltyAddr(address _newRoyaltyAddr) public returns(bool){ require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change royalty address"); royalty = _newRoyaltyAddr; return true; } function getTokensByOwner(address _owner) public view returns (uint256[] memory){ return ownerToIds[_owner]; } function toSellNFT(uint tokenId, uint minPrice) public returns (bool){ require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved"); nftForSale[tokenId] =ForSale(tokenId,_msgSender(),address(0),minPrice,0); emit SellNft(_msgSender(),tokenId,minPrice); return true; } function toCancelSaleOfNFT(uint tokenId) public returns (bool){ require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved"); delete nftForSale[tokenId]; emit CancelSellNft(_msgSender(),tokenId); return true; } function toMakeBid(uint tokenId) public payable nonReentrant returns(bool){ require(_exists(tokenId), "The token is nonexistent"); ForSale memory order = nftForSale[tokenId]; require(order.owner != address(0),"The token is not for sale"); require(!_isApprovedOrOwner(_msgSender(), tokenId), "The owner can't make bid"); if (order.bidder == _msgSender()){ require(msg.value > 0,"Insufficient funds to make bid"); order.highestBid = order.highestBid.add(msg.value); } else{ require(msg.value >= order.minValue && msg.value > order.highestBid, "Insufficient funds to make bid"); order.highestBid = msg.value; order.bidder = _msgSender(); } ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value); nftForSale[tokenId] = order; emit Deposit(_msgSender(),msg.value); emit NewBid(_msgSender(),order.highestBid,tokenId); return true; } function toAcceptBid(uint tokenId) public nonReentrant returns(bool){ require(!contractPaused); require(_exists(tokenId), "The token is nonexistent"); ForSale memory order = nftForSale[tokenId]; require(order.owner != address(0),"The token is not for sale"); require(_isApprovedOrOwner(_msgSender(), tokenId), "Only owner or approved can accept the bid"); require(ethBalance[order.bidder] >= order.highestBid,"Insufficient funds of the bidder balance"); delete nftForSale[tokenId]; uint256 total_royalty = order.highestBid / 100 * CONTRACT_ROYALTY; ethBalance[order.bidder] = ethBalance[order.bidder].sub(order.highestBid); ethBalance[_msgSender()] = ethBalance[_msgSender()].add(order.highestBid); ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(total_royalty); (bool success, ) = royalty.call{value:total_royalty}(""); require(success); _transfer(order.owner,order.bidder,tokenId); emit CancelSellNft(_msgSender(),tokenId); emit Trade(_msgSender(),order.bidder,order.highestBid,tokenId); emit Transfer(order.owner,order.bidder,tokenId); return true; } function startSale() external { require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI"); require(!_startSale); _startSale = true; emit SaleIsStarted(); } function buyNFT(uint quantity)external payable nonReentrant returns(bool, uint){ require(!contractPaused); require(quantity>0, "Quantity must be more than 0"); require(quantity<11, "Quantity must be less than 11"); require(tokensSold+quantity <=6789, "The tokens limit has reached."); require(msg.value*quantity >= price, "Insufficient funds to purchase."); (bool success, ) = royalty.call{value:msg.value}(""); require(success); uint _tokenId; for (uint i = 0; i < quantity; i++) { _tokenId = tokensSold + 1; _mint(_msgSender(), _tokenId); } return (true,_tokenId); } function withdraw(uint amount) external nonReentrant { require(!contractPaused); require(amount <= ethBalance[_msgSender()],"Insufficient funds to withdraw."); ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(amount); (bool success, ) = msg.sender.call{value:amount}(""); require(success); emit Withdraw(_msgSender(), amount); } function deposit() external payable { ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value); emit Deposit(_msgSender(), msg.value); } }
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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"SellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preSaleAddrs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRoyaltyAddr","type":"address"}],"name":"changeRoyaltyAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftForSale","outputs":[{"internalType":"uint256","name":"nft_uid","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"highestBid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toAcceptBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toCancelSaleOfNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toMakeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"toSellNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526701118f178fb4800060055560006006556007805460ff199081169091556011805490911690553480156200003857600080fd5b506040518060400160405280600a8152602001694c656f44796e6173747960b01b815250604051806040016040528060058152602001644c454f445960d81b8152506040518060400160405280601d81526020017f2068747470733a2f2f6c656f70617264732e776f726c642f6a736f6e2f00000081525073b0a0e9bf8e827877dc0c0a288026cf947a1fb95c8360019080519060200190620000dd92919062000257565b508251620000f390600290602086019062000257565b5081516200010990600490602085019062000257565b50600780546001600160a01b0390921661010002610100600160a81b03199092169190911790555062000149915060009050620001433390565b620001a7565b620001757fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620001a7565b620001a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001a7565b6200033a565b620001b38282620001b7565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001b3576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002133390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200026590620002fd565b90600052602060002090601f016020900481019282620002895760008555620002d4565b82601f10620002a457805160ff1916838001178555620002d4565b82800160010185558215620002d4579182015b82811115620002d4578251825591602001919060010190620002b7565b50620002e2929150620002e6565b5090565b5b80821115620002e25760008155600101620002e7565b600181811c908216806200031257607f821691505b602082108114156200033457634e487b7160e01b600052602260045260246000fd5b50919050565b6133e8806200034a6000396000f3fe6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612f49565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b60405161028291906130c4565b3480156102b957600080fd5b506102cd6102c8366004612f0f565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ecc565b610980565b005b34801561031357600080fd5b506006545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612def565b610a96565b34801561035257600080fd5b50610318610361366004612f0f565b60009081526020819052604090206001015490565b34801561038257600080fd5b506007546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004612f27565b610ac7565b3480156103c757600080fd5b506103056103d6366004612f0f565b610b95565b3480156103e757600080fd5b506103056103f6366004612f27565b610d00565b34801561040757600080fd5b50610305610416366004612f27565b610d8f565b34801561042757600080fd5b5061043b610436366004612da3565b610e09565b6040516102829190613080565b34801561045457600080fd5b50610305610463366004612def565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004612f0f565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c2366004612f81565b611175565b3480156104d357600080fd5b506102cd6104e2366004612f0f565b6111c7565b3480156104f357600080fd5b50610318610502366004612da3565b61123e565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004612f0f565b6112c5565b610276610569366004612f0f565b61135e565b34801561057a57600080fd5b5060115461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004612fc7565b6116d9565b3480156105b957600080fd5b506106036105c8366004612f0f565b6008602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004612f27565b6117dd565b34801561066357600080fd5b506102a0611806565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c366004612ea3565b611815565b3480156106ad57600080fd5b506007546102769060ff1681565b3480156106c757600080fd5b506103056118da565b3480156106dc57600080fd5b506103056106eb366004612e2a565b611956565b3480156106fc57600080fd5b506102a061070b366004612f0f565b61198d565b610305611a34565b34801561072457600080fd5b5061031860008051602061339383398151915281565b34801561074657600080fd5b50610305610755366004612f27565b611a7f565b34801561076657600080fd5b50610318610775366004612da3565b60126020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004612ef5565b611aff565b3480156107b357600080fd5b506102766107c2366004612dbd565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004612ecc565b611b95565b34801561081c57600080fd5b5061027661082b366004612f0f565b611bc6565b34801561083c57600080fd5b5061027661084b366004612da3565b61202b565b600061085b826120d9565b92915050565b606060018054610870906132cd565b80601f016020809104026020016040519081016040528092919081815260200182805461089c906132cd565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612119565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061098b826111c7565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612136565b505050565b610aa033826121a4565b610abc5760405162461bcd60e51b815260040161095b906131b7565b610a9183838361228e565b610adf600080516020613393833981519152336117dd565b610afb5760405162461bcd60e51b815260040161095b90613129565b611a8582600654610b0c919061323f565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006006546001610b76919061323f565b9050610b828382612426565b5080610b8d81613308565b915050610b5d565b60115460ff1615610bb85760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260126020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160126000335b6001600160a01b03168152602081019190915260400160002054906125c1565b3360008181526012602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506011805460ff19169055565b600082815260208190526040902060010154610d1d905b336117dd565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b82826125e1565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b8282612665565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611956565b60038054610e9d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec9906132cd565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601154600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b611a8583600654611018919061323f565b11156110665760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b600554611073843461326b565b10156110c15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60075460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505090508061112657600080fd5b6000805b8581101561115e5760065461114090600161323f565b915061114c3383612426565b8061115681613308565b91505061112a565b506011805460ff1916905560019590945092505050565b600061118f600080516020613393833981519152336117dd565b6111ab5760405162461bcd60e51b815260040161095b90613129565b81516111be906004906020850190612c68565b50600192915050565b6000818152600960205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166112a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600a602052604090205490565b60006112d2335b836121a4565b6112ee5760405162461bcd60e51b815260040161095b90613174565b6000828152600860205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60115460009060ff16156113845760405162461bcd60e51b815260040161095b90613208565b6011805460ff1916600117905561139a82612119565b6113e15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261147d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611488335b846121a4565b156114d55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b0316331415611553576000341161153a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b608081015161154990346126ca565b60808201526115c3565b8060600151341015801561156a5750806080015134115b6115b65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b6115ed3460126000335b6001600160a01b03168152602081019190915260400160002054906126ca565b336000818152601260209081526040808320949094558682526008815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516116923390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506011805460ff1916905550600190565b60006116e433611482565b6117005760405162461bcd60e51b815260040161095b90613174565b6040518060a001604052808481526020016117183390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600882529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361179f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610870906132cd565b6001600160a01b03821633141561186e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118f2600080516020613393833981519152336117dd565b61190e5760405162461bcd60e51b815260040161095b90613129565b60075460ff161561191e57600080fd5b6007805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61195f336112cc565b61197b5760405162461bcd60e51b815260040161095b906131b7565b611987848484846126e5565b50505050565b606061199882612119565b6119fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611a04612718565b611a0d83612727565b604051602001611a1e929190613014565b6040516020818303038152906040529050919050565b611a423460126000336115cd565b3360008181526012602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611a9a90610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611b17600080516020613393833981519152336117dd565b611b7b5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601180549115156101000261ff0019909216919091179055565b600e6020528160005260406000208181548110611bb157600080fd5b90600052602060002001600091509150505481565b60115460009060ff1615611bec5760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615611c0d57600080fd5b611c1682612119565b611c5d5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611cf95760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611d0233611482565b611d605760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b03166000908152601260205220541015611ddf5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526008602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611e3290606490613257565b611e3c919061326b565b60808301516040808501516001600160a01b0316600090815260126020522054919250611e6991906125c1565b6040808401516001600160a01b0316600090815260126020819052918120929092556080840151611e9d92909190336115cd565b336000818152601260208190526040822093909355611ec0928492909190610c42565b33600090815260126020526040808220929092556007549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050905080611f3757600080fd5b611f4a836020015184604001518761228e565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611fc591815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506011805460ff1916905550600192915050565b6000612045600080516020613393833981519152336117dd565b6120ad5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061210a57506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612841565b6000908152600960205260409020546001600160a01b0316151590565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061216b826111c7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121af82612119565b6122105760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061221b836111c7565b9050806001600160a01b0316846001600160a01b031614806122565750836001600160a01b031661224b846108f3565b6001600160a01b0316145b8061228657506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122a1826111c7565b6001600160a01b0316146123095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b03821661236b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b612376600082612136565b6123808382612876565b61238a8282612a8c565b6001600160a01b0383166000908152600a602052604081208054600192906123b390849061328a565b90915550506001600160a01b0382166000908152600a602052604081208054600192906123e190849061323f565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b03821661247c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b61248581612119565b156124d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600a602052604081208054600192906124fb90849061323f565b92505081905550600160066000828254612515919061323f565b90915550506001600160a01b0382166000908152600e602090815260408220805460018101825590835291200181905561254f8282612a8c565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156125d057600080fd5b6125da828461328a565b9392505050565b6125eb82826117dd565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556126213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61266f82826117dd565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006126d6828461323f565b90508281101561085b57600080fd5b6126f084848461228e565b6126fc84848484612b5b565b6119875760405162461bcd60e51b815260040161095b906130d7565b606060048054610870906132cd565b60608161274b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612775578061275f81613308565b915061276e9050600a83613257565b915061274f565b60008167ffffffffffffffff81111561279e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127c8576020820181803683370190505b5090505b8415612286576127dd60018361328a565b91506127ea600a86613323565b6127f590603061323f565b60f81b81838151811061281857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061283a600a86613257565b94506127cc565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600960205260409020546001600160a01b038381169116146128d25760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b600081815260096020908152604080832080546001600160a01b03199081169091556008835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560108352818420546001600160a01b0387168552600f9093529083205491929161294b916125c1565b90508181146129fe576001600160a01b0384166000908152600f6020526040812080548390811061298c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106129de57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480612a3357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612a513390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600960205260409020546001600160a01b031615612af15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054612b48916125c1565b6000918252601060205260409091205550565b60006001600160a01b0384163b15612c5d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b9f903390899088908890600401613043565b602060405180830381600087803b158015612bb957600080fd5b505af1925050508015612be9575060408051601f3d908101601f19168201909252612be691810190612f65565b60015b612c43573d808015612c17576040519150601f19603f3d011682016040523d82523d6000602084013e612c1c565b606091505b508051612c3b5760405162461bcd60e51b815260040161095b906130d7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612286565b506001949350505050565b828054612c74906132cd565b90600052602060002090601f016020900481019282612c965760008555612cdc565b82601f10612caf57805160ff1916838001178555612cdc565b82800160010185558215612cdc579182015b82811115612cdc578251825591602001919060010190612cc1565b50612ce8929150612cec565b5090565b5b80821115612ce85760008155600101612ced565b600067ffffffffffffffff80841115612d1c57612d1c613363565b604051601f8501601f19908116603f01168101908282118183101715612d4457612d44613363565b81604052809350858152868686011115612d5d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d8e57600080fd5b919050565b80358015158114612d8e57600080fd5b600060208284031215612db4578081fd5b6125da82612d77565b60008060408385031215612dcf578081fd5b612dd883612d77565b9150612de660208401612d77565b90509250929050565b600080600060608486031215612e03578081fd5b612e0c84612d77565b9250612e1a60208501612d77565b9150604084013590509250925092565b60008060008060808587031215612e3f578081fd5b612e4885612d77565b9350612e5660208601612d77565b925060408501359150606085013567ffffffffffffffff811115612e78578182fd5b8501601f81018713612e88578182fd5b612e9787823560208401612d01565b91505092959194509250565b60008060408385031215612eb5578182fd5b612ebe83612d77565b9150612de660208401612d93565b60008060408385031215612ede578182fd5b612ee783612d77565b946020939093013593505050565b600060208284031215612f06578081fd5b6125da82612d93565b600060208284031215612f20578081fd5b5035919050565b60008060408385031215612f39578182fd5b82359150612de660208401612d77565b600060208284031215612f5a578081fd5b81356125da81613379565b600060208284031215612f76578081fd5b81516125da81613379565b600060208284031215612f92578081fd5b813567ffffffffffffffff811115612fa8578182fd5b8201601f81018413612fb8578182fd5b61228684823560208401612d01565b60008060408385031215612fd9578182fd5b50508035926020909101359150565b600081518084526130008160208601602086016132a1565b601f01601f19169290920160200192915050565b600083516130268184602088016132a1565b83519083019061303a8183602088016132a1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061307690830184612fe8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130b85783518352928401929184019160010161309c565b50909695505050505050565b6020815260006125da6020830184612fe8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561325257613252613337565b500190565b6000826132665761326661334d565b500490565b600081600019048311821515161561328557613285613337565b500290565b60008282101561329c5761329c613337565b500390565b60005b838110156132bc5781810151838201526020016132a4565b838111156119875750506000910152565b600181811c908216806132e157607f821691505b6020821081141561330257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561331c5761331c613337565b5060010190565b6000826133325761333261334d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461338f57600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122000fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff92364736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b50610276610271366004612f49565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b60405161028291906130c4565b3480156102b957600080fd5b506102cd6102c8366004612f0f565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004612ecc565b610980565b005b34801561031357600080fd5b506006545b604051908152602001610282565b34801561033257600080fd5b50610305610341366004612def565b610a96565b34801561035257600080fd5b50610318610361366004612f0f565b60009081526020819052604090206001015490565b34801561038257600080fd5b506007546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004612f27565b610ac7565b3480156103c757600080fd5b506103056103d6366004612f0f565b610b95565b3480156103e757600080fd5b506103056103f6366004612f27565b610d00565b34801561040757600080fd5b50610305610416366004612f27565b610d8f565b34801561042757600080fd5b5061043b610436366004612da3565b610e09565b6040516102829190613080565b34801561045457600080fd5b50610305610463366004612def565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004612f0f565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c2366004612f81565b611175565b3480156104d357600080fd5b506102cd6104e2366004612f0f565b6111c7565b3480156104f357600080fd5b50610318610502366004612da3565b61123e565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004612f0f565b6112c5565b610276610569366004612f0f565b61135e565b34801561057a57600080fd5b5060115461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004612fc7565b6116d9565b3480156105b957600080fd5b506106036105c8366004612f0f565b6008602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004612f27565b6117dd565b34801561066357600080fd5b506102a0611806565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c366004612ea3565b611815565b3480156106ad57600080fd5b506007546102769060ff1681565b3480156106c757600080fd5b506103056118da565b3480156106dc57600080fd5b506103056106eb366004612e2a565b611956565b3480156106fc57600080fd5b506102a061070b366004612f0f565b61198d565b610305611a34565b34801561072457600080fd5b5061031860008051602061339383398151915281565b34801561074657600080fd5b50610305610755366004612f27565b611a7f565b34801561076657600080fd5b50610318610775366004612da3565b60126020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004612ef5565b611aff565b3480156107b357600080fd5b506102766107c2366004612dbd565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004612ecc565b611b95565b34801561081c57600080fd5b5061027661082b366004612f0f565b611bc6565b34801561083c57600080fd5b5061027661084b366004612da3565b61202b565b600061085b826120d9565b92915050565b606060018054610870906132cd565b80601f016020809104026020016040519081016040528092919081815260200182805461089c906132cd565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612119565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061098b826111c7565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612136565b505050565b610aa033826121a4565b610abc5760405162461bcd60e51b815260040161095b906131b7565b610a9183838361228e565b610adf600080516020613393833981519152336117dd565b610afb5760405162461bcd60e51b815260040161095b90613129565b611a8582600654610b0c919061323f565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006006546001610b76919061323f565b9050610b828382612426565b5080610b8d81613308565b915050610b5d565b60115460ff1615610bb85760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260126020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160126000335b6001600160a01b03168152602081019190915260400160002054906125c1565b3360008181526012602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506011805460ff19169055565b600082815260208190526040902060010154610d1d905b336117dd565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b82826125e1565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b8282612665565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611956565b60038054610e9d906132cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec9906132cd565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601154600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b611a8583600654611018919061323f565b11156110665760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b600554611073843461326b565b10156110c15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60075460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505090508061112657600080fd5b6000805b8581101561115e5760065461114090600161323f565b915061114c3383612426565b8061115681613308565b91505061112a565b506011805460ff1916905560019590945092505050565b600061118f600080516020613393833981519152336117dd565b6111ab5760405162461bcd60e51b815260040161095b90613129565b81516111be906004906020850190612c68565b50600192915050565b6000818152600960205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166112a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600a602052604090205490565b60006112d2335b836121a4565b6112ee5760405162461bcd60e51b815260040161095b90613174565b6000828152600860205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60115460009060ff16156113845760405162461bcd60e51b815260040161095b90613208565b6011805460ff1916600117905561139a82612119565b6113e15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261147d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611488335b846121a4565b156114d55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b0316331415611553576000341161153a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b608081015161154990346126ca565b60808201526115c3565b8060600151341015801561156a5750806080015134115b6115b65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b6115ed3460126000335b6001600160a01b03168152602081019190915260400160002054906126ca565b336000818152601260209081526040808320949094558682526008815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516116923390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506011805460ff1916905550600190565b60006116e433611482565b6117005760405162461bcd60e51b815260040161095b90613174565b6040518060a001604052808481526020016117183390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600882529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361179f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610870906132cd565b6001600160a01b03821633141561186e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118f2600080516020613393833981519152336117dd565b61190e5760405162461bcd60e51b815260040161095b90613129565b60075460ff161561191e57600080fd5b6007805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61195f336112cc565b61197b5760405162461bcd60e51b815260040161095b906131b7565b611987848484846126e5565b50505050565b606061199882612119565b6119fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611a04612718565b611a0d83612727565b604051602001611a1e929190613014565b6040516020818303038152906040529050919050565b611a423460126000336115cd565b3360008181526012602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611a9a90610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611b17600080516020613393833981519152336117dd565b611b7b5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601180549115156101000261ff0019909216919091179055565b600e6020528160005260406000208181548110611bb157600080fd5b90600052602060002001600091509150505481565b60115460009060ff1615611bec5760405162461bcd60e51b815260040161095b90613208565b6011805460ff191660011790819055610100900460ff1615611c0d57600080fd5b611c1682612119565b611c5d5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260086020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611cf95760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611d0233611482565b611d605760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b03166000908152601260205220541015611ddf5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526008602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611e3290606490613257565b611e3c919061326b565b60808301516040808501516001600160a01b0316600090815260126020522054919250611e6991906125c1565b6040808401516001600160a01b0316600090815260126020819052918120929092556080840151611e9d92909190336115cd565b336000818152601260208190526040822093909355611ec0928492909190610c42565b33600090815260126020526040808220929092556007549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611f24576040519150601f19603f3d011682016040523d82523d6000602084013e611f29565b606091505b5050905080611f3757600080fd5b611f4a836020015184604001518761228e565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611fc591815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506011805460ff1916905550600192915050565b6000612045600080516020613393833981519152336117dd565b6120ad5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061210a57506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612841565b6000908152600960205260409020546001600160a01b0316151590565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061216b826111c7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121af82612119565b6122105760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061221b836111c7565b9050806001600160a01b0316846001600160a01b031614806122565750836001600160a01b031661224b846108f3565b6001600160a01b0316145b8061228657506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122a1826111c7565b6001600160a01b0316146123095760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b03821661236b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b612376600082612136565b6123808382612876565b61238a8282612a8c565b6001600160a01b0383166000908152600a602052604081208054600192906123b390849061328a565b90915550506001600160a01b0382166000908152600a602052604081208054600192906123e190849061323f565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b03821661247c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b61248581612119565b156124d25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600a602052604081208054600192906124fb90849061323f565b92505081905550600160066000828254612515919061323f565b90915550506001600160a01b0382166000908152600e602090815260408220805460018101825590835291200181905561254f8282612a8c565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156125d057600080fd5b6125da828461328a565b9392505050565b6125eb82826117dd565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556126213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61266f82826117dd565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006126d6828461323f565b90508281101561085b57600080fd5b6126f084848461228e565b6126fc84848484612b5b565b6119875760405162461bcd60e51b815260040161095b906130d7565b606060048054610870906132cd565b60608161274b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612775578061275f81613308565b915061276e9050600a83613257565b915061274f565b60008167ffffffffffffffff81111561279e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127c8576020820181803683370190505b5090505b8415612286576127dd60018361328a565b91506127ea600a86613323565b6127f590603061323f565b60f81b81838151811061281857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061283a600a86613257565b94506127cc565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600960205260409020546001600160a01b038381169116146128d25760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b600081815260096020908152604080832080546001600160a01b03199081169091556008835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560108352818420546001600160a01b0387168552600f9093529083205491929161294b916125c1565b90508181146129fe576001600160a01b0384166000908152600f6020526040812080548390811061298c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106129de57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480612a3357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612a513390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600960205260409020546001600160a01b031615612af15760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054612b48916125c1565b6000918252601060205260409091205550565b60006001600160a01b0384163b15612c5d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b9f903390899088908890600401613043565b602060405180830381600087803b158015612bb957600080fd5b505af1925050508015612be9575060408051601f3d908101601f19168201909252612be691810190612f65565b60015b612c43573d808015612c17576040519150601f19603f3d011682016040523d82523d6000602084013e612c1c565b606091505b508051612c3b5760405162461bcd60e51b815260040161095b906130d7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612286565b506001949350505050565b828054612c74906132cd565b90600052602060002090601f016020900481019282612c965760008555612cdc565b82601f10612caf57805160ff1916838001178555612cdc565b82800160010185558215612cdc579182015b82811115612cdc578251825591602001919060010190612cc1565b50612ce8929150612cec565b5090565b5b80821115612ce85760008155600101612ced565b600067ffffffffffffffff80841115612d1c57612d1c613363565b604051601f8501601f19908116603f01168101908282118183101715612d4457612d44613363565b81604052809350858152868686011115612d5d57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d8e57600080fd5b919050565b80358015158114612d8e57600080fd5b600060208284031215612db4578081fd5b6125da82612d77565b60008060408385031215612dcf578081fd5b612dd883612d77565b9150612de660208401612d77565b90509250929050565b600080600060608486031215612e03578081fd5b612e0c84612d77565b9250612e1a60208501612d77565b9150604084013590509250925092565b60008060008060808587031215612e3f578081fd5b612e4885612d77565b9350612e5660208601612d77565b925060408501359150606085013567ffffffffffffffff811115612e78578182fd5b8501601f81018713612e88578182fd5b612e9787823560208401612d01565b91505092959194509250565b60008060408385031215612eb5578182fd5b612ebe83612d77565b9150612de660208401612d93565b60008060408385031215612ede578182fd5b612ee783612d77565b946020939093013593505050565b600060208284031215612f06578081fd5b6125da82612d93565b600060208284031215612f20578081fd5b5035919050565b60008060408385031215612f39578182fd5b82359150612de660208401612d77565b600060208284031215612f5a578081fd5b81356125da81613379565b600060208284031215612f76578081fd5b81516125da81613379565b600060208284031215612f92578081fd5b813567ffffffffffffffff811115612fa8578182fd5b8201601f81018413612fb8578182fd5b61228684823560208401612d01565b60008060408385031215612fd9578182fd5b50508035926020909101359150565b600081518084526130008160208601602086016132a1565b601f01601f19169290920160200192915050565b600083516130268184602088016132a1565b83519083019061303a8183602088016132a1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061307690830184612fe8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156130b85783518352928401929184019160010161309c565b50909695505050505050565b6020815260006125da6020830184612fe8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561325257613252613337565b500190565b6000826132665761326661334d565b500490565b600081600019048311821515161561328557613285613337565b500290565b60008282101561329c5761329c613337565b500390565b60005b838110156132bc5781810151838201526020016132a4565b838111156119875750506000910152565b600181811c908216806132e157607f821691505b6020821081141561330257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561331c5761331c613337565b5060010190565b6000826133325761333261334d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461338f57600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122000fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff92364736f6c63430008040033
Deployed Bytecode Sourcemap
17456:6093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18179:161;;;;;;;;;;-1:-1:-1;18179:161:0;;;;;:::i;:::-;;:::i;:::-;;;7899:14:1;;7892:22;7874:41;;7862:2;7847:18;18179:161:0;;;;;;;;9192:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10289:221::-;;;;;;;;;;-1:-1:-1;10289:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6557:32:1;;;6539:51;;6527:2;6512:18;10289:221:0;6494:102:1;9884:397:0;;;;;;;;;;-1:-1:-1;9884:397:0;;;;;:::i;:::-;;:::i;:::-;;9414:89;;;;;;;;;;-1:-1:-1;9485:10:0;;9414:89;;;8335:25:1;;;8323:2;8308:18;9414:89:0;8290:76:1;10993:252:0;;;;;;;;;;-1:-1:-1;10993:252:0;;;;;:::i;:::-;;:::i;5278:123::-;;;;;;;;;;-1:-1:-1;5278:123:0;;;;;:::i;:::-;5344:7;5371:12;;;;;;;;;;:22;;;;5278:123;7482:22;;;;;;;;;;-1:-1:-1;7482:22:0;;;;;;;-1:-1:-1;;;;;7482:22:0;;;14998:386;;;;;;;;;;-1:-1:-1;14998:386:0;;;;;:::i;:::-;;:::i;22971:394::-;;;;;;;;;;-1:-1:-1;22971:394:0;;;;;:::i;:::-;;:::i;5409:232::-;;;;;;;;;;-1:-1:-1;5409:232:0;;;;;:::i;:::-;;:::i;5892:218::-;;;;;;;;;;-1:-1:-1;5892:218:0;;;;;:::i;:::-;;:::i;19040:124::-;;;;;;;;;;-1:-1:-1;19040:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11253:151::-;;;;;;;;;;-1:-1:-1;11253:151:0;;;;;:::i;:::-;;:::i;7260:27::-;;;;;;;;;;;;;:::i;22303:660::-;;;;;;:::i;:::-;;:::i;:::-;;;;8119:14:1;;8112:22;8094:41;;8166:2;8151:18;;8144:34;;;;8067:18;22303:660:0;8049:135:1;18551:224:0;;;;;;;;;;-1:-1:-1;18551:224:0;;;;;:::i;:::-;;:::i;8945:239::-;;;;;;;;;;-1:-1:-1;8945:239:0;;;;;:::i;:::-;;:::i;8729:208::-;;;;;;;;;;-1:-1:-1;8729:208:0;;;;;:::i;:::-;;:::i;7135:60::-;;;;;;;;;;;;7172:23;7135:60;;19516:280;;;;;;;;;;-1:-1:-1;19516:280:0;;;;;:::i;:::-;;:::i;19806:1016::-;;;;;;:::i;:::-;;:::i;17561:26::-;;;;;;;;;;-1:-1:-1;17561:26:0;;;;;;;;;;;19172:336;;;;;;;;;;-1:-1:-1;19172:336:0;;;;;:::i;:::-;;:::i;7515:43::-;;;;;;;;;;-1:-1:-1;7515:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7515:43:0;;;;;;;;;;;;;;;22642:25:1;;;-1:-1:-1;;;;;22741:15:1;;;22736:2;22721:18;;22714:43;22793:15;;;;22773:18;;;22766:43;;;;22840:2;22825:18;;22818:34;22883:3;22868:19;;22861:35;22629:3;22614:19;7515:43:0;22596:306:1;5131:139:0;;;;;;;;;;-1:-1:-1;5131:139:0;;;;;:::i;:::-;;:::i;9300:104::-;;;;;;;;;;;;;:::i;4540:49::-;;;;;;;;;;-1:-1:-1;4540:49:0;4585:4;4540:49;;10518:295;;;;;;;;;;-1:-1:-1;10518:295:0;;;;;:::i;:::-;;:::i;7402:30::-;;;;;;;;;;-1:-1:-1;7402:30:0;;;;;;;;22066:229;;;;;;;;;;;;;:::i;11412:285::-;;;;;;;;;;-1:-1:-1;11412:285:0;;;;;:::i;:::-;;:::i;9511:256::-;;;;;;;;;;-1:-1:-1;9511:256:0;;;;;:::i;:::-;;:::i;23373:169::-;;;:::i;7066:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7066:62:0;;5649:235;;;;;;;;;;-1:-1:-1;5649:235:0;;;;;:::i;:::-;;:::i;17669:46::-;;;;;;;;;;-1:-1:-1;17669:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;18348:195;;;;;;;;;;-1:-1:-1;18348:195:0;;;;;:::i;:::-;;:::i;10821:164::-;;;;;;;;;;-1:-1:-1;10821:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;10942:25:0;;;10918:4;10942:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10821:164;7861:52;;;;;;;;;;-1:-1:-1;7861:52:0;;;;;:::i;:::-;;:::i;20830:1228::-;;;;;;;;;;-1:-1:-1;20830:1228:0;;;;;:::i;:::-;;:::i;18783:247::-;;;;;;;;;;-1:-1:-1;18783:247:0;;;;;:::i;:::-;;:::i;18179:161::-;18272:4;18296:36;18320:11;18296:23;:36::i;:::-;18289:43;18179:161;-1:-1:-1;;18179:161:0:o;9192:100::-;9246:13;9279:5;9272:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:100;:::o;10289:221::-;10365:7;10393:16;10401:7;10393;:16::i;:::-;10385:73;;;;-1:-1:-1;;;10385:73:0;;16569:2:1;10385:73:0;;;16551:21:1;16608:2;16588:18;;;16581:30;16647:34;16627:18;;;16620:62;-1:-1:-1;;;16698:18:1;;;16691:42;16750:19;;10385:73:0;;;;;;;;;-1:-1:-1;10478:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10478:24:0;;10289:221::o;9884:397::-;9965:13;9981:23;9996:7;9981:14;:23::i;:::-;9965:39;;10029:5;-1:-1:-1;;;;;10023:11:0;:2;-1:-1:-1;;;;;10023:11:0;;;10015:57;;;;-1:-1:-1;;;10015:57:0;;20449:2:1;10015:57:0;;;20431:21:1;20488:2;20468:18;;;20461:30;20527:34;20507:18;;;20500:62;-1:-1:-1;;;20578:18:1;;;20571:31;20619:19;;10015:57:0;20421:223:1;10015:57:0;4074:10;-1:-1:-1;;;;;10093:21:0;;;;:62;;-1:-1:-1;10118:37:0;10135:5;4074:10;10821:164;:::i;10118:37::-;10085:154;;;;-1:-1:-1;;;10085:154:0;;14609:2:1;10085:154:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;14758:26;14738:18;;;14731:54;14802:19;;10085:154:0;14581:246:1;10085:154:0;10252:21;10261:2;10265:7;10252:8;:21::i;:::-;9884:397;;;:::o;10993:252::-;11101:41;4074:10;11134:7;11101:18;:41::i;:::-;11093:103;;;;-1:-1:-1;;;11093:103:0;;;;;;;:::i;:::-;11209:28;11219:4;11225:2;11229:7;11209:9;:28::i;14998:386::-;15074:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;15074:34::-;15066:90;;;;-1:-1:-1;;;15066:90:0;;;;;;;:::i;:::-;15194:4;15186:5;15175:10;;:16;;;;:::i;:::-;:23;;15167:65;;;;-1:-1:-1;;;15167:65:0;;21269:2:1;15167:65:0;;;21251:21:1;21308:2;21288:18;;;21281:30;21347:31;21327:18;;;21320:59;21396:18;;15167:65:0;21241:179:1;15167:65:0;15248:6;15243:134;15264:5;15260:1;:9;15243:134;;;15291:16;15310:10;;15323:1;15310:14;;;;:::i;:::-;15291:33;;15339:26;15345:9;15356:8;15339:5;:26::i;:::-;-1:-1:-1;15271:3:0;;;;:::i;:::-;;;;15243:134;;22971:394;18066:4;;;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;23044:14;::::1;18117:11:::0;23044:14:::1;23043:15;23035:24;;;::::0;::::1;;4074:10:::0;23088:24:::1;::::0;;;:10:::1;:24;::::0;;;;;23078:34;::::1;;23070:77;;;::::0;-1:-1:-1;;;23070:77:0;;17751:2:1;23070:77:0::1;::::0;::::1;17733:21:1::0;17790:2;17770:18;;;17763:30;17829:33;17809:18;;;17802:61;17880:18;;23070:77:0::1;17723:181:1::0;23070:77:0::1;23185:36;23214:6:::0;23185:10:::1;:24;4074:10:::0;23196:12:::1;-1:-1:-1::0;;;;;23185:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23185:24:0;;;:28:::1;:36::i;:::-;4074:10:::0;23158:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:63;;;;23251:33;;23273:6;;23158:24;23251:33;23158:24;23251:33;23273:6;4074:10;23251:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23232:52;;;23303:7;23295:16;;;::::0;::::1;;23327:30;::::0;23350:6;;4074:10;;23327:30:::1;::::0;;;::::1;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;22971:394::o;5409:232::-;5344:7;5371:12;;;;;;;;;;:22;;;5502:41;;5510:18;4074:10;5131:139;:::i;5502:41::-;5494:101;;;;-1:-1:-1;;;5494:101:0;;8797:2:1;5494:101:0;;;8779:21:1;8836:2;8816:18;;;8809:30;8875:34;8855:18;;;8848:62;-1:-1:-1;;;8926:18:1;;;8919:45;8981:19;;5494:101:0;8769:237:1;5494:101:0;5608:25;5619:4;5625:7;5608:10;:25::i;:::-;5409:232;;:::o;5892:218::-;-1:-1:-1;;;;;5988:23:0;;4074:10;5988:23;5980:83;;;;-1:-1:-1;;;5980:83:0;;21987:2:1;5980:83:0;;;21969:21:1;22026:2;22006:18;;;21999:30;22065:34;22045:18;;;22038:62;-1:-1:-1;;;22116:18:1;;;22109:45;22171:19;;5980:83:0;21959:237:1;5980:83:0;6076:26;6088:4;6094:7;6076:11;:26::i;19040:124::-;-1:-1:-1;;;;;19138:18:0;;;;;;:10;:18;;;;;;;;;19131:25;;;;;;;;;;;;;;;;;19103:16;;19131:25;;;19138:18;19131:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19040:124;;;:::o;11253:151::-;11357:39;11374:4;11380:2;11384:7;11357:39;;;;;;;;;;;;:16;:39::i;7260:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22303:660::-;18066:4;;22371;;;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;22402:14;::::1;18117:11:::0;22402:14:::1;22401:15;22393:24;;;::::0;::::1;;22439:1;22430:8;:10;22422:51;;;::::0;-1:-1:-1;;;22422:51:0;;9632:2:1;22422:51:0::1;::::0;::::1;9614:21:1::0;9671:2;9651:18;;;9644:30;9710;9690:18;;;9683:58;9758:18;;22422:51:0::1;9604:178:1::0;22422:51:0::1;22495:2;22486:8;:11;22478:53;;;::::0;-1:-1:-1;;;22478:53:0;;12652:2:1;22478:53:0::1;::::0;::::1;12634:21:1::0;12691:2;12671:18;;;12664:30;12730:31;12710:18;;;12703:59;12779:18;;22478:53:0::1;12624:179:1::0;22478:53:0::1;22572:4;22561:8;22550:10;;:19;;;;:::i;:::-;:26;;22542:68;;;::::0;-1:-1:-1;;;22542:68:0;;21269:2:1;22542:68:0::1;::::0;::::1;21251:21:1::0;21308:2;21288:18;;;21281:30;21347:31;21327:18;;;21320:59;21396:18;;22542:68:0::1;21241:179:1::0;22542:68:0::1;22655:5;::::0;22633:18:::1;22643:8:::0;22633:9:::1;:18;:::i;:::-;:27;;22625:71;;;::::0;-1:-1:-1;;;22625:71:0;;12292:2:1;22625:71:0::1;::::0;::::1;12274:21:1::0;12331:2;12311:18;;;12304:30;12370:33;12350:18;;;12343:61;12421:18;;22625:71:0::1;12264:181:1::0;22625:71:0::1;22726:7;::::0;:33:::1;::::0;22708:12:::1;::::0;22726:7:::1;::::0;::::1;-1:-1:-1::0;;;;;22726:7:0::1;::::0;22745:9:::1;::::0;22708:12;22726:33;22708:12;22726:33;22745:9;22726:7;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22707:52;;;22778:7;22770:16;;;::::0;::::1;;22797:13;::::0;22815:108:::1;22836:8;22832:1;:12;22815:108;;;22868:10;::::0;:14:::1;::::0;22881:1:::1;22868:14;:::i;:::-;22857:25:::0;-1:-1:-1;22888:29:0::1;4074:10:::0;22908:8:::1;22888:5;:29::i;:::-;22846:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22815:108;;;-1:-1:-1::0;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;22941:4:::1;::::0;22946:8;;-1:-1:-1;22303:660:0;-1:-1:-1;;;22303:660:0:o;18551:224::-;18609:4;18634:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18634:34::-;18626:90;;;;-1:-1:-1;;;18626:90:0;;;;;;;:::i;:::-;18727:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;18761:4:0;;18551:224;-1:-1:-1;;18551:224:0:o;8945:239::-;9017:7;9053:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9053:16:0;9088:19;9080:73;;;;-1:-1:-1;;;9080:73:0;;15445:2:1;9080:73:0;;;15427:21:1;15484:2;15464:18;;;15457:30;15523:34;15503:18;;;15496:62;-1:-1:-1;;;15574:18:1;;;15567:39;15623:19;;9080:73:0;15417:231:1;8729:208:0;8801:7;-1:-1:-1;;;;;8829:19:0;;8821:74;;;;-1:-1:-1;;;8821:74:0;;15034:2:1;8821:74:0;;;15016:21:1;15073:2;15053:18;;;15046:30;15112:34;15092:18;;;15085:62;-1:-1:-1;;;15163:18:1;;;15156:40;15213:19;;8821:74:0;15006:232:1;8821:74:0;-1:-1:-1;;;;;;8913:16:0;;;;;:9;:16;;;;;;;8729:208::o;19516:280::-;19573:4;19597:41;4074:10;19616:12;19630:7;19597:18;:41::i;:::-;19589:89;;;;-1:-1:-1;;;19589:89:0;;;;;;;:::i;:::-;19696:19;;;;:10;:19;;;;;;19689:26;;;;;;;;-1:-1:-1;;;;;;19689:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19731:35;19696:19;;4074:10;;19731:35;;19696:19;19731:35;-1:-1:-1;19784:4:0;;19516:280;-1:-1:-1;19516:280:0:o;19806:1016::-;18066:4;;19875;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;19899:16:::1;19907:7:::0;19899::::1;:16::i;:::-;19891:53;;;::::0;-1:-1:-1;;;19891:53:0;;13839:2:1;19891:53:0::1;::::0;::::1;13821:21:1::0;13878:2;13858:18;;;13851:30;-1:-1:-1;;;13897:18:1;;;13890:54;13961:18;;19891:53:0::1;13811:174:1::0;19891:53:0::1;19955:20;19978:19:::0;;;:10:::1;:19;::::0;;;;;;;;19955:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19955:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;20008:62:::1;;;::::0;-1:-1:-1;;;20008:62:0;;19346:2:1;20008:62:0::1;::::0;::::1;19328:21:1::0;19385:2;19365:18;;;19358:30;-1:-1:-1;;;19404:18:1;;;19397:55;19469:18;;20008:62:0::1;19318:175:1::0;20008:62:0::1;20090:41;4074:10:::0;20109:12:::1;20123:7;20090:18;:41::i;:::-;20089:42;20081:79;;;::::0;-1:-1:-1;;;20081:79:0;;15855:2:1;20081:79:0::1;::::0;::::1;15837:21:1::0;15894:2;15874:18;;;15867:30;15933:26;15913:18;;;15906:54;15977:18;;20081:79:0::1;15827:174:1::0;20081:79:0::1;20175:12;::::0;::::1;::::0;-1:-1:-1;;;;;20175:28:0::1;4074:10:::0;20175:28:::1;20171:399;;;20239:1;20227:9;:13;20219:55;;;::::0;-1:-1:-1;;;20219:55:0;;16982:2:1;20219:55:0::1;::::0;::::1;16964:21:1::0;17021:2;17001:18;;;16994:30;17060:32;17040:18;;;17033:60;17110:18;;20219:55:0::1;16954:180:1::0;20219:55:0::1;20308:16;::::0;::::1;::::0;:31:::1;::::0;20329:9:::1;20308:20;:31::i;:::-;20289:16;::::0;::::1;:50:::0;20171:399:::1;;;20392:5;:14;;;20379:9;:27;;:59;;;;;20422:5;:16;;;20410:9;:28;20379:59;20371:102;;;::::0;-1:-1:-1;;;20371:102:0;;16982:2:1;20371:102:0::1;::::0;::::1;16964:21:1::0;17021:2;17001:18;;;16994:30;17060:32;17040:18;;;17033:60;17110:18;;20371:102:0::1;16954:180:1::0;20371:102:0::1;20507:9;20488:16;::::0;::::1;:28:::0;4074:10;20531:12:::1;::::0;::::1;:27:::0;20171:399:::1;20607:39;20636:9;20607:10;:24;4074:10:::0;20618:12:::1;-1:-1:-1::0;;;;;20607:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20607:24:0;;;:28:::1;:39::i;:::-;4074:10:::0;20580:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:66;;;;20657:19;;;:10:::1;:19:::0;;;;;:27;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20657:27:0;;::::1;-1:-1:-1::0;;;;;;20657:27:0;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;20700:31;;20721:9:::1;::::0;20700:31:::1;::::0;::::1;20784:7;20767:5;:16;;;20754:12;4074:10:::0;;3994:98;20754:12:::1;-1:-1:-1::0;;;;;20747:45:0::1;;;;;;;;;;;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;-1:-1:-1;20810:4:0::1;::::0;19806:1016::o;19172:336::-;19236:4;19260:41;4074:10;19279:12;3994:98;19260:41;19252:89;;;;-1:-1:-1;;;19252:89:0;;;;;;;:::i;:::-;19373:51;;;;;;;;19381:7;19373:51;;;;19389:12;4074:10;;3994:98;19389:12;-1:-1:-1;;;;;19373:51:0;;;;;19410:1;19373:51;;;;;;;;;;;;;;;;;;;;;19352:19;;;:10;:19;;;;;;:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19352:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19413:8;19363:7;19448:12;4074:10;;3994:98;19448:12;-1:-1:-1;;;;;19440:38:0;;;;;;;;;;;-1:-1:-1;19496:4:0;19172:336;;;;:::o;5131:139::-;5209:4;5233:12;;;;;;;;;;;-1:-1:-1;;;;;5233:29:0;;;;;;;;;;;;;;;5131:139::o;9300:104::-;9356:13;9389:7;9382:14;;;;;:::i;10518:295::-;-1:-1:-1;;;;;10621:24:0;;4074:10;10621:24;;10613:62;;;;-1:-1:-1;;;10613:62:0;;11583:2:1;10613:62:0;;;11565:21:1;11622:2;11602:18;;;11595:30;11661:27;11641:18;;;11634:55;11706:18;;10613:62:0;11555:175:1;10613:62:0;4074:10;10688:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10688:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10688:53:0;;;;;;;;;;10757:48;;7874:41:1;;;10688:42:0;;4074:10;10757:48;;7847:18:1;10757:48:0;;;;;;;10518:295;;:::o;22066:229::-;22115:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;22115:34::-;22107:90;;;;-1:-1:-1;;;22107:90:0;;;;;;;:::i;:::-;22217:10;;;;22216:11;22208:20;;;;;;22239:10;:17;;-1:-1:-1;;22239:17:0;22252:4;22239:17;;;22272:15;;;;22239:10;;22272:15;22066:229::o;11412:285::-;11544:41;4074:10;11563:12;3994:98;11544:41;11536:103;;;;-1:-1:-1;;;11536:103:0;;;;;;;:::i;:::-;11650:39;11664:4;11670:2;11674:7;11683:5;11650:13;:39::i;:::-;11412:285;;;;:::o;9511:256::-;9584:13;9618:16;9626:7;9618;:16::i;:::-;9610:76;;;;-1:-1:-1;;;9610:76:0;;18111:2:1;9610:76:0;;;18093:21:1;18150:2;18130:18;;;18123:30;18189:34;18169:18;;;18162:62;-1:-1:-1;;;18240:18:1;;;18233:45;18295:19;;9610:76:0;18083:237:1;9610:76:0;9728:10;:8;:10::i;:::-;9740:17;9749:7;9740:8;:17::i;:::-;9711:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9697:62;;9511:256;;;:::o;23373:169::-;23447:39;23476:9;23447:10;:24;4074:10;23458:12;3994:98;23447:39;4074:10;23420:24;;;;:10;:24;;;;;;:66;;;;23502:32;;23524:9;;23502:32;;;23373:169::o;5649:235::-;5344:7;5371:12;;;;;;;;;;:22;;;5743:41;;5751:18;5278:123;5743:41;5735:102;;;;-1:-1:-1;;;5735:102:0;;14192:2:1;5735:102:0;;;14174:21:1;14231:2;14211:18;;;14204:30;14270:34;14250:18;;;14243:62;-1:-1:-1;;;14321:18:1;;;14314:46;14377:19;;5735:102:0;14164:238:1;18348:195:0;18414:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18414:34::-;18406:94;;;;-1:-1:-1;;;18406:94:0;;13423:2:1;18406:94:0;;;13405:21:1;13462:2;13442:18;;;13435:30;13501:34;13481:18;;;13474:62;-1:-1:-1;;;13552:18:1;;;13545:45;13607:19;;18406:94:0;13395:237:1;18406:94:0;18511:14;:24;;;;;;;-1:-1:-1;;18511:24:0;;;;;;;;;18348:195::o;7861:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20830:1228::-;18066:4;;20893;;18066;;18065:5;18057:49;;;;-1:-1:-1;;;18057:49:0;;;;;;;:::i;:::-;18117:4;:11;;-1:-1:-1;;18117:11:0;18124:4;18117:11;;;;;;20918:14;::::1;18117:11:::0;20918:14:::1;20917:15;20909:24;;;::::0;::::1;;20952:16;20960:7;20952;:16::i;:::-;20944:53;;;::::0;-1:-1:-1;;;20944:53:0;;13839:2:1;20944:53:0::1;::::0;::::1;13821:21:1::0;13878:2;13858:18;;;13851:30;-1:-1:-1;;;13897:18:1;;;13890:54;13961:18;;20944:53:0::1;13811:174:1::0;20944:53:0::1;21008:20;21031:19:::0;;;:10:::1;:19;::::0;;;;;;;;21008:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;21008:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;21061:62:::1;;;::::0;-1:-1:-1;;;21061:62:0;;19346:2:1;21061:62:0::1;::::0;::::1;19328:21:1::0;19385:2;19365:18;;;19358:30;-1:-1:-1;;;19404:18:1;;;19397:55;19469:18;;21061:62:0::1;19318:175:1::0;21061:62:0::1;21142:41;4074:10:::0;21161:12:::1;3994:98:::0;21142:41:::1;21134:95;;;::::0;-1:-1:-1;;;21134:95:0;;18527:2:1;21134:95:0::1;::::0;::::1;18509:21:1::0;18566:2;18546:18;;;18539:30;18605:34;18585:18;;;18578:62;-1:-1:-1;;;18656:18:1;;;18649:39;18705:19;;21134:95:0::1;18499:231:1::0;21134:95:0::1;21276:16;::::0;::::1;::::0;21259:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21248:24:0::1;;::::0;;;:10:::1;:24;::::0;;;:44:::1;;21240:96;;;::::0;-1:-1:-1;;;21240:96:0;;18937:2:1;21240:96:0::1;::::0;::::1;18919:21:1::0;18976:2;18956:18;;;18949:30;19015:34;18995:18;;;18988:62;-1:-1:-1;;;19066:18:1;;;19059:38;19114:19;;21240:96:0::1;18909:230:1::0;21240:96:0::1;21354:19;::::0;;;:10:::1;:19;::::0;;;;21347:26;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;21347:26:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;21408:16:::1;::::0;::::1;::::0;:22:::1;::::0;21427:3:::1;::::0;21408:22:::1;:::i;:::-;:41;;;;:::i;:::-;21516:16;::::0;::::1;::::0;21498:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21487:24:0::1;;::::0;;;:10:::1;:24;::::0;;;21384:65;;-1:-1:-1;21487:46:0::1;::::0;:24;:28:::1;:46::i;:::-;21471:12;::::0;;::::1;::::0;-1:-1:-1;;;;;21460:24:0::1;;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21600:16:::1;::::0;::::1;::::0;21571:46:::1;::::0;21600:16;;21460:10;4074;21582:12:::1;3994:98:::0;21571:46:::1;4074:10:::0;21544:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21655:43:::1;::::0;21684:13;;21544:10;;:24;21666:12:::1;3994:98:::0;21655:43:::1;4074:10:::0;21628:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:70;;;;21728:7:::1;::::0;:37;;21628:24;;21728:7:::1;::::0;::::1;-1:-1:-1::0;;;;;21728:7:0::1;::::0;21747:13;;21628:24;21728:37;21628:24;21728:37;21747:13;21728:7;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21709:56;;;21784:7;21776:16;;;::::0;::::1;;21803:43;21813:5;:11;;;21825:5;:12;;;21838:7;21803:9;:43::i;:::-;21862:35;::::0;21889:7;;4074:10;;21862:35:::1;::::0;;;::::1;21945:16;::::0;::::1;::::0;21932:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;21913:57:0::1;4074:10:::0;-1:-1:-1;;;;;21913:57:0::1;;21962:7;21913:57;;;;8335:25:1::0;;8323:2;8308:18;;8290:76;21913:57:0::1;;;;;;;;22020:7;22007:5;:12;;;-1:-1:-1::0;;;;;21986:42:0::1;21995:5;:11;;;-1:-1:-1::0;;;;;21986:42:0::1;;;;;;;;;;;-1:-1:-1::0;;18151:4:0;:12;;-1:-1:-1;;18151:12:0;;;-1:-1:-1;22046:4:0::1;::::0;20830:1228;-1:-1:-1;;20830:1228:0:o;18783:247::-;18850:4;18874:34;-1:-1:-1;;;;;;;;;;;4074:10:0;5131:139;:::i;18874:34::-;18866:98;;;;-1:-1:-1;;;18866:98:0;;10346:2:1;18866:98:0;;;10328:21:1;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:49;10534:19;;18866:98:0;10318:241:1;18866:98:0;-1:-1:-1;18975:7:0;:25;;-1:-1:-1;;;;;18975:25:0;;;;;-1:-1:-1;;;;;;18975:25:0;;;;;;;;;:7;;18783:247::o;8414:307::-;8531:4;-1:-1:-1;;;;;;8555:40:0;;-1:-1:-1;;;8555:40:0;;:105;;-1:-1:-1;;;;;;;8612:48:0;;-1:-1:-1;;;8612:48:0;8555:105;:158;;;;8677:36;8701:11;8677:23;:36::i;11985:127::-;12050:4;12074:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12074:16:0;:30;;;11985:127::o;16325:174::-;16400:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16400:29:0;-1:-1:-1;;;;;16400:29:0;;;;;;;;:24;;16454:23;16400:24;16454:14;:23::i;:::-;-1:-1:-1;;;;;16445:46:0;;;;;;;;;;;16325:174;;:::o;12120:348::-;12213:4;12238:16;12246:7;12238;:16::i;:::-;12230:73;;;;-1:-1:-1;;;12230:73:0;;13010:2:1;12230:73:0;;;12992:21:1;13049:2;13029:18;;;13022:30;13088:34;13068:18;;;13061:62;-1:-1:-1;;;13139:18:1;;;13132:42;13191:19;;12230:73:0;12982:234:1;12230:73:0;12314:13;12330:23;12345:7;12330:14;:23::i;:::-;12314:39;;12383:5;-1:-1:-1;;;;;12372:16:0;:7;-1:-1:-1;;;;;12372:16:0;;:51;;;;12416:7;-1:-1:-1;;;;;12392:31:0;:20;12404:7;12392:11;:20::i;:::-;-1:-1:-1;;;;;12392:31:0;;12372:51;:87;;;-1:-1:-1;;;;;;10942:25:0;;;10918:4;10942:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;12427:32;12364:96;12120:348;-1:-1:-1;;;;12120:348:0:o;15780:537::-;15905:4;-1:-1:-1;;;;;15878:31:0;:23;15893:7;15878:14;:23::i;:::-;-1:-1:-1;;;;;15878:31:0;;15870:85;;;;-1:-1:-1;;;15870:85:0;;17341:2:1;15870:85:0;;;17323:21:1;17380:2;17360:18;;;17353:30;17419:34;17399:18;;;17392:62;-1:-1:-1;;;17470:18:1;;;17463:39;17519:19;;15870:85:0;17313:231:1;15870:85:0;-1:-1:-1;;;;;15974:16:0;;15966:65;;;;-1:-1:-1;;;15966:65:0;;11178:2:1;15966:65:0;;;11160:21:1;11217:2;11197:18;;;11190:30;11256:34;11236:18;;;11229:62;-1:-1:-1;;;11307:18:1;;;11300:34;11351:19;;15966:65:0;11150:226:1;15966:65:0;16096:29;16113:1;16117:7;16096:8;:29::i;:::-;16138;16153:4;16159:7;16138:14;:29::i;:::-;16178:24;16190:2;16194:7;16178:11;:24::i;:::-;-1:-1:-1;;;;;16215:15:0;;;;;;:9;:15;;;;;:20;;16234:1;;16215:15;:20;;16234:1;;16215:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16246:13:0;;;;;;:9;:13;;;;;:18;;16263:1;;16246:13;:18;;16263:1;;16246:18;:::i;:::-;;;;-1:-1:-1;;16282:27:0;;16301:7;;-1:-1:-1;;;;;16282:27:0;;;;;;;;;;;;;15780:537;;;:::o;14507:485::-;-1:-1:-1;;;;;14587:16:0;;14579:61;;;;-1:-1:-1;;;14579:61:0;;16208:2:1;14579:61:0;;;16190:21:1;;;16227:18;;;16220:30;16286:34;16266:18;;;16259:62;16338:18;;14579:61:0;16180:182:1;14579:61:0;14660:16;14668:7;14660;:16::i;:::-;14659:17;14651:58;;;;-1:-1:-1;;;14651:58:0;;9989:2:1;14651:58:0;;;9971:21:1;10028:2;10008:18;;;10001:30;10067;10047:18;;;10040:58;10115:18;;14651:58:0;9961:178:1;14651:58:0;-1:-1:-1;;;;;14780:13:0;;;;;;:9;:13;;;;;:18;;14797:1;;14780:13;:18;;14797:1;;14780:18;:::i;:::-;;;;;;;;14823:1;14809:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14835:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;14878:24;14850:2;14859:7;14878:11;:24::i;:::-;14918:17;;-1:-1:-1;;;;;14918:17:0;;;14923:7;;14918:17;;;;;14951:33;;14976:7;;-1:-1:-1;;;;;14951:33:0;;;14968:1;;14951:33;;14968:1;;14951:33;14507:485;;:::o;1087:124::-;1145:7;1178:1;1173;:6;;1165:15;;;;;;1198:5;1202:1;1198;:5;:::i;:::-;1191:12;1087:124;-1:-1:-1;;;1087:124:0:o;6441:229::-;6516:22;6524:4;6530:7;6516;:22::i;:::-;6511:152;;6555:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6555:29:0;;;;;;;;;:36;;-1:-1:-1;;6555:36:0;6587:4;6555:36;;;6638:12;4074:10;;3994:98;6638:12;-1:-1:-1;;;;;6611:40:0;6629:7;-1:-1:-1;;;;;6611:40:0;6623:4;6611:40;;;;;;;;;;6441:229;;:::o;6678:230::-;6753:22;6761:4;6767:7;6753;:22::i;:::-;6749:152;;;6824:5;6792:12;;;;;;;;;;;-1:-1:-1;;;;;6792:29:0;;;;;;;;;;:37;;-1:-1:-1;;6792:37:0;;;6849:40;4074:10;;6792:12;;6849:40;;6824:5;6849:40;6678:230;;:::o;1286:142::-;1344:9;1370:5;1374:1;1370;:5;:::i;:::-;1366:9;;1399:1;1394;:6;;1386:15;;;;;11705:272;11819:28;11829:4;11835:2;11839:7;11819:9;:28::i;:::-;11866:48;11889:4;11895:2;11899:7;11908:5;11866:22;:48::i;:::-;11858:111;;;;-1:-1:-1;;;11858:111:0;;;;;;;:::i;9775:99::-;9826:13;9859:7;9852:14;;;;;:::i;12852:534::-;12908:13;12940:10;12936:53;;-1:-1:-1;;12967:10:0;;;;;;;;;;;;-1:-1:-1;;;12967:10:0;;;;;12852:534::o;12936:53::-;13014:5;12999:12;13055:78;13062:9;;13055:78;;13088:8;;;;:::i;:::-;;-1:-1:-1;13111:10:0;;-1:-1:-1;13119:2:0;13111:10;;:::i;:::-;;;13055:78;;;13143:19;13175:6;13165:17;;;;;;-1:-1:-1;;;13165:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13165:17:0;;13143:39;;13193:154;13200:10;;13193:154;;13227:11;13237:1;13227:11;;:::i;:::-;;-1:-1:-1;13296:10:0;13304:2;13296:5;:10;:::i;:::-;13283:24;;:2;:24;:::i;:::-;13270:39;;13253:6;13260;13253:14;;;;;;-1:-1:-1;;;13253:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13253:56:0;;;;;;;;-1:-1:-1;13324:11:0;13333:2;13324:11;;:::i;:::-;;;13193:154;;4906:217;4991:4;-1:-1:-1;;;;;;5015:47:0;;-1:-1:-1;;;5015:47:0;;:100;;-1:-1:-1;;;;;;;;;;4256:40:0;;;5079:36;4147:157;13698:691;13783:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;13783:26:0;;;:17;;:26;13775:55;;;;-1:-1:-1;;;13775:55:0;;19700:2:1;13775:55:0;;;19682:21:1;19739:2;19719:18;;;19712:30;-1:-1:-1;;;19758:18:1;;;19751:46;19814:18;;13775:55:0;19672:166:1;13775:55:0;13848:17;;;;:7;:17;;;;;;;;13841:24;;-1:-1:-1;;;;;;13841:24:0;;;;;;13883:10;:20;;;;;13876:27;;;13841:24;13876:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13943:14;:24;;;;;;-1:-1:-1;;;;;14003:17:0;;;;:10;:17;;;;;;:24;13943;;13848:17;14003:31;;:28;:31::i;:::-;13978:56;;14069:18;14051:14;:36;14047:247;;-1:-1:-1;;;;;14124:17:0;;14104;14124;;;:10;:17;;;;;:33;;14142:14;;14124:33;;;;-1:-1:-1;;;14124:33:0;;;;;;;;;;;;;;;;;14104:53;;14212:9;14172:10;:17;14183:5;-1:-1:-1;;;;;14172:17:0;-1:-1:-1;;;;;14172:17:0;;;;;;;;;;;;14190:18;14172:37;;;;;;-1:-1:-1;;;14172:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;14236:25;;;:14;:25;;;;;:46;;;14047:247;-1:-1:-1;;;;;14306:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;14306:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14372:8;14359:12;4074:10;;3994:98;14359:12;-1:-1:-1;;;;;14345:36:0;;;;;;;;;;;13698:691;;;;:::o;13396:294::-;13505:1;13476:17;;;:7;:17;;;;;;-1:-1:-1;;;;;13476:17:0;:31;13468:70;;;;-1:-1:-1;;;13468:70:0;;11937:2:1;13468:70:0;;;11919:21:1;11976:2;11956:18;;;11949:30;12015:28;11995:18;;;11988:56;12061:18;;13468:70:0;11909:176:1;13468:70:0;13549:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;13549:23:0;-1:-1:-1;;;;;13549:23:0;;;;;;;;13585:15;;;:10;:15;;;;;:30;;-1:-1:-1;13585:30:0;;;;;;;;;;;;;;;13653:15;;:22;;:29;;:26;:29::i;:::-;13626:24;;;;:14;:24;;;;;;:56;-1:-1:-1;13396:294:0:o;16507:843::-;16628:4;-1:-1:-1;;;;;16654:13:0;;208:20;247:8;16650:693;;16690:72;;-1:-1:-1;;;16690:72:0;;-1:-1:-1;;;;;16690:36:0;;;;;:72;;4074:10;;16741:4;;16747:7;;16756:5;;16690:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16690:72:0;;;;;;;;-1:-1:-1;;16690:72:0;;;;;;;;;;;;:::i;:::-;;;16686:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16936:13:0;;16932:341;;16979:60;;-1:-1:-1;;;16979:60:0;;;;;;;:::i;16932:341::-;17223:6;17217:13;17208:6;17204:2;17200:15;17193:38;16686:602;-1:-1:-1;;;;;;16813:55:0;-1:-1:-1;;;16813:55:0;;-1:-1:-1;16806:62:0;;16650:693;-1:-1:-1;17327:4:0;16507:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:258::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:2;;;5333:6;5325;5318:22;5280:2;-1:-1:-1;;5361:23:1;;;5431:2;5416:18;;;5403:32;;-1:-1:-1;5270:171:1:o;5446:257::-;5487:3;5525:5;5519:12;5552:6;5547:3;5540:19;5568:63;5624:6;5617:4;5612:3;5608:14;5601:4;5594:5;5590:16;5568:63;:::i;:::-;5685:2;5664:15;-1:-1:-1;;5660:29:1;5651:39;;;;5692:4;5647:50;;5495:208;-1:-1:-1;;5495:208:1:o;5708:470::-;5887:3;5925:6;5919:13;5941:53;5987:6;5982:3;5975:4;5967:6;5963:17;5941:53;:::i;:::-;6057:13;;6016:16;;;;6079:57;6057:13;6016:16;6113:4;6101:17;;6079:57;:::i;:::-;6152:20;;5895:283;-1:-1:-1;;;;5895:283:1:o;6601:488::-;-1:-1:-1;;;;;6870:15:1;;;6852:34;;6922:15;;6917:2;6902:18;;6895:43;6969:2;6954:18;;6947:34;;;7017:3;7012:2;6997:18;;6990:31;;;6795:4;;7038:45;;7063:19;;7055:6;7038:45;:::i;:::-;7030:53;6804:285;-1:-1:-1;;;;;;6804:285:1:o;7094:635::-;7265:2;7317:21;;;7387:13;;7290:18;;;7409:22;;;7236:4;;7265:2;7488:15;;;;7462:2;7447:18;;;7236:4;7534:169;7548:6;7545:1;7542:13;7534:169;;;7609:13;;7597:26;;7678:15;;;;7643:12;;;;7570:1;7563:9;7534:169;;;-1:-1:-1;7720:3:1;;7245:484;-1:-1:-1;;;;;;7245:484:1:o;8371:219::-;8520:2;8509:9;8502:21;8483:4;8540:44;8580:2;8569:9;8565:18;8557:6;8540:44;:::i;9011:414::-;9213:2;9195:21;;;9252:2;9232:18;;;9225:30;9291:34;9286:2;9271:18;;9264:62;-1:-1:-1;;;9357:2:1;9342:18;;9335:48;9415:3;9400:19;;9185:240::o;10564:407::-;10766:2;10748:21;;;10805:2;10785:18;;;10778:30;10844:34;10839:2;10824:18;;10817:62;-1:-1:-1;;;10910:2:1;10895:18;;10888:41;10961:3;10946:19;;10738:233::o;19843:399::-;20045:2;20027:21;;;20084:2;20064:18;;;20057:30;20123:34;20118:2;20103:18;;20096:62;-1:-1:-1;;;20189:2:1;20174:18;;20167:33;20232:3;20217:19;;20017:225::o;20649:413::-;20851:2;20833:21;;;20890:2;20870:18;;;20863:30;20929:34;20924:2;20909:18;;20902:62;-1:-1:-1;;;20995:2:1;20980:18;;20973:47;21052:3;21037:19;;20823:239::o;21425:355::-;21627:2;21609:21;;;21666:2;21646:18;;;21639:30;21705:33;21700:2;21685:18;;21678:61;21771:2;21756:18;;21599:181::o;22907:128::-;22947:3;22978:1;22974:6;22971:1;22968:13;22965:2;;;22984:18;;:::i;:::-;-1:-1:-1;23020:9:1;;22955:80::o;23040:120::-;23080:1;23106;23096:2;;23111:18;;:::i;:::-;-1:-1:-1;23145:9:1;;23086:74::o;23165:168::-;23205:7;23271:1;23267;23263:6;23259:14;23256:1;23253:21;23248:1;23241:9;23234:17;23230:45;23227:2;;;23278:18;;:::i;:::-;-1:-1:-1;23318:9:1;;23217:116::o;23338:125::-;23378:4;23406:1;23403;23400:8;23397:2;;;23411:18;;:::i;:::-;-1:-1:-1;23448:9:1;;23387:76::o;23468:258::-;23540:1;23550:113;23564:6;23561:1;23558:13;23550:113;;;23640:11;;;23634:18;23621:11;;;23614:39;23586:2;23579:10;23550:113;;;23681:6;23678:1;23675:13;23672:2;;;-1:-1:-1;;23716:1:1;23698:16;;23691:27;23521:205::o;23731:380::-;23810:1;23806:12;;;;23853;;;23874:2;;23928:4;23920:6;23916:17;23906:27;;23874:2;23981;23973:6;23970:14;23950:18;23947:38;23944:2;;;24027:10;24022:3;24018:20;24015:1;24008:31;24062:4;24059:1;24052:15;24090:4;24087:1;24080:15;23944:2;;23786:325;;;:::o;24116:135::-;24155:3;-1:-1:-1;;24176:17:1;;24173:2;;;24196:18;;:::i;:::-;-1:-1:-1;24243:1:1;24232:13;;24163:88::o;24256:112::-;24288:1;24314;24304:2;;24319:18;;:::i;:::-;-1:-1:-1;24353:9:1;;24294:74::o;24373:127::-;24434:10;24429:3;24425:20;24422:1;24415:31;24465:4;24462:1;24455:15;24489:4;24486:1;24479:15;24505:127;24566:10;24561:3;24557:20;24554:1;24547:31;24597:4;24594:1;24587:15;24621:4;24618:1;24611:15;24637:127;24698:10;24693:3;24689:20;24686:1;24679:31;24729:4;24726:1;24719:15;24753:4;24750:1;24743:15;24769:131;-1:-1:-1;;;;;;24843:32:1;;24833:43;;24823:2;;24890:1;24887;24880:12;24823:2;24813:87;:::o
Swarm Source
ipfs://00fae5c4ec3ed844abf393f0ab122e1234ab93e13f1c75c2aa9095c7b8dff923
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.