ETH Price: $3,267.37 (+0.22%)
Gas: 2 Gwei

Token

CultureCodes (CC)
 

Overview

Max Total Supply

418 CC

Holders

90

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 CC
0xC2885d7a952640e5c7B609Eef4A8BAF3Abb34264
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CultureCodes

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-03
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.7.6;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface ERC721TokenReceiver{
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

library SafeMath {


    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
	
        return a / b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}



abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }


    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



contract CultureCodes is IERC721, Ownable {

    using SafeMath for uint256;

    bytes4 internal constant _ERC721_RECEIVED = 0x150b7a02;
	
	string public proof;
	uint256 internal numTokens = 0;
	uint256 public constant TOKEN_LIMIT = 1000;
	uint256 public price = 0.15 ether;	//1000000000000000000 wei = 1 ETH

    mapping(bytes4 => bool) internal supportedInterfaces;
    mapping (uint256 => address) internal idToOwner;
    mapping (uint256 => address) internal idToApproval;
	mapping (uint256 => uint256) internal idToOwnerIndex;
    mapping (address => mapping (address => bool)) internal ownerToOperators;
    mapping (address => uint256[]) internal ownerToIds;
    

    string internal NFTname = "CultureCodes";
    string internal NFTsymbol = "CC";
	string private _contractURI;
	string private _tokenBaseURI;
	bool public locked;
	bool public publicsale;
    bool public holdermint;
	
	
	
	//Grants:
	mapping(address => bool) internal grants;
	mapping(address => mapping (uint256 => bool)) private _grantedToken;
	address private _signerAddress;

    

    uint[TOKEN_LIMIT] internal indices;
	// location where token(the key) is available, the value of map in range from 1 to TOKEN_LIMIT:
	mapping ( uint256 => uint256) internal availablein;
	


	
	modifier notLocked {
        require(!locked, "Locked");
        _;
    }
	

    bool private reentrancyLock = false;

    modifier reentrancyGuard {
        if (reentrancyLock) {
            revert();
        }
        reentrancyLock = true;
        _;
        reentrancyLock = false;
    }

    modifier canOperate(uint256 _tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], "Cannot operate.");
        _;
    }

    modifier canTransfer(uint256 _tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(
            tokenOwner == msg.sender
            || idToApproval[_tokenId] == msg.sender
            || ownerToOperators[tokenOwner][msg.sender], "Cannot transfer."
        );
        _;
    }

    modifier validNFToken(uint256 _tokenId) {
        require(idToOwner[_tokenId] != address(0), "Invalid token.");
        _;
    }

    constructor() { 
        supportedInterfaces[0x01ffc9a7] = true; // ERC165
        supportedInterfaces[0x80ac58cd] = true; // ERC721
        supportedInterfaces[0x780e9d63] = true; // ERC721 Enumerable
        supportedInterfaces[0x5b5e139f] = true; // ERC721 Metadata
		grants[0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D] = true;	//free mint granted for BAYC
		_signerAddress = 0xfeFF9016EFBb5fccAdb87444285BFEd17E1a071A;
    }


    //ERC 721 and 165

    function isContract(address _addr) internal view returns (bool addressCheck) {
        uint256 size;
        assembly { size := extcodesize(_addr) } // solhint-disable-line
        addressCheck = size > 0;
    }

    function supportsInterface(bytes4 _interfaceID) external view override returns (bool) {
        return supportedInterfaces[_interfaceID];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external override {
        _safeTransferFrom(_from, _to, _tokenId, _data);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external override {
        _safeTransferFrom(_from, _to, _tokenId, "");
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) external override canTransfer(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == _from, "Wrong from address.");
        require(_to != address(0), "Cannot send to 0x0.");
        _transfer(_to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) external override canOperate(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(_approved != tokenOwner);
        idToApproval[_tokenId] = _approved;
        emit Approval(tokenOwner, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) external override {
        ownerToOperators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    function balanceOf(address _owner) external view override returns (uint256) {
        require(_owner != address(0));
        return _getOwnerNFTCount(_owner);
    }

    function ownerOf(uint256 _tokenId) external view override returns (address _owner) {
        require(idToOwner[_tokenId] != address(0));
        _owner = idToOwner[_tokenId];
    }

    function getApproved(uint256 _tokenId) external view override validNFToken(_tokenId) returns (address) {
        return idToApproval[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) external override view returns (bool) {
        return ownerToOperators[_owner][_operator];
    }

    function _transfer(address _to, uint256 _tokenId) internal {
        address from = idToOwner[_tokenId];
        _clearApproval(_tokenId);

        _removeNFToken(from, _tokenId);
        _addNFToken(_to, _tokenId);

        emit Transfer(from, _to, _tokenId);
    }
	
	
	
	
    function randomIndex() internal returns (uint) {
        uint totalSize = TOKEN_LIMIT - numTokens;
        uint index = uint(keccak256(abi.encodePacked(numTokens, msg.sender, block.difficulty, block.timestamp))) % totalSize;
        uint value = 0;
        if (indices[index] != 0) {
            value = indices[index];
        } else {
            value = index;
        }

        if (indices[totalSize - 1] == 0) {
            indices[index] = totalSize - 1;
        } else {
            indices[index] = indices[totalSize - 1];
        }
       
        return value.add(1);
    }


	

	
	function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {

		require(signature.length == 65);		
		

        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
            r := mload(add(signature, 32))
            s := mload(add(signature, 64))
            v := byte(0, mload(add(signature, 96)))
        }

        if (v < 27) {
            v += 27;
        }

        require(v == 27 || v == 28);
        return ecrecover(hash, v, r, s);

    }

	
	
	function HolderMint(bytes calldata signature, uint256 token ) external payable reentrancyGuard {
		require(holdermint, "HOLDERS MINT CLOSED");
		require(idToOwner[token] == address(0),"Token Already Migrated");
		
		bytes32 hash = keccak256(
								abi.encodePacked("\x19Ethereum Signed Message:\n32",
												keccak256(
															abi.encodePacked(
																			msg.sender,token,address(this)
																			)
														)
												)
								);

		require(recover(hash, signature)==_signerAddress, "INVALID SIGNATURE");

		uint256 index = TOKEN_LIMIT - numTokens - 1 ;
		uint256 value = indices[index] ;//last available value		
		
		uint256 loc;

		if(availablein[token-1] == 0)
			loc = token-1;
		else
			loc = availablein[token-1]-1;
		
		if( value == 0 ){
			indices[ loc ] = index;		
			}
		else{
			indices[ loc ] = value;
			}
		availablein[ indices[loc] ] = loc + 1 ;



		
		numTokens = numTokens + 1;
        _addNFToken(msg.sender, token);
        emit Transfer(address(0), msg.sender, token);

    }
	
	
	function HolderMintBatch(bytes calldata signature, uint256[] calldata tokens ) external payable reentrancyGuard {
		require(holdermint, "HOLDERS MINT CLOSED");
		
		string memory tokenlist = toString(tokens[0]);
		for(uint256 i = 1; i < tokens.length; i++) {
			tokenlist = string(                
                abi.encodePacked( tokenlist, ",", toString(tokens[i]) )
                );
			}
		
		
		bytes32 hash = keccak256(
								abi.encodePacked("\x19Ethereum Signed Message:\n32",
												keccak256(
															abi.encodePacked(
																			msg.sender,tokenlist,address(this)
																			)
														)
												)
								);

		require(recover(hash, signature)==_signerAddress, "INVALID SIGNATURE");

		for(uint256 i = 0; i < tokens.length; i++) {
				if(idToOwner[tokens[i]] == address(0)){
		

				uint256 index = TOKEN_LIMIT - numTokens - 1 ;
				uint256 value = indices[index] ;//last available value		
		
				uint256 loc;


				if(availablein[tokens[i]-1] == 0)
					loc = tokens[i]-1;
				else
					loc = availablein[tokens[i]-1]-1;
		
				if( value == 0 ){
					indices[ loc ] = index;		
					}
				else{
					indices[ loc ] = value;
					}
				availablein[ indices[loc] ] = loc + 1 ;
		
		
				numTokens = numTokens + 1;
				_addNFToken(msg.sender, tokens[i]);
				emit Transfer(address(0), msg.sender, tokens[i]);
				}
		}

		

    }

	
	function GrantMint(address collection, uint useId) external payable reentrancyGuard {
		require(publicsale, "PUBLIC SALE NOT OPEN");
		require(grants[collection], "Collection not granted");
		require(IERC721(collection).ownerOf(useId) == msg.sender, "Not the token owner");
		require(!_grantedToken[collection][useId],"Token Already Granted");
        require(numTokens.add(1) <= TOKEN_LIMIT, "Exceed supply");
		
		_mint(msg.sender);
		
		_grantedToken[collection][useId] = true;
    }

	function PublicMint(uint quantity) external payable reentrancyGuard {
		require(publicsale, "PUBLIC SALE NOT OPEN");
        require(quantity > 0 , "Can't be 0");
        require(numTokens.add(quantity) <= TOKEN_LIMIT, "Exceed supply");
        require(msg.value >= price.mul(quantity), "Insufficient funds.");
		for(uint i = 0; i < quantity; i++) {			
			_mint(msg.sender);			
        }
    }	
	
    function _mint(address _to ) internal {     
        uint256 _id = randomIndex(); 
		numTokens = numTokens + 1;
        _addNFToken(_to, _id);
        emit Transfer(address(0), _to, _id);
    }
	
	
	
	function withdraw() public onlyOwner {
		payable(msg.sender).transfer(address(this).balance);
		}
		



    function _addNFToken(address _to, uint256 _tokenId) internal {
        require(idToOwner[_tokenId] == address(0), "Already owned.");
        idToOwner[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(idToOwner[_tokenId] == _from, "Incorrect owner.");
        delete idToOwner[_tokenId];

        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
    }

    function _getOwnerNFTCount(address _owner) internal view returns (uint256) {
        return ownerToIds[_owner].length;
    }

    function _safeTransferFrom(address _from,  address _to,  uint256 _tokenId,  bytes memory _data) private canTransfer(_tokenId) validNFToken(_tokenId) {
        address tokenOwner = idToOwner[_tokenId];
        require(tokenOwner == _from, "Incorrect owner.");
        require(_to != address(0));

        _transfer(_to, _tokenId);

        if (isContract(_to)) {
            bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
            require(retval == _ERC721_RECEIVED);
        }
    }

    function _clearApproval(uint256 _tokenId) private {
        if (idToApproval[_tokenId] != address(0)) {
            delete idToApproval[_tokenId];
        }
    }





    function totalSupply() public view returns (uint256) {
        return numTokens;
    }

    function tokenByIndex(uint256 index) public pure returns (uint256) {
        require(index >= 0 && index < TOKEN_LIMIT);
        return index+1;
    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) {
        require(_index < ownerToIds[_owner].length);
        return ownerToIds[_owner][_index];
    }




	
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }

    function name() external view returns (string memory _name) {
        _name = NFTname;
    }

    function symbol() external view returns (string memory _symbol) {
        _symbol = NFTsymbol;
    }

    function tokenURI(uint256 _tokenId) external view validNFToken(_tokenId) returns (string memory) {
        return string(abi.encodePacked(_tokenBaseURI, toString(_tokenId)));
    }
	
	function contractURI() public view returns (string memory) {
        return _contractURI;
    }
	
	
	
	
	
	
	function lockMetadata() external onlyOwner {
        locked = true;
    }
	
	function setBaseURI(string calldata URI) external onlyOwner notLocked {
        _tokenBaseURI = URI;
    }
	
	function setContractURI(string calldata URI) external onlyOwner notLocked {
        _contractURI = URI;
    }
	
	function setSignerAddress(address addr) external onlyOwner {
        _signerAddress = addr;
    }
	
	function toggleCollection(address collection) external onlyOwner {
        grants[collection] = !grants[collection];
    }
	
	function toggleHolderMint() external onlyOwner {
        holdermint = !holdermint;
    }

	function togglePublicSale() external onlyOwner {
        publicsale = !publicsale;
    }
	
	function setPrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }
	
	function setProvenanceHash(string calldata hash) external onlyOwner notLocked {
        proof = hash;
    }
	
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"useId","type":"uint256"}],"name":"GrantMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"token","type":"uint256"}],"name":"HolderMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"HolderMintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"PublicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"TOKEN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdermint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proof","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"toggleCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleHolderMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600255670214e8348c4f00006003556040518060400160405280600c81526020017f43756c74757265436f6465730000000000000000000000000000000000000000815250600a908051906020019062000062929190620003d6565b506040518060400160405280600281526020017f4343000000000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000b0929190620003d6565b5060006103fb60006101000a81548160ff021916908315150217905550348015620000da57600080fd5b50620000fb620000ef6200030a60201b60201c565b6200031260201b60201c565b6001600460006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016004600063780e9d6360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073feff9016efbb5fccadb87444285bfed17e1a071a601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200040e57600085556200045a565b82601f106200042957805160ff19168380011785556200045a565b828001600101855582156200045a579182015b82811115620004595782518255916020019190600101906200043c565b5b5090506200046991906200046d565b5090565b5b80821115620004885760008160009055506001016200046e565b5090565b6152d5806200049c6000396000f3fe60806040526004361061023b5760003560e01c80638da5cb5b1161012e578063b94805a2116100ab578063e222c7f91161006f578063e222c7f914610ed0578063e8a3d48514610ee7578063e985e9c514610f77578063f2fde38b14610ffe578063faf924cf1461104f5761023b565b8063b94805a214610ca3578063c87b56dd14610cd0578063cdd04a8314610d84578063cf30901214610dd5578063dccc13c214610e025761023b565b80639fb17e34116100f25780639fb17e3414610af0578063a035b1fe14610b1e578063a22cb46514610b49578063a6730ce514610ba6578063b88d4fde14610bd35761023b565b80638da5cb5b1461094757806391b7f5ed14610988578063938e3d7b146109c357806395d89b4114610a49578063989bdbb614610ad95761023b565b80632f745c59116101bc5780636352211e116101805780636352211e146107cc57806370a0823114610831578063715018a6146108965780637d6f389e146108ad5780637dbb1eaa146108c45761023b565b80632f745c59146105f65780633ccfd60b1461066557806342842e0e1461067c5780634f6ccce7146106f757806355f804b3146107465761023b565b8063095ea7b311610203578063095ea7b3146104215780630d3bebae1461047c57806310969523146104ca57806318160ddd1461055057806323b872dd1461057b5761023b565b806301ffc9a714610240578063031bd4c4146102b0578063046dc166146102db57806306fdde031461032c578063081812fc146103bc575b600080fd5b34801561024c57600080fd5b506102986004803603602081101561026357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506110df565b60405180821515815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5611147565b6040518082815260200191505060405180910390f35b3480156102e757600080fd5b5061032a600480360360208110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061114d565b005b34801561033857600080fd5b50610341611240565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610381578082015181840152602081019050610366565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c857600080fd5b506103f5600480360360208110156103df57600080fd5b81019080803590602001909291905050506112e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042d57600080fd5b5061047a6004803603604081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f7565b005b6104c86004803603604081101561049257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061175f565b005b3480156104d657600080fd5b5061054e600480360360208110156104ed57600080fd5b810190808035906020019064010000000081111561050a57600080fd5b82018360208201111561051c57600080fd5b8035906020019184600183028401116401000000008311171561053e57600080fd5b9091929391929390505050611bf3565b005b34801561055c57600080fd5b50610565611d3b565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b506105f46004803603606081101561059e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d45565b005b34801561060257600080fd5b5061064f6004803603604081101561061957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061217f565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061067a61222c565b005b34801561068857600080fd5b506106f56004803603606081101561069f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612324565b005b34801561070357600080fd5b506107306004803603602081101561071a57600080fd5b8101908080359060200190929190505050612344565b6040518082815260200191505060405180910390f35b34801561075257600080fd5b506107ca6004803603602081101561076957600080fd5b810190808035906020019064010000000081111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111640100000000831117156107ba57600080fd5b909192939192939050505061236b565b005b3480156107d857600080fd5b50610805600480360360208110156107ef57600080fd5b81019080803590602001909291905050506124b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083d57600080fd5b506108806004803603602081101561085457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061255c565b6040518082815260200191505060405180910390f35b3480156108a257600080fd5b506108ab6125a7565b005b3480156108b957600080fd5b506108c2612662565b005b610945600480360360408110156108da57600080fd5b81019080803590602001906401000000008111156108f757600080fd5b82018360208201111561090957600080fd5b8035906020019184600183028401116401000000008311171561092b57600080fd5b90919293919293908035906020019092919050505061273d565b005b34801561095357600080fd5b5061095c612bfb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099457600080fd5b506109c1600480360360208110156109ab57600080fd5b8101908080359060200190929190505050612c24565b005b3480156109cf57600080fd5b50610a47600480360360208110156109e657600080fd5b8101908080359060200190640100000000811115610a0357600080fd5b820183602082011115610a1557600080fd5b80359060200191846001830284011164010000000083111715610a3757600080fd5b9091929391929390505050612cdd565b005b348015610a5557600080fd5b50610a5e612e25565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a9e578082015181840152602081019050610a83565b50505050905090810190601f168015610acb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ae557600080fd5b50610aee612ec7565b005b610b1c60048036036020811015610b0657600080fd5b8101908080359060200190929190505050612f93565b005b348015610b2a57600080fd5b50610b33613219565b6040518082815260200191505060405180910390f35b348015610b5557600080fd5b50610ba460048036036040811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061321f565b005b348015610bb257600080fd5b50610bbb61331e565b60405180821515815260200191505060405180910390f35b348015610bdf57600080fd5b50610ca160048036036080811015610bf657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c5d57600080fd5b820183602082011115610c6f57600080fd5b80359060200191846001830284011164010000000083111715610c9157600080fd5b9091929391929390505050613331565b005b348015610caf57600080fd5b50610cb8613388565b60405180821515815260200191505060405180910390f35b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b810190808035906020019092919050505061339b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d49578082015181840152602081019050610d2e565b50505050905090810190601f168015610d765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d9057600080fd5b50610dd360048036036020811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061354b565b005b348015610de157600080fd5b50610dea6136a1565b60405180821515815260200191505060405180910390f35b610ece60048036036040811015610e1857600080fd5b8101908080359060200190640100000000811115610e3557600080fd5b820183602082011115610e4757600080fd5b80359060200191846001830284011164010000000083111715610e6957600080fd5b909192939192939080359060200190640100000000811115610e8a57600080fd5b820183602082011115610e9c57600080fd5b80359060200191846020830284011164010000000083111715610ebe57600080fd5b90919293919293905050506136b4565b005b348015610edc57600080fd5b50610ee5613d1d565b005b348015610ef357600080fd5b50610efc613df8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f3c578082015181840152602081019050610f21565b50505050905090810190601f168015610f695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f8357600080fd5b50610fe660048036036040811015610f9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e9a565b60405180821515815260200191505060405180910390f35b34801561100a57600080fd5b5061104d6004803603602081101561102157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f2e565b005b34801561105b57600080fd5b5061106461406f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110a4578082015181840152602081019050611089565b50505050905090810190601f1680156110d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060046000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6103e881565b61115561410d565b73ffffffffffffffffffffffffffffffffffffffff16611173612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112d85780601f106112ad576101008083540402835291602001916112d8565b820191906000526020600020905b8154815290600101906020018083116112bb57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114f05750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156116aa57600080fd5b856006600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6103fb60009054906101000a900460ff161561177a57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60019054906101000a900460ff16611818576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5055424c49432053414c45204e4f54204f50454e00000000000000000000000081525060200191505060405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f436f6c6c656374696f6e206e6f74206772616e7465640000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d602081101561196957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742074686520746f6b656e206f776e65720000000000000000000000000081525060200191505060405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615611ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e20416c7265616479204772616e746564000000000000000000000081525060200191505060405180910390fd5b6103e8611aed600160025461411590919063ffffffff16565b1115611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6a3361412f565b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060006103fb60006101000a81548160ff0219169083151502179055505050565b611bfb61410d565b73ffffffffffffffffffffffffffffffffffffffff16611c19612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff1615611d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818160019190611d369291906151ce565b505050565b6000600254905090565b8060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611e1657503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611ea75750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b61217686866141b1565b50505050505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082106121cf57600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061221957fe5b9060005260206000200154905092915050565b61223461410d565b73ffffffffffffffffffffffffffffffffffffffff16612252612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612321573d6000803e3d6000fd5b50565b61233f83838360405180602001604052806000815250614266565b505050565b600080821015801561235757506103e882105b61236057600080fd5b600182019050919050565b61237361410d565b73ffffffffffffffffffffffffffffffffffffffff16612391612bfb565b73ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff161561249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8181600d91906124ae9291906151ce565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561252157600080fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259757600080fd5b6125a0826147d4565b9050919050565b6125af61410d565b73ffffffffffffffffffffffffffffffffffffffff166125cd612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126606000614820565b565b61266a61410d565b73ffffffffffffffffffffffffffffffffffffffff16612688612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60029054906101000a900460ff1615600e60026101000a81548160ff021916908315150217905550565b6103fb60009054906101000a900460ff161561275857600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60029054906101000a900460ff166127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f484f4c44455253204d494e5420434c4f5345440000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f546f6b656e20416c7265616479204d696772617465640000000000000000000081525060200191505060405180910390fd5b6000338230604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a0d8286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506148e4565b73ffffffffffffffffffffffffffffffffffffffff1614612a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494e56414c4944205349474e415455524500000000000000000000000000000081525060200191505060405180910390fd5b600060016002546103e80303905060006012826103e88110612ab457fe5b015490506000806103fa6000600188038152602001908152602001600020541415612ae457600185039050612b02565b60016103fa6000600188038152602001908152602001600020540390505b6000821415612b2457826012826103e88110612b1a57fe5b0181905550612b39565b816012826103e88110612b3357fe5b01819055505b600181016103fa60006012846103e88110612b5057fe5b0154815260200190815260200160002081905550600160025401600281905550612b7a33866149b1565b843373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505060006103fb60006101000a81548160ff021916908315150217905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612c2c61410d565b73ffffffffffffffffffffffffffffffffffffffff16612c4a612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612cd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060038190555050565b612ce561410d565b73ffffffffffffffffffffffffffffffffffffffff16612d03612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff1615612e0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8181600c9190612e209291906151ce565b505050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ebd5780601f10612e9257610100808354040283529160200191612ebd565b820191906000526020600020905b815481529060010190602001808311612ea057829003601f168201915b5050505050905090565b612ecf61410d565b73ffffffffffffffffffffffffffffffffffffffff16612eed612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600e60006101000a81548160ff021916908315150217905550565b6103fb60009054906101000a900460ff1615612fae57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60019054906101000a900460ff1661304c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5055424c49432053414c45204e4f54204f50454e00000000000000000000000081525060200191505060405180910390fd5b600081116130c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f43616e277420626520300000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6103e86130da8260025461411590919063ffffffff16565b111561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b61316381600354614baf90919063ffffffff16565b3410156131d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e73756666696369656e742066756e64732e0000000000000000000000000081525060200191505060405180910390fd5b60005b818110156131f9576131ec3361412f565b80806001019150506131db565b5060006103fb60006101000a81548160ff02191690831515021790555050565b60035481565b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600e60029054906101000a900460ff1681565b61338185858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614266565b5050505050565b600e60019054906101000a900460ff1681565b606081600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d61347f84614be3565b60405160200180838054600181600116156101000203166002900480156134dd5780601f106134bb5761010080835404028352918201916134dd565b820191906000526020600020905b8154815290600101906020018083116134c9575b505082805190602001908083835b6020831061350e57805182526020820191506020810190506020830392506134eb565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b61355361410d565b73ffffffffffffffffffffffffffffffffffffffff16613571612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1681565b6103fb60009054906101000a900460ff16156136cf57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60029054906101000a900460ff1661376d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f484f4c44455253204d494e5420434c4f5345440000000000000000000000000081525060200191505060405180910390fd5b600061378b8383600081811061377f57fe5b90506020020135614be3565b90506000600190505b838390508110156138ae57816137bb8585848181106137af57fe5b90506020020135614be3565b6040516020018083805190602001908083835b602083106137f157805182526020820191506020810190506020830392506137ce565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c0000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b6020831061386a5780518252602082019150602081019050602083039250613847565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291508080600101915050613794565b506000338230604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183805190602001908083835b6020831061390957805182526020820191506020810190506020830392506138e6565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a3c8288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506148e4565b73ffffffffffffffffffffffffffffffffffffffff1614613ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494e56414c4944205349474e415455524500000000000000000000000000000081525060200191505060405180910390fd5b60005b84849050811015613cf857600073ffffffffffffffffffffffffffffffffffffffff1660056000878785818110613afb57fe5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613ceb57600060016002546103e80303905060006012826103e88110613b6b57fe5b015490506000806103fa600060018b8b89818110613b8557fe5b90506020020135038152602001908152602001600020541415613bbf576001888886818110613bb057fe5b90506020020135039050613bef565b60016103fa600060018b8b89818110613bd457fe5b90506020020135038152602001908152602001600020540390505b6000821415613c1157826012826103e88110613c0757fe5b0181905550613c26565b816012826103e88110613c2057fe5b01819055505b600181016103fa60006012846103e88110613c3d57fe5b0154815260200190815260200160002081905550600160025401600281905550613c7933898987818110613c6d57fe5b905060200201356149b1565b878785818110613c8557fe5b905060200201353373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505b8080600101915050613ac8565b50505060006103fb60006101000a81548160ff02191690831515021790555050505050565b613d2561410d565b73ffffffffffffffffffffffffffffffffffffffff16613d43612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614613dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e905780601f10613e6557610100808354040283529160200191613e90565b820191906000526020600020905b815481529060010190602001808311613e7357829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613f3661410d565b73ffffffffffffffffffffffffffffffffffffffff16613f54612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614613fdd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061527a6026913960400191505060405180910390fd5b61406c81614820565b50565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141055780601f106140da57610100808354040283529160200191614105565b820191906000526020600020905b8154815290600101906020018083116140e857829003601f168201915b505050505081565b600033905090565b600081830190508281101561412957600080fd5b92915050565b6000614139614d2a565b905060016002540160028190555061415182826149b1565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506141f282614e4d565b6141fc8183614eee565b61420683836149b1565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061433757503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806143c85750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61443a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146145ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561462457600080fd5b61462e87876141b1565b614637876151a1565b156147ca5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156146eb5780820151818401526020810190506146d0565b50505050905090810190601f1680156147185780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561473a57600080fd5b505af115801561474e573d6000803e3d6000fd5b505050506040513d602081101561476457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146147c857600080fd5b505b5050505050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060418251146148f457600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561492457601b810190505b601b8160ff1614806149395750601c8160ff16145b61494257600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561499c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f416c7265616479206f776e65642e00000000000000000000000000000000000081525060200191505060405180910390fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055614b946001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506151b490919063ffffffff16565b60076000838152602001908152602001600020819055505050565b600080831415614bc25760009050614bdd565b818302905081838281614bd157fe5b0414614bdc57600080fd5b5b92915050565b60606000821415614c2b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614d25565b600082905060005b60008214614c55578080600101915050600a8281614c4d57fe5b049150614c33565b60008167ffffffffffffffff81118015614c6e57600080fd5b506040519080825280601f01601f191660200182016040528015614ca15781602001600182028036833780820191505090505b50905060006001830390508593505b60008414614d1d57600a8481614cc257fe5b0660300160f81b82828060019003935081518110614cdc57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8481614d1557fe5b049350614cb0565b819450505050505b919050565b6000806002546103e8039050600081600254334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81614d9d57fe5b0690506000806012836103e88110614db157fe5b015414614dcf576012826103e88110614dc657fe5b01549050614dd3565b8190505b60006012600185036103e88110614de657fe5b01541415614e0a57600183036012836103e88110614e0057fe5b0181905550614e31565b6012600184036103e88110614e1b57fe5b01546012836103e88110614e2b57fe5b01819055505b614e4560018261411590919063ffffffff16565b935050505090565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614eeb576006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614fc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560006007600083815260200190815260200160002054905060006150686001600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506151b490919063ffffffff16565b905081811461513d576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106150bd57fe5b9060005260206000200154905080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061511557fe5b9060005260206000200181905550826007600083815260200190815260200160002081905550505b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061518557fe5b6001900381819060005260206000200160009055905550505050565b600080823b905060008111915050919050565b6000828211156151c357600080fd5b818303905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282615204576000855561524b565b82601f1061521d57803560ff191683800117855561524b565b8280016001018555821561524b579182015b8281111561524a57823582559160200191906001019061522f565b5b509050615258919061525c565b5090565b5b8082111561527557600081600090555060010161525d565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220fd093b68607fe0239bf0ea5e8320bda8ad01fb0943d4df07c06649216dd8246d64736f6c63430007060033

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80638da5cb5b1161012e578063b94805a2116100ab578063e222c7f91161006f578063e222c7f914610ed0578063e8a3d48514610ee7578063e985e9c514610f77578063f2fde38b14610ffe578063faf924cf1461104f5761023b565b8063b94805a214610ca3578063c87b56dd14610cd0578063cdd04a8314610d84578063cf30901214610dd5578063dccc13c214610e025761023b565b80639fb17e34116100f25780639fb17e3414610af0578063a035b1fe14610b1e578063a22cb46514610b49578063a6730ce514610ba6578063b88d4fde14610bd35761023b565b80638da5cb5b1461094757806391b7f5ed14610988578063938e3d7b146109c357806395d89b4114610a49578063989bdbb614610ad95761023b565b80632f745c59116101bc5780636352211e116101805780636352211e146107cc57806370a0823114610831578063715018a6146108965780637d6f389e146108ad5780637dbb1eaa146108c45761023b565b80632f745c59146105f65780633ccfd60b1461066557806342842e0e1461067c5780634f6ccce7146106f757806355f804b3146107465761023b565b8063095ea7b311610203578063095ea7b3146104215780630d3bebae1461047c57806310969523146104ca57806318160ddd1461055057806323b872dd1461057b5761023b565b806301ffc9a714610240578063031bd4c4146102b0578063046dc166146102db57806306fdde031461032c578063081812fc146103bc575b600080fd5b34801561024c57600080fd5b506102986004803603602081101561026357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506110df565b60405180821515815260200191505060405180910390f35b3480156102bc57600080fd5b506102c5611147565b6040518082815260200191505060405180910390f35b3480156102e757600080fd5b5061032a600480360360208110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061114d565b005b34801561033857600080fd5b50610341611240565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610381578082015181840152602081019050610366565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c857600080fd5b506103f5600480360360208110156103df57600080fd5b81019080803590602001909291905050506112e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042d57600080fd5b5061047a6004803603604081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f7565b005b6104c86004803603604081101561049257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061175f565b005b3480156104d657600080fd5b5061054e600480360360208110156104ed57600080fd5b810190808035906020019064010000000081111561050a57600080fd5b82018360208201111561051c57600080fd5b8035906020019184600183028401116401000000008311171561053e57600080fd5b9091929391929390505050611bf3565b005b34801561055c57600080fd5b50610565611d3b565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b506105f46004803603606081101561059e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d45565b005b34801561060257600080fd5b5061064f6004803603604081101561061957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061217f565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061067a61222c565b005b34801561068857600080fd5b506106f56004803603606081101561069f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612324565b005b34801561070357600080fd5b506107306004803603602081101561071a57600080fd5b8101908080359060200190929190505050612344565b6040518082815260200191505060405180910390f35b34801561075257600080fd5b506107ca6004803603602081101561076957600080fd5b810190808035906020019064010000000081111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111640100000000831117156107ba57600080fd5b909192939192939050505061236b565b005b3480156107d857600080fd5b50610805600480360360208110156107ef57600080fd5b81019080803590602001909291905050506124b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083d57600080fd5b506108806004803603602081101561085457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061255c565b6040518082815260200191505060405180910390f35b3480156108a257600080fd5b506108ab6125a7565b005b3480156108b957600080fd5b506108c2612662565b005b610945600480360360408110156108da57600080fd5b81019080803590602001906401000000008111156108f757600080fd5b82018360208201111561090957600080fd5b8035906020019184600183028401116401000000008311171561092b57600080fd5b90919293919293908035906020019092919050505061273d565b005b34801561095357600080fd5b5061095c612bfb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099457600080fd5b506109c1600480360360208110156109ab57600080fd5b8101908080359060200190929190505050612c24565b005b3480156109cf57600080fd5b50610a47600480360360208110156109e657600080fd5b8101908080359060200190640100000000811115610a0357600080fd5b820183602082011115610a1557600080fd5b80359060200191846001830284011164010000000083111715610a3757600080fd5b9091929391929390505050612cdd565b005b348015610a5557600080fd5b50610a5e612e25565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a9e578082015181840152602081019050610a83565b50505050905090810190601f168015610acb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ae557600080fd5b50610aee612ec7565b005b610b1c60048036036020811015610b0657600080fd5b8101908080359060200190929190505050612f93565b005b348015610b2a57600080fd5b50610b33613219565b6040518082815260200191505060405180910390f35b348015610b5557600080fd5b50610ba460048036036040811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061321f565b005b348015610bb257600080fd5b50610bbb61331e565b60405180821515815260200191505060405180910390f35b348015610bdf57600080fd5b50610ca160048036036080811015610bf657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c5d57600080fd5b820183602082011115610c6f57600080fd5b80359060200191846001830284011164010000000083111715610c9157600080fd5b9091929391929390505050613331565b005b348015610caf57600080fd5b50610cb8613388565b60405180821515815260200191505060405180910390f35b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b810190808035906020019092919050505061339b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d49578082015181840152602081019050610d2e565b50505050905090810190601f168015610d765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d9057600080fd5b50610dd360048036036020811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061354b565b005b348015610de157600080fd5b50610dea6136a1565b60405180821515815260200191505060405180910390f35b610ece60048036036040811015610e1857600080fd5b8101908080359060200190640100000000811115610e3557600080fd5b820183602082011115610e4757600080fd5b80359060200191846001830284011164010000000083111715610e6957600080fd5b909192939192939080359060200190640100000000811115610e8a57600080fd5b820183602082011115610e9c57600080fd5b80359060200191846020830284011164010000000083111715610ebe57600080fd5b90919293919293905050506136b4565b005b348015610edc57600080fd5b50610ee5613d1d565b005b348015610ef357600080fd5b50610efc613df8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f3c578082015181840152602081019050610f21565b50505050905090810190601f168015610f695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f8357600080fd5b50610fe660048036036040811015610f9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e9a565b60405180821515815260200191505060405180910390f35b34801561100a57600080fd5b5061104d6004803603602081101561102157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f2e565b005b34801561105b57600080fd5b5061106461406f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110a4578082015181840152602081019050611089565b50505050905090810190601f1680156110d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060046000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6103e881565b61115561410d565b73ffffffffffffffffffffffffffffffffffffffff16611173612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112d85780601f106112ad576101008083540402835291602001916112d8565b820191906000526020600020905b8154815290600101906020018083116112bb57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b6006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114f05750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f43616e6e6f74206f7065726174652e000000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156116aa57600080fd5b856006600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6103fb60009054906101000a900460ff161561177a57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60019054906101000a900460ff16611818576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5055424c49432053414c45204e4f54204f50454e00000000000000000000000081525060200191505060405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f436f6c6c656374696f6e206e6f74206772616e7465640000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d602081101561196957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742074686520746f6b656e206f776e65720000000000000000000000000081525060200191505060405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615611ad4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e20416c7265616479204772616e746564000000000000000000000081525060200191505060405180910390fd5b6103e8611aed600160025461411590919063ffffffff16565b1115611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6a3361412f565b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060006103fb60006101000a81548160ff0219169083151502179055505050565b611bfb61410d565b73ffffffffffffffffffffffffffffffffffffffff16611c19612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff1615611d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818160019190611d369291906151ce565b505050565b6000600254905090565b8060006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611e1657503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611ea75750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f57726f6e672066726f6d20616464726573732e0000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f742073656e6420746f203078302e0000000000000000000000000081525060200191505060405180910390fd5b61217686866141b1565b50505050505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905082106121cf57600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061221957fe5b9060005260206000200154905092915050565b61223461410d565b73ffffffffffffffffffffffffffffffffffffffff16612252612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612321573d6000803e3d6000fd5b50565b61233f83838360405180602001604052806000815250614266565b505050565b600080821015801561235757506103e882105b61236057600080fd5b600182019050919050565b61237361410d565b73ffffffffffffffffffffffffffffffffffffffff16612391612bfb565b73ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff161561249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8181600d91906124ae9291906151ce565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561252157600080fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561259757600080fd5b6125a0826147d4565b9050919050565b6125af61410d565b73ffffffffffffffffffffffffffffffffffffffff166125cd612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126606000614820565b565b61266a61410d565b73ffffffffffffffffffffffffffffffffffffffff16612688612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60029054906101000a900460ff1615600e60026101000a81548160ff021916908315150217905550565b6103fb60009054906101000a900460ff161561275857600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60029054906101000a900460ff166127f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f484f4c44455253204d494e5420434c4f5345440000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f546f6b656e20416c7265616479204d696772617465640000000000000000000081525060200191505060405180910390fd5b6000338230604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a0d8286868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506148e4565b73ffffffffffffffffffffffffffffffffffffffff1614612a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494e56414c4944205349474e415455524500000000000000000000000000000081525060200191505060405180910390fd5b600060016002546103e80303905060006012826103e88110612ab457fe5b015490506000806103fa6000600188038152602001908152602001600020541415612ae457600185039050612b02565b60016103fa6000600188038152602001908152602001600020540390505b6000821415612b2457826012826103e88110612b1a57fe5b0181905550612b39565b816012826103e88110612b3357fe5b01819055505b600181016103fa60006012846103e88110612b5057fe5b0154815260200190815260200160002081905550600160025401600281905550612b7a33866149b1565b843373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505060006103fb60006101000a81548160ff021916908315150217905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612c2c61410d565b73ffffffffffffffffffffffffffffffffffffffff16612c4a612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612cd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060038190555050565b612ce561410d565b73ffffffffffffffffffffffffffffffffffffffff16612d03612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff1615612e0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f4c6f636b6564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8181600c9190612e209291906151ce565b505050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ebd5780601f10612e9257610100808354040283529160200191612ebd565b820191906000526020600020905b815481529060010190602001808311612ea057829003601f168201915b5050505050905090565b612ecf61410d565b73ffffffffffffffffffffffffffffffffffffffff16612eed612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614612f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600e60006101000a81548160ff021916908315150217905550565b6103fb60009054906101000a900460ff1615612fae57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60019054906101000a900460ff1661304c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5055424c49432053414c45204e4f54204f50454e00000000000000000000000081525060200191505060405180910390fd5b600081116130c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f43616e277420626520300000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6103e86130da8260025461411590919063ffffffff16565b111561314e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656420737570706c790000000000000000000000000000000000000081525060200191505060405180910390fd5b61316381600354614baf90919063ffffffff16565b3410156131d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e73756666696369656e742066756e64732e0000000000000000000000000081525060200191505060405180910390fd5b60005b818110156131f9576131ec3361412f565b80806001019150506131db565b5060006103fb60006101000a81548160ff02191690831515021790555050565b60035481565b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600e60029054906101000a900460ff1681565b61338185858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050614266565b5050505050565b600e60019054906101000a900460ff1681565b606081600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d61347f84614be3565b60405160200180838054600181600116156101000203166002900480156134dd5780601f106134bb5761010080835404028352918201916134dd565b820191906000526020600020905b8154815290600101906020018083116134c9575b505082805190602001908083835b6020831061350e57805182526020820191506020810190506020830392506134eb565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b61355361410d565b73ffffffffffffffffffffffffffffffffffffffff16613571612bfb565b73ffffffffffffffffffffffffffffffffffffffff16146135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1681565b6103fb60009054906101000a900460ff16156136cf57600080fd5b60016103fb60006101000a81548160ff021916908315150217905550600e60029054906101000a900460ff1661376d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f484f4c44455253204d494e5420434c4f5345440000000000000000000000000081525060200191505060405180910390fd5b600061378b8383600081811061377f57fe5b90506020020135614be3565b90506000600190505b838390508110156138ae57816137bb8585848181106137af57fe5b90506020020135614be3565b6040516020018083805190602001908083835b602083106137f157805182526020820191506020810190506020830392506137ce565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c0000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b6020831061386a5780518252602082019150602081019050602083039250613847565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291508080600101915050613794565b506000338230604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183805190602001908083835b6020831061390957805182526020820191506020810190506020830392506138e6565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a3c8288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506148e4565b73ffffffffffffffffffffffffffffffffffffffff1614613ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f494e56414c4944205349474e415455524500000000000000000000000000000081525060200191505060405180910390fd5b60005b84849050811015613cf857600073ffffffffffffffffffffffffffffffffffffffff1660056000878785818110613afb57fe5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613ceb57600060016002546103e80303905060006012826103e88110613b6b57fe5b015490506000806103fa600060018b8b89818110613b8557fe5b90506020020135038152602001908152602001600020541415613bbf576001888886818110613bb057fe5b90506020020135039050613bef565b60016103fa600060018b8b89818110613bd457fe5b90506020020135038152602001908152602001600020540390505b6000821415613c1157826012826103e88110613c0757fe5b0181905550613c26565b816012826103e88110613c2057fe5b01819055505b600181016103fa60006012846103e88110613c3d57fe5b0154815260200190815260200160002081905550600160025401600281905550613c7933898987818110613c6d57fe5b905060200201356149b1565b878785818110613c8557fe5b905060200201353373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505b8080600101915050613ac8565b50505060006103fb60006101000a81548160ff02191690831515021790555050505050565b613d2561410d565b73ffffffffffffffffffffffffffffffffffffffff16613d43612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614613dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e905780601f10613e6557610100808354040283529160200191613e90565b820191906000526020600020905b815481529060010190602001808311613e7357829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613f3661410d565b73ffffffffffffffffffffffffffffffffffffffff16613f54612bfb565b73ffffffffffffffffffffffffffffffffffffffff1614613fdd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061527a6026913960400191505060405180910390fd5b61406c81614820565b50565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141055780601f106140da57610100808354040283529160200191614105565b820191906000526020600020905b8154815290600101906020018083116140e857829003601f168201915b505050505081565b600033905090565b600081830190508281101561412957600080fd5b92915050565b6000614139614d2a565b905060016002540160028190555061415182826149b1565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506141f282614e4d565b6141fc8183614eee565b61420683836149b1565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8160006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061433757503373ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b806143c85750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61443a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f74207472616e736665722e0000000000000000000000000000000081525060200191505060405180910390fd5b83600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420746f6b656e2e00000000000000000000000000000000000081525060200191505060405180910390fd5b60006005600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146145ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561462457600080fd5b61462e87876141b1565b614637876151a1565b156147ca5760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156146eb5780820151818401526020810190506146d0565b50505050905090810190601f1680156147185780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561473a57600080fd5b505af115801561474e573d6000803e3d6000fd5b505050506040513d602081101561476457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146147c857600080fd5b505b5050505050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060418251146148f457600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561492457601b810190505b601b8160ff1614806149395750601c8160ff16145b61494257600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561499c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f416c7265616479206f776e65642e00000000000000000000000000000000000081525060200191505060405180910390fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055614b946001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506151b490919063ffffffff16565b60076000838152602001908152602001600020819055505050565b600080831415614bc25760009050614bdd565b818302905081838281614bd157fe5b0414614bdc57600080fd5b5b92915050565b60606000821415614c2b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614d25565b600082905060005b60008214614c55578080600101915050600a8281614c4d57fe5b049150614c33565b60008167ffffffffffffffff81118015614c6e57600080fd5b506040519080825280601f01601f191660200182016040528015614ca15781602001600182028036833780820191505090505b50905060006001830390508593505b60008414614d1d57600a8481614cc257fe5b0660300160f81b82828060019003935081518110614cdc57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8481614d1557fe5b049350614cb0565b819450505050505b919050565b6000806002546103e8039050600081600254334442604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c81614d9d57fe5b0690506000806012836103e88110614db157fe5b015414614dcf576012826103e88110614dc657fe5b01549050614dd3565b8190505b60006012600185036103e88110614de657fe5b01541415614e0a57600183036012836103e88110614e0057fe5b0181905550614e31565b6012600184036103e88110614e1b57fe5b01546012836103e88110614e2b57fe5b01819055505b614e4560018261411590919063ffffffff16565b935050505090565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614eeb576006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50565b8173ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614fc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e636f7272656374206f776e65722e0000000000000000000000000000000081525060200191505060405180910390fd5b6005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560006007600083815260200190815260200160002054905060006150686001600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506151b490919063ffffffff16565b905081811461513d576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106150bd57fe5b9060005260206000200154905080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061511557fe5b9060005260206000200181905550826007600083815260200190815260200160002081905550505b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061518557fe5b6001900381819060005260206000200160009055905550505050565b600080823b905060008111915050919050565b6000828211156151c357600080fd5b818303905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282615204576000855561524b565b82601f1061521d57803560ff191683800117855561524b565b8280016001018555821561524b579182015b8281111561524a57823582559160200191906001019061522f565b5b509050615258919061525c565b5090565b5b8082111561527557600081600090555060010161525d565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220fd093b68607fe0239bf0ea5e8320bda8ad01fb0943d4df07c06649216dd8246d64736f6c63430007060033

Deployed Bytecode Sourcemap

3260:14561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6247:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3464:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17184:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16354:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8016:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7100:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12304:496;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17706:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15318:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6745:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15575:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13426:99;;;;;;;;;;;;;:::i;:::-;;6585:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15414:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16953:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7825:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7650:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2738:103;;;;;;;;;;;;;:::i;:::-;;17419:90;;;;;;;;;;;;;:::i;:::-;;9775:1078;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2515:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17610:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17067:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16456:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16872:75;;;;;;;;;;;;;:::i;:::-;;12805:401;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3510:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7428:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4153:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6400:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4124:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16566:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17289:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4102:18;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10862:1434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17514:90;;;;;;;;;;;;;:::i;:::-;;16754:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8175:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2849:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3407:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6247:145;6327:4;6351:19;:33;6371:12;6351:33;;;;;;;;;;;;;;;;;;;;;;;;;;;6344:40;;6247:145;;;:::o;3464:42::-;3502:4;3464:42;:::o;17184:99::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17271:4:::1;17254:14;;:21;;;;;;;;;;;;;;;;;;17184:99:::0;:::o;16354:94::-;16393:19;16433:7;16425:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16354:94;:::o;8016:151::-;8110:7;8091:8;5506:1;5475:33;;:9;:19;5485:8;5475:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8137:12:::1;:22;8150:8;8137:22;;;;;;;;;;;;;;;;;;;;;8130:29;;8016:151:::0;;;;:::o;7100:320::-;7183:8;4925:18;4946:9;:19;4956:8;4946:19;;;;;;;;;;;;;;;;;;;;;4925:40;;4998:10;4984:24;;:10;:24;;;:68;;;;5012:16;:28;5029:10;5012:28;;;;;;;;;;;;;;;:40;5041:10;5012:40;;;;;;;;;;;;;;;;;;;;;;;;;4984:68;4976:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7206:8:::1;5506:1;5475:33;;:9;:19;5485:8;5475:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;7227:18:::2;7248:9;:19;7258:8;7248:19;;;;;;;;;;;;;;;;;;;;;7227:40;;7299:10;7286:23;;:9;:23;;;;7278:32;;;::::0;::::2;;7346:9;7321:12;:22;7334:8;7321:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;7403:8;7392:9;7371:41;;7380:10;7371:41;;;;;;;;;;;;5538:1;5083::::1;7100:320:::0;;;;:::o;12304:496::-;4733:14;;;;;;;;;;;4729:55;;;4764:8;;;4729:55;4811:4;4794:14;;:21;;;;;;;;;;;;;;;;;;12401:10:::1;;;;;;;;;;;12393:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12449:6;:18;12456:10;12449:18;;;;;;;;;;;;;;;;;;;;;;;;;12441:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12545:10;12507:48;;12515:10;12507:27;;;12535:5;12507:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:48;;;12499:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12593:13;:25;12607:10;12593:25;;;;;;;;;;;;;;;:32;12619:5;12593:32;;;;;;;;;;;;;;;;;;;;;12592:33;12584:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3502:4;12669:16;12683:1;12669:9;;:13;;:16;;;;:::i;:::-;:31;;12661:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12727:17;12733:10;12727:5;:17::i;:::-;12788:4;12753:13;:25;12767:10;12753:25;;;;;;;;;;;;;;;:32;12779:5;12753:32;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4855:5:::0;4838:14;;:22;;;;;;;;;;;;;;;;;;12304:496;;:::o;17706:109::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:6:::1;;;;;;;;;;;4600:7;4592:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17803:4:::2;;17795:5;:12;;;;;;;:::i;:::-;;17706:109:::0;;:::o;15318:88::-;15362:7;15389:9;;15382:16;;15318:88;:::o;6745:347::-;6843:8;5150:18;5171:9;:19;5181:8;5171:19;;;;;;;;;;;;;;;;;;;;;5150:40;;5237:10;5223:24;;:10;:24;;;:77;;;;5290:10;5264:36;;:12;:22;5277:8;5264:22;;;;;;;;;;;;;;;;;;;;;:36;;;5223:77;:134;;;;5317:16;:28;5334:10;5317:28;;;;;;;;;;;;;;;:40;5346:10;5317:40;;;;;;;;;;;;;;;;;;;;;;;;;5223:134;5201:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6866:8:::1;5506:1;5475:33;;:9;:19;5485:8;5475:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6887:18:::2;6908:9;:19;6918:8;6908:19;;;;;;;;;;;;;;;;;;;;;6887:40;;6960:5;6946:19;;:10;:19;;;6938:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;7023:1;7008:17;;:3;:17;;;;7000:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;7060:24;7070:3;7075:8;7060:9;:24::i;:::-;5538:1;5399::::1;6745:347:::0;;;;;:::o;15575:199::-;15659:7;15696:10;:18;15707:6;15696:18;;;;;;;;;;;;;;;:25;;;;15687:6;:34;15679:43;;;;;;15740:10;:18;15751:6;15740:18;;;;;;;;;;;;;;;15759:6;15740:26;;;;;;;;;;;;;;;;15733:33;;15575:199;;;;:::o;13426:99::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13476:10:::1;13468:28;;:51;13497:21;13468:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13426:99::o:0;6585:152::-;6686:43;6704:5;6711:3;6716:8;6686:43;;;;;;;;;;;;:17;:43::i;:::-;6585:152;;;:::o;15414:153::-;15472:7;15509:1;15500:5;:10;;:33;;;;;3502:4;15514:5;:19;15500:33;15492:42;;;;;;15558:1;15552:5;:7;15545:14;;15414:153;;;:::o;16953:108::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:6:::1;;;;;;;;;;;4600:7;4592:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17050:3:::2;;17034:13;:19;;;;;;;:::i;:::-;;16953:108:::0;;:::o;7825:183::-;7892:14;7958:1;7927:33;;:9;:19;7937:8;7927:19;;;;;;;;;;;;;;;;;;;;;:33;;;;7919:42;;;;;;7981:9;:19;7991:8;7981:19;;;;;;;;;;;;;;;;;;;;;7972:28;;7825:183;;;:::o;7650:167::-;7717:7;7763:1;7745:20;;:6;:20;;;;7737:29;;;;;;7784:25;7802:6;7784:17;:25::i;:::-;7777:32;;7650:167;;;:::o;2738:103::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:30:::1;2830:1;2803:18;:30::i;:::-;2738:103::o:0;17419:90::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17491:10:::1;;;;;;;;;;;17490:11;17477:10;;:24;;;;;;;;;;;;;;;;;;17419:90::o:0;9775:1078::-;4733:14;;;;;;;;;;;4729:55;;;4764:8;;;4729:55;4811:4;4794:14;;:21;;;;;;;;;;;;;;;;;;9883:10:::1;;;;;;;;;;;9875:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9958:1;9930:30;;:9;:16;9940:5;9930:16;;;;;;;;;;;;;;;;;;;;;:30;;;9922:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9995:12;10161:10;10172:5;10186:4;10123:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10096:134;;;;;;10030:215;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;10010:246;;;;;;9995:261;;10297:14;;;;;;;;;;;10271:40;;:24;10279:4;10285:9;;10271:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:24::i;:::-;:40;;;10263:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10340:13;10382:1;10370:9;;3502:4;10356:23;:27;10340:43;;10389:13;10405:7;10413:5;10405:14;;;;;;;;;10389:30;;10453:11;10498:1:::0;10474:11:::1;:20;10492:1;10486:5;:7;10474:20;;;;;;;;;;;;:25;10471:89;;;10517:1;10511:5;:7;10505:13;;10471:89;;;10559:1;10538:11;:20;10556:1;10550:5;:7;10538:20;;;;;;;;;;;;:22;10532:28;;10471:89;10582:1;10573:5;:10;10569:96;;;10608:5;10591:7;10600:3;10591:14;;;;;;;;:22;;;;10569:96;;;10653:5;10636:7;10645:3;10636:14;;;;;;;;:22;;;;10569:96;10705:1;10699:3;:7;10669:11;:27;10682:7;10690:3;10682:12;;;;;;;;;10669:27;;;;;;;;;;;:37;;;;10746:1;10734:9;;:13;10722:9;:25;;;;10758:30;10770:10;10782:5;10758:11;:30::i;:::-;10837:5;10825:10;10804:39;;10821:1;10804:39;;;;;;;;;;;;4826:1;;;;4855:5:::0;4838:14;;:22;;;;;;;;;;;;;;;;;;9775:1078;;;:::o;2515:87::-;2561:7;2588:6;;;;;;;;;;;2581:13;;2515:87;:::o;17610:90::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17683:9:::1;17675:5;:17;;;;17610:90:::0;:::o;17067:111::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:6:::1;;;;;;;;;;;4600:7;4592:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17167:3:::2;;17152:12;:18;;;;;;;:::i;:::-;;17067:111:::0;;:::o;16456:102::-;16497:21;16541:9;16531:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16456:102;:::o;16872:75::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16935:4:::1;16926:6;;:13;;;;;;;;;;;;;;;;;;16872:75::o:0;12805:401::-;4733:14;;;;;;;;;;;4729:55;;;4764:8;;;4729:55;4811:4;4794:14;;:21;;;;;;;;;;;;;;;;;;12886:10:::1;;;;;;;;;;;12878:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12951:1;12940:8;:12;12932:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3502:4;12987:23;13001:8;12987:9;;:13;;:23;;;;:::i;:::-;:38;;12979:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13075:19;13085:8;13075:5;;:9;;:19;;;;:::i;:::-;13062:9;:32;;13054:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13127:6;13123:76;13143:8;13139:1;:12;13123:76;;;13167:17;13173:10;13167:5;:17::i;:::-;13153:3;;;;;;;13123:76;;;;4855:5:::0;4838:14;;:22;;;;;;;;;;;;;;;;;;12805:401;:::o;3510:33::-;;;;:::o;7428:214::-;7561:9;7519:16;:28;7536:10;7519:28;;;;;;;;;;;;;;;:39;7548:9;7519:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;7613:9;7586:48;;7601:10;7586:48;;;7624:9;7586:48;;;;;;;;;;;;;;;;;;;;7428:214;;:::o;4153:22::-;;;;;;;;;;;;;:::o;6400:177::-;6523:46;6541:5;6548:3;6553:8;6563:5;;6523:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;6400:177;;;;;:::o;4124:22::-;;;;;;;;;;;;;:::o;16566:182::-;16648:13;16629:8;5506:1;5475:33;;:9;:19;5485:8;5475:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16705:13:::1;16720:18;16729:8;16720;:18::i;:::-;16688:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16674:66;;16566:182:::0;;;;:::o;17289:124::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17387:6:::1;:18;17394:10;17387:18;;;;;;;;;;;;;;;;;;;;;;;;;17386:19;17365:6;:18;17372:10;17365:18;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;17289:124:::0;:::o;4102:18::-;;;;;;;;;;;;;:::o;10862:1434::-;4733:14;;;;;;;;;;;4729:55;;;4764:8;;;4729:55;4811:4;4794:14;;:21;;;;;;;;;;;;;;;;;;10987:10:::1;;;;;;;;;;;10979:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11030:23;11056:19;11065:6;;11072:1;11065:9;;;;;;;;;;;;;11056:8;:19::i;:::-;11030:45;;11084:9;11096:1;11084:13;;11080:183;11103:6;;:13;;11099:1;:17;11080:183;;;11200:9;11216:19;11225:6;;11232:1;11225:9;;;;;;;;;;;;;11216:8;:19::i;:::-;11182:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11129:127;;11118:3;;;;;;;11080:183;;;;11275:12;11441:10;11452:9;11470:4;11403:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11376:138;;;;;;11310:219;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;11290:250;;;;;;11275:265;;11581:14;;;;;;;;;;;11555:40;;:24;11563:4;11569:9;;11555:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:24::i;:::-;:40;;;11547:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11628:9;11624:657;11647:6;;:13;;11643:1;:17;11624:657;;;11709:1;11677:34;;:9;:20;11687:6;;11694:1;11687:9;;;;;;;;;;;;;11677:20;;;;;;;;;;;;;;;;;;;;;:34;;;11674:602;;;11725:13;11767:1;11755:9;;3502:4;11741:23;:27;11725:43;;11776:13;11792:7;11800:5;11792:14;;;;;;;;;11776:30;;11842:11;11895:1:::0;11867:11:::1;:24;11889:1;11879:6;;11886:1;11879:9;;;;;;;;;;;;;:11;11867:24;;;;;;;;;;;;:29;11864:107;;;11920:1;11910:6;;11917:1;11910:9;;;;;;;;;;;;;:11;11904:17;;11864:107;;;11970:1;11945:11;:24;11967:1;11957:6;;11964:1;11957:9;;;;;;;;;;;;;:11;11945:24;;;;;;;;;;;;:26;11939:32;;11864:107;11995:1;11986:5;:10;11982:106;;;12023:5;12006:7;12015:3;12006:14;;;;;;;;:22;;;;11982:106;;;12074:5;12057:7;12066:3;12057:14;;;;;;;;:22;;;;11982:106;12130:1;12124:3;:7;12094:11;:27;12107:7;12115:3;12107:12;;;;;;;;;12094:27;;;;;;;;;;;:37;;;;12171:1;12159:9;;:13;12147:9;:25;;;;12179:34;12191:10;12203:6;;12210:1;12203:9;;;;;;;;;;;;;12179:11;:34::i;:::-;12258:6;;12265:1;12258:9;;;;;;;;;;;;;12246:10;12225:43;;12242:1;12225:43;;;;;;;;;;;;11674:602;;;;11662:3;;;;;;;11624:657;;;;4826:1;;4855:5:::0;4838:14;;:22;;;;;;;;;;;;;;;;;;10862:1434;;;;:::o;17514:90::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17586:10:::1;;;;;;;;;;;17585:11;17572:10;;:24;;;;;;;;;;;;;;;;;;17514:90::o:0;16754:97::-;16798:13;16831:12;16824:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16754:97;:::o;8175:160::-;8268:4;8292:16;:24;8309:6;8292:24;;;;;;;;;;;;;;;:35;8317:9;8292:35;;;;;;;;;;;;;;;;;;;;;;;;;8285:42;;8175:160;;;;:::o;2849:201::-;2661:12;:10;:12::i;:::-;2650:23;;:7;:5;:7::i;:::-;:23;;;2642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2958:1:::1;2938:22;;:8;:22;;;;2930:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3014:28;3033:8;3014:18;:28::i;:::-;2849:201:::0;:::o;3407:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2057:98::-;2110:7;2137:10;2130:17;;2057:98;:::o;1871:142::-;1929:9;1959:1;1955;:5;1951:9;;1984:1;1979;:6;;1971:15;;;;;;1871:142;;;;:::o;13216:198::-;13270:11;13284:13;:11;:13::i;:::-;13270:27;;13327:1;13315:9;;:13;13303:9;:25;;;;13339:21;13351:3;13356;13339:11;:21::i;:::-;13402:3;13397;13376:30;;13393:1;13376:30;;;;;;;;;;;;13216:198;;:::o;8343:274::-;8413:12;8428:9;:19;8438:8;8428:19;;;;;;;;;;;;;;;;;;;;;8413:34;;8458:24;8473:8;8458:14;:24::i;:::-;8495:30;8510:4;8516:8;8495:14;:30::i;:::-;8536:26;8548:3;8553:8;8536:11;:26::i;:::-;8600:8;8595:3;8580:29;;8589:4;8580:29;;;;;;;;;;;;8343:274;;;:::o;14584:544::-;14700:8;5150:18;5171:9;:19;5181:8;5171:19;;;;;;;;;;;;;;;;;;;;;5150:40;;5237:10;5223:24;;:10;:24;;;:77;;;;5290:10;5264:36;;:12;:22;5277:8;5264:22;;;;;;;;;;;;;;;;;;;;;:36;;;5223:77;:134;;;;5317:16;:28;5334:10;5317:28;;;;;;;;;;;;;;;:40;5346:10;5317:40;;;;;;;;;;;;;;;;;;;;;;;;;5223:134;5201:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14723:8:::1;5506:1;5475:33;;:9;:19;5485:8;5475:19;;;;;;;;;;;;;;;;;;;;;:33;;;;5467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;14744:18:::2;14765:9;:19;14775:8;14765:19;;;;;;;;;;;;;;;;;;;;;14744:40;;14817:5;14803:19;;:10;:19;;;14795:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;14877:1;14862:17;;:3;:17;;;;14854:26;;;::::0;::::2;;14893:24;14903:3;14908:8;14893:9;:24::i;:::-;14934:15;14945:3;14934:10;:15::i;:::-;14930:191;;;14966:13;15002:3;14982:41;;;15024:10;15036:5;15043:8;15053:5;14982:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;14966:93;;3390:10;15092:16;;15082:26;;;:6;:26;;;;15074:35;;;::::0;::::2;;14930:191;;5538:1;5399::::1;14584:544:::0;;;;;;:::o;14450:126::-;14516:7;14543:10;:18;14554:6;14543:18;;;;;;;;;;;;;;;:25;;;;14536:32;;14450:126;;;:::o;3058:191::-;3132:16;3151:6;;;;;;;;;;;3132:25;;3177:8;3168:6;;:17;;;;;;;;;;;;;;;;;;3232:8;3201:40;;3222:8;3201:40;;;;;;;;;;;;3058:191;;:::o;9251:513::-;9329:7;9373:2;9353:9;:16;:22;9345:31;;;;;;9395:9;9415;9435:7;9503:2;9492:9;9488:18;9482:25;9477:30;;9547:2;9536:9;9532:18;9526:25;9521:30;;9599:2;9588:9;9584:18;9578:25;9575:1;9570:34;9565:39;;9635:2;9631:1;:6;;;9627:46;;;9659:2;9654:7;;;;9627:46;9698:2;9693:1;:7;;;:18;;;;9709:2;9704:1;:7;;;9693:18;9685:27;;;;;;9730:24;9740:4;9746:1;9749;9752;9730:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:31;;;;;9251:513;;;;:::o;13541:286::-;13652:1;13621:33;;:9;:19;13631:8;13621:19;;;;;;;;;;;;;;;;;;;;;:33;;;13613:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13706:3;13684:9;:19;13694:8;13684:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;13722:10;:15;13733:3;13722:15;;;;;;;;;;;;;;;13743:8;13722:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13790:29;13817:1;13790:10;:15;13801:3;13790:15;;;;;;;;;;;;;;;:22;;;;:26;;:29;;;;:::i;:::-;13763:14;:24;13778:8;13763:24;;;;;;;;;;;:56;;;;13541:286;;:::o;1419:203::-;1477:9;1508:1;1503;:6;1499:47;;;1533:1;1526:8;;;;1499:47;1564:1;1560;:5;1556:9;;1593:1;1588;1584;:5;;;;;;:10;1576:19;;;;;;1419:203;;;;;:::o;15791:555::-;15847:13;15886:1;15877:5;:10;15873:53;;;15904:10;;;;;;;;;;;;;;;;;;;;;15873:53;15936:12;15951:5;15936:20;;15967:14;15992:78;16007:1;15999:4;:9;15992:78;;16025:8;;;;;;;16056:2;16048:10;;;;;;;;;15992:78;;;16080:19;16112:6;16102:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16080:39;;16130:13;16155:1;16146:6;:10;16130:26;;16174:5;16167:12;;16190:117;16205:1;16197:4;:9;16190:117;;16266:2;16259:4;:9;;;;;;16254:2;:14;16241:29;;16223:6;16230:7;;;;;;;16223:15;;;;;;;;;;;:47;;;;;;;;;;;16293:2;16285:10;;;;;;;;;16190:117;;;16331:6;16317:21;;;;;;15791:555;;;;:::o;8635:601::-;8676:4;8693:14;8724:9;;3502:4;8710:23;8693:40;;8744:10;8851:9;8789;;8800:10;8812:16;8830:15;8772:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8762:85;;;;;;8757:91;;:103;;;;;;8744:116;;8871:10;8918:1;8900:7;8908:5;8900:14;;;;;;;;;:19;8896:120;;8944:7;8952:5;8944:14;;;;;;;;;8936:22;;8896:120;;;8999:5;8991:13;;8896:120;9058:1;9032:7;9052:1;9040:9;:13;9032:22;;;;;;;;;:27;9028:162;;;9105:1;9093:9;:13;9076:7;9084:5;9076:14;;;;;;;;:30;;;;9028:162;;;9156:7;9176:1;9164:9;:13;9156:22;;;;;;;;;9139:7;9147:5;9139:14;;;;;;;;:39;;;;9028:162;9216:12;9226:1;9216:5;:9;;:12;;;;:::i;:::-;9209:19;;;;;8635:601;:::o;15136:166::-;15235:1;15201:36;;:12;:22;15214:8;15201:22;;;;;;;;;;;;;;;;;;;;;:36;;;15197:98;;15261:12;:22;15274:8;15261:22;;;;;;;;;;;;15254:29;;;;;;;;;;;15197:98;15136:166;:::o;13835:607::-;13943:5;13920:28;;:9;:19;13930:8;13920:19;;;;;;;;;;;;;;;;;;;;;:28;;;13912:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13987:9;:19;13997:8;13987:19;;;;;;;;;;;;13980:26;;;;;;;;;;;14019;14048:14;:24;14063:8;14048:24;;;;;;;;;;;;14019:53;;14083:22;14108:31;14137:1;14108:10;:17;14119:5;14108:17;;;;;;;;;;;;;;;:24;;;;:28;;:31;;;;:::i;:::-;14083:56;;14174:18;14156:14;:36;14152:247;;14209:17;14229:10;:17;14240:5;14229:17;;;;;;;;;;;;;;;14247:14;14229:33;;;;;;;;;;;;;;;;14209:53;;14317:9;14277:10;:17;14288:5;14277:17;;;;;;;;;;;;;;;14295:18;14277:37;;;;;;;;;;;;;;;:49;;;;14369:18;14341:14;:25;14356:9;14341:25;;;;;;;;;;;:46;;;;14152:247;;14411:10;:17;14422:5;14411:17;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;13835:607;;;;:::o;6024:215::-;6082:17;6112:12;6166:5;6154:18;6146:26;;6230:1;6223:4;:8;6208:23;;6024:215;;;;:::o;1739:124::-;1797:7;1830:1;1825;:6;;1817:15;;;;;;1854:1;1850;:5;1843:12;;1739:124;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://fd093b68607fe0239bf0ea5e8320bda8ad01fb0943d4df07c06649216dd8246d
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.