ETH Price: $2,517.28 (+3.36%)

Contract

0x027C4A8d8BDf591E71Fd5a15C8D20B007b8919c5
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040129291512021-07-30 20:42:271130 days ago1627677747IN
 Contract Creation
0 ETH0.1419264537

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
129291512021-07-30 20:42:271130 days ago1627677747
0x027C4A8d...07b8919c5
 Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x0b440b38...664C59c39
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
YAT

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-29
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

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

contract Metadata {
	string public name = "Yat NFT (preview)";
	string public symbol = "Yats";
	function contractURI() external pure returns (string memory) {
		return "";
	}
	function baseTokenURI() public pure returns (string memory) {
		return "https://a.yat.fyi/nft_transfers/metadata/";
	}
	function tokenURI(uint256 _tokenId) external pure returns (string memory) {
		bytes memory _base = bytes(baseTokenURI());
		uint256 _digits = 1;
		uint256 _n = _tokenId;
		while (_n > 9) {
			_n /= 10;
			_digits++;
		}
		bytes memory _uri = new bytes(_base.length + _digits);
		for (uint256 i = 0; i < _uri.length; i++) {
			if (i < _base.length) {
				_uri[i] = _base[i];
			} else {
				uint256 _dec = (_tokenId / (10**(_uri.length - i - 1))) % 10;
				_uri[i] = bytes1(uint8(_dec) + 48);
			}
		}
		return string(_uri);
	}
}

