ERC-721
Overview
Max Total Supply
235 RDR
Holders
110
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RDRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RendarToken
Compiler Version
v0.5.0+commit.1d4f565a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-08-02 */ // File: openzeppelin-solidity/contracts/introspection/IERC165.sol pragma solidity ^0.5.0; /** * @title IERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.0; /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract 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) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.5.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safeTransfer`. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity ^0.5.0; /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol pragma solidity ^0.5.0; /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol pragma solidity ^0.5.0; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC165, IERC721 { using SafeMath for uint256; using Address for address; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => uint256) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0)); return _ownedTokensCount[owner]; } /** * @dev Gets the owner of the specified token ID * @param tokenId uint256 ID of the token to query the owner of * @return owner address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0)); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId)); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != msg.sender); _operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, to, approved); } /** * @dev Tells whether an operator is approved by a given owner * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address * Usage of this method is discouraged, use `safeTransferFrom` whenever possible * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId)); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /** * @dev Returns whether the specified token exists * @param tokenId uint256 ID of the token to query the existence of * @return whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0)); require(!_exists(tokenId)); _tokenOwner[tokenId] = to; _ownedTokensCount[to] = _ownedTokensCount[to].add(1); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner); _clearApproval(tokenId); _ownedTokensCount[owner] = _ownedTokensCount[owner].sub(1); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from); require(to != address(0)); _clearApproval(tokenId); _ownedTokensCount[from] = _ownedTokensCount[from].sub(1); _ownedTokensCount[to] = _ownedTokensCount[to].add(1); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke `onERC721Received` on a target address * The call is not executed if the target address is not a contract * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.5.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol pragma solidity ^0.5.0; /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ /** * @dev Constructor function */ constructor () public { // register the supported interface to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner)); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply()); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occcupied by // lasTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } // File: openzeppelin-solidity/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistAdminRole.sol pragma solidity ^0.5.0; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(msg.sender); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(msg.sender)); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(msg.sender); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistedRole.sol pragma solidity ^0.5.0; /** * @title WhitelistedRole * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove * it), and not Whitelisteds themselves. */ contract WhitelistedRole is WhitelistAdminRole { using Roles for Roles.Role; event WhitelistedAdded(address indexed account); event WhitelistedRemoved(address indexed account); Roles.Role private _whitelisteds; modifier onlyWhitelisted() { require(isWhitelisted(msg.sender)); _; } function isWhitelisted(address account) public view returns (bool) { return _whitelisteds.has(account); } function addWhitelisted(address account) public onlyWhitelistAdmin { _addWhitelisted(account); } function removeWhitelisted(address account) public onlyWhitelistAdmin { _removeWhitelisted(account); } function renounceWhitelisted() public { _removeWhitelisted(msg.sender); } function _addWhitelisted(address account) internal { _whitelisteds.add(account); emit WhitelistedAdded(account); } function _removeWhitelisted(address account) internal { _whitelisteds.remove(account); emit WhitelistedRemoved(account); } } // File: contracts/Strings.sol pragma solidity ^0.5.0; //https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol library Strings { function strConcat(string memory _a, string memory _b) internal pure returns (string memory _concatenatedString) { return strConcat(_a, _b, "", "", ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory _concatenatedString) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory _concatenatedString) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory _concatenatedString) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; uint i = 0; for (i = 0; i < _ba.length; i++) { babcde[k++] = _ba[i]; } for (i = 0; i < _bb.length; i++) { babcde[k++] = _bb[i]; } for (i = 0; i < _bc.length; i++) { babcde[k++] = _bc[i]; } for (i = 0; i < _bd.length; i++) { babcde[k++] = _bd[i]; } for (i = 0; i < _be.length; i++) { babcde[k++] = _be[i]; } return string(babcde); } } // File: contracts/CustomERC721Metadata.sol pragma solidity ^0.5.0; /** * ERC721 base contract without the concept of tokenUri as this is managed by the parent */ contract CustomERC721Metadata is ERC165, ERC721, ERC721Enumerable { // Token name string private _name; // Token symbol string private _symbol; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } } // File: contracts/RendarToken.sol pragma solidity ^0.5.0; contract RendarToken is CustomERC721Metadata, WhitelistedRole { using SafeMath for uint256; //////////// // Events // //////////// // Emitted on every edition created event EditionCreated( uint256 indexed _editionId ); /////////////// // Variables // /////////////// string public tokenBaseURI = "https://ipfs.infura.io/ipfs/"; // Edition construct struct EditionDetails { uint256 editionId; // top level edition identifier uint256 editionSize; // max size of the edition uint256 editionSupply; // number of tokens purchased from the edition uint256 priceInWei; // price per token for this edition uint256 artistCommission; // commission the artist wants for this editions address payable artistAccount; // the account the send the commission to bool active; // Edition is active or not string tokenURI; // NFT token metadata URL } // Edition step uint256 public editionStep = 10000; // A count of the total number of token minted uint256 public totalTokensMinted; // A pointer to the last/highest edition number created uint256 public highestEditionNumber; // A list of all created editions uint256[] public createdEditions; // Rendar commission account address payable public rendarAddress; // tokenId : editionId mapping(uint256 => uint256) internal tokenIdToEditionId; // editionId : EditionDetails mapping(uint256 => EditionDetails) internal editionIdToEditionDetails; // artistAccount : [editionId, editionId] mapping(address => uint256[]) internal artistToEditionIds; // editionId => editionId mapping(uint256 => uint256) internal editionIdToArtistIndex; /////////////// // Modifiers // /////////////// modifier onlyActiveEdition(uint256 _editionId) { require(editionIdToEditionDetails[_editionId].active, "Edition disabled"); _; } modifier onlyValidEdition(uint256 _editionId) { require(editionIdToEditionDetails[_editionId].editionId > 0, "Edition ID invalid"); _; } modifier onlyAvailableEdition(uint256 _editionId) { require(editionIdToEditionDetails[_editionId].editionSupply < editionIdToEditionDetails[_editionId].editionSize, "Edition sold out"); _; } modifier onlyValidTokenId(uint256 _tokenId) { require(_exists(_tokenId), "Token ID does not exist"); _; } ///////////////// // Constructor // ///////////////// constructor(address payable _rendarAddress) CustomERC721Metadata("RendarToken", "RDR") public { super.addWhitelisted(msg.sender); rendarAddress = _rendarAddress; } ////////////////////////////// // Token Creation Functions // ////////////////////////////// function purchase(uint256 _editionId) public payable returns (uint256 _tokenId) { return purchaseTo(msg.sender, _editionId); } function purchaseTo(address _to, uint256 _editionId) onlyActiveEdition(_editionId) onlyAvailableEdition(_editionId) public payable returns (uint256 _tokenId) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; require(msg.value >= _editionDetails.priceInWei, "Not enough ETH"); // Generate token uint256 tokenId = _internalMint(_to, _editionId); // Split funds between Rendar and Artist _splitFunds(_editionDetails.priceInWei, _editionDetails.artistAccount, _editionDetails.artistCommission); return tokenId; } function _splitFunds(uint256 _priceInWei, address payable _artistsAccount, uint256 _artistsCommission) internal { if (_priceInWei > 0) { if (_artistsCommission > 0) { uint256 artistPayment = _priceInWei.div(100).mul(_artistsCommission); _artistsAccount.transfer(artistPayment); uint256 remainingCommission = msg.value.sub(artistPayment); rendarAddress.transfer(remainingCommission); } else { rendarAddress.transfer(msg.value); } } } /* * Whitelist only function for minting tokens from an edition to the callers address, does not require payment */ function mint(uint256 _editionId) public returns (uint256 _tokenId) { return mintTo(msg.sender, _editionId); } /* * Whitelist only function for minting tokens from an edition to a specific address, does not require payment */ function mintTo(address _to, uint256 _editionId) onlyWhitelisted onlyValidEdition(_editionId) onlyAvailableEdition(_editionId) public returns (uint256 _tokenId) { return _internalMint(_to, _editionId); } /* * Whitelist only function for minting multiple tokens from an edition to a specific address, does not require payment */ function mintMultipleTo(address _to, uint256 _editionId, uint256 _total) onlyWhitelisted onlyValidEdition(_editionId) public returns (uint256[] memory _tokenIds) { uint256 remainingInEdition = editionIdToEditionDetails[_editionId].editionSize - editionIdToEditionDetails[_editionId].editionSupply; require(remainingInEdition >= _total, "Not enough left in edition"); uint256[] memory tokens = new uint256[](_total); for (uint i = 0; i < _total; i++) { tokens[i] = _internalMint(_to, _editionId); } return tokens; } function _internalMint(address _to, uint256 _editionId) internal returns (uint256 _tokenId) { uint256 tokenId = _nextTokenId(_editionId); _mint(_to, tokenId); tokenIdToEditionId[tokenId] = _editionId; return tokenId; } /* * Function for burning tokens if you are the owner */ function burn(uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId), "Caller is not owner nor approved"); _burn(tokenId); delete tokenIdToEditionId[tokenId]; } /* * Admin only function for burning tokens */ function adminBurn(uint256 tokenId) onlyWhitelisted public { _burn(tokenId); delete tokenIdToEditionId[tokenId]; } ////////////////////////////////// // Edition Management Functions // ////////////////////////////////// function createEdition( uint256 _editionSize, uint256 _priceInWei, uint256 _artistCommission, address payable _artistAccount, string memory _tokenURI ) public onlyWhitelisted returns (bool _created) { return _createEdition(_editionSize, _priceInWei, _artistCommission, _artistAccount, _tokenURI, true); } function createEditionInactive( uint256 _editionSize, uint256 _priceInWei, uint256 _artistCommission, address payable _artistAccount, string memory _tokenURI ) public onlyWhitelisted returns (bool _created) { return _createEdition(_editionSize, _priceInWei, _artistCommission, _artistAccount, _tokenURI, false); } function _createEdition( uint256 _editionSize, uint256 _priceInWei, uint256 _artistCommission, address payable _artistAccount, string memory _tokenURI, bool active ) internal returns (bool _created){ // Guards for edition creation logic require(_editionSize > 0 && _editionSize <= editionStep, "Edition size invalid"); require(_artistCommission >= 0 && _artistCommission <= 100, "Artist commission invalid"); require(_artistAccount != address(0), "Artist account missing"); require(bytes(_tokenURI).length != 0, "Token URI invalid"); // Generate new edition number based on step uint256 _editionId = highestEditionNumber.add(editionStep); // Create edition editionIdToEditionDetails[_editionId] = EditionDetails( _editionId, _editionSize, 0, // default zero purchased _priceInWei, _artistCommission, _artistAccount, active, _tokenURI ); highestEditionNumber = _editionId; createdEditions.push(_editionId); updateArtistLookupData(_artistAccount, _editionId); // Emit event emit EditionCreated(_editionId); return true; } function _nextTokenId(uint256 _editionId) internal returns (uint256) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; // get next tokenID = max size + current supply uint256 tokenId = _editionDetails.editionId.add(_editionDetails.editionSupply); // Bump number totalSupply _editionDetails.editionSupply = _editionDetails.editionSupply.add(1); // Record another mint totalTokensMinted = totalTokensMinted.add(1); // Construct next token ID e.g. 100000 + 1 = ID of 100001 (this first in the edition set) return tokenId; } function disableEdition(uint256 _editionId) external onlyWhitelisted onlyValidEdition(_editionId) { editionIdToEditionDetails[_editionId].active = false; } function enableEdition(uint256 _editionId) external onlyWhitelisted onlyValidEdition(_editionId) { editionIdToEditionDetails[_editionId].active = true; } function updateArtistAccount(uint256 _editionId, address payable _artistAccount) external onlyWhitelisted onlyValidEdition(_editionId) { EditionDetails storage _originalEditionDetails = editionIdToEditionDetails[_editionId]; uint256 editionArtistIndex = editionIdToArtistIndex[_editionId]; // Get list of editions old artist works with uint256[] storage editionIdsForArtist = artistToEditionIds[_originalEditionDetails.artistAccount]; // Remove edition from artists lists delete editionIdsForArtist[editionArtistIndex]; // Add new artists to the list uint256 newArtistsEditionIndex = artistToEditionIds[_artistAccount].length; artistToEditionIds[_artistAccount].push(_editionId); editionIdToArtistIndex[_editionId] = newArtistsEditionIndex; // Update the edition _originalEditionDetails.artistAccount = _artistAccount; } function updateArtistCommission(uint256 _editionId, uint256 _artistCommission) external onlyWhitelisted onlyValidEdition(_editionId) { editionIdToEditionDetails[_editionId].artistCommission = _artistCommission; } function updateEditionTokenUri(uint256 _editionId, string calldata _tokenURI) external onlyWhitelisted onlyValidEdition(_editionId) { editionIdToEditionDetails[_editionId].tokenURI = _tokenURI; } function updatePrice(uint256 _editionId, uint256 _priceInWei) external onlyWhitelisted onlyValidEdition(_editionId) { editionIdToEditionDetails[_editionId].priceInWei = _priceInWei; } function updateArtistLookupData(address artistAccount, uint256 editionId) internal { uint256 artistEditionIndex = artistToEditionIds[artistAccount].length; artistToEditionIds[artistAccount].push(editionId); editionIdToArtistIndex[editionId] = artistEditionIndex; } ////////////////////////// // Management functions // ////////////////////////// function updateTokenBaseURI(string calldata _newBaseURI) external onlyWhitelisted { require(bytes(_newBaseURI).length != 0, "Base URI invalid"); tokenBaseURI = _newBaseURI; } function updateRendarAddress(address payable _rendarAddress) external onlyWhitelisted { rendarAddress = _rendarAddress; } //////////////////////// // Accessor functions // //////////////////////// function tokensOfOwner(address owner) external view returns (uint256[] memory) { return _tokensOfOwner(owner); } function tokenURI(uint256 _tokenId) external view onlyValidTokenId(_tokenId) returns (string memory) { uint256 editionId = tokenIdToEditionId[_tokenId]; return Strings.strConcat(tokenBaseURI, editionIdToEditionDetails[editionId].tokenURI); } function editionTokenUri(uint256 _editionId) public view returns (string memory _tokenUri) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI); } function editionSize(uint256 _editionId) public view returns (uint256 _totalRemaining) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.editionSize; } function editionSupply(uint256 _editionId) public view returns (uint256 _editionSupply) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.editionSupply; } function editionPrice(uint256 _editionId) public view returns (uint256 _priceInWei) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.priceInWei; } function artistInfo(uint256 _editionId) public view returns (address _artistAccount, uint256 _artistCommission) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return (_editionDetails.artistAccount, _editionDetails.artistCommission); } function artistCommission(uint256 _editionId) public view returns (uint256 _artistCommission) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.artistCommission; } function artistAccount(uint256 _editionId) public view returns (address _artistAccount) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.artistAccount; } function active(uint256 _editionId) public view returns (bool _active) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.active; } function allEditions() public view returns (uint256[] memory _editionIds) { return createdEditions; } function artistsEditions(address _artistsAccount) public view returns (uint256[] memory _editionIds) { return artistToEditionIds[_artistsAccount]; } function editionDetails(uint256 _editionId) public view onlyValidEdition(_editionId) returns ( uint256 _editionSize, uint256 _editionSupply, uint256 _priceInWei, uint256 _artistCommission, address _artistAccount, bool _active, string memory _tokenURI ) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return ( _editionDetails.editionSize, _editionDetails.editionSupply, _editionDetails.priceInWei, _editionDetails.artistCommission, _editionDetails.artistAccount, _editionDetails.active, Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI) ); } function totalRemaining(uint256 _editionId) public view returns (uint256) { EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId]; return _editionDetails.editionSize.sub(_editionDetails.editionSupply); } function tokenDetails(uint256 _tokenId) public view onlyValidTokenId(_tokenId) returns ( uint256 _editionId, uint256 _editionSize, uint256 _editionSupply, address _artistAccount, address _owner, string memory _tokenURI ) { uint256 editionId = tokenIdToEditionId[_tokenId]; EditionDetails storage _editionDetails = editionIdToEditionDetails[editionId]; return ( editionId, _editionDetails.editionSize, _editionDetails.editionSupply, _editionDetails.artistAccount, ownerOf(_tokenId), Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionSize","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_tokenURI","type":"string"}],"name":"createEditionInactive","outputs":[{"name":"_created","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allEditions","outputs":[{"name":"_editionIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBaseURI","type":"string"}],"name":"updateTokenBaseURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistCommission","outputs":[{"name":"_artistCommission","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionPrice","outputs":[{"name":"_priceInWei","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"},{"name":"_total","type":"uint256"}],"name":"mintMultipleTo","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"}],"name":"mintTo","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenBaseURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_artistCommission","type":"uint256"}],"name":"updateArtistCommission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_tokenURI","type":"string"}],"name":"updateEditionTokenUri","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"editionStep","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_artistsAccount","type":"address"}],"name":"artistsEditions","outputs":[{"name":"_editionIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"disableEdition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"active","outputs":[{"name":"_active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistInfo","outputs":[{"name":"_artistAccount","type":"address"},{"name":"_artistCommission","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionSize","outputs":[{"name":"_totalRemaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_priceInWei","type":"uint256"}],"name":"updatePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"}],"name":"purchaseTo","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"mint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"highestEditionNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionSize","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_tokenURI","type":"string"}],"name":"createEdition","outputs":[{"name":"_created","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"adminBurn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"createdEditions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"totalRemaining","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rendarAddress","type":"address"}],"name":"updateRendarAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionTokenUri","outputs":[{"name":"_tokenUri","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionDetails","outputs":[{"name":"_editionSize","type":"uint256"},{"name":"_editionSupply","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_active","type":"bool"},{"name":"_tokenURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistAccount","outputs":[{"name":"_artistAccount","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_artistAccount","type":"address"}],"name":"updateArtistAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"enableEdition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rendarAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"purchase","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionSupply","outputs":[{"name":"_editionSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenDetails","outputs":[{"name":"_editionId","type":"uint256"},{"name":"_editionSize","type":"uint256"},{"name":"_editionSupply","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_owner","type":"address"},{"name":"_tokenURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_rendarAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_editionId","type":"uint256"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
60c0604052601c60808190527f68747470733a2f2f697066732e696e667572612e696f2f697066732f0000000060a09081526200004091600d919062000436565b50612710600e553480156200005457600080fd5b5060405160208062004096833981018060405260208110156200007657600080fd5b5051604080518082018252600b81527f52656e646172546f6b656e0000000000000000000000000000000000000000006020828101919091528251808401909352600383527f52445200000000000000000000000000000000000000000000000000000000009083015290620001157f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000238810204565b620001497f80ac58cd0000000000000000000000000000000000000000000000000000000064010000000062000238810204565b6200017d7f780e9d630000000000000000000000000000000000000000000000000000000064010000000062000238810204565b81516200019290600990602085019062000436565b508051620001a890600a90602084019062000436565b50620001dd7f5b5e139f0000000000000000000000000000000000000000000000000000000064010000000062000238810204565b5050620001f933620002a5640100000000026401000000009004565b62000212336401000000006200144e620002f782021704565b60128054600160a060020a031916600160a060020a0392909216919091179055620004db565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200026857600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b620002c0600b82640100000000620031766200032e82021704565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6200030b3364010000000062000389810204565b15156200031757600080fd5b6200032b81640100000000620003ac810204565b50565b600160a060020a03811615156200034457600080fd5b620003598282640100000000620003fe810204565b156200036457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000620003a6600b8364010000000062002d42620003fe82021704565b92915050565b620003c7600c82640100000000620031766200032e82021704565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6000600160a060020a03821615156200041657600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200047957805160ff1916838001178555620004a9565b82800160010185558215620004a9579182015b82811115620004a95782518255916020019190600101906200048c565b50620004b7929150620004bb565b5090565b620004d891905b80821115620004b75760008155600101620004c2565b90565b613bab80620004eb6000396000f3fe6080604052600436106102c95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102ce57806306fdde031461032b578063081812fc146103b5578063095ea7b3146103fb5780630c318c61146104365780630fe45dd51461050a57806310154bad1461056f57806318160ddd146105a25780632295ee5b146105c957806323b872dd14610646578063291d9549146106895780632f745c59146106bc57806332fd8478146106f557806338d37b9b1461071f5780633af32abf1461074957806342842e0e1461077c57806342966c68146107bf57806343480e5d146107e9578063449a52f8146108285780634c5a628c146108615780634e99b800146108765780634f6ccce71461088b5780635091f881146108b55780635150ce6b146108e557806362538bbd146109695780636352211e1461097e5780636641179e146109a857806370a08231146109db5780637362d9c814610a0e57806374b799af14610a415780637d549e9914610a6b5780638033d58114610a8057806380d297bd14610aaa5780638195014414610af757806382367b2d14610b215780638462151c14610b51578063891407c014610b8457806395d89b4114610bb0578063a0712d6814610bc5578063a22cb46514610bef578063abf3260f14610c2a578063b77a27af14610c3f578063b88d4fde14610d13578063badb97ff14610de6578063bb5f747b14610e10578063bb706ff314610e43578063bc02844c14610e6d578063c87b56dd14610e97578063c8e21d7714610ec1578063cb89a27314610ef4578063d2d02d0914610f1e578063d6067a5d14611000578063d6cd94731461102a578063dc4150a21461103f578063e4ae2e8814611078578063e7144aa4146110a2578063e985e9c5146110b7578063efef39a1146110f2578063f83e6ed81461110f578063fc314e3114611139575b600080fd5b3480156102da57600080fd5b50610317600480360360208110156102f157600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611222565b604080519115158252519081900360200190f35b34801561033757600080fd5b50610340611256565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037a578181015183820152602001610362565b50505050905090810190601f1680156103a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b50356112ed565b60408051600160a060020a039092168252519081900360200190f35b34801561040757600080fd5b506104346004803603604081101561041e57600080fd5b50600160a060020a03813516906020013561131f565b005b34801561044257600080fd5b50610317600480360360a081101561045957600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a08101608082013564010000000081111561049557600080fd5b8201836020820111156104a757600080fd5b803590602001918460018302840111640100000000831117156104c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113c8945050505050565b34801561051657600080fd5b5061051f6113f7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055b578181015183820152602001610543565b505050509050019250505060405180910390f35b34801561057b57600080fd5b506104346004803603602081101561059257600080fd5b5035600160a060020a031661144e565b3480156105ae57600080fd5b506105b761146e565b60408051918252519081900360200190f35b3480156105d557600080fd5b50610434600480360360208110156105ec57600080fd5b81019060208101813564010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b509092509050611474565b34801561065257600080fd5b506104346004803603606081101561066957600080fd5b50600160a060020a038135811691602081013590911690604001356114f0565b34801561069557600080fd5b50610434600480360360208110156106ac57600080fd5b5035600160a060020a0316611510565b3480156106c857600080fd5b506105b7600480360360408110156106df57600080fd5b50600160a060020a03813516906020013561152d565b34801561070157600080fd5b506105b76004803603602081101561071857600080fd5b503561157b565b34801561072b57600080fd5b506105b76004803603602081101561074257600080fd5b5035611590565b34801561075557600080fd5b506103176004803603602081101561076c57600080fd5b5035600160a060020a03166115a5565b34801561078857600080fd5b506104346004803603606081101561079f57600080fd5b50600160a060020a038135811691602081013590911690604001356115b8565b3480156107cb57600080fd5b50610434600480360360208110156107e257600080fd5b50356115d4565b3480156107f557600080fd5b5061051f6004803603606081101561080c57600080fd5b50600160a060020a03813516906020810135906040013561164e565b34801561083457600080fd5b506105b76004803603604081101561084b57600080fd5b50600160a060020a038135169060200135611799565b34801561086d57600080fd5b50610434611886565b34801561088257600080fd5b50610340611891565b34801561089757600080fd5b506105b7600480360360208110156108ae57600080fd5b503561191f565b3480156108c157600080fd5b50610434600480360360408110156108d857600080fd5b5080359060200135611954565b3480156108f157600080fd5b506104346004803603604081101561090857600080fd5b8135919081019060408101602082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b5090925090506119d2565b34801561097557600080fd5b506105b7611a5d565b34801561098a57600080fd5b506103df600480360360208110156109a157600080fd5b5035611a63565b3480156109b457600080fd5b5061051f600480360360208110156109cb57600080fd5b5035600160a060020a0316611a87565b3480156109e757600080fd5b506105b7600480360360208110156109fe57600080fd5b5035600160a060020a0316611af3565b348015610a1a57600080fd5b5061043460048036036020811015610a3157600080fd5b5035600160a060020a0316611b26565b348015610a4d57600080fd5b5061043460048036036020811015610a6457600080fd5b5035611b43565b348015610a7757600080fd5b506105b7611bdb565b348015610a8c57600080fd5b5061031760048036036020811015610aa357600080fd5b5035611be1565b348015610ab657600080fd5b50610ad460048036036020811015610acd57600080fd5b5035611c11565b60408051600160a060020a03909316835260208301919091528051918290030190f35b348015610b0357600080fd5b506105b760048036036020811015610b1a57600080fd5b5035611c38565b348015610b2d57600080fd5b5061043460048036036040811015610b4457600080fd5b5080359060200135611c4d565b348015610b5d57600080fd5b5061051f60048036036020811015610b7457600080fd5b5035600160a060020a0316611ccb565b6105b760048036036040811015610b9a57600080fd5b50600160a060020a038135169060200135611d2a565b348015610bbc57600080fd5b50610340611ebc565b348015610bd157600080fd5b506105b760048036036020811015610be857600080fd5b5035611f1d565b348015610bfb57600080fd5b5061043460048036036040811015610c1257600080fd5b50600160a060020a0381351690602001351515611f29565b348015610c3657600080fd5b506105b7611fad565b348015610c4b57600080fd5b50610317600480360360a0811015610c6257600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a081016080820135640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fb3945050505050565b348015610d1f57600080fd5b5061043460048036036080811015610d3657600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7157600080fd5b820183602082011115610d8357600080fd5b80359060200191846001830284011164010000000083111715610da557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fd8945050505050565b348015610df257600080fd5b5061043460048036036020811015610e0957600080fd5b5035612000565b348015610e1c57600080fd5b5061031760048036036020811015610e3357600080fd5b5035600160a060020a0316612014565b348015610e4f57600080fd5b506105b760048036036020811015610e6657600080fd5b5035612027565b348015610e7957600080fd5b506105b760048036036020811015610e9057600080fd5b5035612046565b348015610ea357600080fd5b5061034060048036036020811015610eba57600080fd5b5035612074565b348015610ecd57600080fd5b5061043460048036036020811015610ee457600080fd5b5035600160a060020a031661221b565b348015610f0057600080fd5b5061034060048036036020811015610f1757600080fd5b5035612251565b348015610f2a57600080fd5b50610f4860048036036020811015610f4157600080fd5b5035612352565b6040518088815260200187815260200186815260200185815260200184600160a060020a0316600160a060020a031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fbf578181015183820152602001610fa7565b50505050905090810190601f168015610fec5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561100c57600080fd5b506103df6004803603602081101561102357600080fd5b5035612517565b34801561103657600080fd5b50610434612535565b34801561104b57600080fd5b506104346004803603604081101561106257600080fd5b5080359060200135600160a060020a031661253e565b34801561108457600080fd5b506104346004803603602081101561109b57600080fd5b5035612647565b3480156110ae57600080fd5b506103df6126f6565b3480156110c357600080fd5b50610317600480360360408110156110da57600080fd5b50600160a060020a0381358116916020013516612705565b6105b76004803603602081101561110857600080fd5b5035612733565b34801561111b57600080fd5b506105b76004803603602081101561113257600080fd5b503561273f565b34801561114557600080fd5b506111636004803603602081101561115c57600080fd5b5035612754565b6040518087815260200186815260200185815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b820191906000526020600020905b8154815290600101906020018083116112c557829003601f168201915b505050505090505b90565b60006112f882612906565b151561130357600080fd5b50600090815260026020526040902054600160a060020a031690565b600061132a82611a63565b9050600160a060020a03838116908216141561134557600080fd5b33600160a060020a038216148061136157506113618133612705565b151561136c57600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d3336115a5565b15156113de57600080fd5b6113ed86868686866000612923565b9695505050505050565b606060118054806020026020016040519081016040528092919081815260200182805480156112e257602002820191906000526020600020905b815481526020019060010190808311611431575050505050905090565b61145733612014565b151561146257600080fd5b61146b81612c3c565b50565b60075490565b61147d336115a5565b151561148857600080fd5b8015156114df576040805160e560020a62461bcd02815260206004820152601060248201527f426173652055524920696e76616c696400000000000000000000000000000000604482015290519081900360640190fd5b6114eb600d8383613a39565b505050565b6114fa3382612c84565b151561150557600080fd5b6114eb838383612cdb565b61151933612014565b151561152457600080fd5b61146b81612cfa565b600061153883611af3565b821061154357600080fd5b600160a060020a038316600090815260056020526040902080548390811061156757fe5b906000526020600020015490505b92915050565b60009081526014602052604090206004015490565b60009081526014602052604090206003015490565b6000611575600c8363ffffffff612d4216565b6114eb8383836020604051908101604052806000815250611fd8565b6115de3382612c84565b1515611634576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b61163d81612d79565b600090815260136020526040812055565b6060611659336115a5565b151561166457600080fd5b6000838152601460205260408120548491106116b8576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008481526014602052604090206002810154600190910154038381101561172a576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420656e6f756768206c65667420696e2065646974696f6e000000000000604482015290519081900360640190fd5b606084604051908082528060200260200182016040528015611756578160200160208202803883390190505b50905060005b8581101561178e5761176e8888612d8b565b828281518110151561177c57fe5b6020908102909101015260010161175c565b509695505050505050565b60006117a4336115a5565b15156117af57600080fd5b600082815260146020526040812054839110611803576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611873576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b61187d8585612d8b565b95945050505050565b61188f33612dbb565b565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b600061192961146e565b821061193457600080fd5b600780548390811061194257fe5b90600052602060002001549050919050565b61195d336115a5565b151561196857600080fd5b6000828152601460205260408120548391106119bc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060040155565b6119db336115a5565b15156119e657600080fd5b600083815260146020526040812054849110611a3a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b6000848152601460205260409020611a56906006018484613a39565b5050505050565b600e5481565b600081815260016020526040812054600160a060020a031680151561157557600080fd5b600160a060020a038116600090815260156020908152604091829020805483518184028101840190945280845260609392830182828015611ae757602002820191906000526020600020905b815481526020019060010190808311611ad3575b50505050509050919050565b6000600160a060020a0382161515611b0a57600080fd5b50600160a060020a031660009081526003602052604090205490565b611b2f33612014565b1515611b3a57600080fd5b61146b81612e03565b611b4c336115a5565b1515611b5757600080fd5b600081815260146020526040812054829110611bab576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff000000000000000000000000000000000000000019169055565b600f5481565b60009081526014602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b60009081526014602052604090206005810154600490910154600160a060020a0390911691565b60009081526014602052604090206001015490565b611c56336115a5565b1515611c6157600080fd5b600082815260146020526040812054839110611cb5576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060030155565b6060611cd682612e4b565b805480602002602001604051908101604052809291908181526020018280548015611ae75760200282019190600052602060002090815481526020019060010190808311611ad35750505050509050919050565b600081815260146020526040812060050154829074010000000000000000000000000000000000000000900460ff161515611daf576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e2064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611e1f576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b60008481526014602052604090206003810154341015611e89576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f7420656e6f75676820455448000000000000000000000000000000000000604482015290519081900360640190fd5b6000611e958787612d8b565b6003830154600584015460048501549293506113ed92600160a060020a0390911690612e65565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b60006115753383611799565b600160a060020a038216331415611f3f57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60105481565b6000611fbe336115a5565b1515611fc957600080fd5b6113ed86868686866001612923565b611fe38484846114f0565b611fef84848484612f62565b1515611ffa57600080fd5b50505050565b612009336115a5565b151561163457600080fd5b6000611575600b8363ffffffff612d4216565b601180548290811061203557fe5b600091825260209091200154905081565b60008181526014602052604081206002810154600182015461206d9163ffffffff6130de16565b9392505050565b60608161208081612906565b15156120d6576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b60008381526013602090815260409182902054600d8054845160026001831615610100026000190190921691909104601f810185900485028201850190955284815291936122139383018282801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050506000858152601460209081526040918290206006018054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152945092508301828280156122095780601f106121de57610100808354040283529160200191612209565b820191906000526020600020905b8154815290600101906020018083116121ec57829003601f168201915b50505050506130f3565b949350505050565b612224336115a5565b151561222f57600080fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b600081815260146020908152604091829020600d80548451601f60026000196101006001861615020190931692909204918201859004850281018501909552808552606094929361206d939291908301828280156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b5050505060068401805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b60008181526014602052604081205481908190819081908190606090889083106123b4576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600089815260146020908152604091829020600180820154600280840154600385015460048601546005870154600d80548b516101009982161599909902600019011695909504601f81018a90048a0288018a01909a5289875296989497929691959094600160a060020a038316947401000000000000000000000000000000000000000090930460ff16936124f99391908301828280156124975780601f1061246c57610100808354040283529160200191612497565b820191906000526020600020905b81548152906001019060200180831161247a57829003601f168201915b5050505060068a01805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b82925098509850985098509850985098505050919395979092949650565b600090815260146020526040902060050154600160a060020a031690565b61188f33612cfa565b612547336115a5565b151561255257600080fd5b6000828152601460205260408120548391106125a6576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600083815260146020908152604080832060168352818420546005820154600160a060020a031685526015909352922080548190839081106125e457fe5b60009182526020808320909101829055600160a060020a03909616808252601587526040808320805460018101825590845288842081018a9055988352601690975295902095909555506005018054600160a060020a0319169092179091555050565b612650336115a5565b151561265b57600080fd5b6000818152601460205260408120548291106126af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b601254600160a060020a031681565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60006115753383611d2a565b60009081526014602052604090206002015490565b600080600080600060608661276881612906565b15156127be576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600088815260136020908152604080832054808452601490925290912060018101546002820154600583015484929190600160a060020a03166128008e611a63565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526128ef939092909183018282801561288d5780601f106128625761010080835404028352916020019161288d565b820191906000526020600020905b81548152906001019060200180831161287057829003601f168201915b5050505060068901805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b949f939e50919c509a509850909650945050505050565b600090815260016020526040902054600160a060020a0316151590565b600080871180156129365750600e548711155b151561298c576040805160e560020a62461bcd02815260206004820152601460248201527f45646974696f6e2073697a6520696e76616c6964000000000000000000000000604482015290519081900360640190fd5b6000851015801561299e575060648511155b15156129f4576040805160e560020a62461bcd02815260206004820152601960248201527f41727469737420636f6d6d697373696f6e20696e76616c696400000000000000604482015290519081900360640190fd5b600160a060020a0384161515612a54576040805160e560020a62461bcd02815260206004820152601660248201527f417274697374206163636f756e74206d697373696e6700000000000000000000604482015290519081900360640190fd5b82511515612aac576040805160e560020a62461bcd02815260206004820152601160248201527f546f6b656e2055524920696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b6000612ac5600e5460105461312890919063ffffffff16565b9050610100604051908101604052808281526020018981526020016000815260200188815260200187815260200186600160a060020a0316815260200184151581526020018581525060146000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160050160146101000a81548160ff02191690831515021790555060e0820151816006019080519060200190612bbc929190613ab7565b5050506010819055601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801819055612c03858261313a565b60405181907f962bb64b059ad60d491bef43125921210925c52b11ff1cc093409113c8c5fe3790600090a2506001979650505050505050565b612c4d600c8263ffffffff61317616565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600080612c9083611a63565b905080600160a060020a031684600160a060020a03161480612ccb575083600160a060020a0316612cc0846112ed565b600160a060020a0316145b8061221357506122138185612705565b612ce68383836131c4565b612cf083826132d3565b6114eb82826133c3565b612d0b600c8263ffffffff61340116565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515612d5957600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61146b612d8582611a63565b8261344d565b600080612d978361347d565b9050612da384826134e0565b60008181526013602052604090209290925550919050565b612dcc600b8263ffffffff61340116565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b612e14600b8263ffffffff61317616565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60008311156114eb576000811115612f29576000612e9a82612e8e86606463ffffffff6134fd16565b9063ffffffff61352116565b604051909150600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612ed3573d6000803e3d6000fd5b506000612ee6348363ffffffff6130de16565b601254604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015612f21573d6000803e3d6000fd5b5050506114eb565b601254604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611ffa573d6000803e3d6000fd5b6000612f7684600160a060020a031661354c565b1515612f8457506001612213565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015613017578181015183820152602001612fff565b50505050905090810190601f1680156130445780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561306657600080fd5b505af115801561307a573d6000803e3d6000fd5b505050506040513d602081101561309057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6000828211156130ed57600080fd5b50900390565b60408051602081810183526000808352835180830185528181528451928301909452815260609261206d928692869290613554565b60008282018381101561206d57600080fd5b600160a060020a039091166000908152601560209081526040808320805460018101825590845282842081018590559383526016909152902055565b600160a060020a038116151561318b57600080fd5b6131958282612d42565b1561319f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a03166131d782611a63565b600160a060020a0316146131ea57600080fd5b600160a060020a03821615156131ff57600080fd5b613208816137a9565b600160a060020a03831660009081526003602052604090205461323290600163ffffffff6130de16565b600160a060020a03808516600090815260036020526040808220939093559084168152205461326890600163ffffffff61312816565b600160a060020a03808416600081815260036020908152604080832095909555858252600190528381208054600160a060020a031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a0382166000908152600560205260408120546132fd90600163ffffffff6130de16565b60008381526006602052604090205490915080821461339a57600160a060020a038416600090815260056020526040812080548490811061333a57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a031681526020019081526020016000208381548110151561337a57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490611a56906000198301613b25565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b600160a060020a038116151561341657600080fd5b6134208282612d42565b151561342b57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61345782826137e4565b61346182826132d3565b600081815260066020526040812055613479816138a3565b5050565b60008181526014602052604081206002810154815483916134a4919063ffffffff61312816565b60028301549091506134bd90600163ffffffff61312816565b6002830155600f546134d690600163ffffffff61312816565b600f559392505050565b6134ea8282613941565b6134f482826133c3565b613479816139f5565b600080821161350b57600080fd5b6000828481151561351857fe5b04949350505050565b600082151561353257506000611575565b82820282848281151561354157fe5b041461206d57600080fd5b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156135a8576020820181803883390190505b509050806000805b885181101561360e5788818151811015156135c757fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135ee57fe5b906020010190600160f860020a031916908160001a9053506001016135b0565b5060005b875181101561367057878181518110151561362957fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561365057fe5b906020010190600160f860020a031916908160001a905350600101613612565b5060005b86518110156136d257868181518110151561368b57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136b257fe5b906020010190600160f860020a031916908160001a905350600101613674565b5060005b85518110156137345785818151811015156136ed57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561371457fe5b906020010190600160f860020a031916908160001a9053506001016136d6565b5060005b845181101561379657848181518110151561374f57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561377657fe5b906020010190600160f860020a031916908160001a905350600101613738565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561146b5760009081526002602052604090208054600160a060020a0319169055565b81600160a060020a03166137f782611a63565b600160a060020a03161461380a57600080fd5b613813816137a9565b600160a060020a03821660009081526003602052604090205461383d90600163ffffffff6130de16565b600160a060020a038316600081815260036020908152604080832094909455848252600190528281208054600160a060020a03191690559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6007546000906138ba90600163ffffffff6130de16565b600083815260086020526040812054600780549394509092849081106138dc57fe5b90600052602060002001549050806007838154811015156138f957fe5b6000918252602080832090910192909255828152600890915260409020829055600780549061392c906000198301613b25565b50505060009182525060086020526040812055565b600160a060020a038216151561395657600080fd5b61395f81612906565b1561396957600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546139aa91613128565b600160a060020a0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a7a5782800160ff19823516178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578235825591602001919060010190613a8c565b50613ab3929150613b45565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613af857805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613b0a565b8154818355818111156114eb576000838152602090206114eb9181019083015b6112ea91905b80821115613ab35760008155600101613b4b56fe45646974696f6e20494420696e76616c69640000000000000000000000000000a165627a7a72305820043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d00290000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e
Deployed Bytecode
0x6080604052600436106102c95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102ce57806306fdde031461032b578063081812fc146103b5578063095ea7b3146103fb5780630c318c61146104365780630fe45dd51461050a57806310154bad1461056f57806318160ddd146105a25780632295ee5b146105c957806323b872dd14610646578063291d9549146106895780632f745c59146106bc57806332fd8478146106f557806338d37b9b1461071f5780633af32abf1461074957806342842e0e1461077c57806342966c68146107bf57806343480e5d146107e9578063449a52f8146108285780634c5a628c146108615780634e99b800146108765780634f6ccce71461088b5780635091f881146108b55780635150ce6b146108e557806362538bbd146109695780636352211e1461097e5780636641179e146109a857806370a08231146109db5780637362d9c814610a0e57806374b799af14610a415780637d549e9914610a6b5780638033d58114610a8057806380d297bd14610aaa5780638195014414610af757806382367b2d14610b215780638462151c14610b51578063891407c014610b8457806395d89b4114610bb0578063a0712d6814610bc5578063a22cb46514610bef578063abf3260f14610c2a578063b77a27af14610c3f578063b88d4fde14610d13578063badb97ff14610de6578063bb5f747b14610e10578063bb706ff314610e43578063bc02844c14610e6d578063c87b56dd14610e97578063c8e21d7714610ec1578063cb89a27314610ef4578063d2d02d0914610f1e578063d6067a5d14611000578063d6cd94731461102a578063dc4150a21461103f578063e4ae2e8814611078578063e7144aa4146110a2578063e985e9c5146110b7578063efef39a1146110f2578063f83e6ed81461110f578063fc314e3114611139575b600080fd5b3480156102da57600080fd5b50610317600480360360208110156102f157600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611222565b604080519115158252519081900360200190f35b34801561033757600080fd5b50610340611256565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037a578181015183820152602001610362565b50505050905090810190601f1680156103a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b50356112ed565b60408051600160a060020a039092168252519081900360200190f35b34801561040757600080fd5b506104346004803603604081101561041e57600080fd5b50600160a060020a03813516906020013561131f565b005b34801561044257600080fd5b50610317600480360360a081101561045957600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a08101608082013564010000000081111561049557600080fd5b8201836020820111156104a757600080fd5b803590602001918460018302840111640100000000831117156104c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113c8945050505050565b34801561051657600080fd5b5061051f6113f7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055b578181015183820152602001610543565b505050509050019250505060405180910390f35b34801561057b57600080fd5b506104346004803603602081101561059257600080fd5b5035600160a060020a031661144e565b3480156105ae57600080fd5b506105b761146e565b60408051918252519081900360200190f35b3480156105d557600080fd5b50610434600480360360208110156105ec57600080fd5b81019060208101813564010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b509092509050611474565b34801561065257600080fd5b506104346004803603606081101561066957600080fd5b50600160a060020a038135811691602081013590911690604001356114f0565b34801561069557600080fd5b50610434600480360360208110156106ac57600080fd5b5035600160a060020a0316611510565b3480156106c857600080fd5b506105b7600480360360408110156106df57600080fd5b50600160a060020a03813516906020013561152d565b34801561070157600080fd5b506105b76004803603602081101561071857600080fd5b503561157b565b34801561072b57600080fd5b506105b76004803603602081101561074257600080fd5b5035611590565b34801561075557600080fd5b506103176004803603602081101561076c57600080fd5b5035600160a060020a03166115a5565b34801561078857600080fd5b506104346004803603606081101561079f57600080fd5b50600160a060020a038135811691602081013590911690604001356115b8565b3480156107cb57600080fd5b50610434600480360360208110156107e257600080fd5b50356115d4565b3480156107f557600080fd5b5061051f6004803603606081101561080c57600080fd5b50600160a060020a03813516906020810135906040013561164e565b34801561083457600080fd5b506105b76004803603604081101561084b57600080fd5b50600160a060020a038135169060200135611799565b34801561086d57600080fd5b50610434611886565b34801561088257600080fd5b50610340611891565b34801561089757600080fd5b506105b7600480360360208110156108ae57600080fd5b503561191f565b3480156108c157600080fd5b50610434600480360360408110156108d857600080fd5b5080359060200135611954565b3480156108f157600080fd5b506104346004803603604081101561090857600080fd5b8135919081019060408101602082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b5090925090506119d2565b34801561097557600080fd5b506105b7611a5d565b34801561098a57600080fd5b506103df600480360360208110156109a157600080fd5b5035611a63565b3480156109b457600080fd5b5061051f600480360360208110156109cb57600080fd5b5035600160a060020a0316611a87565b3480156109e757600080fd5b506105b7600480360360208110156109fe57600080fd5b5035600160a060020a0316611af3565b348015610a1a57600080fd5b5061043460048036036020811015610a3157600080fd5b5035600160a060020a0316611b26565b348015610a4d57600080fd5b5061043460048036036020811015610a6457600080fd5b5035611b43565b348015610a7757600080fd5b506105b7611bdb565b348015610a8c57600080fd5b5061031760048036036020811015610aa357600080fd5b5035611be1565b348015610ab657600080fd5b50610ad460048036036020811015610acd57600080fd5b5035611c11565b60408051600160a060020a03909316835260208301919091528051918290030190f35b348015610b0357600080fd5b506105b760048036036020811015610b1a57600080fd5b5035611c38565b348015610b2d57600080fd5b5061043460048036036040811015610b4457600080fd5b5080359060200135611c4d565b348015610b5d57600080fd5b5061051f60048036036020811015610b7457600080fd5b5035600160a060020a0316611ccb565b6105b760048036036040811015610b9a57600080fd5b50600160a060020a038135169060200135611d2a565b348015610bbc57600080fd5b50610340611ebc565b348015610bd157600080fd5b506105b760048036036020811015610be857600080fd5b5035611f1d565b348015610bfb57600080fd5b5061043460048036036040811015610c1257600080fd5b50600160a060020a0381351690602001351515611f29565b348015610c3657600080fd5b506105b7611fad565b348015610c4b57600080fd5b50610317600480360360a0811015610c6257600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a081016080820135640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fb3945050505050565b348015610d1f57600080fd5b5061043460048036036080811015610d3657600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7157600080fd5b820183602082011115610d8357600080fd5b80359060200191846001830284011164010000000083111715610da557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fd8945050505050565b348015610df257600080fd5b5061043460048036036020811015610e0957600080fd5b5035612000565b348015610e1c57600080fd5b5061031760048036036020811015610e3357600080fd5b5035600160a060020a0316612014565b348015610e4f57600080fd5b506105b760048036036020811015610e6657600080fd5b5035612027565b348015610e7957600080fd5b506105b760048036036020811015610e9057600080fd5b5035612046565b348015610ea357600080fd5b5061034060048036036020811015610eba57600080fd5b5035612074565b348015610ecd57600080fd5b5061043460048036036020811015610ee457600080fd5b5035600160a060020a031661221b565b348015610f0057600080fd5b5061034060048036036020811015610f1757600080fd5b5035612251565b348015610f2a57600080fd5b50610f4860048036036020811015610f4157600080fd5b5035612352565b6040518088815260200187815260200186815260200185815260200184600160a060020a0316600160a060020a031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fbf578181015183820152602001610fa7565b50505050905090810190601f168015610fec5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561100c57600080fd5b506103df6004803603602081101561102357600080fd5b5035612517565b34801561103657600080fd5b50610434612535565b34801561104b57600080fd5b506104346004803603604081101561106257600080fd5b5080359060200135600160a060020a031661253e565b34801561108457600080fd5b506104346004803603602081101561109b57600080fd5b5035612647565b3480156110ae57600080fd5b506103df6126f6565b3480156110c357600080fd5b50610317600480360360408110156110da57600080fd5b50600160a060020a0381358116916020013516612705565b6105b76004803603602081101561110857600080fd5b5035612733565b34801561111b57600080fd5b506105b76004803603602081101561113257600080fd5b503561273f565b34801561114557600080fd5b506111636004803603602081101561115c57600080fd5b5035612754565b6040518087815260200186815260200185815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b820191906000526020600020905b8154815290600101906020018083116112c557829003601f168201915b505050505090505b90565b60006112f882612906565b151561130357600080fd5b50600090815260026020526040902054600160a060020a031690565b600061132a82611a63565b9050600160a060020a03838116908216141561134557600080fd5b33600160a060020a038216148061136157506113618133612705565b151561136c57600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d3336115a5565b15156113de57600080fd5b6113ed86868686866000612923565b9695505050505050565b606060118054806020026020016040519081016040528092919081815260200182805480156112e257602002820191906000526020600020905b815481526020019060010190808311611431575050505050905090565b61145733612014565b151561146257600080fd5b61146b81612c3c565b50565b60075490565b61147d336115a5565b151561148857600080fd5b8015156114df576040805160e560020a62461bcd02815260206004820152601060248201527f426173652055524920696e76616c696400000000000000000000000000000000604482015290519081900360640190fd5b6114eb600d8383613a39565b505050565b6114fa3382612c84565b151561150557600080fd5b6114eb838383612cdb565b61151933612014565b151561152457600080fd5b61146b81612cfa565b600061153883611af3565b821061154357600080fd5b600160a060020a038316600090815260056020526040902080548390811061156757fe5b906000526020600020015490505b92915050565b60009081526014602052604090206004015490565b60009081526014602052604090206003015490565b6000611575600c8363ffffffff612d4216565b6114eb8383836020604051908101604052806000815250611fd8565b6115de3382612c84565b1515611634576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b61163d81612d79565b600090815260136020526040812055565b6060611659336115a5565b151561166457600080fd5b6000838152601460205260408120548491106116b8576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008481526014602052604090206002810154600190910154038381101561172a576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420656e6f756768206c65667420696e2065646974696f6e000000000000604482015290519081900360640190fd5b606084604051908082528060200260200182016040528015611756578160200160208202803883390190505b50905060005b8581101561178e5761176e8888612d8b565b828281518110151561177c57fe5b6020908102909101015260010161175c565b509695505050505050565b60006117a4336115a5565b15156117af57600080fd5b600082815260146020526040812054839110611803576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611873576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b61187d8585612d8b565b95945050505050565b61188f33612dbb565b565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b600061192961146e565b821061193457600080fd5b600780548390811061194257fe5b90600052602060002001549050919050565b61195d336115a5565b151561196857600080fd5b6000828152601460205260408120548391106119bc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060040155565b6119db336115a5565b15156119e657600080fd5b600083815260146020526040812054849110611a3a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b6000848152601460205260409020611a56906006018484613a39565b5050505050565b600e5481565b600081815260016020526040812054600160a060020a031680151561157557600080fd5b600160a060020a038116600090815260156020908152604091829020805483518184028101840190945280845260609392830182828015611ae757602002820191906000526020600020905b815481526020019060010190808311611ad3575b50505050509050919050565b6000600160a060020a0382161515611b0a57600080fd5b50600160a060020a031660009081526003602052604090205490565b611b2f33612014565b1515611b3a57600080fd5b61146b81612e03565b611b4c336115a5565b1515611b5757600080fd5b600081815260146020526040812054829110611bab576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff000000000000000000000000000000000000000019169055565b600f5481565b60009081526014602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b60009081526014602052604090206005810154600490910154600160a060020a0390911691565b60009081526014602052604090206001015490565b611c56336115a5565b1515611c6157600080fd5b600082815260146020526040812054839110611cb5576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060030155565b6060611cd682612e4b565b805480602002602001604051908101604052809291908181526020018280548015611ae75760200282019190600052602060002090815481526020019060010190808311611ad35750505050509050919050565b600081815260146020526040812060050154829074010000000000000000000000000000000000000000900460ff161515611daf576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e2064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611e1f576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b60008481526014602052604090206003810154341015611e89576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f7420656e6f75676820455448000000000000000000000000000000000000604482015290519081900360640190fd5b6000611e958787612d8b565b6003830154600584015460048501549293506113ed92600160a060020a0390911690612e65565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b60006115753383611799565b600160a060020a038216331415611f3f57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60105481565b6000611fbe336115a5565b1515611fc957600080fd5b6113ed86868686866001612923565b611fe38484846114f0565b611fef84848484612f62565b1515611ffa57600080fd5b50505050565b612009336115a5565b151561163457600080fd5b6000611575600b8363ffffffff612d4216565b601180548290811061203557fe5b600091825260209091200154905081565b60008181526014602052604081206002810154600182015461206d9163ffffffff6130de16565b9392505050565b60608161208081612906565b15156120d6576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b60008381526013602090815260409182902054600d8054845160026001831615610100026000190190921691909104601f810185900485028201850190955284815291936122139383018282801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050506000858152601460209081526040918290206006018054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152945092508301828280156122095780601f106121de57610100808354040283529160200191612209565b820191906000526020600020905b8154815290600101906020018083116121ec57829003601f168201915b50505050506130f3565b949350505050565b612224336115a5565b151561222f57600080fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b600081815260146020908152604091829020600d80548451601f60026000196101006001861615020190931692909204918201859004850281018501909552808552606094929361206d939291908301828280156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b5050505060068401805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b60008181526014602052604081205481908190819081908190606090889083106123b4576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600089815260146020908152604091829020600180820154600280840154600385015460048601546005870154600d80548b516101009982161599909902600019011695909504601f81018a90048a0288018a01909a5289875296989497929691959094600160a060020a038316947401000000000000000000000000000000000000000090930460ff16936124f99391908301828280156124975780601f1061246c57610100808354040283529160200191612497565b820191906000526020600020905b81548152906001019060200180831161247a57829003601f168201915b5050505060068a01805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b82925098509850985098509850985098505050919395979092949650565b600090815260146020526040902060050154600160a060020a031690565b61188f33612cfa565b612547336115a5565b151561255257600080fd5b6000828152601460205260408120548391106125a6576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600083815260146020908152604080832060168352818420546005820154600160a060020a031685526015909352922080548190839081106125e457fe5b60009182526020808320909101829055600160a060020a03909616808252601587526040808320805460018101825590845288842081018a9055988352601690975295902095909555506005018054600160a060020a0319169092179091555050565b612650336115a5565b151561265b57600080fd5b6000818152601460205260408120548291106126af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b601254600160a060020a031681565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60006115753383611d2a565b60009081526014602052604090206002015490565b600080600080600060608661276881612906565b15156127be576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600088815260136020908152604080832054808452601490925290912060018101546002820154600583015484929190600160a060020a03166128008e611a63565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526128ef939092909183018282801561288d5780601f106128625761010080835404028352916020019161288d565b820191906000526020600020905b81548152906001019060200180831161287057829003601f168201915b5050505060068901805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b949f939e50919c509a509850909650945050505050565b600090815260016020526040902054600160a060020a0316151590565b600080871180156129365750600e548711155b151561298c576040805160e560020a62461bcd02815260206004820152601460248201527f45646974696f6e2073697a6520696e76616c6964000000000000000000000000604482015290519081900360640190fd5b6000851015801561299e575060648511155b15156129f4576040805160e560020a62461bcd02815260206004820152601960248201527f41727469737420636f6d6d697373696f6e20696e76616c696400000000000000604482015290519081900360640190fd5b600160a060020a0384161515612a54576040805160e560020a62461bcd02815260206004820152601660248201527f417274697374206163636f756e74206d697373696e6700000000000000000000604482015290519081900360640190fd5b82511515612aac576040805160e560020a62461bcd02815260206004820152601160248201527f546f6b656e2055524920696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b6000612ac5600e5460105461312890919063ffffffff16565b9050610100604051908101604052808281526020018981526020016000815260200188815260200187815260200186600160a060020a0316815260200184151581526020018581525060146000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160050160146101000a81548160ff02191690831515021790555060e0820151816006019080519060200190612bbc929190613ab7565b5050506010819055601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801819055612c03858261313a565b60405181907f962bb64b059ad60d491bef43125921210925c52b11ff1cc093409113c8c5fe3790600090a2506001979650505050505050565b612c4d600c8263ffffffff61317616565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600080612c9083611a63565b905080600160a060020a031684600160a060020a03161480612ccb575083600160a060020a0316612cc0846112ed565b600160a060020a0316145b8061221357506122138185612705565b612ce68383836131c4565b612cf083826132d3565b6114eb82826133c3565b612d0b600c8263ffffffff61340116565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515612d5957600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61146b612d8582611a63565b8261344d565b600080612d978361347d565b9050612da384826134e0565b60008181526013602052604090209290925550919050565b612dcc600b8263ffffffff61340116565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b612e14600b8263ffffffff61317616565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60008311156114eb576000811115612f29576000612e9a82612e8e86606463ffffffff6134fd16565b9063ffffffff61352116565b604051909150600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612ed3573d6000803e3d6000fd5b506000612ee6348363ffffffff6130de16565b601254604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015612f21573d6000803e3d6000fd5b5050506114eb565b601254604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611ffa573d6000803e3d6000fd5b6000612f7684600160a060020a031661354c565b1515612f8457506001612213565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015613017578181015183820152602001612fff565b50505050905090810190601f1680156130445780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561306657600080fd5b505af115801561307a573d6000803e3d6000fd5b505050506040513d602081101561309057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6000828211156130ed57600080fd5b50900390565b60408051602081810183526000808352835180830185528181528451928301909452815260609261206d928692869290613554565b60008282018381101561206d57600080fd5b600160a060020a039091166000908152601560209081526040808320805460018101825590845282842081018590559383526016909152902055565b600160a060020a038116151561318b57600080fd5b6131958282612d42565b1561319f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a03166131d782611a63565b600160a060020a0316146131ea57600080fd5b600160a060020a03821615156131ff57600080fd5b613208816137a9565b600160a060020a03831660009081526003602052604090205461323290600163ffffffff6130de16565b600160a060020a03808516600090815260036020526040808220939093559084168152205461326890600163ffffffff61312816565b600160a060020a03808416600081815260036020908152604080832095909555858252600190528381208054600160a060020a031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a0382166000908152600560205260408120546132fd90600163ffffffff6130de16565b60008381526006602052604090205490915080821461339a57600160a060020a038416600090815260056020526040812080548490811061333a57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a031681526020019081526020016000208381548110151561337a57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490611a56906000198301613b25565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b600160a060020a038116151561341657600080fd5b6134208282612d42565b151561342b57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61345782826137e4565b61346182826132d3565b600081815260066020526040812055613479816138a3565b5050565b60008181526014602052604081206002810154815483916134a4919063ffffffff61312816565b60028301549091506134bd90600163ffffffff61312816565b6002830155600f546134d690600163ffffffff61312816565b600f559392505050565b6134ea8282613941565b6134f482826133c3565b613479816139f5565b600080821161350b57600080fd5b6000828481151561351857fe5b04949350505050565b600082151561353257506000611575565b82820282848281151561354157fe5b041461206d57600080fd5b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156135a8576020820181803883390190505b509050806000805b885181101561360e5788818151811015156135c757fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135ee57fe5b906020010190600160f860020a031916908160001a9053506001016135b0565b5060005b875181101561367057878181518110151561362957fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561365057fe5b906020010190600160f860020a031916908160001a905350600101613612565b5060005b86518110156136d257868181518110151561368b57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136b257fe5b906020010190600160f860020a031916908160001a905350600101613674565b5060005b85518110156137345785818151811015156136ed57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561371457fe5b906020010190600160f860020a031916908160001a9053506001016136d6565b5060005b845181101561379657848181518110151561374f57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561377657fe5b906020010190600160f860020a031916908160001a905350600101613738565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561146b5760009081526002602052604090208054600160a060020a0319169055565b81600160a060020a03166137f782611a63565b600160a060020a03161461380a57600080fd5b613813816137a9565b600160a060020a03821660009081526003602052604090205461383d90600163ffffffff6130de16565b600160a060020a038316600081815260036020908152604080832094909455848252600190528281208054600160a060020a03191690559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6007546000906138ba90600163ffffffff6130de16565b600083815260086020526040812054600780549394509092849081106138dc57fe5b90600052602060002001549050806007838154811015156138f957fe5b6000918252602080832090910192909255828152600890915260409020829055600780549061392c906000198301613b25565b50505060009182525060086020526040812055565b600160a060020a038216151561395657600080fd5b61395f81612906565b1561396957600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546139aa91613128565b600160a060020a0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a7a5782800160ff19823516178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578235825591602001919060010190613a8c565b50613ab3929150613b45565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613af857805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613b0a565b8154818355818111156114eb576000838152602090206114eb9181019083015b6112ea91905b80821115613ab35760008155600101613b4b56fe45646974696f6e20494420696e76616c69640000000000000000000000000000a165627a7a72305820043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e
-----Decoded View---------------
Arg [0] : _rendarAddress (address): 0x4FF3Eb0a7f68D6eB80fCf5039032ec927131eF2e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e
Deployed Bytecode Sourcemap
35553:16907:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7154:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7154:135:0;-1:-1:-1;;7154:135:0;;;;;;;;;;;;;;;;;;;;;35179:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11247:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11247:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11247:154:0;;;;;;;-1:-1:-1;;;;;11247:154:0;;;;;;;;;;;;;;10655:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10655:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10655:299:0;;;;;;;;;;;42647:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42647:377:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;42647:377:0;;;;;;;;;;;;;-1:-1:-1;;;;;42647:377:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42647:377:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42647:377:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42647:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42647:377:0;;-1:-1:-1;42647:377:0;;-1:-1:-1;;;;;42647:377:0;50441:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50441:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;50441:115:0;;;;;;;;;;;;;;;;;31718:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31718:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31718:110:0;-1:-1:-1;;;;;31718:110:0;;;21754:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21754:96:0;;;;;;;;;;;;;;;;;;;;47494:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47494:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47494:207:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;47494:207:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47494:207:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;47494:207:0;;-1:-1:-1;47494:207:0;-1:-1:-1;47494:207:0;;12837:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12837:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12837:184:0;;;;;;;;;;;;;;;;;;31836:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31836:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31836:116:0;-1:-1:-1;;;;;31836:116:0;;;21411:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21411:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21411:185:0;;;;;;;;;49706:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49706:251:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49706:251:0;;;49153:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49153:235:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49153:235:0;;;31591:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31591:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31591:119:0;-1:-1:-1;;;;;31591:119:0;;;13674:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13674:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13674:134:0;;;;;;;;;;;;;;;;;;41721:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41721:211:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41721:211:0;;;40761:605;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40761:605:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40761:605:0;;;;;;;;;;;;;;40375:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40375:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40375:237:0;;;;;;;;;30407:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30407:93:0;;;;35892:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35892:59:0;;;;22195:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22195:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22195:151:0;;;46391:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46391:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46391:241:0;;;;;;;;46640:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46640:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46640:224:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;46640:224:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46640:224:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;46640:224:0;;-1:-1:-1;46640:224:0;-1:-1:-1;46640:224:0;;36660:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36660:34:0;;;;10043:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10043:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10043:181:0;;;50564:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50564:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50564:162:0;-1:-1:-1;;;;;50564:162:0;;;9659:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9659:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9659:153:0;-1:-1:-1;;;;;9659:153:0;;;30283:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30283:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30283:116:0;-1:-1:-1;;;;;30283:116:0;;;45041:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45041:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45041:184:0;;;36755:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36755:32:0;;;;50215:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50215:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50215:218:0;;;49396:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49396:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49396:302:0;;;;;;;-1:-1:-1;;;;;49396:302:0;;;;;;;;;;;;;;;;;;;;;48656:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48656:239:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48656:239:0;;;46872:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46872:212:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46872:212:0;;;;;;;;47954:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47954:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47954:126:0;-1:-1:-1;;;;;47954:126:0;;;38746:629;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38746:629:0;;;;;;;;;35378:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35378:89:0;;;;40111:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40111:124:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40111:124:0;;;11701:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11701:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11701:217:0;;;;;;;;;;;36857:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36857:35:0;;;;42271:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42271:368:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;42271:368:0;;;;;;;;;;;;;-1:-1:-1;;;;;42271:368:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42271:368:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42271:368:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42271:368:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42271:368:0;;-1:-1:-1;42271:368:0;;-1:-1:-1;;;;;42271:368:0;14527:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14527:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14527:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14527:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14527:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14527:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14527:214:0;;-1:-1:-1;14527:214:0;;-1:-1:-1;;;;;14527:214:0;42004:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42004:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42004:137:0;;;30150:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30150:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30150:125:0;-1:-1:-1;;;;;30150:125:0;;;36940:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36940:32:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36940:32:0;;;51493:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51493:251:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51493:251:0;;;48088:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48088:279:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48088:279:0;;;47709:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47709:145:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47709:145:0;-1:-1:-1;;;;;47709:145:0;;;48375:273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48375:273:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48375:273:0;;;50734:751;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50734:751:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50734:751:0;-1:-1:-1;;;;;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49965:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49965:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49965:242:0;;;31960:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31960:87:0;;;;45423:960;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45423:960:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45423:960:0;;;;;;-1:-1:-1;;;;;45423:960:0;;;45233:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45233:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45233:182:0;;;37015:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37015:36:0;;;;12247:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12247:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12247:147:0;;;;;;;;;;;38598:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38598:140:0;;;48903:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48903:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48903:242:0;;;51752:703;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51752:703:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51752:703:0;-1:-1:-1;;;;;51752:703:0;;;;;;-1:-1:-1;;;;;51752:703:0;-1:-1:-1;;;;;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:135;-1:-1:-1;;7248:33:0;7224:4;7248:33;;;;;;;;;;;;;;7154:135::o;35179:85::-;35251:5;35244:12;;;;;;;;-1:-1:-1;;35244:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35218:13;;35244:12;;35251:5;;35244:12;;35251:5;35244:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35179:85;;:::o;11247:154::-;11306:7;11334:16;11342:7;11334;:16::i;:::-;11326:25;;;;;;;;-1:-1:-1;11369:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11369:24:0;;11247:154::o;10655:299::-;10719:13;10735:16;10743:7;10735;:16::i;:::-;10719:32;-1:-1:-1;;;;;;10770:11:0;;;;;;;;10762:20;;;;;;10801:10;-1:-1:-1;;;;;10801:19:0;;;;:58;;;10824:35;10841:5;10848:10;10824:16;:35::i;:::-;10793:67;;;;;;;;10873:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10873:29:0;-1:-1:-1;;;;;10873:29:0;;;;;;;;;10918:28;;10873:24;;10918:28;;;;;;;10655:299;;;:::o;42647:377::-;42889:13;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;42922:94;42937:12;42951:11;42964:17;42983:14;42999:9;43010:5;42922:14;:94::i;:::-;42915:101;42647:377;-1:-1:-1;;;;;;42647:377:0:o;50441:115::-;50485:28;50533:15;50526:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50441:115;:::o;31718:110::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;31796:24;31812:7;31796:15;:24::i;:::-;31718:110;:::o;21754:96::-;21825:10;:17;21754:96;:::o;47494:207::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;47605:30;;;47597:59;;;;;-1:-1:-1;;;;;47597:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47667:26;:12;47682:11;;47667:26;:::i;:::-;;47494:207;;:::o;12837:184::-;12928:39;12947:10;12959:7;12928:18;:39::i;:::-;12920:48;;;;;;;;12981:32;12995:4;13001:2;13005:7;12981:13;:32::i;31836:116::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;31917:27;31936:7;31917:18;:27::i;21411:185::-;21491:7;21527:16;21537:5;21527:9;:16::i;:::-;21519:24;;21511:33;;;;;;-1:-1:-1;;;;;21562:19:0;;;;;;:12;:19;;;;;:26;;21582:5;;21562:26;;;;;;;;;;;;;;21555:33;;21411:185;;;;;:::o;49706:251::-;49783:25;49862:37;;;:25;:37;;;;;49917:32;;;;49706:251::o;49153:235::-;49226:19;49299:37;;;:25;:37;;;;;49354:26;;;;49153:235::o;31591:119::-;31652:4;31676:26;:13;31694:7;31676:26;:17;:26;:::i;13674:134::-;13761:39;13778:4;13784:2;13788:7;13761:39;;;;;;;;;;;;;:16;:39::i;41721:211::-;41778:39;41797:10;41809:7;41778:18;:39::i;:::-;41770:84;;;;;;;-1:-1:-1;;;;;41770:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41865:14;41871:7;41865:5;:14::i;:::-;41897:27;;;;:18;:27;;;;;41890:34;41721:211::o;40761:605::-;40910:26;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;40877:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;40951:26;41032:37;;;:25;:37;;;;;:51;;;;40980:49;;;;;:103;41102:28;;;;41094:67;;;;;-1:-1:-1;;;;;41094:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41174:23;41214:6;41200:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;41200:21:0;-1:-1:-1;41174:47:0;-1:-1:-1;41237:6:0;41232:103;41253:6;41249:1;:10;41232:103;;;41293:30;41307:3;41312:10;41293:13;:30::i;:::-;41281:6;41288:1;41281:9;;;;;;;;;;;;;;;;;;:42;41261:3;;41232:103;;;-1:-1:-1;41352:6:0;40761:605;-1:-1:-1;;;;;;40761:605:0:o;40375:237::-;40538:16;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;40467:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;37989:37;;;;:25;:37;;;;;:49;;;;37935:51;;;;;40505:10;;-1:-1:-1;37927:132:0;;;;;-1:-1:-1;;;;;37927:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40574:30;40588:3;40593:10;40574:13;:30::i;:::-;40567:37;40375:237;-1:-1:-1;;;;;40375:237:0:o;30407:93::-;30459:33;30481:10;30459:21;:33::i;:::-;30407:93::o;35892:59::-;;;;;;;;;;;;;;;-1:-1:-1;;35892:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22195:151::-;22253:7;22289:13;:11;:13::i;:::-;22281:21;;22273:30;;;;;;22321:10;:17;;22332:5;;22321:17;;;;;;;;;;;;;;22314:24;;22195:151;;;:::o;46391:241::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46527:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;46550:37:0;;;;:25;:37;;;;;;:54;;:74;46391:241::o;46640:224::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46775:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;46798:37;;;;:25;:37;;;;;:58;;:46;;46847:9;;46798:58;:::i;:::-;;31574:1;46640:224;;;:::o;36660:34::-;;;;:::o;10043:181::-;10098:7;10134:20;;;:11;:20;;;;;;-1:-1:-1;;;;;10134:20:0;10173:19;;;10165:28;;;;;50564:162;-1:-1:-1;;;;;50683:35:0;;;;;;:18;:35;;;;;;;;;50676:42;;;;;;;;;;;;;;;;;50635:28;;50676:42;;;50683:35;50676:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50564:162;;;:::o;9659:153::-;9714:7;-1:-1:-1;;;;;9742:19:0;;;;9734:28;;;;;;-1:-1:-1;;;;;;9780:24:0;;;;;:17;:24;;;;;;;9659:153::o;30283:116::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;30364:27;30383:7;30364:18;:27::i;45041:184::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45142:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;45212:5:0;45165:37;;;:25;:37;;;;;:44;;:52;;-1:-1:-1;;45165:52:0;;;45041:184::o;36755:32::-;;;;:::o;50215:218::-;50282:12;50348:37;;;:25;:37;;;;;50403:22;;;;;;;;;50215:218::o;49396:302::-;49467:22;49570:37;;;:25;:37;;;;;49626:29;;;;49657:32;;;;;-1:-1:-1;;;;;49626:29:0;;;;49396:302::o;48656:239::-;48728:23;48805:37;;;:25;:37;;;;;48860:27;;;;48656:239::o;46872:212::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46991:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;47014:37:0;;;;:25;:37;;;;;;:48;;:62;46872:212::o;47954:126::-;48015:16;48051:21;48066:5;48051:14;:21::i;:::-;48044:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47954:126;;;:::o;38746:629::-;38901:16;37606:37;;;:25;:37;;;;;:44;;;:37;;:44;;;;;37598:73;;;;;;;-1:-1:-1;;;;;37598:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37989:37;;;;:25;:37;;;;;:49;;;;37935:51;;;;;38860:10;;-1:-1:-1;37927:132:0;;;;;-1:-1:-1;;;;;37927:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38930:38;38971:37;;;:25;:37;;;;;39040:26;;;;39027:9;:39;;39019:66;;;;;-1:-1:-1;;;;;39019:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39125:15;39143:30;39157:3;39162:10;39143:13;:30::i;:::-;39248:26;;;;39276:29;;;;39307:32;;;;39125:48;;-1:-1:-1;39236:104:0;;-1:-1:-1;;;;;39276:29:0;;;;39236:11;:104::i;35378:89::-;35452:7;35445:14;;;;;;;;-1:-1:-1;;35445:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35419:13;;35445:14;;35452:7;;35445:14;;35452:7;35445:14;;;;;;;;;;;;;;;;;;;;;;;;40111:124;40161:16;40197:30;40204:10;40216;40197:6;:30::i;11701:217::-;-1:-1:-1;;;;;11781:16:0;;11787:10;11781:16;;11773:25;;;;;;11828:10;11809:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;11809:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;11809:45:0;;;;;;;;;;11870:40;;;;;;;11809:34;;11828:10;11870:40;;;;;;;;;;;11701:217;;:::o;36857:35::-;;;;:::o;42271:368::-;42505:13;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;42538:93;42553:12;42567:11;42580:17;42599:14;42615:9;42626:4;42538:14;:93::i;14527:214::-;14634:31;14647:4;14653:2;14657:7;14634:12;:31::i;:::-;14684:48;14707:4;14713:2;14717:7;14726:5;14684:22;:48::i;:::-;14676:57;;;;;;;;14527:214;;;;:::o;42004:137::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;30150:125;30214:4;30238:29;:16;30259:7;30238:29;:20;:29;:::i;36940:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36940:32:0;:::o;51493:251::-;51558:7;51619:37;;;:25;:37;;;;;51706:29;;;;51674:27;;;;:62;;;:31;:62;:::i;:::-;51667:69;51493:251;-1:-1:-1;;;51493:251:0:o;48088:279::-;48189:13;48165:8;38150:17;38158:8;38150:7;:17::i;:::-;38142:53;;;;;;;-1:-1:-1;;;;;38142:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48215:17;48235:28;;;:18;:28;;;;;;;;;;48299:12;48281:78;;;;;;;;;;;-1:-1:-1;;48281:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;48235:28;;48281:78;;;;48299:12;48281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48313:36:0;;;;:25;:36;;;;;;;;;:45;;48281:78;;;;;;;;;;;-1:-1:-1;;48281:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48313:45:0;-1:-1:-1;48281:78:0;;48313:45;48281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:78::i;:::-;48274:85;48088:279;-1:-1:-1;;;;48088:279:0:o;47709:145::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;47816:13;:30;;-1:-1:-1;;;;;;47816:30:0;-1:-1:-1;;;;;47816:30:0;;;;;;;;;;47709:145::o;48375:273::-;48487:38;48528:37;;;:25;:37;;;;;;;;;48601:12;48583:57;;;;;;-1:-1:-1;;48583:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48451:23;;48528:37;;48583:57;;;48601:12;48583:57;;;48601:12;48583:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;48615:24:0;;;48583:57;;;;;;;;;;;;;-1:-1:-1;;48583:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48583:57:0;;;48615:24;48583:57;;;;;;;;;;;;;;;;;;;;;;;;50734:751;50843:20;37764:37;;;:25;:37;;;;;:47;50843:20;;;;;;;;;;51029:23;;50807:10;;37764:51;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;51071:38;51112:37;;;:25;:37;;;;;;;;;51178:27;;;;;51216:29;;;;;51256:26;;;;51293:32;;;;51336:29;;;;51427:12;51409:57;;;;51336:29;51409:57;;;;;;;;-1:-1:-1;;51409:57:0;;;;;;;;;;;;;;;;;;;;;;;;51112:37;;51178:27;;51216:29;;51256:26;;51293:32;;-1:-1:-1;;;;;51336:29:0;;;51376:22;;;;;;;51409:57;;51427:12;51409:57;;;51427:12;51409:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;51441:24:0;;;51409:57;;;;;;;;;;;;;-1:-1:-1;;51409:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51409:57:0;;;51441:24;51409:57;;;;;;;;;;;;;;;;;;;;;;;;;51160:317;;;;;;;;;;;;;;;;;;50734:751;;;;;;;;;;:::o;49965:242::-;50039:22;50115:37;;;:25;:37;;;;;50170:29;;;-1:-1:-1;;;;;50170:29:0;;49965:242::o;31960:87::-;32009:30;32028:10;32009:18;:30::i;45423:960::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45561:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;45586:46;45635:37;;;:25;:37;;;;;;;;45714:22;:34;;;;;;45875:37;;;;-1:-1:-1;;;;;45875:37:0;45856:57;;:18;:57;;;;;45979:39;;45856:57;;45714:34;;45979:39;;;;;;;;;;;;;;;;;45972:46;;;-1:-1:-1;;;;;46104:34:0;;;;;;:18;:34;;;;;;:41;;39:1:-1;23:18;;45:23;;46156:51:0;;;;;;;;;;;46218:34;;;:22;:34;;;;;;:59;;;;-1:-1:-1;46321:37:0;;:54;;-1:-1:-1;;;;;;46321:54:0;;;;;;;-1:-1:-1;;45423:960:0:o;45233:182::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45333:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;45356:37:0;;;;:25;:37;;;;;:44;;:51;;-1:-1:-1;;45356:51:0;;;;;45233:182::o;37015:36::-;;;-1:-1:-1;;;;;37015:36:0;;:::o;12247:147::-;-1:-1:-1;;;;;12351:25:0;;;12327:4;12351:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12247:147::o;38598:140::-;38660:16;38696:34;38707:10;38719;38696;:34::i;48903:242::-;48977:22;49053:37;;;:25;:37;;;;;49108:29;;;;48903:242::o;51752:703::-;51855:18;51884:20;51915:22;51948;51981:14;52006:23;51821:8;38150:17;38158:8;38150:7;:17::i;:::-;38142:53;;;;;;;-1:-1:-1;;;;;38142:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52048:17;52068:28;;;:18;:28;;;;;;;;;52148:36;;;:25;:36;;;;;;52233:27;;;;52271:29;;;;52311;;;;52068:28;;52233:27;52271:29;-1:-1:-1;;;;;52311:29:0;52351:17;52087:8;52351:7;:17::i;:::-;52397:12;52379:57;;;;;;;;-1:-1:-1;;52379:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52397:12;;52379:57;;52397:12;52379:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;52411:24:0;;;52379:57;;;;;;;;;;;;;-1:-1:-1;;52379:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52379:57:0;;;52411:24;52379:57;;;;;;;;;;;;;;;;;;;;;;;;;52195:252;;;;-1:-1:-1;52195:252:0;;-1:-1:-1;52195:252:0;-1:-1:-1;52195:252:0;-1:-1:-1;52195:252:0;;-1:-1:-1;51752:703:0;-1:-1:-1;;;;;51752:703:0:o;14937:155::-;14994:4;15027:20;;;:11;:20;;;;;;-1:-1:-1;;;;;15027:20:0;15065:19;;;14937:155::o;43032:1347::-;43275:13;43371:1;43356:12;:16;:47;;;;;43392:11;;43376:12;:27;;43356:47;43348:80;;;;;;;-1:-1:-1;;;;;43348:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43468:1;43447:17;:22;;:50;;;;;43494:3;43473:17;:24;;43447:50;43439:88;;;;;;;-1:-1:-1;;;;;43439:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43546:28:0;;;;43538:63;;;;;-1:-1:-1;;;;;43538:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43620:23;;:28;;43612:58;;;;;-1:-1:-1;;;;;43612:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43737:18;43758:37;43783:11;;43758:20;;:24;;:37;;;;:::i;:::-;43737:58;;43875:251;;;;;;;;;43904:10;43875:251;;;;43929:12;43875:251;;;;43956:1;43875:251;;;;43998:11;43875:251;;;;44024:17;43875:251;;;;44056:14;-1:-1:-1;;;;;43875:251:0;;;;;44085:6;43875:251;;;;;;44106:9;43875:251;;;43835:25;:37;43861:10;43835:37;;;;;;;;;;;:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43835:291:0;;;;;-1:-1:-1;;;;;43835:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;44139:20:0;:33;;;44185:15;27:10:-1;;39:1;23:18;;45:23;;-1:-1;44185:32:0;;;;;;;;;44230:50;44253:14;44162:10;44230:22;:50::i;:::-;44321:26;;44336:10;;44321:26;;;;;-1:-1:-1;44367:4:0;;43032:1347;-1:-1:-1;;;;;;;43032:1347:0:o;32055:137::-;32117:26;:13;32135:7;32117:26;:17;:26;:::i;:::-;32159:25;;-1:-1:-1;;;;;32159:25:0;;;;;;;;32055:137;:::o;15464:249::-;15549:4;15566:13;15582:16;15590:7;15582;:16::i;:::-;15566:32;;15628:5;-1:-1:-1;;;;;15617:16:0;:7;-1:-1:-1;;;;;15617:16:0;;:51;;;;15661:7;-1:-1:-1;;;;;15637:31:0;:20;15649:7;15637:11;:20::i;:::-;-1:-1:-1;;;;;15637:31:0;;15617:51;:87;;;;15672:32;15689:5;15696:7;15672:16;:32::i;22729:245::-;22815:38;22835:4;22841:2;22845:7;22815:19;:38::i;:::-;22866:47;22899:4;22905:7;22866:32;:47::i;:::-;22926:40;22954:2;22958:7;22926:27;:40::i;32200:145::-;32265:29;:13;32286:7;32265:29;:20;:29;:::i;:::-;32310:27;;-1:-1:-1;;;;;32310:27:0;;;;;;;;32200:145;:::o;29320:165::-;29392:4;-1:-1:-1;;;;;29417:21:0;;;;29409:30;;;;;;-1:-1:-1;;;;;;29457:20:0;:11;:20;;;;;;;;;;;;;;;29320:165::o;17032:92::-;17084:32;17090:16;17098:7;17090;:16::i;:::-;17108:7;17084:5;:32::i;41374:265::-;41448:16;41477:15;41495:24;41508:10;41495:12;:24::i;:::-;41477:42;;41532:19;41538:3;41543:7;41532:5;:19::i;:::-;41564:27;;;;:18;:27;;;;;:40;;;;-1:-1:-1;41564:27:0;41374:265;-1:-1:-1;41374:265:0:o;30662:154::-;30730:32;:16;30754:7;30730:32;:23;:32;:::i;:::-;30778:30;;-1:-1:-1;;;;;30778:30:0;;;;;;;;30662:154;:::o;30508:146::-;30573:29;:16;30594:7;30573:29;:20;:29;:::i;:::-;30618:28;;-1:-1:-1;;;;;30618:28:0;;;;;;;;30508:146;:::o;24303:126::-;-1:-1:-1;;;;;24402:19:0;24365:17;24402:19;;;:12;:19;;;;;;24303:126::o;39383:587::-;39524:1;39510:11;:15;39506:457;;;39569:1;39548:18;:22;39544:408;;;39593:21;39617:44;39642:18;39617:20;:11;39633:3;39617:20;:15;:20;:::i;:::-;:24;:44;:24;:44;:::i;:::-;39680:39;;39593:68;;-1:-1:-1;;;;;;39680:24:0;;;:39;;;;;39593:68;;39680:39;;;;39593:68;39680:24;:39;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;39740:27:0;39770:28;:9;39784:13;39770:28;:13;:28;:::i;:::-;39817:13;;:43;;39740:58;;-1:-1:-1;;;;;;39817:13:0;;:43;;;;;39740:58;;39817:13;:43;:13;:43;39740:58;39817:13;:43;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39817:43:0;39544:408;;;;;39903:13;;:33;;-1:-1:-1;;;;;39903:13:0;;;;39926:9;39903:33;;;;;:13;:33;:13;:33;39926:9;39903:13;:33;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;18455:356:0;18577:4;18604:15;:2;-1:-1:-1;;;;;18604:13:0;;:15::i;:::-;18603:16;18599:60;;;-1:-1:-1;18643:4:0;18636:11;;18599:60;18687:70;;;;;18724:10;18687:70;;;;;;-1:-1:-1;;;;;18687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18671:13;;18687:36;;;;;;18724:10;;18736:4;;18742:7;;18751:5;;18687:70;;;;;;;;;;;18671:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18687:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18687:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18687:70:0;-1:-1:-1;;18776:26:0;18786:16;18776:26;;-1:-1:-1;;18455:356:0;;;;;;:::o;4453:150::-;4511:7;4539:6;;;;4531:15;;;;;;-1:-1:-1;4569:5:0;;;4453:150::o;32514:168::-;32645:29;;;;;;;;;-1:-1:-1;32645:29:0;;;;;;;;;;;;;;;;;;;;;;;32592:33;;32645:29;;32655:2;;32659;;32645:29;:9;:29::i;4689:150::-;4747:7;4779:5;;;4803:6;;;;4795:15;;;;;47092:296;-1:-1:-1;;;;;47215:33:0;;;47186:26;47215:33;;;:18;:33;;;;;;;;:40;;39:1:-1;23:18;;45:23;;47266:49:0;;;;;;;;;;;47326:33;;;:22;:33;;;;;:54;47092:296::o;28772:186::-;-1:-1:-1;;;;;28849:21:0;;;;28841:30;;;;;;28891:18;28895:4;28901:7;28891:3;:18::i;:::-;28890:19;28882:28;;;;;;-1:-1:-1;;;;;28923:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;28923:27:0;28946:4;28923:27;;;28772:186::o;17507:414::-;17621:4;-1:-1:-1;;;;;17601:24:0;:16;17609:7;17601;:16::i;:::-;-1:-1:-1;;;;;17601:24:0;;17593:33;;;;;;-1:-1:-1;;;;;17645:16:0;;;;17637:25;;;;;;17675:23;17690:7;17675:14;:23::i;:::-;-1:-1:-1;;;;;17737:23:0;;;;;;:17;:23;;;;;;:30;;17765:1;17737:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;17711:23:0;;;;;;;:17;:23;;;;;;:56;;;;17802:21;;;;;;;:28;;17828:1;17802:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;17778:21:0;;;;;;;:17;:21;;;;;;;;:52;;;;17843:20;;;:11;:20;;;;;:25;;-1:-1:-1;;;;;;17843:25:0;;;;;17886:27;;17855:7;;17778:21;;17886:27;;;;;;17507:414;;;:::o;25906:1148::-;-1:-1:-1;;;;;26197:18:0;;26172:22;26197:18;;;:12;:18;;;;;:25;:32;;26227:1;26197:32;:29;:32;:::i;:::-;26240:18;26261:26;;;:17;:26;;;;;;26172:57;;-1:-1:-1;26394:28:0;;;26390:328;;-1:-1:-1;;;;;26461:18:0;;26439:19;26461:18;;;:12;:18;;;;;:34;;26480:14;;26461:34;;;;;;;;;;;;;;26439:56;;26545:11;26512:12;:18;26525:4;-1:-1:-1;;;;;26512:18:0;-1:-1:-1;;;;;26512:18:0;;;;;;;;;;;;26531:10;26512:30;;;;;;;;;;;;;;;;;;;;;:44;;;;26629:30;;;:17;:30;;;;;:43;;;26390:328;-1:-1:-1;;;;;26807:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;26807:27:0;;;:::i;24730:186::-;-1:-1:-1;;;;;24844:16:0;;;;;;;:12;:16;;;;;;;;:23;;24815:26;;;:17;:26;;;;;:52;;;24878:16;;;39:1:-1;23:18;;45:23;;24878:30:0;;;;;;;;24730:186::o;29037:189::-;-1:-1:-1;;;;;29117:21:0;;;;29109:30;;;;;;29158:18;29162:4;29168:7;29158:3;:18::i;:::-;29150:27;;;;;;;;-1:-1:-1;;;;;29190:20:0;29213:5;29190:20;;;;;;;;;;;:28;;-1:-1:-1;;29190:28:0;;;29037:189::o;23720:372::-;23787:27;23799:5;23806:7;23787:11;:27::i;:::-;23827:48;23860:5;23867:7;23827:32;:48::i;:::-;24025:1;23996:26;;;:17;:26;;;;;:30;24039:45;24014:7;24039:36;:45::i;:::-;23720:372;;:::o;44387:646::-;44447:7;44508:37;;;:25;:37;;;;;44663:29;;;;44633:25;;44447:7;;44633:60;;:25;:60;:29;:60;:::i;:::-;44774:29;;;;44615:78;;-1:-1:-1;44774:36:0;;44808:1;44774:36;:33;:36;:::i;:::-;44742:29;;;:68;44875:17;;:24;;44897:1;44875:24;:21;:24;:::i;:::-;44855:17;:44;45018:7;44387:646;-1:-1:-1;;;44387:646:0:o;23237:202::-;23301:24;23313:2;23317:7;23301:11;:24::i;:::-;23338:40;23366:2;23370:7;23338:27;:40::i;:::-;23391;23423:7;23391:31;:40::i;4014:303::-;4072:7;4167:5;;;4159:14;;;;;;4184:9;4200:1;4196;:5;;;;;;;;;4014:303;-1:-1:-1;;;;4014:303:0:o;3448:433::-;3506:7;3750:6;;3746:47;;;-1:-1:-1;3780:1:0;3773:8;;3746:47;3817:5;;;3821:1;3817;:5;3841;;;;;;;;:10;3833:19;;;;;5666:627;5726:4;6238:20;;6277:8;;5666:627::o;33096:1046::-;33228:33;33274:16;33299:2;33274:28;;33313:16;33338:2;33313:28;;33352:16;33377:2;33352:28;;33391:16;33416:2;33391:28;;33430:16;33455:2;33430:28;;33469:19;33554:3;:10;33541:3;:10;33528:3;:10;33515:3;:10;33502:3;:10;:23;:36;:49;:62;33491:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;33491:74:0;87:34:-1;135:17;;-1:-1;33491:74:0;-1:-1:-1;33469:96:0;-1:-1:-1;33469:96:0;33621:6;;33663:80;33679:3;:10;33675:1;:14;33663:80;;;33725:3;33729:1;33725:6;;;;;;;;;;;;;;;-1:-1:-1;;;33725:6:0;;-1:-1:-1;;;33725:6:0;33711;33718:3;;;;;;33711:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33711:20:0;;;;;;;;-1:-1:-1;33691:3:0;;33663:80;;;-1:-1:-1;33762:1:0;33753:80;33769:3;:10;33765:1;:14;33753:80;;;33815:3;33819:1;33815:6;;;;;;;;;;;;;;;-1:-1:-1;;;33815:6:0;;-1:-1:-1;;;33815:6:0;33801;33808:3;;;;;;33801:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33801:20:0;;;;;;;;-1:-1:-1;33781:3:0;;33753:80;;;-1:-1:-1;33852:1:0;33843:80;33859:3;:10;33855:1;:14;33843:80;;;33905:3;33909:1;33905:6;;;;;;;;;;;;;;;-1:-1:-1;;;33905:6:0;;-1:-1:-1;;;33905:6:0;33891;33898:3;;;;;;33891:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33891:20:0;;;;;;;;-1:-1:-1;33871:3:0;;33843:80;;;-1:-1:-1;33942:1:0;33933:80;33949:3;:10;33945:1;:14;33933:80;;;33995:3;33999:1;33995:6;;;;;;;;;;;;;;;-1:-1:-1;;;33995:6:0;;-1:-1:-1;;;33995:6:0;33981;33988:3;;;;;;33981:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33981:20:0;;;;;;;;-1:-1:-1;33961:3:0;;33933:80;;;-1:-1:-1;34032:1:0;34023:80;34039:3;:10;34035:1;:14;34023:80;;;34085:3;34089:1;34085:6;;;;;;;;;;;;;;;-1:-1:-1;;;34085:6:0;;-1:-1:-1;;;34085:6:0;34071;34078:3;;;;;;34071:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;34071:20:0;;;;;;;;-1:-1:-1;34051:3:0;;34023:80;;;-1:-1:-1;34127:6:0;;33096:1046;-1:-1:-1;;;;;;;;;;;;;33096:1046:0:o;18978:175::-;19078:1;19042:24;;;:15;:24;;;;;;-1:-1:-1;;;;;19042:24:0;:38;19038:108;;19132:1;19097:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;19097:37:0;;;18978:175::o;16532:314::-;16627:5;-1:-1:-1;;;;;16607:25:0;:16;16615:7;16607;:16::i;:::-;-1:-1:-1;;;;;16607:25:0;;16599:34;;;;;;16646:23;16661:7;16646:14;:23::i;:::-;-1:-1:-1;;;;;16709:24:0;;;;;;:17;:24;;;;;;:31;;16738:1;16709:31;:28;:31;:::i;:::-;-1:-1:-1;;;;;16682:24:0;;;;;;:17;:24;;;;;;;;:58;;;;16751:20;;;:11;:20;;;;;:33;;-1:-1:-1;;;;;;16751:33:0;;;16802:36;;16763:7;;16682:24;;16802:36;;16682:24;;16802:36;16532:314;;:::o;27349:1082::-;27627:10;:17;27602:22;;27627:24;;27649:1;27627:24;:21;:24;:::i;:::-;27662:18;27683:24;;;:15;:24;;;;;;28056:10;:26;;27602:49;;-1:-1:-1;27683:24:0;;27602:49;;28056:26;;;;;;;;;;;;;;28034:48;;28120:11;28095:10;28106;28095:22;;;;;;;;;;;;;;;;;;;;;:36;;;;28200:28;;;:15;:28;;;;;;:41;;;28365:10;:19;;;;;-1:-1:-1;;28365:19:0;;;:::i;:::-;-1:-1:-1;;;28422:1:0;28395:24;;;-1:-1:-1;28395:15:0;:24;;;;;:28;27349:1082::o;15964:286::-;-1:-1:-1;;;;;16036:16:0;;;;16028:25;;;;;;16073:16;16081:7;16073;:16::i;:::-;16072:17;16064:26;;;;;;16103:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;16103:25:0;-1:-1:-1;;;;;16103:25:0;;;;;;;;16163:21;;:17;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;16139:21:0;;;;;;:17;:21;;;;;;:52;;;;16209:33;;16234:7;;16139:21;16209:33;;16139:21;;16209:33;15964:286;;:::o;25117:164::-;25221:10;:17;;25194:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;25249:24:0;;;;;;;25117:164::o;35553:16907::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35553:16907:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35553:16907:0;;;-1:-1:-1;35553:16907:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.