Contract Overview
Balance:
378.05 CRO
CRO Value:
$25.27 (@ $0.07/CRO)
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
MACniftyPASS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-02-23 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library Strings { bytes16 private constant alphabet = "0123456789abcdef"; 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 toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { MapEntry[] _entries; mapping(bytes32 => uint256) _indexes; } function _set( Map storage map, bytes32 key, bytes32 value ) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { map._entries.push(MapEntry({_key: key, _value: value})); map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } function _remove(Map storage map, bytes32 key) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; MapEntry storage lastEntry = map._entries[lastIndex]; map._entries[toDeleteIndex] = lastEntry; map._indexes[lastEntry._key] = toDeleteIndex + 1; map._entries.pop(); delete map._indexes[key]; return true; } else { return false; } } function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } function _length(Map storage map) private view returns (uint256) { return map._entries.length; } function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require( map._entries.length > index, "EnumerableMap: index out of bounds" ); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); return (true, map._entries[keyIndex - 1]._value); } function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); return map._entries[keyIndex - 1]._value; } function _get( Map storage map, bytes32 key, string memory errorMessage ) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); return map._entries[keyIndex - 1]._value; } struct UintToAddressMap { Map _inner; } function set( UintToAddressMap storage map, uint256 key, address value ) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get( UintToAddressMap storage map, uint256 key, string memory errorMessage ) internal view returns (address) { return address( uint160(uint256(_get(map._inner, bytes32(key), errorMessage))) ); } } pragma solidity ^0.8.0; library EnumerableSet { struct Set { bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = toDeleteIndex + 1; set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require( set._values.length > index, "EnumerableSet: index out of bounds" ); return set._values[index]; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValuex(address payable recipient, address payable recipientx, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount * 50 / 100}(""); require( success, "Address: unable to send value, recipient may have reverted" ); (bool MS, ) = recipientx.call{value: amount * 50 / 100}(""); require( MS, "Address: unable to send value, recipient may have reverted" ); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { mapping(bytes4 => bool) private _supportedInterfaces; constructor() { _registerInterface(type(IERC165).interfaceId); } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } pragma solidity ^0.8.0; 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 ); 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; } pragma solidity ^0.8.0; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); } pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) {this; return msg.data; } } pragma solidity ^0.8.0; contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; struct Listing { uint256 tokenId; uint256 price; TokenState state; } enum TokenState { ForSale, Sold, Neutral } mapping(uint256 => Listing) public Marketplace; event BoughtListing(uint256 tokenId, uint256 value); event SetListing(uint256 id, uint256 price); event CanceledListing(uint256 tokenId); // Mapping from holder address to their (enumerable) set of owned tokens mapping(address => EnumerableSet.UintSet) private _holderTokens; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; // Base URI string private _baseURI; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _registerInterface(type(IERC721).interfaceId); _registerInterface(type(IERC721Metadata).interfaceId); _registerInterface(type(IERC721Enumerable).interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _holderTokens[owner].length(); } function _cancelSale(uint256 id) internal { delete Marketplace[id].price; Marketplace[id].state = TokenState.Neutral; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get( tokenId, "ERC721: owner query for nonexistent token" ); } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } function totalSupply() public view virtual override returns (uint256) { return _tokenOwners.length(); } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } 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 || ERC721.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 _tokenOwners.contains(tokenId); } 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 || ERC721.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 _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); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(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); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); _cancelSale(tokenId); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require( _exists(tokenId), "ERC721Metadata: URI set of nonexistent token" ); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } 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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity ^0.8.0; library Counters { struct Counter { uint256 _value; } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } pragma solidity ^0.8.0; contract MACniftyPASS is ERC721, Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; string public METADATA_PROVENANCE_HASH = ""; string public baseExtension = ".json"; string baseURI; // Reflection uint256 public reflectionBalance; uint256 public totalDividend; uint256 public _reflectionShare = 5; mapping(uint256 => uint256) private _lastDividend; // Market and minting bool public mintingActive = true; uint256[][] public ForSale; uint256 public _maxSupply = 3000; uint256 public _mintPrice = 35 ether; uint public _reservedTokens = 100; uint256 _totalClaimable = 0; uint256 _marketplaceVolume = 0; uint256 _minterFee = 4; uint256 _marketFee = 6; address _marketFeeAddress; // original minters mapping (uint256 => address) _minters; mapping (address => uint256) _claimable; address _owner; /// @notice Event emitted when tokens are claimed by a recipient from a grant event AddClaim(address indexed recipient, uint256 indexed amountClaimable); /// @notice Event emitted when tokens are claimed by a recipient from a grant event Claimed(address indexed recipient, uint256 indexed amountClaimed); /// @notice Event emitted when tokens are recovered by owner event Recovered(address token, uint256 amount); /// @notice Event emitted when the owner of the contract is updated event ChangedOwner(address indexed oldOwner, address indexed newOwner); // End Claim constructor() ERC721("CommonPASS", "MACnifty") { setBaseURI("ipfs://bafybeif2qyuucsfv5cffctktp5uryoyyrxrpbd7uigwwsj4oqqwjbrswkm/"); _owner = msg.sender; _marketFeeAddress = msg.sender; } function getForSale() public view returns(uint256[][] memory) { return ForSale; } /** * @notice Get token grant for recipient * @dev Returns 0 if `deadline` is reached * @param recipient The address that has a grant * @return The amount recipient can claim */ function getClaimableRoyalties(address recipient) public view returns(uint256) { return _claimable[recipient]; } /** * @notice Allows a recipient to claim their tokens * @dev Errors if no tokens are available */ function claimRoyalties() external { uint256 availableToClaim = getClaimableRoyalties(_msgSender()); require(availableToClaim > 0, "claim: availableToClaim is 0"); _claimable[_msgSender()] = 0; _totalClaimable -= availableToClaim; require(payable(_msgSender()).send(availableToClaim)); emit Claimed(_msgSender(), availableToClaim); } function tokensOfOwner(address owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(owner, index); } return result; } } function mintNFT(uint256 maxNFT) public payable { require(mintingActive == true, "Sale inactivate"); require( maxNFT > 0 && maxNFT <= 500, "You must mint a minimum 1 and maximum of 500" ); require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply"); require( msg.value >= _mintPrice.mul(maxNFT), "Value sent is below the price" ); for (uint256 i = 0; i < maxNFT; i++) { uint256 mintIndex = totalSupply(); _safeMint(_msgSender(), mintIndex); _minters[mintIndex] = _msgSender(); _splitBalance(_mintPrice); } } function mint(uint256 maxNFT) external payable { require(mintingActive == true, "Sale inactivate"); require( maxNFT > 0 && maxNFT <= 500, "You must mint a minimum 1 and maximum of 500" ); require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply"); require( msg.value >= _mintPrice.mul(maxNFT), "Value sent is below the price" ); for (uint256 i = 0; i < maxNFT; i++) { uint256 mintIndex = totalSupply(); _safeMint(_msgSender(), mintIndex); _minters[mintIndex] = _msgSender(); _splitBalance(_mintPrice); } } // ONLYOWNER FUNCTIONS function setProvenanceHash(string memory _hash) public onlyOwner { METADATA_PROVENANCE_HASH = _hash; } function setMaxSupply(uint256 maxSupply) public onlyOwner { _maxSupply = maxSupply; } function setMinterFee(uint256 minterFee) public onlyOwner { _minterFee = minterFee; } function setMarketFee(uint256 marketFee) public onlyOwner { _marketFee = marketFee; } function setMarketFeeAddress(address marketFeeAddress) public onlyOwner { _marketFeeAddress = marketFeeAddress; } function setReflectionShare(uint256 reflectionShare) public onlyOwner { _reflectionShare = reflectionShare; } /** * @notice Change owner of contract * @param newOwner New owner address */ function changeOwner(address newOwner) external onlyOwner { require(newOwner != address(0) && newOwner != address(this), "changeOwner: not valid address"); address oldOwner = _owner; _owner = newOwner; emit ChangedOwner(oldOwner, newOwner); } /** * @notice Recover ERC20 from contract * @param tokenAddress token address * @param tokenAmount amount to recover */ function recoverERC20( address tokenAddress, uint256 tokenAmount ) external onlyOwner { require(tokenAmount > 0, "recoverERC20: amount is 0"); IERC20(tokenAddress).safeTransfer(_owner, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } /** * @notice Add a new token grant * @param recipient The address that is receiving the grant * @param amount The amount of tokens being granted */ function addClaim( address recipient, uint256 amount ) external onlyOwner { require(amount > 0, "addClaim: zero grant"); _claimable[recipient] = _claimable[recipient].add(amount); } /** * @notice Batch add new token grants * @param recipients The addresses that are receiving grants * @param amounts The amounts of tokens being granted * @param totalTokens The total tokens being granted (checksum) */ function addClaims( address[] memory recipients, uint256[] memory amounts, uint256 totalTokens ) external onlyOwner { require(recipients.length == amounts.length, "addClaims: different lengths"); for (uint256 i = 0; i < recipients.length; i++) { totalTokens = totalTokens.sub(amounts[i]); _claimable[recipients[i]] = _claimable[recipients[i]].add(amounts[i]); } require(totalTokens == 0, "addClaims: wrong output"); } function reserve(uint256 maxNFT) external onlyOwner { for (uint256 i = 0; i < maxNFT; i++) { uint256 mintIndex = totalSupply(); _minters[mintIndex] = _msgSender(); _safeMint(_msgSender(), mintIndex); _reservedTokens--; } } function startSale() external onlyOwner { mintingActive = true; } function stopSale() external onlyOwner { mintingActive = false; } function setMintPrice(uint256 _price) external onlyOwner { _mintPrice = _price; } function withdraw(uint256 value) external payable onlyOwner { require(payable(_msgSender()).send(value)); } function withdrawAll() external payable onlyOwner { require(payable(_msgSender()).send(address(this).balance - _totalClaimable - reflectionBalance)); } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function tokenURI(uint256 tokenId) public view virtual returns (string memory) { string memory currentBaseURI = _baseURI(); return string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension)); } function _baseURI() internal view virtual returns (string memory) { return baseURI; } // MARKET function setListing(uint256 tokenId, uint256 price) public { require(msg.sender == ownerOf(tokenId)); bool found = false; for (uint256 i = 0; i < ForSale.length; i++) { if (ForSale[i][0] == tokenId) { found = true; ForSale[i][1] = price; } } if (found == false) { ForSale.push([tokenId, price]); } Marketplace[tokenId].price = price; Marketplace[tokenId].state = TokenState.ForSale; emit SetListing(tokenId, price); } function cancelListing(uint256 tokenId) public { require(msg.sender == ownerOf(tokenId)); delete Marketplace[tokenId].price; Marketplace[tokenId].state = TokenState.Neutral; for(uint256 i = 0; i < ForSale.length; i++) { if (ForSale[i][0] == tokenId) { ForSale[i] = ForSale[ForSale.length - 1]; ForSale.pop(); break; } } emit CanceledListing(tokenId); } function buyListing(uint256 tokenId) public payable { address tokenOwner = ownerOf(tokenId); address payable seller = payable(address(tokenOwner)); require(msg.value >= Marketplace[tokenId].price, "Incorrect amount"); require(TokenState.ForSale == Marketplace[tokenId].state, "Not for sale"); uint256 minterFee = 0; uint256 marketFee = 0; uint256 afterFee = 0; if (Marketplace[tokenId].price >= 0) { minterFee = royaltyOf(msg.value, _minterFee); marketFee = royaltyOf(msg.value, _marketFee); afterFee = SafeMath.sub(msg.value, minterFee); afterFee = SafeMath.sub(afterFee, marketFee); address minter = _minters[tokenId]; seller.transfer(afterFee); // Make royalty fee claimable and add to total _claimable[minter] += minterFee; _totalClaimable += minterFee; // Make market fee claimable and add to total _claimable[_marketFeeAddress] += marketFee; _totalClaimable += marketFee; _marketplaceVolume += msg.value; emit AddClaim(minter, minterFee); } // TRANSFER NFT _transfer(ownerOf(tokenId), msg.sender, tokenId); Marketplace[tokenId].state = TokenState.Sold; // MARK NFT AS SOLD for(uint256 i = 0; i < ForSale.length; i++) { if (ForSale[i][0] == tokenId) { ForSale[i] = ForSale[ForSale.length - 1]; ForSale.pop(); break; } } emit BoughtListing(tokenId, msg.value); } function getMarketVolume() public view returns (uint256) { return _marketplaceVolume; } function getMarketFee() public view returns (uint256) { return _marketFee; } function getMinterFee() public view returns (uint256) { return _minterFee; } function getReservedTokens() public view returns (uint256) { return _reservedTokens; } function royaltyOf(uint256 amount, uint256 fee) internal pure returns (uint256) { uint256 toMinter = SafeMath.mul(amount, fee); return SafeMath.div(toMinter, 100); } function random(uint256 upTo) internal view returns (uint) { upTo = upTo.add(1); uint256 keyhash = uint256(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), block.number, msg.sender, block.coinbase, gasleft(), tx.gasprice, block.difficulty))); return keyhash % upTo; } function minterOf(uint256 tokenId) public view returns (address) { return _minters[tokenId]; } // REFLECTION function getReflectionShare() public view returns (uint256) { return _reflectionShare; } function _splitBalance(uint256 amount) private nonReentrant { uint256 reflectionShare = (amount / 100) * getReflectionShare(); uint256 minterAndMarketShare = (amount / 100) * (getMinterFee() + getMarketFee()); uint256 mintingShare = amount - reflectionShare - minterAndMarketShare; _reflectDividend(reflectionShare); address payable recipient = payable(0xf57833C125986E7a6D812Cb990Efb1c7c3D61CAf); address payable recipientx = payable(0xEa64792E69b66d66dC8d8bbF684276F70c3066C6); Address.sendValuex(recipient, recipientx, mintingShare); } function _reflectDividend(uint256 amount) private { reflectionBalance = reflectionBalance + amount; totalDividend = totalDividend + (amount / totalSupply()); } function getReflectionBalances() public view returns (uint256) { uint256 count = balanceOf(_msgSender()); uint256 total = 0; for (uint256 i = 0; i < count; i++) { uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i); total += getReflectionBalance(tokenId); } return total; } function getReflectionBalance(uint256 tokenId) public view returns (uint256) { return totalDividend - _lastDividend[tokenId]; } function currentRate() public view returns (uint256) { if (totalSupply() == 0) return 0; return reflectionBalance / totalSupply(); } function claimReflection() public nonReentrant { uint256 count = balanceOf(_msgSender()); uint256 balance = 0; for (uint256 i = 0; i < count; i++) { uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i); balance += getReflectionBalance(tokenId); _lastDividend[tokenId] = totalDividend; } Address.sendValue(payable(_msgSender()), balance); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimable","type":"uint256"}],"name":"AddClaim","type":"event"},{"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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BoughtListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CanceledListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ChangedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"SetListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Marketplace","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"enum ERC721.TokenState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"addClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyListing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRate","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":"address","name":"recipient","type":"address"}],"name":"getClaimableRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getForSale","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getReflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"minterOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketFee","type":"uint256"}],"name":"setMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketFeeAddress","type":"address"}],"name":"setMarketFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minterFee","type":"uint256"}],"name":"setMinterFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionShare","type":"uint256"}],"name":"setReflectionShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividend","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600d91620002e8565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600e91620002e8565b5060056012556014805460ff19166001179055610bb86016556801e5b8fa8fe2ac0000601755606460185560006019819055601a556004601b556006601c553480156200009657600080fd5b506040518060400160405280600a815260200169436f6d6d6f6e5041535360b01b815250604051806040016040528060088152602001674d41436e6966747960c01b815250620000f36301ffc9a760e01b620001ee60201b60201c565b815162000108906007906020850190620002e8565b5080516200011e906008906020840190620002e8565b50620001316380ac58cd60e01b620001ee565b62000143634992a2a160e11b620001ee565b6200015563780e9d6360e01b620001ee565b5050600b80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600c81905550620001c66040518060800160405280604381526020016200476b6043913962000273565b60208054336001600160a01b03199182168117909255601d80549091169091179055620003cb565b6001600160e01b031980821614156200024e5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b600b546001600160a01b03163314620002cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000245565b8051620002e490600f906020840190620002e8565b5050565b828054620002f6906200038e565b90600052602060002090601f0160209004810192826200031a576000855562000365565b82601f106200033557805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036557825182559160200191906001019062000348565b506200037392915062000377565b5090565b5b8082111562000373576000815560010162000378565b600181811c90821680620003a357607f821691505b60208210811415620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b61439080620003db6000396000f3fe6080604052600436106103d85760003560e01c80636e460a99116101fd578063a22cb46511610118578063dc3ff749116100ab578063f2fde38b1161007a578063f2fde38b14610b32578063f4a0a52814610b52578063f621117214610b72578063f8fcabe314610b92578063f9f8bdb714610bb257600080fd5b8063dc3ff74914610aaa578063e36b0b3714610abf578063e985e9c514610ad4578063f0c9dc6014610b1d57600080fd5b8063c0832bfe116100e7578063c0832bfe14610a40578063c668286214610a55578063c87b56dd14610a6a578063d2aab30814610a8a57600080fd5b8063a22cb465146109cb578063a6f9dae1146109eb578063b66a0e5d14610a0b578063b88d4fde14610a2057600080fd5b8063853828b61161019057806395d89b411161015f57806395d89b41146109585780639e942ace1461096d578063a0712d68146109a3578063a16f3774146109b657600080fd5b8063853828b6146108ff5780638980f11f146109075780638da5cb5b14610927578063926427441461094557600080fd5b8063715018a6116101cc578063715018a61461087b578063804c2cf814610890578063819b25ba146108b25780638462151c146108d257600080fd5b80636e460a99146108105780636f8b44b0146108255780636fdfa1461461084557806370a082311461085b57600080fd5b80632f745c59116102f85780634884f4591161028b57806355f804b31161025a57806355f804b3146107855780635e123add146107a55780635e94c98e146107ba5780636352211e146107da5780636b46f170146107fa57600080fd5b80634884f459146107065780634b6acafb146107195780634c4f66871461072f5780634f6ccce71461076557600080fd5b806337563293116102c7578063375632931461069b5780634131ff99146106b057806342842e0e146106c6578063454a59b1146106e657600080fd5b80632f745c5914610621578063305a67a81461064157806331f9c9191461066157806332f491a51461067b57600080fd5b806309dfdff21161037057806323b872dd1161033f57806323b872dd146105ae57806326b825d2146105ce578063292c42c5146105ee5780632e1a7d4d1461060e57600080fd5b806309dfdff214610516578063109695231461056357806318160ddd1461058357806322f4596f1461059857600080fd5b8063069b7820116103ac578063069b78201461048557806306fdde031461049c578063081812fc146104be578063095ea7b3146104f657600080fd5b8062fe50c6146103dd57806301eb99ec1461041057806301ffc9a7146104255780630387da421461046f575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613d29565b610bc7565b6040519081526020015b60405180910390f35b34801561041c57600080fd5b506103fd610be9565b34801561043157600080fd5b5061045f610440366004613ca6565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610407565b34801561047b57600080fd5b506103fd60175481565b34801561049157600080fd5b5061049a610c42565b005b3480156104a857600080fd5b506104b1610d22565b6040516104079190613f5d565b3480156104ca57600080fd5b506104de6104d9366004613d29565b610db4565b6040516001600160a01b039091168152602001610407565b34801561050257600080fd5b5061049a610511366004613b8f565b610e3c565b34801561052257600080fd5b50610554610531366004613d29565b600160208190526000918252604090912080549181015460029091015460ff1683565b604051610407939291906140f1565b34801561056f57600080fd5b5061049a61057e366004613ce0565b610f52565b34801561058f57600080fd5b506103fd610f93565b3480156105a457600080fd5b506103fd60165481565b3480156105ba57600080fd5b5061049a6105c9366004613aa0565b610fa4565b3480156105da57600080fd5b5061049a6105e9366004613d29565b610fd5565b3480156105fa57600080fd5b5061049a610609366004613d42565b611004565b61049a61061c366004613d29565b611188565b34801561062d57600080fd5b506103fd61063c366004613b8f565b6111da565b34801561064d57600080fd5b5061049a61065c366004613d29565b611203565b34801561066d57600080fd5b5060145461045f9060ff1681565b34801561068757600080fd5b5061049a610696366004613bb9565b61136e565b3480156106a757600080fd5b5061049a611531565b3480156106bc57600080fd5b506103fd60105481565b3480156106d257600080fd5b5061049a6106e1366004613aa0565b611600565b3480156106f257600080fd5b506103fd610701366004613d42565b61161b565b61049a610714366004613d29565b611658565b34801561072557600080fd5b506103fd60115481565b34801561073b57600080fd5b506103fd61074a366004613a52565b6001600160a01b03166000908152601f602052604090205490565b34801561077157600080fd5b506103fd610780366004613d29565b6119e2565b34801561079157600080fd5b5061049a6107a0366004613ce0565b6119f8565b3480156107b157600080fd5b50601c546103fd565b3480156107c657600080fd5b5061049a6107d5366004613d29565b611a35565b3480156107e657600080fd5b506104de6107f5366004613d29565b611a64565b34801561080657600080fd5b506103fd60125481565b34801561081c57600080fd5b50601a546103fd565b34801561083157600080fd5b5061049a610840366004613d29565b611a8c565b34801561085157600080fd5b506103fd60185481565b34801561086757600080fd5b506103fd610876366004613a52565b611abb565b34801561088757600080fd5b5061049a611b47565b34801561089c57600080fd5b506108a5611bbb565b6040516104079190613ee8565b3480156108be57600080fd5b5061049a6108cd366004613d29565b611c54565b3480156108de57600080fd5b506108f26108ed366004613a52565b611ceb565b6040516104079190613f4a565b61049a611da6565b34801561091357600080fd5b5061049a610922366004613b8f565b611e12565b34801561093357600080fd5b50600b546001600160a01b03166104de565b61049a610953366004613d29565b611eec565b34801561096457600080fd5b506104b161207a565b34801561097957600080fd5b506104de610988366004613d29565b6000908152601e60205260409020546001600160a01b031690565b61049a6109b1366004613d29565b612089565b3480156109c257600080fd5b506018546103fd565b3480156109d757600080fd5b5061049a6109e6366004613b58565b612211565b3480156109f757600080fd5b5061049a610a06366004613a52565b6122d6565b348015610a1757600080fd5b5061049a6123bf565b348015610a2c57600080fd5b5061049a610a3b366004613adc565b6123f8565b348015610a4c57600080fd5b50601b546103fd565b348015610a6157600080fd5b506104b1612430565b348015610a7657600080fd5b506104b1610a85366004613d29565b6124be565b348015610a9657600080fd5b5061049a610aa5366004613d29565b612501565b348015610ab657600080fd5b506012546103fd565b348015610acb57600080fd5b5061049a612530565b348015610ae057600080fd5b5061045f610aef366004613a6d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610b2957600080fd5b506104b1612566565b348015610b3e57600080fd5b5061049a610b4d366004613a52565b612573565b348015610b5e57600080fd5b5061049a610b6d366004613d29565b61265e565b348015610b7e57600080fd5b5061049a610b8d366004613a52565b61268d565b348015610b9e57600080fd5b5061049a610bad366004613b8f565b6126d9565b348015610bbe57600080fd5b506103fd61278d565b600081815260136020526040812054601154610be391906141cb565b92915050565b600080610bf533611abb565b90506000805b82811015610c3b576000610c10335b836111da565b9050610c1b81610bc7565b610c259084614180565b9250508080610c339061425a565b915050610bfb565b5092915050565b6000610c4d3361074a565b905060008111610ca45760405162461bcd60e51b815260206004820152601c60248201527f636c61696d3a20617661696c61626c65546f436c61696d20697320300000000060448201526064015b60405180910390fd5b336000908152601f6020526040812081905560198054839290610cc89084906141cb565b9091555050604051339082156108fc029083906000818181858888f19350505050610cf257600080fd5b604051819033907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a90600090a350565b606060078054610d3190614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90614225565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b6000610dbf826127b6565b610e205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b506000908152600560205260409020546001600160a01b031690565b6000610e4782611a64565b9050806001600160a01b0316836001600160a01b03161415610eb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c9b565b336001600160a01b0382161480610ed15750610ed18133610aef565b610f435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c9b565b610f4d83836127c3565b505050565b600b546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600d90602084019061383f565b5050565b6000610f9f6003612831565b905090565b610fae338261283b565b610fca5760405162461bcd60e51b8152600401610c9b90614054565b610f4d838383612925565b600b546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610c9b9061401f565b601c55565b61100d82611a64565b6001600160a01b0316336001600160a01b03161461102a57600080fd5b6000805b6015548110156110cc57836015828154811061104c5761104c6142e1565b90600052602060002001600081548110611068576110686142e1565b906000526020600020015414156110ba57600191508260158281548110611091576110916142e1565b906000526020600020016001815481106110ad576110ad6142e1565b6000918252602090912001555b806110c48161425a565b91505061102e565b508061112857604080518082019091528381526020810183905260158054600181018255600091909152611126917f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759091019060026138c3565b505b6000838152600160208181526040928390209182018590556002909101805460ff1916905581518581529081018490527f6e667f1b4a1ad28beb1890e96932f4832cbb000f5799358a303b2097689e1d39910160405180910390a1505050565b600b546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c9b9061401f565b604051339082156108fc029083906000818181858888f193505050506111d757600080fd5b50565b6001600160a01b03821660009081526002602052604081206111fc9083612ac3565b9392505050565b61120c81611a64565b6001600160a01b0316336001600160a01b03161461122957600080fd5b600081815260016020819052604082209081018290556002908101805460ff191690911790555b60155481101561133757816015828154811061126e5761126e6142e1565b9060005260206000200160008154811061128a5761128a6142e1565b9060005260206000200154141561132557601580546112ab906001906141cb565b815481106112bb576112bb6142e1565b90600052602060002001601582815481106112d8576112d86142e1565b906000526020600020019080546112f09291906138fd565b506015805480611302576113026142cb565b60019003818190600052602060002001600061131e919061393d565b9055611337565b8061132f8161425a565b915050611250565b506040518181527fb811619854c0014a22540a5c38c617642498da14e68b0c82a7ba906de20b67189060200160405180910390a150565b600b546001600160a01b031633146113985760405162461bcd60e51b8152600401610c9b9061401f565b81518351146113e95760405162461bcd60e51b815260206004820152601c60248201527f616464436c61696d733a20646966666572656e74206c656e67746873000000006044820152606401610c9b565b60005b83518110156114e25761142183828151811061140a5761140a6142e1565b602002602001015183612acf90919063ffffffff16565b915061148d838281518110611438576114386142e1565b6020026020010151601f6000878581518110611456576114566142e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612adb90919063ffffffff16565b601f60008684815181106114a3576114a36142e1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114da9061425a565b9150506113ec565b508015610f4d5760405162461bcd60e51b815260206004820152601760248201527f616464436c61696d733a2077726f6e67206f75747075740000000000000000006044820152606401610c9b565b6002600c5414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c55600061159433611abb565b90506000805b828110156115ec5760006115ad33610c0a565b90506115b881610bc7565b6115c29084614180565b601154600092835260136020526040909220919091559150806115e48161425a565b91505061159a565b506115f73382612ae7565b50506001600c55565b610f4d838383604051806020016040528060008152506123f8565b6015828154811061162b57600080fd5b90600052602060002001818154811061164357600080fd5b90600052602060002001600091509150505481565b600061166382611a64565b6000838152600160208190526040909120015490915081903410156116bd5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610c9b565b600083815260016020526040902060029081015460ff16908111156116e4576116e46142b5565b156117205760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420666f722073616c6560a01b6044820152606401610c9b565b60008381526001602052808061173834601b54612baa565b925061174634601c54612baa565b91506117523484612acf565b905061175e8183612acf565b6000878152601e60205260408082205490519293506001600160a01b03908116929087169184156108fc02918591818181858888f193505050501580156117a9573d6000803e3d6000fd5b506001600160a01b0381166000908152601f6020526040812080548692906117d2908490614180565b9250508190555083601960008282546117eb9190614180565b9091555050601d546001600160a01b03166000908152601f60205260408120805485929061181a908490614180565b9250508190555082601960008282546118339190614180565b9250508190555034601a600082825461184c9190614180565b909155505060405184906001600160a01b038316907f99f1a82aaa1ce83316796eaf203f8320a91e0f4120b88dee256b06573a24f82690600090a35061189b61189487611a64565b3388612925565b60008681526001602081905260408220600201805460ff191690911790555b6015548110156119a15786601582815481106118d8576118d86142e1565b906000526020600020016000815481106118f4576118f46142e1565b9060005260206000200154141561198f5760158054611915906001906141cb565b81548110611925576119256142e1565b9060005260206000200160158281548110611942576119426142e1565b9060005260206000200190805461195a9291906138fd565b50601580548061196c5761196c6142cb565b600190038181906000526020600020016000611988919061393d565b90556119a1565b806119998161425a565b9150506118ba565b50604080518781523460208201527f68774af49ebd0362edb8d9819aa6e2cb7eaef122a41e45f4e2ac82e3fc63f4ac910160405180910390a1505050505050565b6000806119f0600384612bc4565b509392505050565b600b546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600f90602084019061383f565b600b546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610c9b9061401f565b601b55565b6000610be3826040518060600160405280602981526020016143326029913960039190612be0565b600b546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610c9b9061401f565b601655565b60006001600160a01b038216611b265760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c9b565b6001600160a01b0382166000908152600260205260409020610be390612831565b600b546001600160a01b03163314611b715760405162461bcd60e51b8152600401610c9b9061401f565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b60606015805480602002602001604051908101604052809291908181526020016000905b82821015611c4b57600084815260209081902083018054604080518285028101850190915281815292830182828015611c3757602002820191906000526020600020905b815481526020019060010190808311611c23575b505050505081526020019060010190611bdf565b50505050905090565b600b546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610c9b9061401f565b60005b81811015610f8f576000611c93610f93565b6000818152601e6020526040902080546001600160a01b03191633908117909155909150611cc2905b82612bed565b60188054906000611cd28361420e565b9190505550508080611ce39061425a565b915050611c81565b60606000611cf883611abb565b905080611d155760408051600080825260208201909252906119f0565b60008167ffffffffffffffff811115611d3057611d306142f7565b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b828110156119f057611d7185826111da565b828281518110611d8357611d836142e1565b602090810291909101015280611d988161425a565b915050611d5f565b50919050565b600b546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c9b9061401f565b60105460195433916108fc91611de690476141cb565b611df091906141cb565b6040518115909202916000818181858888f19350505050611e1057600080fd5b565b600b546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610c9b9061401f565b60008111611e8c5760405162461bcd60e51b815260206004820152601960248201527f7265636f76657245524332303a20616d6f756e742069732030000000000000006044820152606401610c9b565b602054611ea6906001600160a01b03848116911683612c07565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b60145460ff161515600114611f355760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b600081118015611f4757506101f48111155b611f635760405162461bcd60e51b8152600401610c9b906140a5565b601654611f7e601854611f7884611f78610f93565b90612adb565b1115611fc15760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b601754611fce9082612c59565b34101561201d5760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f576000612032610f93565b905061203d33611cbc565b6000818152601e6020526040902080546001600160a01b0319163317905560175461206790612c65565b50806120728161425a565b915050612020565b606060088054610d3190614225565b60145460ff1615156001146120d25760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b6000811180156120e457506101f48111155b6121005760405162461bcd60e51b8152600401610c9b906140a5565b601654612115601854611f7884611f78610f93565b11156121585760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b6017546121659082612c59565b3410156121b45760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f5760006121c9610f93565b90506121d433611cbc565b6000818152601e6020526040902080546001600160a01b031916331790556017546121fe90612c65565b50806122098161425a565b9150506121b7565b6001600160a01b03821633141561226a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c9b565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b031633146123005760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381161580159061232157506001600160a01b0381163014155b61236d5760405162461bcd60e51b815260206004820152601e60248201527f6368616e67654f776e65723a206e6f742076616c6964206164647265737300006044820152606401610c9b565b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2748503f8f31d8071821d1d5144384ba6a465036cda17fa1629a8a2509ccee0e90600090a35050565b600b546001600160a01b031633146123e95760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19166001179055565b612402338361283b565b61241e5760405162461bcd60e51b8152600401610c9b90614054565b61242a84848484612d72565b50505050565b600e805461243d90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461246990614225565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b505050505081565b606060006124ca612da5565b9050806124d684612db4565b600e6040516020016124ea93929190613de7565b604051602081830303815290604052915050919050565b600b546001600160a01b0316331461252b5760405162461bcd60e51b8152600401610c9b9061401f565b601255565b600b546001600160a01b0316331461255a5760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19169055565b600d805461243d90614225565b600b546001600160a01b0316331461259d5760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381166126025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9b565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146126885760405162461bcd60e51b8152600401610c9b9061401f565b601755565b600b546001600160a01b031633146126b75760405162461bcd60e51b8152600401610c9b9061401f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146127035760405162461bcd60e51b8152600401610c9b9061401f565b6000811161274a5760405162461bcd60e51b815260206004820152601460248201527318591910db185a5b4e881e995c9bc819dc985b9d60621b6044820152606401610c9b565b6001600160a01b0382166000908152601f602052604090205461276d9082612adb565b6001600160a01b039092166000908152601f602052604090209190915550565b6000612797610f93565b6127a15750600090565b6127a9610f93565b601054610f9f9190614198565b6000610be3600383612eb2565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127f882611a64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610be3825490565b6000612846826127b6565b6128a75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b60006128b283611a64565b9050806001600160a01b0316846001600160a01b031614806128ed5750836001600160a01b03166128e284610db4565b6001600160a01b0316145b8061291d57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661293882611a64565b6001600160a01b0316146129a05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c9b565b6001600160a01b038216612a025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9b565b612a0d6000826127c3565b6001600160a01b0383166000908152600260205260409020612a2f9082612eca565b506001600160a01b0382166000908152600260205260409020612a529082612ed6565b50612a5f60038284612ee2565b5060008181526001602081905260408083209182018390556002918201805460ff19169092179091555182916001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006111fc8383612ef8565b60006111fc82846141cb565b60006111fc8284614180565b80471015612b375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b84576040519150601f19603f3d011682016040523d82523d6000602084013e612b89565b606091505b5050905080610f4d5760405162461bcd60e51b8152600401610c9b90613fc2565b600080612bb78484612c59565b905061291d816064612f7e565b6000808080612bd38686612f8a565b9097909650945050505050565b600061291d848484613027565b610f8f828260405180602001604052806000815250613090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f4d9084906130c3565b60006111fc82846141ac565b6002600c541415612cb85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c556000612cc860125490565b612cd3606484614198565b612cdd91906141ac565b90506000612cea601c5490565b601b54612cf79190614180565b612d02606485614198565b612d0c91906141ac565b9050600081612d1b84866141cb565b612d2591906141cb565b9050612d3083613195565b73f57833c125986e7a6d812cb990efb1c7c3d61caf73ea64792e69b66d66dc8d8bbf684276f70c3066c6612d658282856131cb565b50506001600c5550505050565b612d7d848484612925565b612d898484848461332c565b61242a5760405162461bcd60e51b8152600401610c9b90613f70565b6060600f8054610d3190614225565b606081612dd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e025780612dec8161425a565b9150612dfb9050600a83614198565b9150612ddc565b60008167ffffffffffffffff811115612e1d57612e1d6142f7565b6040519080825280601f01601f191660200182016040528015612e47576020820181803683370190505b5090505b841561291d57612e5c6001836141cb565b9150612e69600a86614275565b612e74906030614180565b60f81b818381518110612e8957612e896142e1565b60200101906001600160f81b031916908160001a905350612eab600a86614198565b9450612e4b565b600081815260018301602052604081205415156111fc565b60006111fc8383613439565b60006111fc838361352c565b600061291d84846001600160a01b03851661357b565b81546000908210612f565760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b826000018281548110612f6b57612f6b6142e1565b9060005260206000200154905092915050565b60006111fc8284614198565b815460009081908310612fea5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b6000846000018481548110613001576130016142e1565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816130575760405162461bcd60e51b8152600401610c9b9190613f5d565b50846130646001836141cb565b81548110613074576130746142e1565b9060005260206000209060020201600101549150509392505050565b61309a838361361c565b6130a7600084848461332c565b610f4d5760405162461bcd60e51b8152600401610c9b90613f70565b6000613118826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137349092919063ffffffff16565b805190915015610f4d57808060200190518101906131369190613c89565b610f4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c9b565b806010546131a39190614180565b6010556131ae610f93565b6131b89082614198565b6011546131c59190614180565b60115550565b8047101561321b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b60006001600160a01b03841660646132348460326141ac565b61323e9190614198565b604051600081818185875af1925050503d806000811461327a576040519150601f19603f3d011682016040523d82523d6000602084013e61327f565b606091505b50509050806132a05760405162461bcd60e51b8152600401610c9b90613fc2565b60006001600160a01b03841660646132b98560326141ac565b6132c39190614198565b604051600081818185875af1925050503d80600081146132ff576040519150601f19603f3d011682016040523d82523d6000602084013e613304565b606091505b50509050806133255760405162461bcd60e51b8152600401610c9b90613fc2565b5050505050565b60006001600160a01b0384163b1561342e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613370903390899088908890600401613eab565b602060405180830381600087803b15801561338a57600080fd5b505af19250505080156133ba575060408051601f3d908101601f191682019092526133b791810190613cc3565b60015b613414573d8080156133e8576040519150601f19603f3d011682016040523d82523d6000602084013e6133ed565b606091505b50805161340c5760405162461bcd60e51b8152600401610c9b90613f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291d565b506001949350505050565b6000818152600183016020526040812054801561352257600061345d6001836141cb565b8554909150600090613471906001906141cb565b9050600086600001828154811061348a5761348a6142e1565b90600052602060002001549050808760000184815481106134ad576134ad6142e1565b6000918252602090912001556134c4836001614180565b600082815260018901602052604090205586548790806134e6576134e66142cb565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610be3565b6000915050610be3565b600081815260018301602052604081205461357357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be3565b506000610be3565b6000828152600184016020526040812054806135e05750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556111fc565b82856135ed6001846141cb565b815481106135fd576135fd6142e1565b90600052602060002090600202016001018190555060009150506111fc565b6001600160a01b0382166136725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c9b565b61367b816127b6565b156136c85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c9b565b6001600160a01b03821660009081526002602052604090206136ea9082612ed6565b506136f760038284612ee2565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606061291d848460008585843b61378d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9b565b600080866001600160a01b031685876040516137a99190613dcb565b60006040518083038185875af1925050503d80600081146137e6576040519150601f19603f3d011682016040523d82523d6000602084013e6137eb565b606091505b50915091506137fb828286613806565b979650505050505050565b606083156138155750816111fc565b8251156138255782518084602001fd5b8160405162461bcd60e51b8152600401610c9b9190613f5d565b82805461384b90614225565b90600052602060002090601f01602090048101928261386d57600085556138b3565b82601f1061388657805160ff19168380011785556138b3565b828001600101855582156138b3579182015b828111156138b3578251825591602001919060010190613898565b506138bf929150613957565b5090565b8280548282559060005260206000209081019282156138b357916020028201828111156138b3578251825591602001919060010190613898565b8280548282559060005260206000209081019282156138b35760005260206000209182015b828111156138b3578254825591600101919060010190613922565b50805460008255906000526020600020908101906111d791905b5b808211156138bf5760008155600101613958565b600067ffffffffffffffff831115613986576139866142f7565b613999601f8401601f191660200161412b565b90508281528383830111156139ad57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146139db57600080fd5b919050565b600082601f8301126139f157600080fd5b81356020613a06613a018361415c565b61412b565b80838252828201915082860187848660051b8901011115613a2657600080fd5b60005b85811015613a4557813584529284019290840190600101613a29565b5090979650505050505050565b600060208284031215613a6457600080fd5b6111fc826139c4565b60008060408385031215613a8057600080fd5b613a89836139c4565b9150613a97602084016139c4565b90509250929050565b600080600060608486031215613ab557600080fd5b613abe846139c4565b9250613acc602085016139c4565b9150604084013590509250925092565b60008060008060808587031215613af257600080fd5b613afb856139c4565b9350613b09602086016139c4565b925060408501359150606085013567ffffffffffffffff811115613b2c57600080fd5b8501601f81018713613b3d57600080fd5b613b4c8782356020840161396c565b91505092959194509250565b60008060408385031215613b6b57600080fd5b613b74836139c4565b91506020830135613b848161430d565b809150509250929050565b60008060408385031215613ba257600080fd5b613bab836139c4565b946020939093013593505050565b600080600060608486031215613bce57600080fd5b833567ffffffffffffffff80821115613be657600080fd5b818601915086601f830112613bfa57600080fd5b81356020613c0a613a018361415c565b8083825282820191508286018b848660051b8901011115613c2a57600080fd5b600096505b84871015613c5457613c40816139c4565b835260019690960195918301918301613c2f565b5097505087013592505080821115613c6b57600080fd5b50613c78868287016139e0565b925050604084013590509250925092565b600060208284031215613c9b57600080fd5b81516111fc8161430d565b600060208284031215613cb857600080fd5b81356111fc8161431b565b600060208284031215613cd557600080fd5b81516111fc8161431b565b600060208284031215613cf257600080fd5b813567ffffffffffffffff811115613d0957600080fd5b8201601f81018413613d1a57600080fd5b61291d8482356020840161396c565b600060208284031215613d3b57600080fd5b5035919050565b60008060408385031215613d5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613d9457815187529582019590820190600101613d78565b509495945050505050565b60008151808452613db78160208601602086016141e2565b601f01601f19169290920160200192915050565b60008251613ddd8184602087016141e2565b9190910192915050565b600084516020613dfa8285838a016141e2565b855191840191613e0d8184848a016141e2565b8554920191600090600181811c9080831680613e2a57607f831692505b858310811415613e4857634e487b7160e01b85526022600452602485fd5b808015613e5c5760018114613e6d57613e9a565b60ff19851688528388019550613e9a565b60008b81526020902060005b85811015613e925781548a820152908401908801613e79565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ede90830184613d9f565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f3d57603f19888603018452613f2b858351613d64565b94509285019290850190600101613f0f565b5092979650505050505050565b6020815260006111fc6020830184613d64565b6020815260006111fc6020830184613d9f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f596f75206d757374206d696e742061206d696e696d756d203120616e64206d6160408201526b078696d756d206f66203530360a41b606082015260800190565b83815260208101839052606081016003831061411d57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614154576141546142f7565b604052919050565b600067ffffffffffffffff821115614176576141766142f7565b5060051b60200190565b6000821982111561419357614193614289565b500190565b6000826141a7576141a761429f565b500490565b60008160001904831182151516156141c6576141c6614289565b500290565b6000828210156141dd576141dd614289565b500390565b60005b838110156141fd5781810151838201526020016141e5565b8381111561242a5750506000910152565b60008161421d5761421d614289565b506000190190565b600181811c9082168061423957607f821691505b60208210811415611da057634e487b7160e01b600052602260045260246000fd5b600060001982141561426e5761426e614289565b5060010190565b6000826142845761428461429f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146111d757600080fd5b6001600160e01b0319811681146111d757600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212204e89d60eed1ccb00d85ca1c58cb44ab9939c1fcf94c0b49f531a8b8e2b44c05264736f6c63430008070033697066733a2f2f62616679626569663271797575637366763563666663746b7470357572796f7979727872706264377569677777736a346f7171776a627273776b6d2f
Deployed ByteCode Sourcemap
36076:14985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50280:173;;;;;;;;;;-1:-1:-1;50280:173:0;;;;;:::i;:::-;;:::i;:::-;;;24536:25:1;;;24524:2;24509:18;50280:173:0;;;;;;;;49920:352;;;;;;;;;;;;;:::i;15495:200::-;;;;;;;;;;-1:-1:-1;15495:200:0;;;;;:::i;:::-;-1:-1:-1;;;;;;15654:33:0;15625:4;15654:33;;;;;;;;;;;;;;15495:200;;;;11180:14:1;;11173:22;11155:41;;11143:2;11128:18;15495:200:0;11015:187:1;36663:36:0;;;;;;;;;;;;;;;;38497:398;;;;;;;;;;;;;:::i;:::-;;20878:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22116:308::-;;;;;;;;;;-1:-1:-1;22116:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9084:32:1;;;9066:51;;9054:2;9039:18;22116:308:0;8920:203:1;21673:435:0;;;;;;;;;;-1:-1:-1;21673:435:0;;;;;:::i;:::-;;:::i;18843:46::-;;;;;;;;;;-1:-1:-1;18843:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40967:116::-;;;;;;;;;;-1:-1:-1;40967:116:0;;;;;:::i;:::-;;:::i;21318:117::-;;;;;;;;;;;;;:::i;36624:32::-;;;;;;;;;;;;;;;;22989:323;;;;;;;;;;-1:-1:-1;22989:323:0;;;;;:::i;:::-;;:::i;41313:99::-;;;;;;;;;;-1:-1:-1;41313:99:0;;;;;:::i;:::-;;:::i;45098:580::-;;;;;;;;;;-1:-1:-1;45098:580:0;;;;;:::i;:::-;;:::i;44327:121::-;;;;;;:::i;:::-;;:::i;21098:212::-;;;;;;;;;;-1:-1:-1;21098:212:0;;;;;:::i;:::-;;:::i;45686:502::-;;;;;;;;;;-1:-1:-1;45686:502:0;;;;;:::i;:::-;;:::i;36552:32::-;;;;;;;;;;-1:-1:-1;36552:32:0;;;;;;;;43209:528;;;;;;;;;;-1:-1:-1;43209:528:0;;;;;:::i;:::-;;:::i;50624:434::-;;;;;;;;;;;;;:::i;36347:32::-;;;;;;;;;;;;;;;;23320:185;;;;;;;;;;-1:-1:-1;23320:185:0;;;;;:::i;:::-;;:::i;36591:26::-;;;;;;;;;;-1:-1:-1;36591:26:0;;;;;:::i;:::-;;:::i;46196:1718::-;;;;;;:::i;:::-;;:::i;36386:28::-;;;;;;;;;;;;;;;;38241:126;;;;;;;;;;-1:-1:-1;38241:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;38338:21:0;38311:7;38338:21;;;:10;:21;;;;;;;38241:126;21443:222;;;;;;;;;;-1:-1:-1;21443:222:0;;;;;:::i;:::-;;:::i;44633:100::-;;;;;;;;;;-1:-1:-1;44633:100:0;;;;;:::i;:::-;;:::i;48035:90::-;;;;;;;;;;-1:-1:-1;48107:10:0;;48035:90;;41206:99;;;;;;;;;;-1:-1:-1;41206:99:0;;;;;:::i;:::-;;:::i;20581:289::-;;;;;;;;;;-1:-1:-1;20581:289:0;;;;;:::i;:::-;;:::i;36421:35::-;;;;;;;;;;;;;;;;47922:101;;;;;;;;;;-1:-1:-1;47997:18:0;;47922:101;;41095:99;;;;;;;;;;-1:-1:-1;41095:99:0;;;;;:::i;:::-;;:::i;36706:33::-;;;;;;;;;;;;;;;;20115:308;;;;;;;;;;-1:-1:-1;20115:308:0;;;;;:::i;:::-;;:::i;29087:148::-;;;;;;;;;;;;;:::i;37925:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43745:297::-;;;;;;;;;;-1:-1:-1;43745:297:0;;;;;:::i;:::-;;:::i;38903:569::-;;;;;;;;;;-1:-1:-1;38903:569:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44460:165::-;;;:::i;42229:298::-;;;;;;;;;;-1:-1:-1;42229:298:0;;;;;:::i;:::-;;:::i;28864:87::-;;;;;;;;;;-1:-1:-1;28937:6:0;;-1:-1:-1;;;;;28937:6:0;28864:87;;39480:722;;;;;;:::i;:::-;;:::i;20986:104::-;;;;;;;;;;;;;:::i;48866:108::-;;;;;;;;;;-1:-1:-1;48866:108:0;;;;;:::i;:::-;48922:7;48949:17;;;:8;:17;;;;;;-1:-1:-1;;;;;48949:17:0;;48866:108;40210:721;;;;;;:::i;:::-;;:::i;48231:100::-;;;;;;;;;;-1:-1:-1;48308:15:0;;48231:100;;22432:327;;;;;;;;;;-1:-1:-1;22432:327:0;;;;;:::i;:::-;;:::i;41787:285::-;;;;;;;;;;-1:-1:-1;41787:285:0;;;;;:::i;:::-;;:::i;44050:79::-;;;;;;;;;;;;;:::i;23513:365::-;;;;;;;;;;-1:-1:-1;23513:365:0;;;;;:::i;:::-;;:::i;48133:90::-;;;;;;;;;;-1:-1:-1;48205:10:0;;48133:90;;36257:37;;;;;;;;;;;;;:::i;44741:231::-;;;;;;;;;;-1:-1:-1;44741:231:0;;;;;:::i;:::-;;:::i;41555:123::-;;;;;;;;;;-1:-1:-1;41555:123:0;;;;;:::i;:::-;;:::i;49001:103::-;;;;;;;;;;-1:-1:-1;49079:16:0;;49001:103;;44137:79;;;;;;;;;;;;;:::i;22767:214::-;;;;;;;;;;-1:-1:-1;22767:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22767:214;36207:43;;;;;;;;;;;;;:::i;29243:281::-;;;;;;;;;;-1:-1:-1;29243:281:0;;;;;:::i;:::-;;:::i;44224:95::-;;;;;;;;;;-1:-1:-1;44224:95:0;;;;;:::i;:::-;;:::i;41420:127::-;;;;;;;;;;-1:-1:-1;41420:127:0;;;;;:::i;:::-;;:::i;42713:229::-;;;;;;;;;;-1:-1:-1;42713:229:0;;;;;:::i;:::-;;:::i;50461:155::-;;;;;;;;;;;;;:::i;50280:173::-;50375:7;50423:22;;;:13;:22;;;;;;50407:13;;:38;;50423:22;50407:38;:::i;:::-;50400:45;50280:173;-1:-1:-1;;50280:173:0:o;49920:352::-;49974:7;;50010:23;18201:10;20115:308;:::i;50010:23::-;49994:39;;50044:13;50077:9;50072:170;50096:5;50092:1;:9;50072:170;;;50123:15;50141:36;18201:10;50161:12;50175:1;50141:19;:36::i;:::-;50123:54;;50201:29;50222:7;50201:20;:29::i;:::-;50192:38;;;;:::i;:::-;;;50108:134;50103:3;;;;;:::i;:::-;;;;50072:170;;;-1:-1:-1;50259:5:0;49920:352;-1:-1:-1;;49920:352:0:o;38497:398::-;38543:24;38570:35;18201:10;38592:12;18121:98;38570:35;38543:62;;38643:1;38624:16;:20;38616:61;;;;-1:-1:-1;;;38616:61:0;;23530:2:1;38616:61:0;;;23512:21:1;23569:2;23549:18;;;23542:30;23608;23588:18;;;23581:58;23656:18;;38616:61:0;;;;;;;;;18201:10;38717:1;38690:24;;;:10;:24;;;;;:28;;;38729:15;:35;;38748:16;;38717:1;38729:35;;38748:16;;38729:35;:::i;:::-;;;;-1:-1:-1;;38785:44:0;;18201:10;;38785:44;;;;;38812:16;;38785:44;;;;38812:16;18201:10;38785:44;;;;;;;38777:53;;;;;;38848:39;;38870:16;;18201:10;;38848:39;;;;;38532:363;38497:398::o;20878:100::-;20932:13;20965:5;20958:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:100;:::o;22116:308::-;22237:7;22284:16;22292:7;22284;:16::i;:::-;22262:110;;;;-1:-1:-1;;;22262:110:0;;19986:2:1;22262:110:0;;;19968:21:1;20025:2;20005:18;;;19998:30;20064:34;20044:18;;;20037:62;-1:-1:-1;;;20115:18:1;;;20108:42;20167:19;;22262:110:0;19784:408:1;22262:110:0;-1:-1:-1;22392:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22392:24:0;;22116:308::o;21673:435::-;21754:13;21770:23;21785:7;21770:14;:23::i;:::-;21754:39;;21818:5;-1:-1:-1;;;;;21812:11:0;:2;-1:-1:-1;;;;;21812:11:0;;;21804:57;;;;-1:-1:-1;;;21804:57:0;;21170:2:1;21804:57:0;;;21152:21:1;21209:2;21189:18;;;21182:30;21248:34;21228:18;;;21221:62;-1:-1:-1;;;21299:18:1;;;21292:31;21340:19;;21804:57:0;20968:397:1;21804:57:0;18201:10;-1:-1:-1;;;;;21896:21:0;;;;:86;;-1:-1:-1;21938:44:0;21962:5;18201:10;22767:214;:::i;21938:44::-;21874:192;;;;-1:-1:-1;;;21874:192:0;;17339:2:1;21874:192:0;;;17321:21:1;17378:2;17358:18;;;17351:30;17417:34;17397:18;;;17390:62;17488:26;17468:18;;;17461:54;17532:19;;21874:192:0;17137:420:1;21874:192:0;22079:21;22088:2;22092:7;22079:8;:21::i;:::-;21743:365;21673:435;;:::o;40967:116::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41043:32;;::::1;::::0;:24:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;;40967:116:::0;:::o;21318:117::-;21379:7;21406:21;:12;:19;:21::i;:::-;21399:28;;21318:117;:::o;22989:323::-;23145:41;18201:10;23178:7;23145:18;:41::i;:::-;23123:140;;;;-1:-1:-1;;;23123:140:0;;;;;;;:::i;:::-;23276:28;23286:4;23292:2;23296:7;23276:9;:28::i;41313:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41382:10:::1;:22:::0;41313:99::o;45098:580::-;45190:16;45198:7;45190;:16::i;:::-;-1:-1:-1;;;;;45176:30:0;:10;-1:-1:-1;;;;;45176:30:0;;45168:39;;;;;;45220:10;45254:9;45249:188;45273:7;:14;45269:18;;45249:188;;;45330:7;45313;45321:1;45313:10;;;;;;;;:::i;:::-;;;;;;;;45324:1;45313:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45309:117;;;45366:4;45358:12;;45405:5;45389:7;45397:1;45389:10;;;;;;;;:::i;:::-;;;;;;;;45400:1;45389:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;45309:117;45289:3;;;;:::i;:::-;;;;45249:188;;;-1:-1:-1;45451:14:0;45447:77;;45482:30;;;;;;;;;;;;;;;;;;:7;:30;;;;;;;-1:-1:-1;45482:30:0;;;;;;;;;;;;;:::i;:::-;;45447:77;45534:20;;;;:11;:20;;;;;;;;;:26;;;:34;;;45579:26;;;;:47;;-1:-1:-1;;45579:47:0;;;45644:26;;24746:25:1;;;24787:18;;;24780:34;;;45644:26:0;;24719:18:1;45644:26:0;;;;;;;45157:521;45098:580;;:::o;44327:121::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44406:33:::1;::::0;18201:10;;44406:33;::::1;;;::::0;44433:5;;44406:33:::1;::::0;;;44433:5;18201:10;44406:33;::::1;;;;;;44398:42;;;::::0;::::1;;44327:121:::0;:::o;21098:212::-;-1:-1:-1;;;;;21272:20:0;;21240:7;21272:20;;;:13;:20;;;;;:30;;21296:5;21272:23;:30::i;:::-;21265:37;21098:212;-1:-1:-1;;;21098:212:0:o;45686:502::-;45766:16;45774:7;45766;:16::i;:::-;-1:-1:-1;;;;;45752:30:0;:10;-1:-1:-1;;;;;45752:30:0;;45744:39;;;;;;45803:20;;;;:11;:20;;;;;;;:26;;;45796:33;;;45869:18;45840:26;;;:47;;-1:-1:-1;;45840:47:0;;;;;;45908:231;45931:7;:14;45927:18;;45908:231;;;45988:7;45971;45979:1;45971:10;;;;;;;;:::i;:::-;;;;;;;;45982:1;45971:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45967:161;;;46029:7;46037:14;;:18;;46054:1;;46037:18;:::i;:::-;46029:27;;;;;;;;:::i;:::-;;;;;;;;46016:7;46024:1;46016:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;46075:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;46107:5;;45967:161;45947:3;;;;:::i;:::-;;;;45908:231;;;-1:-1:-1;46156:24:0;;24536:25:1;;;46156:24:0;;24524:2:1;24509:18;46156:24:0;;;;;;;45686:502;:::o;43209:528::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43397:7:::1;:14;43376:10;:17;:35;43368:76;;;::::0;-1:-1:-1;;;43368:76:0;;13216:2:1;43368:76:0::1;::::0;::::1;13198:21:1::0;13255:2;13235:18;;;13228:30;13294;13274:18;;;13267:58;13342:18;;43368:76:0::1;13014:352:1::0;43368:76:0::1;43470:9;43465:200;43489:10;:17;43485:1;:21;43465:200;;;43542:27;43558:7;43566:1;43558:10;;;;;;;;:::i;:::-;;;;;;;43542:11;:15;;:27;;;;:::i;:::-;43528:41;;43612;43642:7;43650:1;43642:10;;;;;;;;:::i;:::-;;;;;;;43612;:25;43623:10;43634:1;43623:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43612:25:0::1;-1:-1:-1::0;;;;;43612:25:0::1;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;43584:10;:25;43595:10;43606:1;43595:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43584:25:0::1;-1:-1:-1::0;;;;;43584:25:0::1;;;;;;;;;;;;:69;;;;43508:3;;;;;:::i;:::-;;;;43465:200;;;-1:-1:-1::0;43685:16:0;;43677:52:::1;;;::::0;-1:-1:-1;;;43677:52:0;;16987:2:1;43677:52:0::1;::::0;::::1;16969:21:1::0;17026:2;17006:18;;;16999:30;17065:25;17045:18;;;17038:53;17108:18;;43677:52:0::1;16785:347:1::0;50624:434:0;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;50682:13:::1;50698:23;18201:10:::0;20115:308;:::i;50698:23::-:1;50682:39;;50732:15;50769:9:::0;50764:225:::1;50788:5;50784:1;:9;50764:225;;;50815:15;50833:36;18201:10:::0;50853:12:::1;18121:98:::0;50833:36:::1;50815:54;;50895:29;50916:7;50895:20;:29::i;:::-;50884:40;::::0;;::::1;:::i;:::-;50964:13;::::0;50939:22:::1;::::0;;;:13:::1;:22;::::0;;;;;:38;;;;50884:40;-1:-1:-1;50795:3:0;::::1;::::0;::::1;:::i;:::-;;;;50764:225;;;-1:-1:-1::0;51001:49:0::1;18201:10:::0;51042:7:::1;51001:17;:49::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;50624:434::o;23320:185::-;23458:39;23475:4;23481:2;23485:7;23458:39;;;;;;;;;;;;:16;:39::i;36591:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46196:1718::-;46259:18;46280:16;46288:7;46280;:16::i;:::-;46307:22;46394:20;;;:11;:20;;;;;;;;:26;;46259:37;;-1:-1:-1;46259:37:0;;46381:9;:39;;46373:68;;;;-1:-1:-1;;;46373:68:0;;24247:2:1;46373:68:0;;;24229:21:1;24286:2;24266:18;;;24259:30;-1:-1:-1;;;24305:18:1;;;24298:46;24361:18;;46373:68:0;24045:340:1;46373:68:0;46482:20;;;;:11;:20;;;;;:26;;;;;;;;46460:48;;;;;;;:::i;:::-;;46452:73;;;;-1:-1:-1;;;46452:73:0;;18175:2:1;46452:73:0;;;18157:21:1;18214:2;18194:18;;;18187:30;-1:-1:-1;;;18233:18:1;;;18226:42;18285:18;;46452:73:0;17973:336:1;46452:73:0;46538:17;46647:20;;;:11;:20;;46538:17;;46707:32;46717:9;46728:10;;46707:9;:32::i;:::-;46695:44;;46766:32;46776:9;46787:10;;46766:9;:32::i;:::-;46754:44;;46824:34;46837:9;46848;46824:12;:34::i;:::-;46813:45;;46884:33;46897:8;46907:9;46884:12;:33::i;:::-;46934:14;46951:17;;;:8;:17;;;;;;;46985:25;;46873:44;;-1:-1:-1;;;;;;46951:17:0;;;;46985:15;;;;:25;;;;;46873:44;;46985:25;46934:14;46985:25;46873:44;46985:15;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47087:18:0;;;;;;:10;:18;;;;;:31;;47109:9;;47087:18;:31;;47109:9;;47087:31;:::i;:::-;;;;;;;;47152:9;47133:15;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;47248:17:0;;-1:-1:-1;;;;;47248:17:0;47237:29;;;;:10;:29;;;;;:42;;47270:9;;47237:29;:42;;47270:9;;47237:42;:::i;:::-;;;;;;;;47313:9;47294:15;;:28;;;;;;;:::i;:::-;;;;;;;;47361:9;47339:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;47404:27:0;;47421:9;;-1:-1:-1;;;;;47404:27:0;;;;;;;;46680:763;47480:48;47490:16;47498:7;47490;:16::i;:::-;47508:10;47520:7;47480:9;:48::i;:::-;47539:20;;;;47568:15;47539:20;;;;;;;:26;;:44;;-1:-1:-1;;47539:44:0;;;;;;47625:231;47648:7;:14;47644:18;;47625:231;;;47705:7;47688;47696:1;47688:10;;;;;;;;:::i;:::-;;;;;;;;47699:1;47688:13;;;;;;;;:::i;:::-;;;;;;;;;:24;47684:161;;;47746:7;47754:14;;:18;;47771:1;;47754:18;:::i;:::-;47746:27;;;;;;;;:::i;:::-;;;;;;;;47733:7;47741:1;47733:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;47792:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;47824:5;;47684:161;47664:3;;;;:::i;:::-;;;;47625:231;;;-1:-1:-1;47873:33:0;;;24746:25:1;;;47896:9:0;24802:2:1;24787:18;;24780:34;47873:33:0;;24719:18:1;47873:33:0;;;;;;;46248:1666;;;;;46196:1718;:::o;21443:222::-;21563:7;;21610:22;:12;21626:5;21610:15;:22::i;:::-;-1:-1:-1;21588:44:0;21443:222;-1:-1:-1;;;21443:222:0:o;44633:100::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44704:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;41206:99::-:0;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41275:10:::1;:22:::0;41206:99::o;20581:289::-;20698:7;20743:119;20778:7;20743:119;;;;;;;;;;;;;;;;;:12;;:119;:16;:119::i;41095:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41164:10:::1;:22:::0;41095:99::o;20115:308::-;20232:7;-1:-1:-1;;;;;20279:19:0;;20257:111;;;;-1:-1:-1;;;20257:111:0;;17764:2:1;20257:111:0;;;17746:21:1;17803:2;17783:18;;;17776:30;17842:34;17822:18;;;17815:62;-1:-1:-1;;;17893:18:1;;;17886:40;17943:19;;20257:111:0;17562:406:1;20257:111:0;-1:-1:-1;;;;;20386:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;29087:148::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;29178:6:::1;::::0;29157:40:::1;::::0;29194:1:::1;::::0;-1:-1:-1;;;;;29178:6:0::1;::::0;29157:40:::1;::::0;29194:1;;29157:40:::1;29208:6;:19:::0;;-1:-1:-1;;;;;;29208:19:0::1;::::0;;29087:148::o;37925:95::-;37967:18;38005:7;37998:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37925:95;:::o;43745:297::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43813:9:::1;43808:227;43832:6;43828:1;:10;43808:227;;;43860:17;43880:13;:11;:13::i;:::-;43908:19;::::0;;;:8:::1;:19;::::0;;;;:34;;-1:-1:-1;;;;;;43908:34:0::1;18201:10:::0;43908:34;;::::1;::::0;;;43860:33;;-1:-1:-1;43957:34:0::1;::::0;43967:12:::1;43981:9;43957;:34::i;:::-;44006:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;43845:190;43840:3;;;;;:::i;:::-;;;;43808:227;;38903:569:::0;38991:16;39025:18;39046:16;39056:5;39046:9;:16::i;:::-;39025:37;-1:-1:-1;39077:15:0;39073:392;;39154:16;;;39168:1;39154:16;;;;;;;;;;;;39073:392;39203:23;39243:10;39229:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39229:25:0;;39203:51;;39269:13;39297:129;39321:10;39313:5;:18;39297:129;;;39377:33;39397:5;39404;39377:19;:33::i;:::-;39361:6;39368:5;39361:13;;;;;;;;:::i;:::-;;;;;;;;;;:49;39333:7;;;;:::i;:::-;;;;39297:129;;39073:392;39014:458;38903:569;;;:::o;44460:165::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44598:17:::1;::::0;44580:15:::1;::::0;18201:10;;44529:87:::1;::::0;44556:39:::1;::::0;:21:::1;:39;:::i;:::-;:59;;;;:::i;:::-;44529:87;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;44521:96;;;::::0;::::1;;44460:165::o:0;42229:298::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42371:1:::1;42357:11;:15;42349:53;;;::::0;-1:-1:-1;;;42349:53:0;;12455:2:1;42349:53:0::1;::::0;::::1;12437:21:1::0;12494:2;12474:18;;;12467:30;12533:27;12513:18;;;12506:55;12578:18;;42349:53:0::1;12253:349:1::0;42349:53:0::1;42447:6;::::0;42413:54:::1;::::0;-1:-1:-1;;;;;42413:33:0;;::::1;::::0;42447:6:::1;42455:11:::0;42413:33:::1;:54::i;:::-;42483:36;::::0;;-1:-1:-1;;;;;9813:32:1;;9795:51;;9877:2;9862:18;;9855:34;;;42483:36:0::1;::::0;9768:18:1;42483:36:0::1;;;;;;;42229:298:::0;;:::o;39480:722::-;39547:13;;;;:21;;:13;:21;39539:49;;;;-1:-1:-1;;;39539:49:0;;13930:2:1;39539:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;39539:49:0;13728:339:1;39539:49:0;39630:1;39621:6;:10;:27;;;;;39645:3;39635:6;:13;;39621:27;39599:121;;;;-1:-1:-1;;;39599:121:0;;;;;;;:::i;:::-;39789:10;;39739:46;39769:15;;39739:25;39757:6;39739:13;:11;:13::i;:::-;:17;;:25::i;:46::-;:60;;39731:91;;;;-1:-1:-1;;;39731:91:0;;18516:2:1;39731:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;39731:91:0;18314:342:1;39731:91:0;39868:10;;:22;;39883:6;39868:14;:22::i;:::-;39855:9;:35;;39833:114;;;;-1:-1:-1;;;39833:114:0;;22348:2:1;39833:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;39833:114:0;22146:353:1;39833:114:0;39965:9;39960:235;39984:6;39980:1;:10;39960:235;;;40012:17;40032:13;:11;:13::i;:::-;40012:33;-1:-1:-1;40060:34:0;18201:10;40070:12;18121:98;40060:34;40109:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40109:34:0;18201:10;40109:34;;;40172:10;;40158:25;;:13;:25::i;:::-;-1:-1:-1;39992:3:0;;;;:::i;:::-;;;;39960:235;;20986:104;21042:13;21075:7;21068:14;;;;;:::i;40210:721::-;40276:13;;;;:21;;:13;:21;40268:49;;;;-1:-1:-1;;;40268:49:0;;13930:2:1;40268:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;40268:49:0;13728:339:1;40268:49:0;40359:1;40350:6;:10;:27;;;;;40374:3;40364:6;:13;;40350:27;40328:121;;;;-1:-1:-1;;;40328:121:0;;;;;;;:::i;:::-;40518:10;;40468:46;40498:15;;40468:25;40486:6;40468:13;:11;:13::i;:46::-;:60;;40460:91;;;;-1:-1:-1;;;40460:91:0;;18516:2:1;40460:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;40460:91:0;18314:342:1;40460:91:0;40597:10;;:22;;40612:6;40597:14;:22::i;:::-;40584:9;:35;;40562:114;;;;-1:-1:-1;;;40562:114:0;;22348:2:1;40562:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;40562:114:0;22146:353:1;40562:114:0;40694:9;40689:235;40713:6;40709:1;:10;40689:235;;;40741:17;40761:13;:11;:13::i;:::-;40741:33;-1:-1:-1;40789:34:0;18201:10;40799:12;18121:98;40789:34;40838:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40838:34:0;18201:10;40838:34;;;40901:10;;40887:25;;:13;:25::i;:::-;-1:-1:-1;40721:3:0;;;;:::i;:::-;;;;40689:235;;22432:327;-1:-1:-1;;;;;22567:24:0;;18201:10;22567:24;;22559:62;;;;-1:-1:-1;;;22559:62:0;;14679:2:1;22559:62:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:27;14737:18;;;14730:55;14802:18;;22559:62:0;14477:349:1;22559:62:0;18201:10;22634:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22634:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22634:53:0;;;;;;;;;;22703:48;;11155:41:1;;;22634:42:0;;18201:10;22703:48;;11128:18:1;22703:48:0;;;;;;;22432:327;;:::o;41787:285::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41864:22:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;;;;;;41890:25:0;::::1;41910:4;41890:25;;41864:51;41856:94;;;::::0;-1:-1:-1;;;41856:94:0;;19266:2:1;41856:94:0::1;::::0;::::1;19248:21:1::0;19305:2;19285:18;;;19278:30;19344:32;19324:18;;;19317:60;19394:18;;41856:94:0::1;19064:354:1::0;41856:94:0::1;41982:6;::::0;;-1:-1:-1;;;;;41999:17:0;;::::1;-1:-1:-1::0;;;;;;41999:17:0;::::1;::::0;::::1;::::0;;;42032:32:::1;::::0;41982:6;::::1;::::0;41999:17;41982:6;;42032:32:::1;::::0;41963:16:::1;::::0;42032:32:::1;41845:227;41787:285:::0;:::o;44050:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44101:13:::1;:20:::0;;-1:-1:-1;;44101:20:0::1;44117:4;44101:20;::::0;;44050:79::o;23513:365::-;23702:41;18201:10;23735:7;23702:18;:41::i;:::-;23680:140;;;;-1:-1:-1;;;23680:140:0;;;;;;;:::i;:::-;23831:39;23845:4;23851:2;23855:7;23864:5;23831:13;:39::i;:::-;23513:365;;;;:::o;36257:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44741:231::-;44805:13;44827:28;44858:10;:8;:10::i;:::-;44827:41;;44906:14;44922:25;44939:7;44922:16;:25::i;:::-;44949:13;44889:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44875:89;;;44741:231;;;:::o;41555:123::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41636:16:::1;:34:::0;41555:123::o;44137:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44187:13:::1;:21:::0;;-1:-1:-1;;44187:21:0::1;::::0;;44137:79::o;36207:43::-;;;;;;;:::i;29243:281::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29346:22:0;::::1;29324:110;;;::::0;-1:-1:-1;;;29324:110:0;;12809:2:1;29324:110:0::1;::::0;::::1;12791:21:1::0;12848:2;12828:18;;;12821:30;12887:34;12867:18;;;12860:62;-1:-1:-1;;;12938:18:1;;;12931:36;12984:19;;29324:110:0::1;12607:402:1::0;29324:110:0::1;29471:6;::::0;29450:38:::1;::::0;-1:-1:-1;;;;;29450:38:0;;::::1;::::0;29471:6:::1;::::0;29450:38:::1;::::0;29471:6:::1;::::0;29450:38:::1;29499:6;:17:::0;;-1:-1:-1;;;;;;29499:17:0::1;-1:-1:-1::0;;;;;29499:17:0;;;::::1;::::0;;;::::1;::::0;;29243:281::o;44224:95::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44292:10:::1;:19:::0;44224:95::o;41420:127::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41503:17:::1;:36:::0;;-1:-1:-1;;;;;;41503:36:0::1;-1:-1:-1::0;;;;;41503:36:0;;;::::1;::::0;;;::::1;::::0;;41420:127::o;42713:229::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42838:1:::1;42829:6;:10;42821:43;;;::::0;-1:-1:-1;;;42821:43:0;;16638:2:1;42821:43:0::1;::::0;::::1;16620:21:1::0;16677:2;16657:18;;;16650:30;-1:-1:-1;;;16696:18:1;;;16689:50;16756:18;;42821:43:0::1;16436:344:1::0;42821:43:0::1;-1:-1:-1::0;;;;;42901:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;:33:::1;::::0;42927:6;42901:25:::1;:33::i;:::-;-1:-1:-1::0;;;;;42877:21:0;;::::1;;::::0;;;:10:::1;:21;::::0;;;;:57;;;;-1:-1:-1;42713:229:0:o;50461:155::-;50505:7;50529:13;:11;:13::i;:::-;50525:32;;-1:-1:-1;50556:1:0;;50461:155::o;50525:32::-;50595:13;:11;:13::i;:::-;50575:17;;:33;;;;:::i;24246:127::-;24311:4;24335:30;:12;24357:7;24335:21;:30::i;28160:183::-;28226:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28226:29:0;-1:-1:-1;;;;;28226:29:0;;;;;;;;:24;;28280:23;28226:24;28280:14;:23::i;:::-;-1:-1:-1;;;;;28271:46:0;;;;;;;;;;;28160:183;;:::o;4973:155::-;5069:7;5101:19;5109:3;3091:19;;3008:110;24381:459;24510:4;24554:16;24562:7;24554;:16::i;:::-;24532:110;;;;-1:-1:-1;;;24532:110:0;;16225:2:1;24532:110:0;;;16207:21:1;16264:2;16244:18;;;16237:30;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:18:1;;;16347:42;16406:19;;24532:110:0;16023:408:1;24532:110:0;24653:13;24669:23;24684:7;24669:14;:23::i;:::-;24653:39;;24722:5;-1:-1:-1;;;;;24711:16:0;:7;-1:-1:-1;;;;;24711:16:0;;:64;;;;24768:7;-1:-1:-1;;;;;24744:31:0;:20;24756:7;24744:11;:20::i;:::-;-1:-1:-1;;;;;24744:31:0;;24711:64;:120;;;-1:-1:-1;;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;24792:39;24703:129;24381:459;-1:-1:-1;;;;24381:459:0:o;26158:611::-;26331:4;-1:-1:-1;;;;;26304:31:0;:23;26319:7;26304:14;:23::i;:::-;-1:-1:-1;;;;;26304:31:0;;26282:112;;;;-1:-1:-1;;;26282:112:0;;20760:2:1;26282:112:0;;;20742:21:1;20799:2;20779:18;;;20772:30;20838:34;20818:18;;;20811:62;-1:-1:-1;;;20889:18:1;;;20882:39;20938:19;;26282:112:0;20558:405:1;26282:112:0;-1:-1:-1;;;;;26413:16:0;;26405:65;;;;-1:-1:-1;;;26405:65:0;;14274:2:1;26405:65:0;;;14256:21:1;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;-1:-1:-1;;;14403:18:1;;;14396:34;14447:19;;26405:65:0;14072:400:1;26405:65:0;26531:29;26548:1;26552:7;26531:8;:29::i;:::-;-1:-1:-1;;;;;26571:19:0;;;;;;:13;:19;;;;;:35;;26598:7;26571:26;:35::i;:::-;-1:-1:-1;;;;;;26617:17:0;;;;;;:13;:17;;;;;:30;;26639:7;26617:21;:30::i;:::-;-1:-1:-1;26658:29:0;:12;26675:7;26684:2;26658:16;:29::i;:::-;-1:-1:-1;20491:15:0;;;;:11;:15;;;;;;;;:21;;;20484:28;;;20547:18;20523:21;;;:42;;-1:-1:-1;;20523:42:0;;;;;;;26734:27;20491:15;;-1:-1:-1;;;;;26734:27:0;;;;;;;;;;;26158:611;;;:::o;10307:169::-;10405:7;10445:22;10449:3;10461:5;10445:3;:22::i;31383:98::-;31441:7;31468:5;31472:1;31468;:5;:::i;31277:98::-;31335:7;31362:5;31366:1;31362;:5;:::i;11367:389::-;11496:6;11471:21;:31;;11449:110;;;;-1:-1:-1;;;11449:110:0;;15460:2:1;11449:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;11449:110:0;15258:353:1;11449:110:0;11571:12;11589:9;-1:-1:-1;;;;;11589:14:0;11611:6;11589:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11570:52;;;11655:7;11633:115;;;;-1:-1:-1;;;11633:115:0;;;;;;;:::i;48339:188::-;48410:7;48430:16;48449:25;48462:6;48470:3;48449:12;:25::i;:::-;48430:44;;48492:27;48505:8;48515:3;48492:12;:27::i;5136:268::-;5243:7;;;;5308:22;5312:3;5324:5;5308:3;:22::i;:::-;5277:53;;;;-1:-1:-1;5136:268:0;-1:-1:-1;;;;;5136:268:0:o;5905:292::-;6046:7;6128:44;6133:3;6153;6159:12;6128:4;:44::i;24848:110::-;24924:26;24934:2;24938:7;24924:26;;;;;;;;;;;;:9;:26::i;33622:177::-;33732:58;;;-1:-1:-1;;;;;9813:32:1;;33732:58:0;;;9795:51:1;9862:18;;;;9855:34;;;33732:58:0;;;;;;;;;;9768:18:1;;;;33732:58:0;;;;;;;;-1:-1:-1;;;;;33732:58:0;-1:-1:-1;;;33732:58:0;;;33705:86;;33725:5;;33705:19;:86::i;31489:98::-;31547:7;31574:5;31578:1;31574;:5;:::i;49112:610::-;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;49183:23:::1;49226:20;49079:16:::0;;;49001:103;49226:20:::1;49210:12;49219:3;49210:6:::0;:12:::1;:::i;:::-;49209:37;;;;:::i;:::-;49183:63;;49257:28;49323:14;48107:10:::0;;;48035:90;49323:14:::1;48205:10:::0;;49306:31:::1;;;;:::i;:::-;49289:12;49298:3;49289:6:::0;:12:::1;:::i;:::-;49288:50;;;;:::i;:::-;49257:81:::0;-1:-1:-1;49349:20:0::1;49257:81:::0;49372:24:::1;49381:15:::0;49372:6;:24:::1;:::i;:::-;:47;;;;:::i;:::-;49349:70;;49430:33;49447:15;49430:16;:33::i;:::-;49512:42;49603;49657:55;49512:42:::0;49603;49699:12;49657:18:::1;:55::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;-1:-1:-1;;;;49112:610:0:o;23886:352::-;24043:28;24053:4;24059:2;24063:7;24043:9;:28::i;:::-;24104:48;24127:4;24133:2;24137:7;24146:5;24104:22;:48::i;:::-;24082:148;;;;-1:-1:-1;;;24082:148:0;;;;;;;:::i;44980:95::-;45031:13;45060:7;45053:14;;;;;:::i;146:532::-;202:13;232:10;228:53;;-1:-1:-1;;259:10:0;;;;;;;;;;;;-1:-1:-1;;;259:10:0;;;;;146:532::o;228:53::-;306:5;291:12;347:78;354:9;;347:78;;380:8;;;;:::i;:::-;;-1:-1:-1;403:10:0;;-1:-1:-1;411:2:0;403:10;;:::i;:::-;;;347:78;;;435:19;467:6;457:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;457:17:0;;435:39;;485:154;492:10;;485:154;;519:11;529:1;519:11;;:::i;:::-;;-1:-1:-1;588:10:0;596:2;588:5;:10;:::i;:::-;575:24;;:2;:24;:::i;:::-;562:39;;545:6;552;545:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;545:56:0;;;;;;;;-1:-1:-1;616:11:0;625:2;616:11;;:::i;:::-;;;485:154;;4782:183;4893:4;2970:17;;;:12;;;:17;;;;;;:22;;4922:35;2843:157;9831:160;9919:4;9948:35;9956:3;9976:5;9948:7;:35::i;9692:131::-;9759:4;9783:32;9788:3;9808:5;9783:4;:32::i;4382:219::-;4505:4;4529:64;4534:3;4554;-1:-1:-1;;;;;4568:23:0;;4529:4;:64::i;7553:273::-;7694:18;;7647:7;;7694:26;-1:-1:-1;7672:110:0;;;;-1:-1:-1;;;7672:110:0;;11633:2:1;7672:110:0;;;11615:21:1;11672:2;11652:18;;;11645:30;11711:34;11691:18;;;11684:62;-1:-1:-1;;;11762:18:1;;;11755:32;11804:19;;7672:110:0;11431:398:1;7672:110:0;7800:3;:11;;7812:5;7800:18;;;;;;;;:::i;:::-;;;;;;;;;7793:25;;7553:273;;;;:::o;31595:98::-;31653:7;31680:5;31684:1;31680;:5;:::i;3126:348::-;3276:19;;3220:7;;;;3276:27;-1:-1:-1;3254:111:0;;;;-1:-1:-1;;;3254:111:0;;18863:2:1;3254:111:0;;;18845:21:1;18902:2;18882:18;;;18875:30;18941:34;18921:18;;;18914:62;-1:-1:-1;;;18992:18:1;;;18985:32;19034:19;;3254:111:0;18661:398:1;3254:111:0;3378:22;3403:3;:12;;3416:5;3403:19;;;;;;;;:::i;:::-;;;;;;;;;;;3378:44;;3441:5;:10;;;3453:5;:12;;;3433:33;;;;;3126:348;;;;;:::o;4023:290::-;4151:7;4190:17;;;:12;;;:17;;;;;;4241:12;4226:13;4218:36;;;;-1:-1:-1;;;4218:36:0;;;;;;;;:::i;:::-;-1:-1:-1;4272:3:0;4285:12;4296:1;4285:8;:12;:::i;:::-;4272:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;4265:40;;;4023:290;;;;;:::o;24966:321::-;25096:18;25102:2;25106:7;25096:5;:18::i;:::-;25147:54;25178:1;25182:2;25186:7;25195:5;25147:22;:54::i;:::-;25125:154;;;;-1:-1:-1;;;25125:154:0;;;;;;;:::i;35009:333::-;35090:23;35116:69;35144:4;35116:69;;;;;;;;;;;;;;;;;35124:5;-1:-1:-1;;;;;35116:27:0;;;:69;;;;;:::i;:::-;35200:17;;35090:95;;-1:-1:-1;35200:21:0;35196:139;;35257:10;35246:30;;;;;;;;;;;;:::i;:::-;35238:85;;;;-1:-1:-1;;;35238:85:0;;23119:2:1;35238:85:0;;;23101:21:1;23158:2;23138:18;;;23131:30;23197:34;23177:18;;;23170:62;-1:-1:-1;;;23248:18:1;;;23241:40;23298:19;;35238:85:0;22917:406:1;49730:182:0;49831:6;49811:17;;:26;;;;:::i;:::-;49791:17;:46;49890:13;:11;:13::i;:::-;49881:22;;:6;:22;:::i;:::-;49864:13;;:40;;;;:::i;:::-;49848:13;:56;-1:-1:-1;49730:182:0:o;10739:620::-;10897:6;10872:21;:31;;10850:110;;;;-1:-1:-1;;;10850:110:0;;15460:2:1;10850:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;10850:110:0;15258:353:1;10850:110:0;10972:12;-1:-1:-1;;;;;10990:14:0;;11026:3;11012:11;:6;11021:2;11012:11;:::i;:::-;:17;;;;:::i;:::-;10990:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10971:63;;;11067:7;11045:115;;;;-1:-1:-1;;;11045:115:0;;;;;;;:::i;:::-;11172:7;-1:-1:-1;;;;;11185:15:0;;11222:3;11208:11;:6;11217:2;11208:11;:::i;:::-;:17;;;;:::i;:::-;11185:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11171:59;;;11263:2;11241:110;;;;-1:-1:-1;;;11241:110:0;;;;;;;:::i;:::-;10839:520;;10739:620;;;:::o;27168:984::-;27323:4;-1:-1:-1;;;;;27344:13:0;;10667:20;10715:8;27340:805;;27397:175;;-1:-1:-1;;;27397:175:0;;-1:-1:-1;;;;;27397:36:0;;;;;:175;;18201:10;;27491:4;;27518:7;;27548:5;;27397:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27397:175:0;;;;;;;;-1:-1:-1;;27397:175:0;;;;;;;;;;;;:::i;:::-;;;27376:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27759:13:0;;27755:320;;27802:108;;-1:-1:-1;;;27802:108:0;;;;;;;:::i;27755:320::-;28025:6;28019:13;28010:6;28006:2;28002:15;27995:38;27376:714;-1:-1:-1;;;;;;27636:55:0;-1:-1:-1;;;27636:55:0;;-1:-1:-1;27629:62:0;;27340:805;-1:-1:-1;28129:4:0;27168:984;;;;;;:::o;6661:598::-;6727:4;6765:19;;;:12;;;:19;;;;;;6801:15;;6797:455;;6833:21;6857:14;6870:1;6857:10;:14;:::i;:::-;6906:18;;6833:38;;-1:-1:-1;6886:17:0;;6906:22;;6927:1;;6906:22;:::i;:::-;6886:42;;6943:17;6963:3;:11;;6975:9;6963:22;;;;;;;;:::i;:::-;;;;;;;;;6943:42;;7029:9;7000:3;:11;;7012:13;7000:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;7079:17;:13;7095:1;7079:17;:::i;:::-;7053:23;;;;:12;;;:23;;;;;:43;7111:17;;7053:3;;7111:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7150:3;:12;;:19;7163:5;7150:19;;;;;;;;;;;7143:26;;;7191:4;7184:11;;;;;;;;6797:455;7235:5;7228:12;;;;;6362:291;6425:4;2970:17;;;:12;;;:17;;;;;;6442:204;;-1:-1:-1;6485:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6545:18;;6523:19;;;:12;;;:19;;;;;;:40;;;;6578:11;;6442:204;-1:-1:-1;6629:5:0;6622:12;;1762:463;1872:4;1908:17;;;:12;;;:17;;;;;;1940:13;1936:282;;-1:-1:-1;;1988:36:0;;;;;;;;;;;;;;;;;;1970:55;;;;;;;;:12;:55;;;;;;;;;;;;;;;;;;;;;;;;2060:19;;2040:17;;;:12;;;:17;;;;;;;:39;2094:11;;1936:282;2174:5;2138:3;2151:12;2162:1;2151:8;:12;:::i;:::-;2138:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;2201:5;2194:12;;;;;25295:396;-1:-1:-1;;;;;25375:16:0;;25367:61;;;;-1:-1:-1;;;25367:61:0;;19625:2:1;25367:61:0;;;19607:21:1;;;19644:18;;;19637:30;19703:34;19683:18;;;19676:62;19755:18;;25367:61:0;19423:356:1;25367:61:0;25448:16;25456:7;25448;:16::i;:::-;25447:17;25439:58;;;;-1:-1:-1;;;25439:58:0;;13573:2:1;25439:58:0;;;13555:21:1;13612:2;13592:18;;;13585:30;13651;13631:18;;;13624:58;13699:18;;25439:58:0;13371:352:1;25439:58:0;-1:-1:-1;;;;;25564:17:0;;;;;;:13;:17;;;;;:30;;25586:7;25564:21;:30::i;:::-;-1:-1:-1;25605:29:0;:12;25622:7;25631:2;25605:16;:29::i;:::-;-1:-1:-1;25650:33:0;;25675:7;;-1:-1:-1;;;;;25650:33:0;;;25667:1;;25650:33;;25667:1;;25650:33;25295:396;;:::o;11970:229::-;12107:12;12139:52;12161:6;12169:4;12175:1;12178:12;12107;10667:20;;12895:60;;;;-1:-1:-1;;;12895:60:0;;21990:2:1;12895:60:0;;;21972:21:1;22029:2;22009:18;;;22002:30;22068:31;22048:18;;;22041:59;22117:18;;12895:60:0;21788:353:1;12895:60:0;12967:12;12981:23;13008:6;-1:-1:-1;;;;;13008:11:0;13027:5;13048:4;13008:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:97;;;;13081:52;13099:7;13108:10;13120:12;13081:17;:52::i;:::-;13074:59;12571:570;-1:-1:-1;;;;;;;12571:570:0:o;14582:550::-;14732:12;14761:7;14757:368;;;-1:-1:-1;14792:10:0;14785:17;;14757:368;14839:17;;:21;14835:279;;14942:10;14936:17;15003:15;14990:10;14986:2;14982:19;14975:44;14835:279;15085:12;15078:20;;-1:-1:-1;;;15078:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:673::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:163;1098:2;1095:1;1092:9;1084:163;;;1155:17;;1143:30;;1193:12;;;;1225;;;;1116:1;1109:9;1084:163;;;-1:-1:-1;1265:5:1;;603:673;-1:-1:-1;;;;;;;603:673:1:o;1281:186::-;1340:6;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1432:29;1451:9;1432:29;:::i;1472:260::-;1540:6;1548;1601:2;1589:9;1580:7;1576:23;1572:32;1569:52;;;1617:1;1614;1607:12;1569:52;1640:29;1659:9;1640:29;:::i;:::-;1630:39;;1688:38;1722:2;1711:9;1707:18;1688:38;:::i;:::-;1678:48;;1472:260;;;;;:::o;1737:328::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1922:29;1941:9;1922:29;:::i;:::-;1912:39;;1970:38;2004:2;1993:9;1989:18;1970:38;:::i;:::-;1960:48;;2055:2;2044:9;2040:18;2027:32;2017:42;;1737:328;;;;;:::o;2070:666::-;2165:6;2173;2181;2189;2242:3;2230:9;2221:7;2217:23;2213:33;2210:53;;;2259:1;2256;2249:12;2210:53;2282:29;2301:9;2282:29;:::i;:::-;2272:39;;2330:38;2364:2;2353:9;2349:18;2330:38;:::i;:::-;2320:48;;2415:2;2404:9;2400:18;2387:32;2377:42;;2470:2;2459:9;2455:18;2442:32;2497:18;2489:6;2486:30;2483:50;;;2529:1;2526;2519:12;2483:50;2552:22;;2605:4;2597:13;;2593:27;-1:-1:-1;2583:55:1;;2634:1;2631;2624:12;2583:55;2657:73;2722:7;2717:2;2704:16;2699:2;2695;2691:11;2657:73;:::i;:::-;2647:83;;;2070:666;;;;;;;:::o;2741:315::-;2806:6;2814;2867:2;2855:9;2846:7;2842:23;2838:32;2835:52;;;2883:1;2880;2873:12;2835:52;2906:29;2925:9;2906:29;:::i;:::-;2896:39;;2985:2;2974:9;2970:18;2957:32;2998:28;3020:5;2998:28;:::i;:::-;3045:5;3035:15;;;2741:315;;;;;:::o;3061:254::-;3129:6;3137;3190:2;3178:9;3169:7;3165:23;3161:32;3158:52;;;3206:1;3203;3196:12;3158:52;3229:29;3248:9;3229:29;:::i;:::-;3219:39;3305:2;3290:18;;;;3277:32;;-1:-1:-1;;;3061:254:1:o;3320:1225::-;3447:6;3455;3463;3516:2;3504:9;3495:7;3491:23;3487:32;3484:52;;;3532:1;3529;3522:12;3484:52;3572:9;3559:23;3601:18;3642:2;3634:6;3631:14;3628:34;;;3658:1;3655;3648:12;3628:34;3696:6;3685:9;3681:22;3671:32;;3741:7;3734:4;3730:2;3726:13;3722:27;3712:55;;3763:1;3760;3753:12;3712:55;3799:2;3786:16;3821:4;3845:60;3861:43;3901:2;3861:43;:::i;3845:60::-;3927:3;3951:2;3946:3;3939:15;3979:2;3974:3;3970:12;3963:19;;4010:2;4006;4002:11;4058:7;4053:2;4047;4044:1;4040:10;4036:2;4032:19;4028:28;4025:41;4022:61;;;4079:1;4076;4069:12;4022:61;4101:1;4092:10;;4111:169;4125:2;4122:1;4119:9;4111:169;;;4182:23;4201:3;4182:23;:::i;:::-;4170:36;;4143:1;4136:9;;;;;4226:12;;;;4258;;4111:169;;;-1:-1:-1;4299:5:1;-1:-1:-1;;4342:18:1;;4329:32;;-1:-1:-1;;4373:16:1;;;4370:36;;;4402:1;4399;4392:12;4370:36;;4425:63;4480:7;4469:8;4458:9;4454:24;4425:63;:::i;:::-;4415:73;;;4535:2;4524:9;4520:18;4507:32;4497:42;;3320:1225;;;;;:::o;4550:245::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4718:9;4712:16;4737:28;4759:5;4737:28;:::i;4800:245::-;4858:6;4911:2;4899:9;4890:7;4886:23;4882:32;4879:52;;;4927:1;4924;4917:12;4879:52;4966:9;4953:23;4985:30;5009:5;4985:30;:::i;5050:249::-;5119:6;5172:2;5160:9;5151:7;5147:23;5143:32;5140:52;;;5188:1;5185;5178:12;5140:52;5220:9;5214:16;5239:30;5263:5;5239:30;:::i;5304:450::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5482:9;5469:23;5515:18;5507:6;5504:30;5501:50;;;5547:1;5544;5537:12;5501:50;5570:22;;5623:4;5615:13;;5611:27;-1:-1:-1;5601:55:1;;5652:1;5649;5642:12;5601:55;5675:73;5740:7;5735:2;5722:16;5717:2;5713;5709:11;5675:73;:::i;5759:180::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;-1:-1:-1;5910:23:1;;5759:180;-1:-1:-1;5759:180:1:o;5944:248::-;6012:6;6020;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;-1:-1:-1;;6112:23:1;;;6182:2;6167:18;;;6154:32;;-1:-1:-1;5944:248:1:o;6197:435::-;6250:3;6288:5;6282:12;6315:6;6310:3;6303:19;6341:4;6370:2;6365:3;6361:12;6354:19;;6407:2;6400:5;6396:14;6428:1;6438:169;6452:6;6449:1;6446:13;6438:169;;;6513:13;;6501:26;;6547:12;;;;6582:15;;;;6474:1;6467:9;6438:169;;;-1:-1:-1;6623:3:1;;6197:435;-1:-1:-1;;;;;6197:435:1:o;6637:257::-;6678:3;6716:5;6710:12;6743:6;6738:3;6731:19;6759:63;6815:6;6808:4;6803:3;6799:14;6792:4;6785:5;6781:16;6759:63;:::i;:::-;6876:2;6855:15;-1:-1:-1;;6851:29:1;6842:39;;;;6883:4;6838:50;;6637:257;-1:-1:-1;;6637:257:1:o;6899:274::-;7028:3;7066:6;7060:13;7082:53;7128:6;7123:3;7116:4;7108:6;7104:17;7082:53;:::i;:::-;7151:16;;;;;6899:274;-1:-1:-1;;6899:274:1:o;7178:1527::-;7402:3;7440:6;7434:13;7466:4;7479:51;7523:6;7518:3;7513:2;7505:6;7501:15;7479:51;:::i;:::-;7593:13;;7552:16;;;;7615:55;7593:13;7552:16;7637:15;;;7615:55;:::i;:::-;7759:13;;7692:20;;;7732:1;;7819;7841:18;;;;7894;;;;7921:93;;7999:4;7989:8;7985:19;7973:31;;7921:93;8062:2;8052:8;8049:16;8029:18;8026:40;8023:167;;;-1:-1:-1;;;8089:33:1;;8145:4;8142:1;8135:15;8175:4;8096:3;8163:17;8023:167;8206:18;8233:110;;;;8357:1;8352:328;;;;8199:481;;8233:110;-1:-1:-1;;8268:24:1;;8254:39;;8313:20;;;;-1:-1:-1;8233:110:1;;8352:328;25856:1;25849:14;;;25893:4;25880:18;;8447:1;8461:169;8475:8;8472:1;8469:15;8461:169;;;8557:14;;8542:13;;;8535:37;8600:16;;;;8492:10;;8461:169;;;8465:3;;8661:8;8654:5;8650:20;8643:27;;8199:481;-1:-1:-1;8696:3:1;;7178:1527;-1:-1:-1;;;;;;;;;;;7178:1527:1:o;9128:488::-;-1:-1:-1;;;;;9397:15:1;;;9379:34;;9449:15;;9444:2;9429:18;;9422:43;9496:2;9481:18;;9474:34;;;9544:3;9539:2;9524:18;;9517:31;;;9322:4;;9565:45;;9590:19;;9582:6;9565:45;:::i;:::-;9557:53;9128:488;-1:-1:-1;;;;;;9128:488:1:o;9900:844::-;10092:4;10121:2;10161;10150:9;10146:18;10191:2;10180:9;10173:21;10214:6;10249;10243:13;10280:6;10272;10265:22;10318:2;10307:9;10303:18;10296:25;;10380:2;10370:6;10367:1;10363:14;10352:9;10348:30;10344:39;10330:53;;10418:2;10410:6;10406:15;10439:1;10449:266;10463:6;10460:1;10457:13;10449:266;;;10556:2;10552:7;10540:9;10532:6;10528:22;10524:36;10519:3;10512:49;10584:51;10628:6;10619;10613:13;10584:51;:::i;:::-;10574:61;-1:-1:-1;10693:12:1;;;;10658:15;;;;10485:1;10478:9;10449:266;;;-1:-1:-1;10732:6:1;;9900:844;-1:-1:-1;;;;;;;9900:844:1:o;10749:261::-;10928:2;10917:9;10910:21;10891:4;10948:56;11000:2;10989:9;10985:18;10977:6;10948:56;:::i;11207:219::-;11356:2;11345:9;11338:21;11319:4;11376:44;11416:2;11405:9;11401:18;11393:6;11376:44;:::i;11834:414::-;12036:2;12018:21;;;12075:2;12055:18;;;12048:30;12114:34;12109:2;12094:18;;12087:62;-1:-1:-1;;;12180:2:1;12165:18;;12158:48;12238:3;12223:19;;11834:414::o;14831:422::-;15033:2;15015:21;;;15072:2;15052:18;;;15045:30;15111:34;15106:2;15091:18;;15084:62;15182:28;15177:2;15162:18;;15155:56;15243:3;15228:19;;14831:422::o;20197:356::-;20399:2;20381:21;;;20418:18;;;20411:30;20477:34;20472:2;20457:18;;20450:62;20544:2;20529:18;;20197:356::o;21370:413::-;21572:2;21554:21;;;21611:2;21591:18;;;21584:30;21650:34;21645:2;21630:18;;21623:62;-1:-1:-1;;;21716:2:1;21701:18;;21694:47;21773:3;21758:19;;21370:413::o;22504:408::-;22706:2;22688:21;;;22745:2;22725:18;;;22718:30;22784:34;22779:2;22764:18;;22757:62;-1:-1:-1;;;22850:2:1;22835:18;;22828:42;22902:3;22887:19;;22504:408::o;24825:485::-;25040:25;;;25096:2;25081:18;;25074:34;;;25028:2;25013:18;;25138:1;25127:13;;25117:144;;25183:10;25178:3;25174:20;25171:1;25164:31;25218:4;25215:1;25208:15;25246:4;25243:1;25236:15;25117:144;25297:6;25292:2;25281:9;25277:18;25270:34;24825:485;;;;;;:::o;25315:275::-;25386:2;25380:9;25451:2;25432:13;;-1:-1:-1;;25428:27:1;25416:40;;25486:18;25471:34;;25507:22;;;25468:62;25465:88;;;25533:18;;:::i;:::-;25569:2;25562:22;25315:275;;-1:-1:-1;25315:275:1:o;25595:183::-;25655:4;25688:18;25680:6;25677:30;25674:56;;;25710:18;;:::i;:::-;-1:-1:-1;25755:1:1;25751:14;25767:4;25747:25;;25595:183::o;25909:128::-;25949:3;25980:1;25976:6;25973:1;25970:13;25967:39;;;25986:18;;:::i;:::-;-1:-1:-1;26022:9:1;;25909:128::o;26042:120::-;26082:1;26108;26098:35;;26113:18;;:::i;:::-;-1:-1:-1;26147:9:1;;26042:120::o;26167:168::-;26207:7;26273:1;26269;26265:6;26261:14;26258:1;26255:21;26250:1;26243:9;26236:17;26232:45;26229:71;;;26280:18;;:::i;:::-;-1:-1:-1;26320:9:1;;26167:168::o;26340:125::-;26380:4;26408:1;26405;26402:8;26399:34;;;26413:18;;:::i;:::-;-1:-1:-1;26450:9:1;;26340:125::o;26470:258::-;26542:1;26552:113;26566:6;26563:1;26560:13;26552:113;;;26642:11;;;26636:18;26623:11;;;26616:39;26588:2;26581:10;26552:113;;;26683:6;26680:1;26677:13;26674:48;;;-1:-1:-1;;26718:1:1;26700:16;;26693:27;26470:258::o;26733:136::-;26772:3;26800:5;26790:39;;26809:18;;:::i;:::-;-1:-1:-1;;;26845:18:1;;26733:136::o;26874:380::-;26953:1;26949:12;;;;26996;;;27017:61;;27071:4;27063:6;27059:17;27049:27;;27017:61;27124:2;27116:6;27113:14;27093:18;27090:38;27087:161;;;27170:10;27165:3;27161:20;27158:1;27151:31;27205:4;27202:1;27195:15;27233:4;27230:1;27223:15;27259:135;27298:3;-1:-1:-1;;27319:17:1;;27316:43;;;27339:18;;:::i;:::-;-1:-1:-1;27386:1:1;27375:13;;27259:135::o;27399:112::-;27431:1;27457;27447:35;;27462:18;;:::i;:::-;-1:-1:-1;27496:9:1;;27399:112::o;27516:127::-;27577:10;27572:3;27568:20;27565:1;27558:31;27608:4;27605:1;27598:15;27632:4;27629:1;27622:15;27648:127;27709:10;27704:3;27700:20;27697:1;27690:31;27740:4;27737:1;27730:15;27764:4;27761:1;27754:15;27780:127;27841:10;27836:3;27832:20;27829:1;27822:31;27872:4;27869:1;27862:15;27896:4;27893:1;27886:15;27912:127;27973:10;27968:3;27964:20;27961:1;27954:31;28004:4;28001:1;27994:15;28028:4;28025:1;28018:15;28044:127;28105:10;28100:3;28096:20;28093:1;28086:31;28136:4;28133:1;28126:15;28160:4;28157:1;28150:15;28176:127;28237:10;28232:3;28228:20;28225:1;28218:31;28268:4;28265:1;28258:15;28292:4;28289:1;28282:15;28308:118;28394:5;28387:13;28380:21;28373:5;28370:32;28360:60;;28416:1;28413;28406:12;28431:131;-1:-1:-1;;;;;;28505:32:1;;28495:43;;28485:71;;28552:1;28549;28542:12
Swarm Source
ipfs://4e89d60eed1ccb00d85ca1c58cb44ab9939c1fcf94c0b49f531a8b8e2b44c052
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.