contract YAT {

	address constant private USE_GLOBAL_SIGNER = address(type(uint160).max);

	struct User {
		uint256 balance;
		mapping(uint256 => uint256) list;
		mapping(address => bool) approved;
		mapping(uint256 => uint256) indexOf;
	}

	struct Token {
		address owner;
		address cosigner;
		address approved;
		address pointsTo;
		address resolvesTo;
		string token;
		uint256 records;
		mapping(uint256 => bytes32) keys;
		mapping(bytes32 => string) values;
		mapping(bytes32 => uint256) indexOf;
		uint256 nonce;
	}

	struct Info {
		uint256 totalSupply;
		mapping(uint256 => Token) list;
		mapping(bytes32 => uint256) idOf;
		mapping(bytes32 => string) dictionary;
		mapping(address => string) resolve;
		mapping(address => User) users;
		Metadata metadata;
		address owner;
		address signer;
	}
	Info private info;

	mapping(bytes4 => bool) public supportsInterface;

	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Transfer(address indexed from, address indexed to, bytes32 indexed tokenHash, string token);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

	event Mint(bytes32 indexed tokenHash, uint256 indexed tokenId, address indexed account, string token);
	event Burn(bytes32 indexed tokenHash, uint256 indexed tokenId, address indexed account, string token);
	event RecordUpdated(bytes32 indexed tokenHash, address indexed manager, bytes32 indexed keyHash, string token, string key, string value);
	event RecordAdded(bytes32 indexed tokenHash, address indexed manager, bytes32 indexed keyHash, string token, string key);
	event RecordDeleted(bytes32 indexed tokenHash, address indexed manager, bytes32 indexed keyHash, string token, string key);


	modifier _onlyOwner() {
		require(msg.sender == owner());
		_;
	}

	modifier _onlyTokenOwner(uint256 _tokenId) {
		require(msg.sender == ownerOf(_tokenId));
		_;
	}

	modifier _onlyTokenOwnerOrCosigner(uint256 _tokenId) {
		require(msg.sender == ownerOf(_tokenId) || msg.sender == cosignerOf(_tokenId));
		_;
	}


	constructor(address _signer) {
		info.metadata = new Metadata();
		info.owner = msg.sender;
		info.signer = _signer;
		supportsInterface[0x01ffc9a7] = true; // ERC-165
		supportsInterface[0x80ac58cd] = true; // ERC-721
		supportsInterface[0x5b5e139f] = true; // Metadata
		supportsInterface[0x780e9d63] = true; // Enumerable
	}

	function setOwner(address _owner) external _onlyOwner {
		info.owner = _owner;
	}

	function setSigner(address _signer) external _onlyOwner {
		info.signer = _signer;
	}

	function setMetadata(Metadata _metadata) external _onlyOwner {
		info.metadata = _metadata;
	}


	function mint(string calldata _token, address _account, uint256 _expiry, bytes memory _signature) external {
		require(block.timestamp < _expiry);
		require(_verifyMint(_token, _account, _expiry, _signature));
		_mint(_token, _account);
	}

	/**
     *  "Soft-burns" the NFT by transferring the token to the contract address.
    **/
	function burn(uint256 _tokenId) external _onlyTokenOwner(_tokenId) {
		_transfer(msg.sender, address(this), _tokenId);
		emit Burn(hashOf(tokenOf(_tokenId)), _tokenId, msg.sender, tokenOf(_tokenId));
	}
	
	function setCosigner(address _cosigner, uint256 _tokenId) public _onlyTokenOwner(_tokenId) {
		info.list[_tokenId].cosigner = _cosigner;
	}

	function resetCosigner(uint256 _tokenId) external {
		setCosigner(USE_GLOBAL_SIGNER, _tokenId);
	}

	function revokeCosigner(uint256 _tokenId) external {
		setCosigner(address(0x0), _tokenId);
	}
	
	function setPointsTo(address _pointsTo, uint256 _tokenId) public _onlyTokenOwner(_tokenId) {
		info.list[_tokenId].pointsTo = _pointsTo;
	}
	
	function resolveTo(address _resolvesTo, uint256 _tokenId) public _onlyTokenOwner(_tokenId) {
		_updateResolvesTo(_resolvesTo, _tokenId);
	}

	function unresolve(uint256 _tokenId) external {
		resolveTo(address(0x0), _tokenId);
	}

	function updateRecord(uint256 _tokenId, string memory _key, string memory _value, bytes memory _signature) external {
		require(_verifyRecordUpdate(_tokenId, _key, _value, info.list[_tokenId].nonce++, _signature));
		_updateRecord(_tokenId, _key, _value);
	}

	function updateRecord(uint256 _tokenId, string memory _key, string memory _value) public _onlyTokenOwnerOrCosigner(_tokenId) {
		_updateRecord(_tokenId, _key, _value);
	}

	function deleteRecord(uint256 _tokenId, string memory _key) external {
		updateRecord(_tokenId, _key, "");
	}

	function deleteAllRecords(uint256 _tokenId) external _onlyTokenOwnerOrCosigner(_tokenId) {
		_deleteAllRecords(_tokenId);
	}
	
	function approve(address _approved, uint256 _tokenId) external _onlyTokenOwner(_tokenId) {
		info.list[_tokenId].approved = _approved;
		emit Approval(msg.sender, _approved, _tokenId);
	}

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

	function transferFrom(address _from, address _to, uint256 _tokenId) external {
		_transfer(_from, _to, _tokenId);
	}

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

	function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public {
		_transfer(_from, _to, _tokenId);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) == 0x150b7a02);
		}
	}


	function name() external view returns (string memory) {
		return info.metadata.name();
	}

	function symbol() external view returns (string memory) {
		return info.metadata.symbol();
	}

	function contractURI() external view returns (string memory) {
		return info.metadata.contractURI();
	}

	function baseTokenURI() external view returns (string memory) {
		return info.metadata.baseTokenURI();
	}

	function tokenURI(uint256 _tokenId) external view returns (string memory) {
		return info.metadata.tokenURI(_tokenId);
	}

	function owner() public view returns (address) {
		return info.owner;
	}

	function signer() public view returns (address) {
		return info.signer;
	}

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

	function balanceOf(address _owner) public view returns (uint256) {
		return info.users[_owner].balance;
	}

	function resolve(address _account) public view returns (string memory) {
		return info.resolve[_account];
	}

	function reverseResolve(string memory _token) public view returns (address) {
		return info.list[idOf(_token)].resolvesTo;
	}

	function hashOf(string memory _token) public pure returns (bytes32) {
		return keccak256(abi.encodePacked(_token));
	}

	function idOf(string memory _token) public view returns (uint256) {
		bytes32 _hash = hashOf(_token);
		require(info.idOf[_hash] != 0);
		return info.idOf[_hash] - 1;
	}

	function tokenOf(uint256 _tokenId) public view returns (string memory) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].token;
	}

	function ownerOf(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].owner;
	}

	function cosignerOf(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		address _cosigner = info.list[_tokenId].cosigner;
		if (_cosigner == USE_GLOBAL_SIGNER) {
			_cosigner = signer();
		}
		return _cosigner;
	}

	function pointsTo(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].pointsTo;
	}

	function nonceOf(uint256 _tokenId) public view returns (uint256) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].nonce;
	}

	function recordsOf(uint256 _tokenId) public view returns (uint256) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].records;
	}

	function getApproved(uint256 _tokenId) public view returns (address) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].approved;
	}

	function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
		return info.users[_owner].approved[_operator];
	}

	function tokenByIndex(uint256 _index) public view returns (uint256) {
		require(_index < totalSupply());
		return _index;
	}

	function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) {
		require(_index < balanceOf(_owner));
		return info.users[_owner].list[_index];
	}

	function getKey(bytes32 _hash) public view returns (string memory) {
		return info.dictionary[_hash];
	}

	function getRecord(string memory _token, string memory _key) public view returns (string memory) {
		return getRecord(idOf(_token), _key);
	}

	function getRecord(uint256 _tokenId, string memory _key) public view returns (string memory) {
		bytes32 _hash = keccak256(abi.encodePacked(_key));
		return getRecord(_tokenId, _hash);
	}

	function getRecord(uint256 _tokenId, bytes32 _hash) public view returns (string memory) {
		require(_tokenId < totalSupply());
		return info.list[_tokenId].values[_hash];
	}

	function getFullRecord(uint256 _tokenId, bytes32 _hash) public view returns (string memory, string memory) {
		return (getKey(_hash), getRecord(_tokenId, _hash));
	}

	function getRecords(uint256 _tokenId, bytes32[] memory _hashes) public view returns (bytes32[] memory values, bool[] memory trimmed) {
		require(_tokenId < totalSupply());
		uint256 _length = _hashes.length;
		values = new bytes32[](_length);
		trimmed = new bool[](_length);
		for (uint256 i = 0; i < _length; i++) {
			string memory _value = info.list[_tokenId].values[_hashes[i]];
			values[i] = _stringToBytes32(_value);
			trimmed[i] = bytes(_value).length > 32;
		}
	}

	function getRecordsTable(uint256 _tokenId, uint256 _limit, uint256 _page, bool _isAsc) public view returns (bytes32[] memory hashes, bytes32[] memory keys, bool[] memory keysTrimmed, bytes32[] memory values, bool[] memory valuesTrimmed, uint256 totalRecords, uint256 totalPages) {
		require(_limit > 0);
		totalRecords = recordsOf(_tokenId);

		if (totalRecords > 0) {
			totalPages = (totalRecords / _limit) + (totalRecords % _limit == 0 ? 0 : 1);
			require(_page < totalPages);

			uint256 _offset = _limit * _page;
			if (_page == totalPages - 1 && totalRecords % _limit != 0) {
				_limit = totalRecords % _limit;
			}

			hashes = new bytes32[](_limit);
			keys = new bytes32[](_limit);
			keysTrimmed = new bool[](_limit);
			for (uint256 i = 0; i < _limit; i++) {
				hashes[i] = info.list[_tokenId].keys[_isAsc ? _offset + i : totalRecords - _offset - i - 1];
				string memory _key = getKey(hashes[i]);
				keys[i] = _stringToBytes32(_key);
				keysTrimmed[i] = bytes(_key).length > 32;
			}
		} else {
			totalPages = 0;
			hashes = new bytes32[](0);
			keys = new bytes32[](0);
			keysTrimmed = new bool[](0);
		}
		(values, valuesTrimmed) = getRecords(_tokenId, hashes);
	}

	function getYAT(string memory _token) public view returns (uint256 tokenId, address tokenOwner, address tokenCosigner, address pointer, address approved, uint256 nonce, uint256 records) {
		tokenId = idOf(_token);
		( , tokenOwner, tokenCosigner, pointer, approved, nonce, records) = getYAT(tokenId);
	}

	function getYAT(uint256 _tokenId) public view returns (string memory token, address tokenOwner, address tokenCosigner, address pointer, address approved, uint256 nonce, uint256 records) {
		return (tokenOf(_tokenId), ownerOf(_tokenId), cosignerOf(_tokenId), pointsTo(_tokenId), getApproved(_tokenId), nonceOf(_tokenId), recordsOf(_tokenId));
	}

	function getYATs(uint256[] memory _tokenIds) public view returns (bytes32[] memory tokens, address[] memory owners, address[] memory cosigners, address[] memory pointers, address[] memory approveds) {
		uint256 _length = _tokenIds.length;
		tokens = new bytes32[](_length);
		owners = new address[](_length);
		cosigners = new address[](_length);
		pointers = new address[](_length);
		approveds = new address[](_length);
		for (uint256 i = 0; i < _length; i++) {
			string memory _token;
			(_token, owners[i], cosigners[i], pointers[i], approveds[i], , ) = getYAT(_tokenIds[i]);
			tokens[i] = _stringToBytes32(_token);
		}
	}

	function getYATsTable(uint256 _limit, uint256 _page, bool _isAsc) public view returns (uint256[] memory tokenIds, bytes32[] memory tokens, address[] memory owners, address[] memory cosigners, address[] memory pointers, address[] memory approveds, uint256 totalYATs, uint256 totalPages) {
		require(_limit > 0);
		totalYATs = totalSupply();

		if (totalYATs > 0) {
			totalPages = (totalYATs / _limit) + (totalYATs % _limit == 0 ? 0 : 1);
			require(_page < totalPages);

			uint256 _offset = _limit * _page;
			if (_page == totalPages - 1 && totalYATs % _limit != 0) {
				_limit = totalYATs % _limit;
			}

			tokenIds = new uint256[](_limit);
			for (uint256 i = 0; i < _limit; i++) {
				tokenIds[i] = tokenByIndex(_isAsc ? _offset + i : totalYATs - _offset - i - 1);
			}
		} else {
			totalPages = 0;
			tokenIds = new uint256[](0);
		}
		(tokens, owners, cosigners, pointers, approveds) = getYATs(tokenIds);
	}

	function getOwnerYATsTable(address _owner, uint256 _limit, uint256 _page, bool _isAsc) public view returns (uint256[] memory tokenIds, bytes32[] memory tokens, address[] memory cosigners, address[] memory pointers, address[] memory approveds, uint256 totalYATs, uint256 totalPages) {
		require(_limit > 0);
		totalYATs = balanceOf(_owner);

		if (totalYATs > 0) {
			totalPages = (totalYATs / _limit) + (totalYATs % _limit == 0 ? 0 : 1);
			require(_page < totalPages);

			uint256 _offset = _limit * _page;
			if (_page == totalPages - 1 && totalYATs % _limit != 0) {
				_limit = totalYATs % _limit;
			}

			tokenIds = new uint256[](_limit);
			for (uint256 i = 0; i < _limit; i++) {
				tokenIds[i] = tokenOfOwnerByIndex(_owner, _isAsc ? _offset + i : totalYATs - _offset - i - 1);
			}
		} else {
			totalPages = 0;
			tokenIds = new uint256[](0);
		}
		(tokens, , cosigners, pointers, approveds) = getYATs(tokenIds);
	}

	function allInfoFor(address _owner) external view returns (uint256 supply, uint256 ownerBalance) {
		return (totalSupply(), balanceOf(_owner));
	}


	function _mint(string memory _token, address _account) internal {
		uint256 _tokenId;
		bytes32 _hash = hashOf(_token);
		if (info.idOf[_hash] == 0) {
			_tokenId = info.totalSupply++;
			info.idOf[_hash] = _tokenId + 1;
			Token storage _newToken = info.list[_tokenId];
			_newToken.owner = _account;
			_newToken.cosigner = USE_GLOBAL_SIGNER;
			_newToken.token = _token;
			uint256 _index = info.users[_account].balance++;
			info.users[_account].indexOf[_tokenId] = _index + 1;
			info.users[_account].list[_index] = _tokenId;
			emit Transfer(address(0x0), _account, _tokenId);
			emit Transfer(address(0x0), _account, _hash, _token);
		} else {
			_tokenId = idOf(_token);
			info.list[_tokenId].approved = msg.sender;
			_transfer(address(this), _account, _tokenId);
		}
		emit Mint(_hash, _tokenId, _account, _token);
	}
	
	function _transfer(address _from, address _to, uint256 _tokenId) internal {
		address _owner = ownerOf(_tokenId);
		address _approved = getApproved(_tokenId);
		require(_from == _owner);
		require(msg.sender == _owner || msg.sender == _approved || isApprovedForAll(_owner, msg.sender));

		info.list[_tokenId].owner = _to;
		info.list[_tokenId].cosigner = USE_GLOBAL_SIGNER;
		info.list[_tokenId].pointsTo = _to;
		if (_approved != address(0x0)) {
			info.list[_tokenId].approved = address(0x0);
			emit Approval(_to, address(0x0), _tokenId);
		}
		_updateResolvesTo(address(0x0), _tokenId);
		_deleteAllRecords(_tokenId);

		uint256 _index = info.users[_from].indexOf[_tokenId] - 1;
		uint256 _moved = info.users[_from].list[info.users[_from].balance - 1];
		info.users[_from].list[_index] = _moved;
		info.users[_from].indexOf[_moved] = _index + 1;
		info.users[_from].balance--;
		delete info.users[_from].indexOf[_tokenId];
		uint256 _newIndex = info.users[_to].balance++;
		info.users[_to].indexOf[_tokenId] = _newIndex + 1;
		info.users[_to].list[_newIndex] = _tokenId;
		emit Transfer(_from, _to, _tokenId);
		emit Transfer(_from, _to, hashOf(tokenOf(_tokenId)), tokenOf(_tokenId));
	}

	function _updateResolvesTo(address _resolvesTo, uint256 _tokenId) internal {
		if (_resolvesTo == address(0x0)) {
			delete info.resolve[info.list[_tokenId].resolvesTo];
			info.list[_tokenId].resolvesTo = _resolvesTo;
		} else {
			require(bytes(resolve(_resolvesTo)).length == 0);
			require(info.list[_tokenId].resolvesTo == address(0x0));
			info.resolve[_resolvesTo] = tokenOf(_tokenId);
			info.list[_tokenId].resolvesTo = _resolvesTo;
		}
	}

	function _updateRecord(uint256 _tokenId, string memory _key, string memory _value) internal {
		require(bytes(_key).length > 0);
		bytes32 _hash = keccak256(abi.encodePacked(_key));
		if (bytes(getKey(_hash)).length == 0) {
			info.dictionary[_hash] = _key;
		}

		Token storage _token = info.list[_tokenId];
		if (bytes(_value).length == 0) {
			_deleteRecord(_tokenId, _key, _hash);
		} else {
			if (_token.indexOf[_hash] == 0) {
				uint256 _index = _token.records++;
				_token.indexOf[_hash] = _index + 1;
				_token.keys[_index] = _hash;
				emit RecordAdded(hashOf(tokenOf(_tokenId)), msg.sender, hashOf(_key), tokenOf(_tokenId), _key);
			}
			_token.values[_hash] = _value;
		}
		emit RecordUpdated(hashOf(tokenOf(_tokenId)), msg.sender, hashOf(_key), tokenOf(_tokenId), _key, _value);
	}

	function _deleteRecord(uint256 _tokenId, string memory _key, bytes32 _hash) internal {
		Token storage _token = info.list[_tokenId];
		require(_token.indexOf[_hash] != 0);
		uint256 _index = _token.indexOf[_hash] - 1;
		bytes32 _moved = _token.keys[_token.records - 1];
		_token.keys[_index] = _moved;
		_token.indexOf[_moved] = _index + 1;
		_token.records--;
		delete _token.indexOf[_hash];
		delete _token.values[_hash];
		emit RecordDeleted(hashOf(tokenOf(_tokenId)), msg.sender, hashOf(_key), tokenOf(_tokenId), _key);
	}

	function _deleteAllRecords(uint256 _tokenId) internal {
		Token storage _token = info.list[_tokenId];
		while (_token.records > 0) {
			bytes32 _hash = _token.keys[_token.records - 1];
			_deleteRecord(_tokenId, getKey(_hash), _hash);
		}
	}


	function _getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) {
		return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash));
	}

	function _splitSignature(bytes memory _signature) internal pure returns (bytes32 r, bytes32 s, uint8 v) {
		require(_signature.length == 65);
		assembly {
			r := mload(add(_signature, 32))
			s := mload(add(_signature, 64))
			v := byte(0, mload(add(_signature, 96)))
		}
	}

	function _recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) internal pure returns (address) {
		(bytes32 r, bytes32 s, uint8 v) = _splitSignature(_signature);
		return ecrecover(_ethSignedMessageHash, v, r, s);
	}

	function _verifyMint(string calldata _token, address _account, uint256 _expiry, bytes memory _signature) internal view returns (bool) {
		bytes32 _hash = keccak256(abi.encodePacked("gogo", _token, _account, _expiry));
		return _recoverSigner(_getEthSignedMessageHash(_hash), _signature) == signer();
	}

	function _verifyRecordUpdate(uint256 _tokenId, string memory _key, string memory _value, uint256 _nonce, bytes memory _signature) internal view returns (bool) {
		bytes32 _hash = keccak256(abi.encodePacked(_tokenId, _key, _value, _nonce));
		address _signer = _recoverSigner(_getEthSignedMessageHash(_hash), _signature);
		return _signer == ownerOf(_tokenId) || _signer == cosignerOf(_tokenId);
	}

	function _stringToBytes32(string memory _in) internal pure returns (bytes32 out) {
		if (bytes(_in).length == 0) {
			return 0x0;
		}
		assembly {
			out := mload(add(_in, 32))
		}
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"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":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"string","name":"token","type":"string"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"string","name":"token","type":"string"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"manager","type":"address"},{"indexed":true,"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"token","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"RecordAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"manager","type":"address"},{"indexed":true,"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"token","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"RecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"manager","type":"address"},{"indexed":true,"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"token","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"RecordUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"bytes32","name":"tokenHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"token","type":"string"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"ownerBalance","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cosignerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"deleteAllRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_key","type":"string"}],"name":"deleteRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getFullRecord","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getOwnerYATsTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"tokens","type":"bytes32[]"},{"internalType":"address[]","name":"cosigners","type":"address[]"},{"internalType":"address[]","name":"pointers","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"uint256","name":"totalYATs","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_key","type":"string"}],"name":"getRecord","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"},{"internalType":"string","name":"_key","type":"string"}],"name":"getRecord","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getRecord","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"_hashes","type":"bytes32[]"}],"name":"getRecords","outputs":[{"internalType":"bytes32[]","name":"values","type":"bytes32[]"},{"internalType":"bool[]","name":"trimmed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getRecordsTable","outputs":[{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"},{"internalType":"bytes32[]","name":"keys","type":"bytes32[]"},{"internalType":"bool[]","name":"keysTrimmed","type":"bool[]"},{"internalType":"bytes32[]","name":"values","type":"bytes32[]"},{"internalType":"bool[]","name":"valuesTrimmed","type":"bool[]"},{"internalType":"uint256","name":"totalRecords","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getYAT","outputs":[{"internalType":"string","name":"token","type":"string"},{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"tokenCosigner","type":"address"},{"internalType":"address","name":"pointer","type":"address"},{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"records","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"}],"name":"getYAT","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"tokenCosigner","type":"address"},{"internalType":"address","name":"pointer","type":"address"},{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"records","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"getYATs","outputs":[{"internalType":"bytes32[]","name":"tokens","type":"bytes32[]"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"cosigners","type":"address[]"},{"internalType":"address[]","name":"pointers","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"bool","name":"_isAsc","type":"bool"}],"name":"getYATsTable","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"tokens","type":"bytes32[]"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"cosigners","type":"address[]"},{"internalType":"address[]","name":"pointers","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"uint256","name":"totalYATs","type":"uint256"},{"internalType":"uint256","name":"totalPages","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"}],"name":"idOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_expiry","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"pointsTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"recordsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"resetCosigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"resolve","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_resolvesTo","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"resolveTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_token","type":"string"}],"name":"reverseResolve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"revokeCosigner","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":"address","name":"_cosigner","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setCosigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Metadata","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pointsTo","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setPointsTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenOf","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unresolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_key","type":"string"},{"internalType":"string","name":"_value","type":"string"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"updateRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_key","type":"string"},{"internalType":"string","name":"_value","type":"string"}],"name":"updateRecord","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103835760003560e01c806370a08231116101de578063c43a3f871161010f578063e63dfc97116100ad578063eb1af4d11161007c578063eb1af4d11461089c578063f3cb8385146108bd578063f91fc4c2146108d0578063fefd445f146108e357600080fd5b8063e63dfc97146107e8578063e8a3d48514610841578063e985e9c514610849578063ea78803f1461088957600080fd5b8063d547cfb7116100e9578063d547cfb714610780578063e2dadf4e14610788578063e3acd07d146107ae578063e54b7f3e146107c157600080fd5b8063c43a3f8714610747578063c87b56dd1461075a578063d06497bf1461076d57600080fd5b806397830de01161017c578063b2b3140d11610156578063b2b3140d146106ed578063b5a3844b14610700578063b88d4fde14610721578063bc4a96491461073457600080fd5b806397830de0146106a15780639ac8027c146106c7578063a22cb465146106da57600080fd5b80638a53ddb9116101b85780638a53ddb91461064f5780638c1858e7146106625780638da5cb5b1461068857806395d89b411461069957600080fd5b806370a082311461060057806373704e2c14610629578063776adef81461063c57600080fd5b806327ba7cc3116102b857806357f6b812116102565780636352211e116102305780636352211e146105b45780636c19e783146105c75780636ccbae5f146105da5780636dfedad7146105ed57600080fd5b806357f6b812146105665780635fd846f21461058e57806361ff33a1146105a157600080fd5b806342842e0e1161029257806342842e0e1461051a57806342966c681461052d5780634f6ccce71461054057806355ea6c471461055357600080fd5b806327ba7cc3146104e15780632f745c59146104f45780633812c6a81461050757600080fd5b806318160ddd116103255780632392c189116102ff5780632392c1891461048457806323b872dd14610497578063243c7540146104aa57806324b950fe146104ce57600080fd5b806318160ddd1461044e578063183d127214610460578063238ac9331461047357600080fd5b8063095ea7b311610361578063095ea7b3146104005780630b7bb3cb1461041557806312aaac701461042857806313af40351461043b57600080fd5b806301ffc9a71461038857806306fdde03146103c0578063081812fc146103d5575b600080fd5b6103ab610396366004612f32565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103c86108f6565b6040516103b79190613724565b6103e86103e3366004612f19565b61097c565b6040516001600160a01b0390911681526020016103b7565b61041361040e366004612e0e565b6109aa565b005b610413610423366004613297565b610a2e565b6103c8610436366004612f19565b610a7b565b610413610449366004612cd7565b610b1d565b6000545b6040519081526020016103b7565b61045261046e36600461301d565b610b56565b6008546001600160a01b03166103e8565b610413610492366004612e0e565b610b86565b6104136104a5366004612d2d565b610bbc565b6104bd6104b8366004612e82565b610bc7565b6040516103b7959493929190613535565b6104136104dc366004612f19565b610e26565b6103e86104ef366004612f19565b610e3a565b610452610502366004612e0e565b610e68565b61041361051536600461322b565b610eb9565b610413610528366004612d2d565b610f03565b61041361053b366004612f19565b610f1e565b61045261054e366004612f19565b610fa1565b6103c8610561366004612cd7565b610fb4565b610579610574366004612cd7565b610fdb565b604080519283526020830191909152016103b7565b61045261059c36600461301d565b611009565b6103c86105af3660046131ef565b611052565b6103e86105c2366004612f19565b611091565b6104136105d5366004612cd7565b6110bc565b6104526105e8366004612f19565b6110f5565b6104136105fb3660046131ef565b61111a565b61045261060e366004612cd7565b6001600160a01b031660009081526005602052604090205490565b6103e861063736600461301d565b611138565b6103e861064a366004612f19565b611169565b6103c861065d3660046130c7565b6111b4565b610675610670366004613351565b6111c8565b6040516103b797969594939291906135bb565b6007546001600160a01b03166103e8565b6103c8611490565b6106b46106af366004612f19565b6114d5565b6040516103b79796959493929190613737565b6103c86106d53660046131cd565b611536565b6104136106e8366004612dd9565b6115f9565b6104136106fb366004612f19565b611669565b61071361070e3660046131cd565b6116bd565b6040516103b7929190613788565b61041361072f366004612d6e565b6116de565b610413610742366004612f19565b61179e565b610413610755366004612e0e565b6117a9565b6103c8610768366004612f19565b611803565b61041361077b366004612f19565b611884565b6103c861188f565b61079b610796366004612e3a565b6118d4565b6040516103b797969594939291906136c3565b6104526107bc366004612f19565b611a7a565b6107d46107cf36600461331c565b611a9f565b6040516103b7989796959493929190613633565b6107fb6107f636600461301d565b611c2e565b604080519788526001600160a01b039687166020890152948616948701949094529184166060860152909216608084015260a083019190915260c082015260e0016103b7565b6103c8611c64565b6103ab610857366004612cf4565b6001600160a01b0391821660009081526005602090815260408083209390941682526002909201909152205460ff1690565b6103c8610897366004612f19565b611ca9565b6108af6108aa36600461312a565b611cdb565b6040516103b7929190613596565b6104136108cb366004612cd7565b611ebc565b6104136108de366004612e0e565b611ef5565b6104136108f1366004612f6c565b611f4e565b600654604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109779190810190613051565b905090565b60008054821061098b57600080fd5b506000908152600160205260409020600201546001600160a01b031690565b806109b481611091565b6001600160a01b0316336001600160a01b0316146109d157600080fd5b60008281526001602052604080822060020180546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b6000848152600160205260408120600a018054610a6192879287928792909190610a5783613940565b9190505585611fb1565b610a6a57600080fd5b610a75848484612046565b50505050565b6000818152600360205260409020805460609190610a9890613905565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490613905565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b50505050509050919050565b6007546001600160a01b03163314610b3457600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600081604051602001610b699190613457565b604051602081830303815290604052805190602001209050919050565b80610b9081611091565b6001600160a01b0316336001600160a01b031614610bad57600080fd5b610bb7838361220b565b505050565b610bb7838383612319565b6060806060806060600086519050806001600160401b03811115610bed57610bed6139b1565b604051908082528060200260200182016040528015610c16578160200160208202803683370190505b509550806001600160401b03811115610c3157610c316139b1565b604051908082528060200260200182016040528015610c5a578160200160208202803683370190505b509450806001600160401b03811115610c7557610c756139b1565b604051908082528060200260200182016040528015610c9e578160200160208202803683370190505b509350806001600160401b03811115610cb957610cb96139b1565b604051908082528060200260200182016040528015610ce2578160200160208202803683370190505b509250806001600160401b03811115610cfd57610cfd6139b1565b604051908082528060200260200182016040528015610d26578160200160208202803683370190505b50915060005b81811015610e1b576060610d58898381518110610d4b57610d4b61399b565b60200260200101516114d5565b9050508b8781518110610d6d57610d6d61399b565b602002602001018b8881518110610d8657610d8661399b565b602002602001018b8981518110610d9f57610d9f61399b565b602002602001018b8a81518110610db857610db861399b565b6001600160a01b0395861660209182029290920101529383169093529281169091529190911690529050610deb81612673565b888381518110610dfd57610dfd61399b565b60209081029190910101525080610e1381613940565b915050610d2c565b505091939590929450565b610e376001600160a01b03826117a9565b50565b600080548210610e4957600080fd5b506000908152600160205260409020600301546001600160a01b031690565b6001600160a01b0382166000908152600560205260408120548210610e8c57600080fd5b506001600160a01b0391909116600090815260056020908152604080832093835260019093019052205490565b82610ec381611091565b6001600160a01b0316336001600160a01b03161480610a615750610ee681611169565b6001600160a01b0316336001600160a01b031614610a6a57600080fd5b610bb7838383604051806020016040528060008152506116de565b80610f2881611091565b6001600160a01b0316336001600160a01b031614610f4557600080fd5b610f50333084612319565b3382610f5e61046e82611ca9565b7fe7da089962443ca13b93acded259222f496b43d227e5f74af3a9303d99943201610f8886611ca9565b604051610f959190613724565b60405180910390a45050565b600080548210610fb057600080fd5b5090565b6001600160a01b0381166000908152600460205260409020805460609190610a9890613905565b600080610fe760005490565b6001600160a01b03841660009081526005602052604090205491509150915091565b60008061101583610b56565b60008181526002602052604090205490915061103057600080fd5b60008181526002602052604090205461104b906001906138ab565b9392505050565b60606000826040516020016110679190613457565b6040516020818303038152906040528051906020012090506110898482611536565b949350505050565b6000805482106110a057600080fd5b506000908152600160205260409020546001600160a01b031690565b6007546001600160a01b031633146110d357600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008054821061110457600080fd5b506000908152600160205260409020600a015490565b611134828260405180602001604052806000815250610eb9565b5050565b600060018161114684611009565b81526020810191909152604001600020600401546001600160a01b031692915050565b60008054821061117857600080fd5b600082815260016020819052604090912001546001600160a01b03908116908114156111ae576008546001600160a01b03165b90505b92915050565b60606111ab6111c284611009565b83611052565b606080606080606060008060008a116111e057600080fd5b6111e98b611a7a565b91508115611449576111fb8a8361395b565b1561120757600161120a565b60005b60ff166112178b84613878565b6112219190613860565b905080891061122f57600080fd5b600061123b8a8c61388c565b90506112486001836138ab565b8a14801561125e575061125b8b8461395b565b15155b156112705761126d8b8461395b565b9a505b8a6001600160401b03811115611288576112886139b1565b6040519080825280602002602001820160405280156112b1578160200160208202803683370190505b5097508a6001600160401b038111156112cc576112cc6139b1565b6040519080825280602002602001820160405280156112f5578160200160208202803683370190505b5096508a6001600160401b03811115611310576113106139b1565b604051908082528060200260200182016040528015611339578160200160208202803683370190505b50955060005b8b8110156114425760008d8152600160205260408120600701908b6113845760018361136b86896138ab565b61137591906138ab565b61137f91906138ab565b61138e565b61138e8385613860565b8152602001908152602001600020548982815181106113af576113af61399b565b60200260200101818152505060006113df8a83815181106113d2576113d261399b565b6020026020010151610a7b565b90506113ea81612673565b8983815181106113fc576113fc61399b565b602002602001018181525050602081511188838151811061141f5761141f61399b565b91151560209283029190910190910152508061143a81613940565b91505061133f565b5050611471565b5060408051600080825260208201818152828401828152606084019094529198509096509094505b61147b8b88611cdb565b979c969b509499509397509495509192915050565b600654604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561093b57600080fd5b60606000806000806000806114e988611ca9565b6114f289611091565b6114fb8a611169565b6115048b610e3a565b61150d8c61097c565b6115168d6110f5565b61151f8e611a7a565b959e949d50929b5090995097509550909350915050565b606061154160005490565b831061154c57600080fd5b60008381526001602090815260408083208584526008019091529020805461157390613905565b80601f016020809104026020016040519081016040528092919081815260200182805461159f90613905565b80156115ec5780601f106115c1576101008083540402835291602001916115ec565b820191906000526020600020905b8154815290600101906020018083116115cf57829003601f168201915b5050505050905092915050565b3360008181526005602090815260408083206001600160a01b0387168085526002909101835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b8061167381611091565b6001600160a01b0316336001600160a01b031614806116ab575061169681611169565b6001600160a01b0316336001600160a01b0316145b6116b457600080fd5b6111348261268f565b6060806116c983610a7b565b6116d38585611536565b915091509250929050565b6116e9848484612319565b823b63ffffffff81161561179757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117299033908990889088906004016134f8565b602060405180830381600087803b15801561174357600080fd5b505af1158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190612f4f565b6001600160e01b03191663150b7a0260e01b1461179757600080fd5b5050505050565b610e37600082610b86565b806117b381611091565b6001600160a01b0316336001600160a01b0316146117d057600080fd5b5060009081526001602081905260409091200180546001600160a01b0319166001600160a01b0392909216919091179055565b60065460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ae9190810190613051565b610e376000826117a9565b6006546040805163d547cfb760e01b815290516060926001600160a01b03169163d547cfb7916004808301926000929190829003018186803b15801561093b57600080fd5b606080606080606060008060008a116118ec57600080fd5b6001600160a01b038b1660009081526005602052604090205491508115611a45576119178a8361395b565b15611923576001611926565b60005b60ff166119338b84613878565b61193d9190613860565b905080891061194b57600080fd5b60006119578a8c61388c565b90506119646001836138ab565b8a14801561197a57506119778b8461395b565b15155b1561198c576119898b8461395b565b9a505b8a6001600160401b038111156119a4576119a46139b1565b6040519080825280602002602001820160405280156119cd578160200160208202803683370190505b50975060005b8b811015611a3e57611a0f8d8b611a05576001836119f186896138ab565b6119fb91906138ab565b61050291906138ab565b6105028385613860565b898281518110611a2157611a2161399b565b602090810291909101015280611a3681613940565b9150506119d3565b5050611a59565b506040805160008082526020820190925296505b611a6287610bc7565b9a9f939e50909c509a50979850919650945092505050565b600080548210611a8957600080fd5b5060009081526001602052604090206006015490565b60608060608060608060008060008b11611ab857600080fd5b60005491508115611bfa57611acd8b8361395b565b15611ad9576001611adc565b60005b60ff16611ae98c84613878565b611af39190613860565b9050808a10611b0157600080fd5b6000611b0d8b8d61388c565b9050611b1a6001836138ab565b8b148015611b305750611b2d8c8461395b565b15155b15611b4257611b3f8c8461395b565b9b505b8b6001600160401b03811115611b5a57611b5a6139b1565b604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50985060005b8c811015611bf357611bc48b611bba57600182611ba685886138ab565b611bb091906138ab565b61054e91906138ab565b61054e8284613860565b8a8281518110611bd657611bd661399b565b602090810291909101015280611beb81613940565b915050611b89565b5050611c0e565b506040805160008082526020820190925297505b611c1788610bc7565b9b9f939e50919c509a509897509195509350915050565b6000806000806000806000611c4288611009565b9650611c4d876114d5565b9c9e949d50929b919a509850909650945092505050565b6006546040805163e8a3d48560e01b815290516060926001600160a01b03169163e8a3d485916004808301926000929190829003018186803b15801561093b57600080fd5b6060611cb460005490565b8210611cbf57600080fd5b60008281526001602052604090206005018054610a9890613905565b606080611ce760005490565b8410611cf257600080fd5b8251806001600160401b03811115611d0c57611d0c6139b1565b604051908082528060200260200182016040528015611d35578160200160208202803683370190505b509250806001600160401b03811115611d5057611d506139b1565b604051908082528060200260200182016040528015611d79578160200160208202803683370190505b50915060005b81811015611eb357600086815260016020526040812086516008909101908290889085908110611db157611db161399b565b602002602001015181526020019081526020016000208054611dd290613905565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfe90613905565b8015611e4b5780601f10611e2057610100808354040283529160200191611e4b565b820191906000526020600020905b815481529060010190602001808311611e2e57829003601f168201915b50505050509050611e5b81612673565b858381518110611e6d57611e6d61399b565b6020026020010181815250506020815111848381518110611e9057611e9061399b565b911515602092830291909101909101525080611eab81613940565b915050611d7f565b50509250929050565b6007546001600160a01b03163314611ed357600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b80611eff81611091565b6001600160a01b0316336001600160a01b031614611f1c57600080fd5b50600090815260016020526040902060030180546001600160a01b0319166001600160a01b0392909216919091179055565b814210611f5a57600080fd5b611f6785858585856126eb565b611f7057600080fd5b61179785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612759915050565b60008086868686604051602001611fcb94939291906134b3565b6040516020818303038152906040528051906020012090506000611ff7611ff18361296a565b856129a5565b905061200288611091565b6001600160a01b0316816001600160a01b0316148061203a575061202588611169565b6001600160a01b0316816001600160a01b0316145b98975050505050505050565b600082511161205457600080fd5b6000826040516020016120679190613457565b60405160208183030381529060405280519060200120905061208881610a7b565b516120ae57600081815260036020908152604090912084516120ac92860190612b96565b505b600084815260016020526040902082516120d2576120cd858584612a24565b6121ab565b600082815260098201602052604090205461218857600681018054600091826120fa83613940565b90915550905061210b816001613860565b60008481526009840160209081526040808320939093558382526007850190522083905561213885610b56565b3361214561046e89611ca9565b7f180a742bbd74b1be5156ad2b394637be17b0ebab9f54e4d250753399437ba20961216f8a611ca9565b8960405161217e929190613788565b60405180910390a4505b6000828152600882016020908152604090912084516121a992860190612b96565b505b6121b484610b56565b336121c161046e88611ca9565b7f97bdcba1fbd5143d16d316cc7a4e6ccb2345fa2c5e7ec4705eb788fb6a202eaa6121eb89611ca9565b88886040516121fc939291906137ad565b60405180910390a45050505050565b6001600160a01b0382166122795760008181526001602090815260408083206004908101546001600160a01b03168452909152812061224991612c16565b600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b61228282610fb4565b511561228d57600080fd5b6000818152600160205260409020600401546001600160a01b0316156122b257600080fd5b6122bb81611ca9565b6001600160a01b038316600090815260046020908152604090912082516122e89391929190910190612b96565b50600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b600061232482611091565b905060006123318361097c565b9050816001600160a01b0316856001600160a01b03161461235157600080fd5b336001600160a01b03831614806123705750336001600160a01b038216145b806123a157506001600160a01b038216600090815260056020908152604080832033845260020190915290205460ff165b6123aa57600080fd5b600083815260016020819052604090912080546001600160a01b038088166001600160a01b03199283168117845593830180548316821790556003909201805490911690921790915581161561244f5760008381526001602052604080822060020180546001600160a01b0319169055518491906001600160a01b038716907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45b61245a60008461220b565b6124638361268f565b6001600160a01b0385166000908152600560209081526040808320868452600301909152812054612496906001906138ab565b6001600160a01b03871660009081526005602052604081208054929350909160019182019183916124c791906138ab565b815260208082019290925260409081016000908120546001600160a01b038b168252600584528282208683526001908101909452919020819055915061250e908390613860565b6001600160a01b0388166000818152600560208181526040808420878552600381018352908420959095559282529091528154919061254c836138ee565b90915550506001600160a01b0380881660009081526005602081815260408084208a85526003018252808420849055938a168352529081208054908261259183613940565b9091555090506125a2816001613860565b6001600160a01b0380891660008181526005602090815260408083208c845260038101835281842096909655868352600190950190528381208a90559251899391928c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a461261661046e87611ca9565b876001600160a01b0316896001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db6126548a611ca9565b6040516126619190613724565b60405180910390a45050505050505050565b600081516000141561268757506000919050565b506020015190565b60008181526001602052604090205b600681015415611134576000816007016000600184600601546126c191906138ab565b81526020019081526020016000205490506126e5836126df83610a7b565b83612a24565b5061269e565b600080868686866040516020016127059493929190613473565b60405160208183030381529060405280519060200120905061272f6008546001600160a01b031690565b6001600160a01b0316612744611ff18361296a565b6001600160a01b031614979650505050505050565b60008061276584610b56565b6000818152600260205260409020549091506128ea5760008054908061278a83613940565b90915550915061279b826001613860565b60008281526002602090815260408083209390935584825260018082529290912080546001600160a01b038088166001600160a01b0319928316178355938201805490911690931790925585516127fa91600584019190880190612b96565b506001600160a01b03841660009081526005602052604081208054908261282083613940565b909155509050612831816001613860565b6001600160a01b0386166000818152600560209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a482856001600160a01b031660006001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db896040516128db9190613724565b60405180910390a45050612921565b6128f384611009565b600081815260016020526040902060020180546001600160a01b031916331790559150612921308484612319565b826001600160a01b031682827fbf3a4785433526d5666b7a9d19e1e2eaf5c084063ba37298cea8655cf88c0a8f8760405161295c9190613724565b60405180910390a450505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01610b69565b6000806000806129b485612b65565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015612a0f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008381526001602090815260408083208484526009810190925290912054612a4c57600080fd5b6000828152600982016020526040812054612a69906001906138ab565b9050600082600701600060018560060154612a8491906138ab565b8152602080820192909252604090810160009081205485825260078701909352208190559050612ab5826001613860565b600082815260098501602052604081209190915560068401805491612ad9836138ee565b909155505060008481526009840160209081526040808320839055600886019091528120612b0691612c16565b612b0f85610b56565b33612b1c61046e89611ca9565b7f86cb57904f14d8d9f75d3c31427ff5d8cbcf7f93b985e871c553c6618704744c612b468a611ca9565b89604051612b55929190613788565b60405180910390a4505050505050565b60008060008351604114612b7857600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054612ba290613905565b90600052602060002090601f016020900481019282612bc45760008555612c0a565b82601f10612bdd57805160ff1916838001178555612c0a565b82800160010185558215612c0a579182015b82811115612c0a578251825591602001919060010190612bef565b50610fb0929150612c4c565b508054612c2290613905565b6000825580601f10612c32575050565b601f016020900490600052602060002090810190610e3791905b5b80821115610fb05760008155600101612c4d565b8035612c6c816139c7565b919050565b80358015158114612c6c57600080fd5b600082601f830112612c9257600080fd5b8135612ca5612ca082613839565b6137e6565b818152846020838601011115612cba57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ce957600080fd5b813561104b816139c7565b60008060408385031215612d0757600080fd5b8235612d12816139c7565b91506020830135612d22816139c7565b809150509250929050565b600080600060608486031215612d4257600080fd5b8335612d4d816139c7565b92506020840135612d5d816139c7565b929592945050506040919091013590565b60008060008060808587031215612d8457600080fd5b8435612d8f816139c7565b93506020850135612d9f816139c7565b92506040850135915060608501356001600160401b03811115612dc157600080fd5b612dcd87828801612c81565b91505092959194509250565b60008060408385031215612dec57600080fd5b8235612df7816139c7565b9150612e0560208401612c71565b90509250929050565b60008060408385031215612e2157600080fd5b8235612e2c816139c7565b946020939093013593505050565b60008060008060808587031215612e5057600080fd5b8435612e5b816139c7565b93506020850135925060408501359150612e7760608601612c71565b905092959194509250565b60006020808385031215612e9557600080fd5b82356001600160401b03811115612eab57600080fd5b8301601f81018513612ebc57600080fd5b8035612eca612ca082613816565b80828252848201915084840188868560051b8701011115612eea57600080fd5b600094505b83851015612f0d578035835260019490940193918501918501612eef565b50979650505050505050565b600060208284031215612f2b57600080fd5b5035919050565b600060208284031215612f4457600080fd5b813561104b816139dc565b600060208284031215612f6157600080fd5b815161104b816139dc565b600080600080600060808688031215612f8457600080fd5b85356001600160401b0380821115612f9b57600080fd5b818801915088601f830112612faf57600080fd5b813581811115612fbe57600080fd5b896020828501011115612fd057600080fd5b60208301975080965050612fe660208901612c61565b945060408801359350606088013591508082111561300357600080fd5b5061301088828901612c81565b9150509295509295909350565b60006020828403121561302f57600080fd5b81356001600160401b0381111561304557600080fd5b61108984828501612c81565b60006020828403121561306357600080fd5b81516001600160401b0381111561307957600080fd5b8201601f8101841361308a57600080fd5b8051613098612ca082613839565b8181528560208385010111156130ad57600080fd5b6130be8260208301602086016138c2565b95945050505050565b600080604083850312156130da57600080fd5b82356001600160401b03808211156130f157600080fd5b6130fd86838701612c81565b9350602085013591508082111561311357600080fd5b5061312085828601612c81565b9150509250929050565b6000806040838503121561313d57600080fd5b823591506020808401356001600160401b0381111561315b57600080fd5b8401601f8101861361316c57600080fd5b803561317a612ca082613816565b80828252848201915084840189868560051b870101111561319a57600080fd5b600094505b838510156131bd57803583526001949094019391850191850161319f565b5080955050505050509250929050565b600080604083850312156131e057600080fd5b50508035926020909101359150565b6000806040838503121561320257600080fd5b8235915060208301356001600160401b0381111561321f57600080fd5b61312085828601612c81565b60008060006060848603121561324057600080fd5b8335925060208401356001600160401b038082111561325e57600080fd5b61326a87838801612c81565b9350604086013591508082111561328057600080fd5b5061328d86828701612c81565b9150509250925092565b600080600080608085870312156132ad57600080fd5b8435935060208501356001600160401b03808211156132cb57600080fd5b6132d788838901612c81565b945060408701359150808211156132ed57600080fd5b6132f988838901612c81565b9350606087013591508082111561330f57600080fd5b50612dcd87828801612c81565b60008060006060848603121561333157600080fd5b833592506020840135915061334860408501612c71565b90509250925092565b6000806000806080858703121561336757600080fd5b843593506020850135925060408501359150612e7760608601612c71565b600081518084526020808501945080840160005b838110156133be5781516001600160a01b031687529582019590820190600101613399565b509495945050505050565b600081518084526020808501945080840160005b838110156133be5781511515875295820195908201906001016133dd565b600081518084526020808501945080840160005b838110156133be5781518752958201959082019060010161340f565b600081518084526134438160208601602086016138c2565b601f01601f19169290920160200192915050565b600082516134698184602087016138c2565b9190910192915050565b63676f676f60e01b81528385600483013760609290921b6bffffffffffffffffffffffff1916600493909201928301919091526018820152603801919050565b848152600084516134cb8160208501602089016138c2565b808301905084516134e38160208401602089016138c2565b01602081019390935250506040019392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061352b9083018461342b565b9695505050505050565b60a08152600061354860a08301886133fb565b828103602084015261355a8188613385565b9050828103604084015261356e8187613385565b905082810360608401526135828186613385565b9050828103608084015261203a8185613385565b6040815260006135a960408301856133fb565b82810360208401526130be81856133c9565b60e0815260006135ce60e083018a6133fb565b82810360208401526135e0818a6133fb565b905082810360408401526135f481896133c9565b9050828103606084015261360881886133fb565b9050828103608084015261361c81876133c9565b60a0840195909552505060c0015295945050505050565b60006101008083526136478184018c6133fb565b9050828103602084015261365b818b6133fb565b9050828103604084015261366f818a613385565b905082810360608401526136838189613385565b905082810360808401526136978188613385565b905082810360a08401526136ab8187613385565b60c0840195909552505060e001529695505050505050565b60e0815260006136d660e083018a6133fb565b82810360208401526136e8818a6133fb565b905082810360408401526136fc8189613385565b905082810360608401526137108188613385565b9050828103608084015261361c8187613385565b6020815260006111ab602083018461342b565b60e08152600061374a60e083018a61342b565b6001600160a01b039889166020840152968816604083015250938616606085015291909416608083015260a082019390935260c00191909152919050565b60408152600061379b604083018561342b565b82810360208401526130be818561342b565b6060815260006137c0606083018661342b565b82810360208401526137d2818661342b565b9050828103604084015261352b818561342b565b604051601f8201601f191681016001600160401b038111828210171561380e5761380e6139b1565b604052919050565b60006001600160401b0382111561382f5761382f6139b1565b5060051b60200190565b60006001600160401b03821115613852576138526139b1565b50601f01601f191660200190565b600082198211156138735761387361396f565b500190565b60008261388757613887613985565b500490565b60008160001904831182151516156138a6576138a661396f565b500290565b6000828210156138bd576138bd61396f565b500390565b60005b838110156138dd5781810151838201526020016138c5565b83811115610a755750506000910152565b6000816138fd576138fd61396f565b506000190190565b600181811c9082168061391957607f821691505b6020821081141561393a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156139545761395461396f565b5060010190565b60008261396a5761396a613985565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3757600080fd5b6001600160e01b031981168114610e3757600080fdfea2646970667358221220b4e07ce8aec62b50c07f670efeb7cc78869259830b8332ed58a52e8d9233014964736f6c63430008060033

Deployed Bytecode Sourcemap

1071:20582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1935:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21765:14:1;;21758:22;21740:41;;21728:2;21713:18;1935:48:0;;;;;;;;6888:91;;;:::i;:::-;;;;;;;:::i;9374:152::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;15623:32:1;;;15605:51;;15593:2;15578:18;9374:152:0;15560:102:1;5901:190:0;;;;;;:::i;:::-;;:::i;:::-;;5210:261;;;;;;:::i;:::-;;:::i;9995:106::-;;;;;;:::i;:::-;;:::i;3632:83::-;;;;;;:::i;:::-;;:::i;7594:86::-;7638:7;7659:16;7594:86;;;21938:25:1;;;21926:2;21911:18;7594:86:0;21893:76:1;8045:120:0;;;;;;:::i;:::-;;:::i;7513:76::-;7573:11;;-1:-1:-1;;;;;7573:11:0;7513:76;;4970:141;;;;;;:::i;:::-;;:::i;6294:118::-;;;;;;:::i;:::-;;:::i;13173:640::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4616:100::-;;;;;;:::i;:::-;;:::i;8916:149::-;;;;;;:::i;:::-;;:::i;9811:179::-;;;;;;:::i;:::-;;:::i;5476:172::-;;;;;;:::i;:::-;;:::i;6417:133::-;;;;;;:::i;:::-;;:::i;4259:205::-;;;;;;:::i;:::-;;:::i;9679:127::-;;;;;;:::i;:::-;;:::i;7798:110::-;;;;;;:::i;:::-;;:::i;15713:148::-;;;;;;:::i;:::-;;:::i;:::-;;;;25306:25:1;;;25362:2;25347:18;;25340:34;;;;25279:18;15713:148:0;25261:119:1;8170:173:0;;;;;;:::i;:::-;;:::i;10254:190::-;;;;;;:::i;:::-;;:::i;8504:145::-;;;;;;:::i;:::-;;:::i;3720:87::-;;;;;;:::i;:::-;;:::i;9070:145::-;;;;;;:::i;:::-;;:::i;5653:111::-;;;;;;:::i;:::-;;:::i;7685:108::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7762:18:0;7741:7;7762:18;;;:10;:18;;;;;:26;;7685:108;7913:127;;;;;;:::i;:::-;;:::i;8654:257::-;;;;;;:::i;:::-;;:::i;10106:143::-;;;;;;:::i;:::-;;:::i;11291:1215::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;7434:74::-;7493:10;;-1:-1:-1;;;;;7493:10:0;7434:74;;6984:95;;;:::i;12822:346::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;10449:176::-;;;;;;:::i;:::-;;:::i;6096:193::-;;;;;;:::i;:::-;;:::i;5769:126::-;;;;;;:::i;:::-;;:::i;10630:167::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6555:326::-;;;;;;:::i;:::-;;:::i;5116:89::-;;;;;;:::i;:::-;;:::i;4470:141::-;;;;;;:::i;:::-;;:::i;7306:123::-;;;;;;:::i;:::-;;:::i;4721:96::-;;;;;;:::i;:::-;;:::i;7194:107::-;;;:::i;14761:947::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;9220:149::-;;;;;;:::i;:::-;;:::i;13818:938::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;12511:306::-;;;;;;:::i;:::-;;:::i;:::-;;;;24761:25:1;;;-1:-1:-1;;;;;24860:15:1;;;24855:2;24840:18;;24833:43;24912:15;;;24892:18;;;24885:43;;;;24964:15;;;24959:2;24944:18;;24937:43;25017:15;;;25011:3;24996:19;;24989:44;24813:3;25049:19;;25042:35;;;;25108:3;25093:19;;25086:35;24748:3;24733:19;12511:306:0;24715:412:1;7084:105:0;;;:::i;9531:143::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9631:18:0;;;9613:4;9631:18;;;:10;:18;;;;;;;;:38;;;;;;:27;;;;:38;;;;;;;;9531:143;8348:151;;;;;;:::i;:::-;;:::i;10802:484::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3812:96::-;;;;;;:::i;:::-;;:::i;4823:141::-;;;;;;:::i;:::-;;:::i;3915:243::-;;;;;;:::i;:::-;;:::i;6888:91::-;6954:13;;:20;;;-1:-1:-1;;;6954:20:0;;;;6927:13;;-1:-1:-1;;;;;6954:13:0;;:18;;:20;;;;;:4;;:20;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6954:20:0;;;;;;;;;;;;:::i;:::-;6947:27;;6888:91;:::o;9374:152::-;9434:7;7659:16;;9456:8;:24;9448:33;;;;;;-1:-1:-1;9493:4:0;:19;;;:9;:19;;;;;:28;;;-1:-1:-1;;;;;9493:28:0;;9374:152::o;5901:190::-;5980:8;3104:17;3112:8;3104:7;:17::i;:::-;-1:-1:-1;;;;;3090:31:0;:10;-1:-1:-1;;;;;3090:31:0;;3082:40;;;;;;5995:4:::1;:19:::0;;;:9:::1;:19;::::0;;;;;:28:::1;;:40:::0;;-1:-1:-1;;;;;;5995:40:0::1;-1:-1:-1::0;;;;;5995:40:0;::::1;::::0;;::::1;::::0;;;6045:41;;5995:19;;6054:10:::1;::::0;6045:41:::1;::::0;5995:4;6045:41:::1;5901:190:::0;;;:::o;5210:261::-;5383:4;:19;;;:9;:19;;;;;:25;;:27;;5339:84;;5359:8;;5369:4;;5375:6;;5383:27;;:25;:27;;;:::i;:::-;;;;;5412:10;5339:19;:84::i;:::-;5331:93;;;;;;5429:37;5443:8;5453:4;5459:6;5429:13;:37::i;:::-;5210:261;;;;:::o;9995:106::-;10074:4;:22;;;:15;:22;;;;;10067:29;;10047:13;;10074:22;10067:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9995:106;;;:::o;3632:83::-;7493:10;;-1:-1:-1;;;;;7493:10:0;2996;:21;2988:30;;;;;;3691:10:::1;:19:::0;;-1:-1:-1;;;;;;3691:19:0::1;-1:-1:-1::0;;;;;3691:19:0;;;::::1;::::0;;;::::1;::::0;;3632:83::o;8045:120::-;8104:7;8152:6;8135:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;8125:35;;;;;;8118:42;;8045:120;;;:::o;4970:141::-;5051:8;3104:17;3112:8;3104:7;:17::i;:::-;-1:-1:-1;;;;;3090:31:0;:10;-1:-1:-1;;;;;3090:31:0;;3082:40;;;;;;5066::::1;5084:11;5097:8;5066:17;:40::i;:::-;4970:141:::0;;;:::o;6294:118::-;6376:31;6386:5;6393:3;6398:8;6376:9;:31::i;13173:640::-;13239:23;13264;13289:26;13317:25;13344:26;13377:15;13395:9;:16;13377:34;;13439:7;-1:-1:-1;;;;;13425:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13425:22:0;;13416:31;;13475:7;-1:-1:-1;;;;;13461:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13461:22:0;;13452:31;;13514:7;-1:-1:-1;;;;;13500:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13500:22:0;;13488:34;;13552:7;-1:-1:-1;;;;;13538:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13538:22:0;;13527:33;;13591:7;-1:-1:-1;;;;;13577:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13577:22:0;;13565:34;;13609:9;13604:205;13628:7;13624:1;:11;13604:205;;;13648:20;13741;13748:9;13758:1;13748:12;;;;;;;;:::i;:::-;;;;;;;13741:6;:20::i;:::-;13674:87;;;13683:6;13690:1;13683:9;;;;;;;;:::i;:::-;;;;;;13694;13704:1;13694:12;;;;;;;;:::i;:::-;;;;;;13708:8;13717:1;13708:11;;;;;;;;:::i;:::-;;;;;;13721:9;13731:1;13721:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13674:87:0;;;13721:12;;;;;;;;;13674:87;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13779:24:0;13674:87;13779:16;:24::i;:::-;13767:6;13774:1;13767:9;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;13637:3:0;;;;:::i;:::-;;;;13604:205;;;;13372:441;13173:640;;;;;;;:::o;4616:100::-;4671:40;-1:-1:-1;;;;;4702:8:0;4671:11;:40::i;:::-;4616:100;:::o;8916:149::-;8973:7;7659:16;;8995:8;:24;8987:33;;;;;;-1:-1:-1;9032:4:0;:19;;;:9;:19;;;;;:28;;;-1:-1:-1;;;;;9032:28:0;;8916:149::o;9811:179::-;-1:-1:-1;;;;;7762:18:0;;9893:7;7762:18;;;:10;:18;;;;;:26;9915:6;:26;9907:35;;;;;;-1:-1:-1;;;;;;9954:18:0;;;;:4;:18;;;:10;:18;;;;;;;;:31;;;:23;;;;:31;;;;;9811:179::o;5476:172::-;5591:8;3218:17;3226:8;3218:7;:17::i;:::-;-1:-1:-1;;;;;3204:31:0;:10;-1:-1:-1;;;;;3204:31:0;;:69;;;;3253:20;3264:8;3253:10;:20::i;:::-;-1:-1:-1;;;;;3239:34:0;:10;-1:-1:-1;;;;;3239:34:0;;3196:78;;;;;6417:133;6503:42;6520:5;6527:3;6532:8;6503:42;;;;;;;;;;;;:16;:42::i;4259:205::-;4316:8;3104:17;3112:8;3104:7;:17::i;:::-;-1:-1:-1;;;;;3090:31:0;:10;-1:-1:-1;;;;;3090:31:0;;3082:40;;;;;;4331:46:::1;4341:10;4361:4;4368:8;4331:9;:46::i;:::-;4429:10;4419:8:::0;4392:25:::1;4399:17;4419:8:::0;4399:7:::1;:17::i;4392:25::-;4387:72;4441:17;4449:8;4441:7;:17::i;:::-;4387:72;;;;;;:::i;:::-;;;;;;;;4259:205:::0;;:::o;9679:127::-;9738:7;7659:16;;9760:6;:22;9752:31;;;;;;-1:-1:-1;9795:6:0;9679:127::o;7798:110::-;-1:-1:-1;;;;;7881:22:0;;:4;:22;;;:12;:22;;;;;7874:29;;7854:13;;7881:22;7874:29;;;:::i;15713:148::-;15772:14;15788:20;15823:13;7638:7;7659:16;;7594:86;15823:13;-1:-1:-1;;;;;7762:18:0;;7741:7;7762:18;;;:10;:18;;;;;:26;15815:41;;;;15713:148;;;:::o;8170:173::-;8227:7;8241:13;8257:14;8264:6;8257;:14::i;:::-;8284:4;:16;;;:9;:16;;;;;;8241:30;;-1:-1:-1;8276:30:0;;;;;;8318:4;:16;;;:9;:16;;;;;;:20;;8337:1;;8318:20;:::i;:::-;8311:27;8170:173;-1:-1:-1;;;8170:173:0:o;10254:190::-;10332:13;10352;10395:4;10378:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;10368:33;;;;;;10352:49;;10413:26;10423:8;10433:5;10413:9;:26::i;:::-;10406:33;10254:190;-1:-1:-1;;;;10254:190:0:o;8504:145::-;8560:7;7659:16;;8582:8;:24;8574:33;;;;;;-1:-1:-1;8619:4:0;:19;;;:9;:19;;;;;:25;-1:-1:-1;;;;;8619:25:0;;8504:145::o;3720:87::-;7493:10;;-1:-1:-1;;;;;7493:10:0;2996;:21;2988:30;;;;;;3781:11:::1;:21:::0;;-1:-1:-1;;;;;;3781:21:0::1;-1:-1:-1::0;;;;;3781:21:0;;;::::1;::::0;;;::::1;::::0;;3720:87::o;9070:145::-;9126:7;7659:16;;9148:8;:24;9140:33;;;;;;-1:-1:-1;9185:4:0;:19;;;:9;:19;;;;;:25;;;;9070:145::o;5653:111::-;5727:32;5740:8;5750:4;5727:32;;;;;;;;;;;;:12;:32::i;:::-;5653:111;;:::o;7913:127::-;7980:7;8001:9;7980:7;8011:12;8016:6;8011:4;:12::i;:::-;8001:23;;;;;;;;;;;-1:-1:-1;8001:23:0;:34;;;-1:-1:-1;;;;;8001:34:0;;7913:127;-1:-1:-1;;7913:127:0:o;8654:257::-;8713:7;7659:16;;8735:8;:24;8727:33;;;;;;8765:17;8785:19;;;:9;:19;;;;;;;;:28;;-1:-1:-1;;;;;8785:28:0;;;;8822:30;;8818:68;;;7573:11;;-1:-1:-1;;;;;7573:11:0;8872:8;8860:20;;8818:68;8897:9;8654:257;-1:-1:-1;;8654:257:0:o;10106:143::-;10188:13;10215:29;10225:12;10230:6;10225:4;:12::i;:::-;10239:4;10215:9;:29::i;11291:1215::-;11399:23;11424:21;11447:25;11474:23;11499:27;11528:20;11550:18;11592:1;11583:6;:10;11575:19;;;;;;11614;11624:8;11614:9;:19::i;:::-;11599:34;-1:-1:-1;11644:16:0;;11640:803;;11708:21;11723:6;11708:12;:21;:::i;:::-;:26;:34;;11741:1;11708:34;;;11737:1;11708:34;11681:62;;11682:21;11697:6;11682:12;:21;:::i;:::-;11681:62;;;;:::i;:::-;11668:75;;11765:10;11757:5;:18;11749:27;;;;;;11784:15;11802:14;11811:5;11802:6;:14;:::i;:::-;11784:32;-1:-1:-1;11835:14:0;11848:1;11835:10;:14;:::i;:::-;11826:5;:23;:53;;;;-1:-1:-1;11853:21:0;11868:6;11853:12;:21;:::i;:::-;:26;;11826:53;11822:103;;;11897:21;11912:6;11897:12;:21;:::i;:::-;11888:30;;11822:103;11955:6;-1:-1:-1;;;;;11941:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11941:21:0;;11932:30;;11989:6;-1:-1:-1;;;;;11975:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11975:21:0;;11968:28;;12027:6;-1:-1:-1;;;;;12016:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12016:18:0;;12002:32;;12045:9;12040:273;12064:6;12060:1;:10;12040:273;;;12096:4;:19;;;:9;:19;;;;;:24;;;12121:6;:53;;12173:1;12169;12144:22;12159:7;12144:12;:22;:::i;:::-;:26;;;;:::i;:::-;:30;;;;:::i;:::-;12121:53;;;12130:11;12140:1;12130:7;:11;:::i;:::-;12096:79;;;;;;;;;;;;12084:6;12091:1;12084:9;;;;;;;;:::i;:::-;;;;;;:91;;;;;12182:18;12203:17;12210:6;12217:1;12210:9;;;;;;;;:::i;:::-;;;;;;;12203:6;:17::i;:::-;12182:38;;12237:22;12254:4;12237:16;:22::i;:::-;12227:4;12232:1;12227:7;;;;;;;;:::i;:::-;;;;;;:32;;;;;12304:2;12289:4;12283:18;:23;12266:11;12278:1;12266:14;;;;;;;;:::i;:::-;:40;;;:14;;;;;;;;;;;:40;-1:-1:-1;12072:3:0;;;;:::i;:::-;;;;12040:273;;;;11662:656;11640:803;;;-1:-1:-1;12359:16:0;;;12343:1;12359:16;;;;;;12388;;;;;;12424:13;;;;;;;;;12359:16;;-1:-1:-1;12359:16:0;;-1:-1:-1;12388:16:0;;-1:-1:-1;11640:803:0;12473:28;12484:8;12494:6;12473:10;:28::i;:::-;11291:1215;;;;-1:-1:-1;11291:1215:0;;-1:-1:-1;12447:54:0;;-1:-1:-1;12447:54:0;;-1:-1:-1;11291:1215:0;;;-1:-1:-1;;11291:1215:0:o;6984:95::-;7052:13;;:22;;;-1:-1:-1;;;7052:22:0;;;;7025:13;;-1:-1:-1;;;;;7052:13:0;;:20;;:22;;;;;:4;;:22;;;;;;;:13;:22;;;;;;;;;;12822:346;12877:19;12898:18;12918:21;12941:15;12958:16;12976:13;12991:15;13021:17;13029:8;13021:7;:17::i;:::-;13040;13048:8;13040:7;:17::i;:::-;13059:20;13070:8;13059:10;:20::i;:::-;13081:18;13090:8;13081;:18::i;:::-;13101:21;13113:8;13101:11;:21::i;:::-;13124:17;13132:8;13124:7;:17::i;:::-;13143:19;13153:8;13143:9;:19::i;:::-;13013:150;;;;-1:-1:-1;13013:150:0;;-1:-1:-1;13013:150:0;;-1:-1:-1;13013:150:0;-1:-1:-1;13013:150:0;-1:-1:-1;13013:150:0;;-1:-1:-1;12822:346:0;-1:-1:-1;;12822:346:0:o;10449:176::-;10522:13;10561;7638:7;7659:16;;7594:86;10561:13;10550:8;:24;10542:33;;;;;;10587:4;:19;;;:9;:19;;;;;;;;:33;;;:26;;:33;;;;;10580:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10449:176;;;;:::o;6096:193::-;6183:10;6172:4;:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;6172:42:0;;;;;:31;;;;:42;;;;;;:54;;-1:-1:-1;;6172:54:0;;;;;;;;;;6236:48;;21740:41:1;;;6172:42:0;;6183:10;6236:48;;21713:18:1;6236:48:0;;;;;;;6096:193;;:::o;5769:126::-;5848:8;3218:17;3226:8;3218:7;:17::i;:::-;-1:-1:-1;;;;;3204:31:0;:10;-1:-1:-1;;;;;3204:31:0;;:69;;;;3253:20;3264:8;3253:10;:20::i;:::-;-1:-1:-1;;;;;3239:34:0;:10;-1:-1:-1;;;;;3239:34:0;;3204:69;3196:78;;;;;;5863:27:::1;5881:8;5863:17;:27::i;10630:167::-:0;10707:13;10722;10750;10757:5;10750:6;:13::i;:::-;10765:26;10775:8;10785:5;10765:9;:26::i;:::-;10742:50;;;;10630:167;;;;;:::o;6555:326::-;6659:31;6669:5;6676:3;6681:8;6659:9;:31::i;:::-;6736:16;;6765:9;;;;6761:116;;6790:66;;-1:-1:-1;;;6790:66:0;;-1:-1:-1;;;;;6790:30:0;;;;;:66;;6821:10;;6833:5;;6840:8;;6850:5;;6790:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6790:80:0;;6860:10;6790:80;;;6782:89;;;;;;6654:227;6555:326;;;;:::o;5116:89::-;5167:33;5185:3;5191:8;5167:9;:33::i;4470:141::-;4551:8;3104:17;3112:8;3104:7;:17::i;:::-;-1:-1:-1;;;;;3090:31:0;:10;-1:-1:-1;;;;;3090:31:0;;3082:40;;;;;;-1:-1:-1;4566:4:0::1;:19:::0;;;:9:::1;:19;::::0;;;;;;;:28:::1;:40:::0;;-1:-1:-1;;;;;;4566:40:0::1;-1:-1:-1::0;;;;;4566:40:0;;;::::1;::::0;;;::::1;::::0;;4470:141::o;7306:123::-;7392:13;;:32;;-1:-1:-1;;;7392:32:0;;;;;21938:25:1;;;7365:13:0;;-1:-1:-1;;;;;7392:13:0;;:22;;21911:18:1;;7392:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7392:32:0;;;;;;;;;;;;:::i;4721:96::-;4777:35;4797:3;4803:8;4777:11;:35::i;7194:107::-;7268:13;;:28;;;-1:-1:-1;;;7268:28:0;;;;7241:13;;-1:-1:-1;;;;;7268:13:0;;:26;;:28;;;;;:4;;:28;;;;;;;:13;:28;;;;;;;;;;14761:947;14869:25;14896:23;14921:26;14949:25;14976:26;15004:17;15023:18;15065:1;15056:6;:10;15048:19;;;;;;-1:-1:-1;;;;;7762:18:0;;7741:7;7762:18;;;:10;:18;;;;;:26;15072:29;-1:-1:-1;15112:13:0;;15108:529;;15170:18;15182:6;15170:9;:18;:::i;:::-;:23;:31;;15200:1;15170:31;;;15196:1;15170:31;15146:56;;15147:18;15159:6;15147:9;:18;:::i;:::-;15146:56;;;;:::i;:::-;15133:69;;15224:10;15216:5;:18;15208:27;;;;;;15243:15;15261:14;15270:5;15261:6;:14;:::i;:::-;15243:32;-1:-1:-1;15294:14:0;15307:1;15294:10;:14;:::i;:::-;15285:5;:23;:50;;;;-1:-1:-1;15312:18:0;15324:6;15312:9;:18;:::i;:::-;:23;;15285:50;15281:97;;;15353:18;15365:6;15353:9;:18;:::i;:::-;15344:27;;15281:97;15410:6;-1:-1:-1;;;;;15396:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15396:21:0;;15385:32;;15428:9;15423:144;15447:6;15443:1;:10;15423:144;;;15481:79;15501:6;15509;:50;;15558:1;15554;15532:19;15544:7;15532:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;15509:50::-;15518:11;15528:1;15518:7;:11;:::i;15481:79::-;15467:8;15476:1;15467:11;;;;;;;;:::i;:::-;;;;;;;;;;:93;15455:3;;;;:::i;:::-;;;;15423:144;;;;15127:445;15108:529;;;-1:-1:-1;15615:16:0;;;15597:1;15615:16;;;;;;;;;15604:27;;15108:529;15686:17;15694:8;15686:7;:17::i;:::-;14761:947;;15641:62;;-1:-1:-1;15641:62:0;;-1:-1:-1;15641:62:0;-1:-1:-1;15641:62:0;;-1:-1:-1;14761:947:0;;-1:-1:-1;14761:947:0;-1:-1:-1;14761:947:0;-1:-1:-1;;;14761:947:0:o;9220:149::-;9278:7;7659:16;;9300:8;:24;9292:33;;;;;;-1:-1:-1;9337:4:0;:19;;;:9;:19;;;;;:27;;;;9220:149::o;13818:938::-;13905:25;13932:23;13957;13982:26;14010:25;14037:26;14065:17;14084:18;14126:1;14117:6;:10;14109:19;;;;;;7638:7;7659:16;14133:25;-1:-1:-1;14169:13:0;;14165:514;;14227:18;14239:6;14227:9;:18;:::i;:::-;:23;:31;;14257:1;14227:31;;;14253:1;14227:31;14203:56;;14204:18;14216:6;14204:9;:18;:::i;:::-;14203:56;;;;:::i;:::-;14190:69;;14281:10;14273:5;:18;14265:27;;;;;;14300:15;14318:14;14327:5;14318:6;:14;:::i;:::-;14300:32;-1:-1:-1;14351:14:0;14364:1;14351:10;:14;:::i;:::-;14342:5;:23;:50;;;;-1:-1:-1;14369:18:0;14381:6;14369:9;:18;:::i;:::-;:23;;14342:50;14338:97;;;14410:18;14422:6;14410:9;:18;:::i;:::-;14401:27;;14338:97;14467:6;-1:-1:-1;;;;;14453:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14453:21:0;;14442:32;;14485:9;14480:129;14504:6;14500:1;:10;14480:129;;;14538:64;14551:6;:50;;14600:1;14596;14574:19;14586:7;14574:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;14551:50::-;14560:11;14570:1;14560:7;:11;:::i;14538:64::-;14524:8;14533:1;14524:11;;;;;;;;:::i;:::-;;;;;;;;;;:78;14512:3;;;;:::i;:::-;;;;14480:129;;;;14184:430;14165:514;;;-1:-1:-1;14657:16:0;;;14639:1;14657:16;;;;;;;;;14646:27;;14165:514;14734:17;14742:8;14734:7;:17::i;:::-;13818:938;;14683:68;;-1:-1:-1;14683:68:0;;-1:-1:-1;14683:68:0;-1:-1:-1;14683:68:0;;-1:-1:-1;13818:938:0;;-1:-1:-1;13818:938:0;-1:-1:-1;13818:938:0;-1:-1:-1;;13818:938:0:o;12511:306::-;12570:15;12587:18;12607:21;12630:15;12647:16;12665:13;12680:15;12712:12;12717:6;12712:4;:12::i;:::-;12702:22;;12797:15;12804:7;12797:6;:15::i;:::-;12511:306;;12729:83;;-1:-1:-1;12729:83:0;;;;-1:-1:-1;12729:83:0;-1:-1:-1;12729:83:0;;-1:-1:-1;12729:83:0;-1:-1:-1;12511:306:0;-1:-1:-1;;;12511:306:0:o;7084:105::-;7157:13;;:27;;;-1:-1:-1;;;7157:27:0;;;;7130:13;;-1:-1:-1;;;;;7157:13:0;;:25;;:27;;;;;:4;;:27;;;;;;;:13;:27;;;;;;;;;;8348:151;8404:13;8443;7638:7;7659:16;;7594:86;8443:13;8432:8;:24;8424:33;;;;;;8469:4;:19;;;:9;:19;;;;;:25;;8462:32;;;;;:::i;10802:484::-;10887:23;10912:21;10959:13;7638:7;7659:16;;7594:86;10959:13;10948:8;:24;10940:33;;;;;;10996:14;;;-1:-1:-1;;;;;11024:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11024:22:0;;11015:31;;11072:7;-1:-1:-1;;;;;11061:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11061:19:0;;11051:29;;11090:9;11085:197;11109:7;11105:1;:11;11085:197;;;11129:20;11152:19;;;:9;:19;;;;;11179:10;;11152:26;;;;;11129:20;;11179:7;;11187:1;;11179:10;;;;;;:::i;:::-;;;;;;;11152:38;;;;;;;;;;;11129:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11208:24;11225:6;11208:16;:24::i;:::-;11196:6;11203:1;11196:9;;;;;;;;:::i;:::-;;;;;;:36;;;;;11274:2;11257:6;11251:20;:25;11238:7;11246:1;11238:10;;;;;;;;:::i;:::-;:38;;;:10;;;;;;;;;;;:38;-1:-1:-1;11118:3:0;;;;:::i;:::-;;;;11085:197;;;;10935:351;10802:484;;;;;:::o;3812:96::-;7493:10;;-1:-1:-1;;;;;7493:10:0;2996;:21;2988:30;;;;;;3878:13:::1;:25:::0;;-1:-1:-1;;;;;;3878:25:0::1;-1:-1:-1::0;;;;;3878:25:0;;;::::1;::::0;;;::::1;::::0;;3812:96::o;4823:141::-;4904:8;3104:17;3112:8;3104:7;:17::i;:::-;-1:-1:-1;;;;;3090:31:0;:10;-1:-1:-1;;;;;3090:31:0;;3082:40;;;;;;-1:-1:-1;4919:4:0::1;:19:::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;;-1:-1:-1;;;;;;4919:40:0::1;-1:-1:-1::0;;;;;4919:40:0;;;::::1;::::0;;;::::1;::::0;;4823:141::o;3915:243::-;4053:7;4035:15;:25;4027:34;;;;;;4074:50;4086:6;;4094:8;4104:7;4113:10;4074:11;:50::i;:::-;4066:59;;;;;;4130:23;4136:6;;4130:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4144:8:0;;-1:-1:-1;4130:5:0;;-1:-1:-1;;4130:23:0:i;21054:401::-;21207:4;21218:13;21261:8;21271:4;21277:6;21285;21244:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21234:59;;;;;;21218:75;;21298:15;21316:59;21331:31;21356:5;21331:24;:31::i;:::-;21364:10;21316:14;:59::i;:::-;21298:77;;21398:17;21406:8;21398:7;:17::i;:::-;-1:-1:-1;;;;;21387:28:0;:7;-1:-1:-1;;;;;21387:28:0;;:63;;;;21430:20;21441:8;21430:10;:20::i;:::-;-1:-1:-1;;;;;21419:31:0;:7;-1:-1:-1;;;;;21419:31:0;;21387:63;21380:70;21054:401;-1:-1:-1;;;;;;;;21054:401:0:o;18410:818::-;18536:1;18521:4;18515:18;:22;18507:31;;;;;;18543:13;18586:4;18569:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;18559:33;;;;;;18543:49;;18607:13;18614:5;18607:6;:13::i;:::-;18601:27;18597:79;;18641:4;:22;;;:15;:22;;;;;;;;:29;;;;;;;;:::i;:::-;;18597:79;18682:20;18705:19;;;:9;:19;;;;;18733:20;;18729:386;;18766:36;18780:8;18790:4;18796:5;18766:13;:36::i;:::-;18729:386;;;18824:21;;;;:14;;;:21;;;;;;18820:255;;18876:14;;;:16;;18859:14;;;18876:16;;;:::i;:::-;;;;-1:-1:-1;18859:33:0;-1:-1:-1;18923:10:0;18859:33;18932:1;18923:10;:::i;:::-;18899:21;;;;:14;;;:21;;;;;;;;:34;;;;18940:19;;;:11;;;:19;;;:27;;;19030:12;19037:4;19030:6;:12::i;:::-;19018:10;18991:25;18998:17;19006:8;18998:7;:17::i;18991:25::-;18979:89;19044:17;19052:8;19044:7;:17::i;:::-;19063:4;18979:89;;;;;;;:::i;:::-;;;;;;;;18852:223;18820:255;19080:20;;;;:13;;;:20;;;;;;;;:29;;;;;;;;:::i;:::-;;18729:386;19177:12;19184:4;19177:6;:12::i;:::-;19165:10;19138:25;19145:17;19153:8;19145:7;:17::i;19138:25::-;19124:99;19191:17;19199:8;19191:7;:17::i;:::-;19210:4;19216:6;19124:99;;;;;;;;:::i;:::-;;;;;;;;18502:726;;18410:818;;;:::o;17947:458::-;-1:-1:-1;;;;;18031:27:0;;18027:374;;18073:4;18086:19;;;:9;:19;;;;;;;;18073:12;18086:30;;;;-1:-1:-1;;;;;18086:30:0;18073:44;;;;;;;18066:51;;;:::i;:::-;18123:4;:19;;;:9;:19;;;;;:30;;:44;;-1:-1:-1;;;;;18123:44:0;;-1:-1:-1;;;;;;18123:44:0;;;;;;5653:111;;:::o;18027:374::-;18199:20;18207:11;18199:7;:20::i;:::-;18193:34;:39;18185:48;;;;;;18289:3;18247:19;;;:9;:19;;;;;:30;;;-1:-1:-1;;;;;18247:30:0;:46;18239:55;;;;;;18328:17;18336:8;18328:7;:17::i;:::-;-1:-1:-1;;;;;18300:25:0;;:4;:25;;;:12;:25;;;;;;;;:45;;;;:25;;:45;;;;;;:::i;:::-;-1:-1:-1;18351:4:0;:19;;;:9;:19;;;;;:30;;:44;;-1:-1:-1;;;;;18351:44:0;;-1:-1:-1;;;;;;18351:44:0;;;;;;17947:458;;:::o;16723:1219::-;16802:14;16819:17;16827:8;16819:7;:17::i;:::-;16802:34;;16841:17;16861:21;16873:8;16861:11;:21::i;:::-;16841:41;;16904:6;-1:-1:-1;;;;;16895:15:0;:5;-1:-1:-1;;;;;16895:15:0;;16887:24;;;;;;16924:10;-1:-1:-1;;;;;16924:20:0;;;;:47;;-1:-1:-1;16948:10:0;-1:-1:-1;;;;;16948:23:0;;;16924:47;:87;;;-1:-1:-1;;;;;;9631:18:0;;9613:4;9631:18;;;:10;:18;;;;;;;;17000:10;9631:38;;:27;;:38;;;;;;;;16975:36;16916:96;;;;;;17019:4;:19;;;:9;:19;;;;;;;;:31;;-1:-1:-1;;;;;17019:31:0;;;-1:-1:-1;;;;;;17019:31:0;;;;;;;17055:28;;;:48;;;;;;;;17108:28;;;;:34;;;;;;;;;;;17151:25;;;17147:134;;17223:3;17184:19;;;:9;:19;;;;;;:28;;:43;;-1:-1:-1;;;;;;17184:43:0;;;17238:37;17194:8;;17223:3;-1:-1:-1;;;;;17238:37:0;;;;;17223:3;;17238:37;17147:134;17285:41;17311:3;17317:8;17285:17;:41::i;:::-;17331:27;17349:8;17331:17;:27::i;:::-;-1:-1:-1;;;;;17382:17:0;;17365:14;17382:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;;:39;;17420:1;;17382:39;:::i;:::-;-1:-1:-1;;;;;17443:17:0;;17426:14;17443:17;;;:10;:17;;;;;17466:25;;17365:56;;-1:-1:-1;17426:14:0;;17443:22;;;;;17426:14;;17466:29;;17443:22;17466:29;:::i;:::-;17443:53;;;;;;;;;;;;;;-1:-1:-1;17443:53:0;;;;-1:-1:-1;;;;;17501:17:0;;;;:10;:17;;;;;:30;;;:22;;;;:30;;;;;;:39;;;17443:53;-1:-1:-1;17581:10:0;;17524:6;;17581:10;:::i;:::-;-1:-1:-1;;;;;17545:17:0;;:4;:17;;;:10;:17;;;;;;;;:33;;;:25;;;:33;;;;;:46;;;;17596:17;;;;;;:27;;;17545:17;17596:27;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17635:17:0;;;:4;:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;17628:42;;;17695:15;;;;;;;;;:25;;;17635:4;17695:25;;;:::i;:::-;;;;-1:-1:-1;17675:45:0;-1:-1:-1;17761:13:0;17675:45;17773:1;17761:13;:::i;:::-;-1:-1:-1;;;;;17725:15:0;;;:4;:15;;;:10;:15;;;;;;;;:33;;;:23;;;:33;;;;;:49;;;;17779:31;;;:20;;;;:31;;;;;:42;;;17831:30;;17749:8;;17725:15;;17831:30;;;;;;17892:25;17899:17;17907:8;17899:7;:17::i;17892:25::-;17887:3;-1:-1:-1;;;;;17871:66:0;17880:5;-1:-1:-1;;;;;17871:66:0;;17919:17;17927:8;17919:7;:17::i;:::-;17871:66;;;;;;:::i;:::-;;;;;;;;16797:1145;;;;;16723:1219;;;:::o;21460:190::-;21528:11;21556:3;21550:17;21571:1;21550:22;21546:50;;;-1:-1:-1;21587:3:0;;21460:190;-1:-1:-1;21460:190:0:o;21546:50::-;-1:-1:-1;21637:2:0;21628:12;21622:19;;21460:190::o;19775:247::-;19834:20;19857:19;;;:9;:19;;;;;19881:137;19888:14;;;;:18;19881:137;;19914:13;19930:6;:11;;:31;19959:1;19942:6;:14;;;:18;;;;:::i;:::-;19930:31;;;;;;;;;;;;19914:47;;19967:45;19981:8;19991:13;19998:5;19991:6;:13::i;:::-;20006:5;19967:13;:45::i;:::-;19908:110;19881:137;;20744:305;20872:4;20883:13;20934:6;;20942:8;20952:7;20909:51;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20899:62;;;;;;20883:78;;21036:8;7573:11;;-1:-1:-1;;;;;7573:11:0;;7513:76;21036:8;-1:-1:-1;;;;;20973:71:0;:59;20988:31;21013:5;20988:24;:31::i;20973:59::-;-1:-1:-1;;;;;20973:71:0;;;20744:305;-1:-1:-1;;;;;;;20744:305:0:o;15868:849::-;15937:16;15958:13;15974:14;15981:6;15974;:14::i;:::-;15997:4;:16;;;:9;:16;;;;;;15958:30;;-1:-1:-1;15993:671:0;;16037:4;:18;;;:4;:18;;;:::i;:::-;;;;-1:-1:-1;16026:29:0;-1:-1:-1;16080:12:0;16026:29;16091:1;16080:12;:::i;:::-;16061:4;:16;;;:9;:16;;;;;;;;:31;;;;16124:19;;;:9;:19;;;;;;;16149:26;;-1:-1:-1;;;;;16149:26:0;;;-1:-1:-1;;;;;;16149:26:0;;;;;;16181:18;;;:38;;;;;;;;;;;16225:24;;;;:15;;;;:24;;;;;:::i;:::-;-1:-1:-1;;;;;;16272:20:0;;16255:14;16272:20;;;:10;:20;;;;;:30;;;16255:14;16272:30;;;:::i;:::-;;;;-1:-1:-1;16255:47:0;-1:-1:-1;16349:10:0;16255:47;16358:1;16349:10;:::i;:::-;-1:-1:-1;;;;;16308:20:0;;:4;:20;;;:10;:20;;;;;;;;:38;;;:28;;;:38;;;;;:51;;;;16365:33;;;:25;;;;:33;;;;;:44;;;16420:42;;16337:8;;16308:4;16420:42;;16308:4;;16420:42;16506:5;16496:8;-1:-1:-1;;;;;16473:47:0;16490:3;-1:-1:-1;;;;;16473:47:0;;16513:6;16473:47;;;;;;:::i;:::-;;;;;;;;16020:506;;15993:671;;;16549:12;16554:6;16549:4;:12::i;:::-;16567:4;:19;;;:9;:19;;;;;:28;;:41;;-1:-1:-1;;;;;;16567:41:0;16598:10;16567:41;;;16538:23;-1:-1:-1;16614:44:0;16632:4;16639:8;16538:23;16614:9;:44::i;:::-;16695:8;-1:-1:-1;;;;;16673:39:0;16685:8;16678:5;16673:39;16705:6;16673:39;;;;;;:::i;:::-;;;;;;;;15932:785;;15868:849;;:::o;20029:182::-;20139:66;;14686::1;20139::0;;;14674:79:1;14769:12;;;14762:28;;;20108:7:0;;14806:12:1;;20139:66:0;14664:160:1;20503:236:0;20606:7;20621:9;20632;20643:7;20654:27;20670:10;20654:15;:27::i;:::-;20693:41;;;;;;;;;;;;22201:25:1;;;22274:4;22262:17;;22242:18;;;22235:45;;;;22296:18;;;22289:34;;;22339:18;;;22332:34;;;20620:61:0;;-1:-1:-1;20620:61:0;;-1:-1:-1;20620:61:0;-1:-1:-1;20693:41:0;;22173:19:1;;20693:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20693:41:0;;-1:-1:-1;;20693:41:0;;;20503:236;-1:-1:-1;;;;;;;20503:236:0:o;19233:537::-;19323:20;19346:19;;;:9;:19;;;;;;;;19378:21;;;:14;;;:21;;;;;;;19370:35;;;;;;19410:14;19427:21;;;:14;;;:21;;;;;;:25;;19451:1;;19427:25;:::i;:::-;19410:42;;19457:14;19474:6;:11;;:31;19503:1;19486:6;:14;;;:18;;;;:::i;:::-;19474:31;;;;;;;;;;;;;;-1:-1:-1;19474:31:0;;;;19510:19;;;:11;;;:19;;;;:28;;;19474:31;-1:-1:-1;19568:10:0;19522:6;19577:1;19568:10;:::i;:::-;19543:22;;;;:14;;;:22;;;;;:35;;;;19583:14;;;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;19611:21:0;;;;:14;;;:21;;;;;;;;19604:28;;;19644:13;;;:20;;;;;19637:27;;;:::i;:::-;19727:12;19734:4;19727:6;:12::i;:::-;19715:10;19688:25;19695:17;19703:8;19695:7;:17::i;19688:25::-;19674:91;19741:17;19749:8;19741:7;:17::i;:::-;19760:4;19674:91;;;;;;;:::i;:::-;;;;;;;;19318:452;;;19233:537;;;:::o;20216:282::-;20289:9;20300;20311:7;20333:10;:17;20354:2;20333:23;20325:32;;;;;;-1:-1:-1;;;20404:2:0;20388:19;;20382:26;20440:2;20424:19;;20418:26;20484:2;20468:19;;;20462:26;20382;;20459:1;20454:35;;;;;20216:282::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:134:1;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:2;;303:1;300;293:12;318:462;360:5;413:3;406:4;398:6;394:17;390:27;380:2;;431:1;428;421:12;380:2;467:6;454:20;498:48;514:31;542:2;514:31;:::i;:::-;498:48;:::i;:::-;571:2;562:7;555:19;617:3;610:4;605:2;597:6;593:15;589:26;586:35;583:2;;;634:1;631;624:12;583:2;699;692:4;684:6;680:17;673:4;664:7;660:18;647:55;747:1;722:16;;;740:4;718:27;711:38;;;;726:7;370:410;-1:-1:-1;;;370:410:1:o;785:247::-;844:6;897:2;885:9;876:7;872:23;868:32;865:2;;;913:1;910;903:12;865:2;952:9;939:23;971:31;996:5;971:31;:::i;1037:388::-;1105:6;1113;1166:2;1154:9;1145:7;1141:23;1137:32;1134:2;;;1182:1;1179;1172:12;1134:2;1221:9;1208:23;1240:31;1265:5;1240:31;:::i;:::-;1290:5;-1:-1:-1;1347:2:1;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;1402:17;;;1124:301;;;;;:::o;1430:456::-;1507:6;1515;1523;1576:2;1564:9;1555:7;1551:23;1547:32;1544:2;;;1592:1;1589;1582:12;1544:2;1631:9;1618:23;1650:31;1675:5;1650:31;:::i;:::-;1700:5;-1:-1:-1;1757:2:1;1742:18;;1729:32;1770:33;1729:32;1770:33;:::i;:::-;1534:352;;1822:7;;-1:-1:-1;;;1876:2:1;1861:18;;;;1848:32;;1534:352::o;1891:665::-;1986:6;1994;2002;2010;2063:3;2051:9;2042:7;2038:23;2034:33;2031:2;;;2080:1;2077;2070:12;2031:2;2119:9;2106:23;2138:31;2163:5;2138:31;:::i;:::-;2188:5;-1:-1:-1;2245:2:1;2230:18;;2217:32;2258:33;2217:32;2258:33;:::i;:::-;2310:7;-1:-1:-1;2364:2:1;2349:18;;2336:32;;-1:-1:-1;2419:2:1;2404:18;;2391:32;-1:-1:-1;;;;;2435:30:1;;2432:2;;;2478:1;2475;2468:12;2432:2;2501:49;2542:7;2533:6;2522:9;2518:22;2501:49;:::i;:::-;2491:59;;;2021:535;;;;;;;:::o;2561:315::-;2626:6;2634;2687:2;2675:9;2666:7;2662:23;2658:32;2655:2;;;2703:1;2700;2693:12;2655:2;2742:9;2729:23;2761:31;2786:5;2761:31;:::i;:::-;2811:5;-1:-1:-1;2835:35:1;2866:2;2851:18;;2835:35;:::i;:::-;2825:45;;2645:231;;;;;:::o;2881:315::-;2949:6;2957;3010:2;2998:9;2989:7;2985:23;2981:32;2978:2;;;3026:1;3023;3016:12;2978:2;3065:9;3052:23;3084:31;3109:5;3084:31;:::i;:::-;3134:5;3186:2;3171:18;;;;3158:32;;-1:-1:-1;;;2968:228:1:o;3201:452::-;3284:6;3292;3300;3308;3361:3;3349:9;3340:7;3336:23;3332:33;3329:2;;;3378:1;3375;3368:12;3329:2;3417:9;3404:23;3436:31;3461:5;3436:31;:::i;:::-;3486:5;-1:-1:-1;3538:2:1;3523:18;;3510:32;;-1:-1:-1;3589:2:1;3574:18;;3561:32;;-1:-1:-1;3612:35:1;3643:2;3628:18;;3612:35;:::i;:::-;3602:45;;3319:334;;;;;;;:::o;3658:902::-;3742:6;3773:2;3816;3804:9;3795:7;3791:23;3787:32;3784:2;;;3832:1;3829;3822:12;3784:2;3872:9;3859:23;-1:-1:-1;;;;;3897:6:1;3894:30;3891:2;;;3937:1;3934;3927:12;3891:2;3960:22;;4013:4;4005:13;;4001:27;-1:-1:-1;3991:2:1;;4042:1;4039;4032:12;3991:2;4078;4065:16;4101:60;4117:43;4157:2;4117:43;:::i;4101:60::-;4183:3;4207:2;4202:3;4195:15;4235:2;4230:3;4226:12;4219:19;;4266:2;4262;4258:11;4314:7;4309:2;4303;4300:1;4296:10;4292:2;4288:19;4284:28;4281:41;4278:2;;;4335:1;4332;4325:12;4278:2;4357:1;4348:10;;4367:163;4381:2;4378:1;4375:9;4367:163;;;4438:17;;4426:30;;4399:1;4392:9;;;;;4476:12;;;;4508;;4367:163;;;-1:-1:-1;4549:5:1;3753:807;-1:-1:-1;;;;;;;3753:807:1:o;4565:180::-;4624:6;4677:2;4665:9;4656:7;4652:23;4648:32;4645:2;;;4693:1;4690;4683:12;4645:2;-1:-1:-1;4716:23:1;;4635:110;-1:-1:-1;4635:110:1:o;4750:245::-;4808:6;4861:2;4849:9;4840:7;4836:23;4832:32;4829:2;;;4877:1;4874;4867:12;4829:2;4916:9;4903:23;4935:30;4959:5;4935:30;:::i;5000:249::-;5069:6;5122:2;5110:9;5101:7;5097:23;5093:32;5090:2;;;5138:1;5135;5128:12;5090:2;5170:9;5164:16;5189:30;5213:5;5189:30;:::i;5522:939::-;5629:6;5637;5645;5653;5661;5714:3;5702:9;5693:7;5689:23;5685:33;5682:2;;;5731:1;5728;5721:12;5682:2;5771:9;5758:23;-1:-1:-1;;;;;5841:2:1;5833:6;5830:14;5827:2;;;5857:1;5854;5847:12;5827:2;5895:6;5884:9;5880:22;5870:32;;5940:7;5933:4;5929:2;5925:13;5921:27;5911:2;;5962:1;5959;5952:12;5911:2;6002;5989:16;6028:2;6020:6;6017:14;6014:2;;;6044:1;6041;6034:12;6014:2;6091:7;6084:4;6075:6;6071:2;6067:15;6063:26;6060:39;6057:2;;;6112:1;6109;6102:12;6057:2;6143:4;6139:2;6135:13;6125:23;;6167:6;6157:16;;;6192:40;6226:4;6215:9;6211:20;6192:40;:::i;:::-;6182:50;;6279:2;6268:9;6264:18;6251:32;6241:42;;6336:2;6325:9;6321:18;6308:32;6292:48;;6365:2;6355:8;6352:16;6349:2;;;6381:1;6378;6371:12;6349:2;;6404:51;6447:7;6436:8;6425:9;6421:24;6404:51;:::i;:::-;6394:61;;;5672:789;;;;;;;;:::o;6466:321::-;6535:6;6588:2;6576:9;6567:7;6563:23;6559:32;6556:2;;;6604:1;6601;6594:12;6556:2;6644:9;6631:23;-1:-1:-1;;;;;6669:6:1;6666:30;6663:2;;;6709:1;6706;6699:12;6663:2;6732:49;6773:7;6764:6;6753:9;6749:22;6732:49;:::i;6792:635::-;6872:6;6925:2;6913:9;6904:7;6900:23;6896:32;6893:2;;;6941:1;6938;6931:12;6893:2;6974:9;6968:16;-1:-1:-1;;;;;6999:6:1;6996:30;6993:2;;;7039:1;7036;7029:12;6993:2;7062:22;;7115:4;7107:13;;7103:27;-1:-1:-1;7093:2:1;;7144:1;7141;7134:12;7093:2;7173;7167:9;7198:48;7214:31;7242:2;7214:31;:::i;7198:48::-;7269:2;7262:5;7255:17;7309:7;7304:2;7299;7295;7291:11;7287:20;7284:33;7281:2;;;7330:1;7327;7320:12;7281:2;7343:54;7394:2;7389;7382:5;7378:14;7373:2;7369;7365:11;7343:54;:::i;:::-;7416:5;6883:544;-1:-1:-1;;;;;6883:544:1:o;7432:541::-;7520:6;7528;7581:2;7569:9;7560:7;7556:23;7552:32;7549:2;;;7597:1;7594;7587:12;7549:2;7637:9;7624:23;-1:-1:-1;;;;;7707:2:1;7699:6;7696:14;7693:2;;;7723:1;7720;7713:12;7693:2;7746:49;7787:7;7778:6;7767:9;7763:22;7746:49;:::i;:::-;7736:59;;7848:2;7837:9;7833:18;7820:32;7804:48;;7877:2;7867:8;7864:16;7861:2;;;7893:1;7890;7883:12;7861:2;;7916:51;7959:7;7948:8;7937:9;7933:24;7916:51;:::i;:::-;7906:61;;;7539:434;;;;;:::o;8163:970::-;8256:6;8264;8317:2;8305:9;8296:7;8292:23;8288:32;8285:2;;;8333:1;8330;8323:12;8285:2;8369:9;8356:23;8346:33;;8398:2;8451;8440:9;8436:18;8423:32;-1:-1:-1;;;;;8470:6:1;8467:30;8464:2;;;8510:1;8507;8500:12;8464:2;8533:22;;8586:4;8578:13;;8574:27;-1:-1:-1;8564:2:1;;8615:1;8612;8605:12;8564:2;8651;8638:16;8674:60;8690:43;8730:2;8690:43;:::i;8674:60::-;8756:3;8780:2;8775:3;8768:15;8808:2;8803:3;8799:12;8792:19;;8839:2;8835;8831:11;8887:7;8882:2;8876;8873:1;8869:10;8865:2;8861:19;8857:28;8854:41;8851:2;;;8908:1;8905;8898:12;8851:2;8930:1;8921:10;;8940:163;8954:2;8951:1;8948:9;8940:163;;;9011:17;;8999:30;;8972:1;8965:9;;;;;9049:12;;;;9081;;8940:163;;;8944:3;9122:5;9112:15;;;;;;;8275:858;;;;;:::o;9138:248::-;9206:6;9214;9267:2;9255:9;9246:7;9242:23;9238:32;9235:2;;;9283:1;9280;9273:12;9235:2;-1:-1:-1;;9306:23:1;;;9376:2;9361:18;;;9348:32;;-1:-1:-1;9225:161:1:o;9391:389::-;9469:6;9477;9530:2;9518:9;9509:7;9505:23;9501:32;9498:2;;;9546:1;9543;9536:12;9498:2;9582:9;9569:23;9559:33;;9643:2;9632:9;9628:18;9615:32;-1:-1:-1;;;;;9662:6:1;9659:30;9656:2;;;9702:1;9699;9692:12;9656:2;9725:49;9766:7;9757:6;9746:9;9742:22;9725:49;:::i;9785:609::-;9882:6;9890;9898;9951:2;9939:9;9930:7;9926:23;9922:32;9919:2;;;9967:1;9964;9957:12;9919:2;10003:9;9990:23;9980:33;;10064:2;10053:9;10049:18;10036:32;-1:-1:-1;;;;;10128:2:1;10120:6;10117:14;10114:2;;;10144:1;10141;10134:12;10114:2;10167:49;10208:7;10199:6;10188:9;10184:22;10167:49;:::i;:::-;10157:59;;10269:2;10258:9;10254:18;10241:32;10225:48;;10298:2;10288:8;10285:16;10282:2;;;10314:1;10311;10304:12;10282:2;;10337:51;10380:7;10369:8;10358:9;10354:24;10337:51;:::i;:::-;10327:61;;;9909:485;;;;;:::o;10399:808::-;10514:6;10522;10530;10538;10591:3;10579:9;10570:7;10566:23;10562:33;10559:2;;;10608:1;10605;10598:12;10559:2;10644:9;10631:23;10621:33;;10705:2;10694:9;10690:18;10677:32;-1:-1:-1;;;;;10769:2:1;10761:6;10758:14;10755:2;;;10785:1;10782;10775:12;10755:2;10808:49;10849:7;10840:6;10829:9;10825:22;10808:49;:::i;:::-;10798:59;;10910:2;10899:9;10895:18;10882:32;10866:48;;10939:2;10929:8;10926:16;10923:2;;;10955:1;10952;10945:12;10923:2;10978:51;11021:7;11010:8;10999:9;10995:24;10978:51;:::i;:::-;10968:61;;11082:2;11071:9;11067:18;11054:32;11038:48;;11111:2;11101:8;11098:16;11095:2;;;11127:1;11124;11117:12;11095:2;;11150:51;11193:7;11182:8;11171:9;11167:24;11150:51;:::i;11212:316::-;11286:6;11294;11302;11355:2;11343:9;11334:7;11330:23;11326:32;11323:2;;;11371:1;11368;11361:12;11323:2;11407:9;11394:23;11384:33;;11464:2;11453:9;11449:18;11436:32;11426:42;;11487:35;11518:2;11507:9;11503:18;11487:35;:::i;:::-;11477:45;;11313:215;;;;;:::o;11533:385::-;11616:6;11624;11632;11640;11693:3;11681:9;11672:7;11668:23;11664:33;11661:2;;;11710:1;11707;11700:12;11661:2;11746:9;11733:23;11723:33;;11803:2;11792:9;11788:18;11775:32;11765:42;;11854:2;11843:9;11839:18;11826:32;11816:42;;11877:35;11908:2;11897:9;11893:18;11877:35;:::i;11923:461::-;11976:3;12014:5;12008:12;12041:6;12036:3;12029:19;12067:4;12096:2;12091:3;12087:12;12080:19;;12133:2;12126:5;12122:14;12154:1;12164:195;12178:6;12175:1;12172:13;12164:195;;;12243:13;;-1:-1:-1;;;;;12239:39:1;12227:52;;12299:12;;;;12334:15;;;;12275:1;12193:9;12164:195;;;-1:-1:-1;12375:3:1;;11984:400;-1:-1:-1;;;;;11984:400:1:o;12389:448::-;12439:3;12477:5;12471:12;12504:6;12499:3;12492:19;12530:4;12559:2;12554:3;12550:12;12543:19;;12596:2;12589:5;12585:14;12617:1;12627:185;12641:6;12638:1;12635:13;12627:185;;;12716:13;;12709:21;12702:29;12690:42;;12752:12;;;;12787:15;;;;12663:1;12656:9;12627:185;;12842:435;12895:3;12933:5;12927:12;12960:6;12955:3;12948:19;12986:4;13015:2;13010:3;13006:12;12999:19;;13052:2;13045:5;13041:14;13073:1;13083:169;13097:6;13094:1;13091:13;13083:169;;;13158:13;;13146:26;;13192:12;;;;13227:15;;;;13119:1;13112:9;13083:169;;13282:257;13323:3;13361:5;13355:12;13388:6;13383:3;13376:19;13404:63;13460:6;13453:4;13448:3;13444:14;13437:4;13430:5;13426:16;13404:63;:::i;:::-;13521:2;13500:15;-1:-1:-1;;13496:29:1;13487:39;;;;13528:4;13483:50;;13331:208;-1:-1:-1;;13331:208:1:o;13544:276::-;13675:3;13713:6;13707:13;13729:53;13775:6;13770:3;13763:4;13755:6;13751:17;13729:53;:::i;:::-;13798:16;;;;;13683:137;-1:-1:-1;;13683:137:1:o;13825:614::-;-1:-1:-1;;;14148:3:1;14141:19;14203:6;14195;14191:1;14186:3;14182:11;14169:41;14324:2;14320:15;;;;-1:-1:-1;;14316:53:1;14272:1;14229:16;;;;14264:10;;;14305:65;;;;14394:2;14386:11;;14379:27;14430:2;14422:11;;;-1:-1:-1;14131:308:1:o;14829:625::-;15094:6;15089:3;15082:19;15064:3;15130:6;15124:13;15146:60;15199:6;15194:2;15189:3;15185:12;15180:2;15172:6;15168:15;15146:60;:::i;:::-;15234:6;15229:3;15225:16;15215:26;;15272:6;15266:13;15288:61;15340:8;15335:2;15331;15327:11;15322:2;15314:6;15310:15;15288:61;:::i;:::-;15368:17;15409:2;15401:11;;15394:27;;;;-1:-1:-1;;15445:2:1;15437:11;;;-1:-1:-1;;;15072:382:1:o;15667:488::-;-1:-1:-1;;;;;15936:15:1;;;15918:34;;15988:15;;15983:2;15968:18;;15961:43;16035:2;16020:18;;16013:34;;;16083:3;16078:2;16063:18;;16056:31;;;15861:4;;16104:45;;16129:19;;16121:6;16104:45;:::i;:::-;16096:53;15870:285;-1:-1:-1;;;;;;15870:285:1:o;16160:1080::-;16651:3;16640:9;16633:22;16614:4;16678:57;16730:3;16719:9;16715:19;16707:6;16678:57;:::i;:::-;16783:9;16775:6;16771:22;16766:2;16755:9;16751:18;16744:50;16817:44;16854:6;16846;16817:44;:::i;:::-;16803:58;;16909:9;16901:6;16897:22;16892:2;16881:9;16877:18;16870:50;16943:44;16980:6;16972;16943:44;:::i;:::-;16929:58;;17035:9;17027:6;17023:22;17018:2;17007:9;17003:18;16996:50;17069:44;17106:6;17098;17069:44;:::i;:::-;17055:58;;17162:9;17154:6;17150:22;17144:3;17133:9;17129:19;17122:51;17190:44;17227:6;17219;17190:44;:::i;17245:456::-;17496:2;17485:9;17478:21;17459:4;17522:56;17574:2;17563:9;17559:18;17551:6;17522:56;:::i;:::-;17626:9;17618:6;17614:22;17609:2;17598:9;17594:18;17587:50;17654:41;17688:6;17680;17654:41;:::i;17706:1206::-;18241:3;18230:9;18223:22;18204:4;18268:57;18320:3;18309:9;18305:19;18297:6;18268:57;:::i;:::-;18373:9;18365:6;18361:22;18356:2;18345:9;18341:18;18334:50;18407:44;18444:6;18436;18407:44;:::i;:::-;18393:58;;18499:9;18491:6;18487:22;18482:2;18471:9;18467:18;18460:50;18533:41;18567:6;18559;18533:41;:::i;:::-;18519:55;;18622:9;18614:6;18610:22;18605:2;18594:9;18590:18;18583:50;18656:44;18693:6;18685;18656:44;:::i;:::-;18642:58;;18749:9;18741:6;18737:22;18731:3;18720:9;18716:19;18709:51;18777:41;18811:6;18803;18777:41;:::i;:::-;18849:3;18834:19;;18827:35;;;;-1:-1:-1;;18893:3:1;18878:19;18871:35;18769:49;18213:699;-1:-1:-1;;;;;18213:699:1:o;18917:1449::-;19505:4;19534:3;19564:2;19553:9;19546:21;19590:56;19642:2;19631:9;19627:18;19619:6;19590:56;:::i;:::-;19576:70;;19694:9;19686:6;19682:22;19677:2;19666:9;19662:18;19655:50;19728:44;19765:6;19757;19728:44;:::i;:::-;19714:58;;19820:9;19812:6;19808:22;19803:2;19792:9;19788:18;19781:50;19854:44;19891:6;19883;19854:44;:::i;:::-;19840:58;;19946:9;19938:6;19934:22;19929:2;19918:9;19914:18;19907:50;19980:44;20017:6;20009;19980:44;:::i;:::-;19966:58;;20073:9;20065:6;20061:22;20055:3;20044:9;20040:19;20033:51;20107:44;20144:6;20136;20107:44;:::i;:::-;20093:58;;20200:9;20192:6;20188:22;20182:3;20171:9;20167:19;20160:51;20228:44;20265:6;20257;20228:44;:::i;:::-;20303:3;20288:19;;20281:35;;;;-1:-1:-1;;20347:3:1;20332:19;20325:35;20220:52;19514:852;-1:-1:-1;;;;;;19514:852:1:o;20371:1224::-;20918:3;20907:9;20900:22;20881:4;20945:57;20997:3;20986:9;20982:19;20974:6;20945:57;:::i;:::-;21050:9;21042:6;21038:22;21033:2;21022:9;21018:18;21011:50;21084:44;21121:6;21113;21084:44;:::i;:::-;21070:58;;21176:9;21168:6;21164:22;21159:2;21148:9;21144:18;21137:50;21210:44;21247:6;21239;21210:44;:::i;:::-;21196:58;;21302:9;21294:6;21290:22;21285:2;21274:9;21270:18;21263:50;21336:44;21373:6;21365;21336:44;:::i;:::-;21322:58;;21429:9;21421:6;21417:22;21411:3;21400:9;21396:19;21389:51;21457:44;21494:6;21486;21457:44;:::i;22377:219::-;22526:2;22515:9;22508:21;22489:4;22546:44;22586:2;22575:9;22571:18;22563:6;22546:44;:::i;22601:724::-;22918:3;22907:9;22900:22;22881:4;22939:45;22979:3;22968:9;22964:19;22956:6;22939:45;:::i;:::-;-1:-1:-1;;;;;23058:15:1;;;23053:2;23038:18;;23031:43;23110:15;;;23105:2;23090:18;;23083:43;-1:-1:-1;23162:15:1;;;23157:2;23142:18;;23135:43;23215:15;;;;23209:3;23194:19;;23187:44;23011:3;23247:19;;23240:35;;;;23306:3;23291:19;23284:35;;;;22931:53;22890:435;-1:-1:-1;22890:435:1:o;23330:381::-;23527:2;23516:9;23509:21;23490:4;23553:44;23593:2;23582:9;23578:18;23570:6;23553:44;:::i;:::-;23645:9;23637:6;23633:22;23628:2;23617:9;23613:18;23606:50;23673:32;23698:6;23690;23673:32;:::i;23716:543::-;23961:2;23950:9;23943:21;23924:4;23987:44;24027:2;24016:9;24012:18;24004:6;23987:44;:::i;:::-;24079:9;24071:6;24067:22;24062:2;24051:9;24047:18;24040:50;24113:32;24138:6;24130;24113:32;:::i;:::-;24099:46;;24193:9;24185:6;24181:22;24176:2;24165:9;24161:18;24154:50;24221:32;24246:6;24238;24221:32;:::i;25385:275::-;25456:2;25450:9;25521:2;25502:13;;-1:-1:-1;;25498:27:1;25486:40;;-1:-1:-1;;;;;25541:34:1;;25577:22;;;25538:62;25535:2;;;25603:18;;:::i;:::-;25639:2;25632:22;25430:230;;-1:-1:-1;25430:230:1:o;25665:183::-;25725:4;-1:-1:-1;;;;;25750:6:1;25747:30;25744:2;;;25780:18;;:::i;:::-;-1:-1:-1;25825:1:1;25821:14;25837:4;25817:25;;25734:114::o;25853:186::-;25901:4;-1:-1:-1;;;;;25926:6:1;25923:30;25920:2;;;25956:18;;:::i;:::-;-1:-1:-1;26022:2:1;26001:15;-1:-1:-1;;25997:29:1;26028:4;25993:40;;25910:129::o;26044:128::-;26084:3;26115:1;26111:6;26108:1;26105:13;26102:2;;;26121:18;;:::i;:::-;-1:-1:-1;26157:9:1;;26092:80::o;26177:120::-;26217:1;26243;26233:2;;26248:18;;:::i;:::-;-1:-1:-1;26282:9:1;;26223:74::o;26302:168::-;26342:7;26408:1;26404;26400:6;26396:14;26393:1;26390:21;26385:1;26378:9;26371:17;26367:45;26364:2;;;26415:18;;:::i;:::-;-1:-1:-1;26455:9:1;;26354:116::o;26475:125::-;26515:4;26543:1;26540;26537:8;26534:2;;;26548:18;;:::i;:::-;-1:-1:-1;26585:9:1;;26524:76::o;26605:258::-;26677:1;26687:113;26701:6;26698:1;26695:13;26687:113;;;26777:11;;;26771:18;26758:11;;;26751:39;26723:2;26716:10;26687:113;;;26818:6;26815:1;26812:13;26809:2;;;-1:-1:-1;;26853:1:1;26835:16;;26828:27;26658:205::o;26868:136::-;26907:3;26935:5;26925:2;;26944:18;;:::i;:::-;-1:-1:-1;;;26980:18:1;;26915:89::o;27009:380::-;27088:1;27084:12;;;;27131;;;27152:2;;27206:4;27198:6;27194:17;27184:27;;27152:2;27259;27251:6;27248:14;27228:18;27225:38;27222:2;;;27305:10;27300:3;27296:20;27293:1;27286:31;27340:4;27337:1;27330:15;27368:4;27365:1;27358:15;27222:2;;27064:325;;;:::o;27394:135::-;27433:3;-1:-1:-1;;27454:17:1;;27451:2;;;27474:18;;:::i;:::-;-1:-1:-1;27521:1:1;27510:13;;27441:88::o;27534:112::-;27566:1;27592;27582:2;;27597:18;;:::i;:::-;-1:-1:-1;27631:9:1;;27572:74::o;27651:127::-;27712:10;27707:3;27703:20;27700:1;27693:31;27743:4;27740:1;27733:15;27767:4;27764:1;27757:15;27783:127;27844:10;27839:3;27835:20;27832:1;27825:31;27875:4;27872:1;27865:15;27899:4;27896:1;27889:15;27915:127;27976:10;27971:3;27967:20;27964:1;27957:31;28007:4;28004:1;27997:15;28031:4;28028:1;28021:15;28047:127;28108:10;28103:3;28099:20;28096:1;28089:31;28139:4;28136:1;28129:15;28163:4;28160:1;28153:15;28179:131;-1:-1:-1;;;;;28254:31:1;;28244:42;;28234:2;;28300:1;28297;28290:12;28315:131;-1:-1:-1;;;;;;28389:32:1;;28379:43;;28369:2;;28436:1;28433;28426:12

Swarm Source

ipfs://cc6a9b77205170caabdfd99d5ec97a890cd921d3a2720672533f8b210c6ac700

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.