ETH Price: $3,176.22 (+2.32%)

Token

Yat NFT (Yats)
 

Overview

Max Total Supply

14,542 Yats

Holders

7,647

Market

Volume (24H)

0.2318 ETH

Min Price (24H)

$24.77 @ 0.007800 ETH

Max Price (24H)

$397.03 @ 0.125000 ETH
Balance
1 Yats
0xdb412c8479357ef101236fbb25fa222a2153f0ee
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Yats is emoji usernames that become your universal Internet identity, website URL, payment address, and more.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

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-30
*/

// 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";
	string public symbol = "Yats";
	function contractURI() external pure returns (string memory) {
		return "https://a.y.at/nft_transfers/contract/";
	}
	function baseTokenURI() public pure returns (string memory) {
		return "https://a.y.at/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("yatNFT", _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"}]

60806040523480156200001157600080fd5b50604051620043353803806200433583398101604081905262000034916200016b565b60405162000042906200015d565b604051809103906000f0801580156200005f573d6000803e3d6000fd5b50600680546001600160a01b039283166001600160a01b031991821617909155600780548216331790556008805493909216921691909117905560096020527f021848d60c9b0964bd4b8333f226c3739cb52935e1cddece863426482881a346805460ff1990811660019081179092557fd562913b61c588d278fa1b7060c8690c2c1705abca8a7831370b7f97e608ce2d80548216831790557fbad29e7831363aba18605493f3c0a900d240cf104eb84354946600bc54c55567805482168317905563780e9d6360e01b6000527f8a3aa2360a875c766ef00f2ec618ca88b63db05a5462acea92a9746e379f2caa805490911690911790556200019d565b61075e8062003bd783390190565b6000602082840312156200017e57600080fd5b81516001600160a01b03811681146200019657600080fd5b9392505050565b613a2a80620001ad6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806370a08231116101de578063c43a3f871161010f578063e63dfc97116100ad578063eb1af4d11161007c578063eb1af4d11461089c578063f3cb8385146108bd578063f91fc4c2146108d0578063fefd445f146108e357600080fd5b8063e63dfc97146107e8578063e8a3d48514610841578063e985e9c514610849578063ea78803f1461088957600080fd5b8063d547cfb7116100e9578063d547cfb714610780578063e2dadf4e14610788578063e3acd07d146107ae578063e54b7f3e146107c157600080fd5b8063c43a3f8714610747578063c87b56dd1461075a578063d06497bf1461076d57600080fd5b806397830de01161017c578063b2b3140d11610156578063b2b3140d146106ed578063b5a3844b14610700578063b88d4fde14610721578063bc4a96491461073457600080fd5b806397830de0146106a15780639ac8027c146106c7578063a22cb465146106da57600080fd5b80638a53ddb9116101b85780638a53ddb91461064f5780638c1858e7146106625780638da5cb5b1461068857806395d89b411461069957600080fd5b806370a082311461060057806373704e2c14610629578063776adef81461063c57600080fd5b806327ba7cc3116102b857806357f6b812116102565780636352211e116102305780636352211e146105b45780636c19e783146105c75780636ccbae5f146105da5780636dfedad7146105ed57600080fd5b806357f6b812146105665780635fd846f21461058e57806361ff33a1146105a157600080fd5b806342842e0e1161029257806342842e0e1461051a57806342966c681461052d5780634f6ccce71461054057806355ea6c471461055357600080fd5b806327ba7cc3146104e15780632f745c59146104f45780633812c6a81461050757600080fd5b806318160ddd116103255780632392c189116102ff5780632392c1891461048457806323b872dd14610497578063243c7540146104aa57806324b950fe146104ce57600080fd5b806318160ddd1461044e578063183d127214610460578063238ac9331461047357600080fd5b8063095ea7b311610361578063095ea7b3146104005780630b7bb3cb1461041557806312aaac701461042857806313af40351461043b57600080fd5b806301ffc9a71461038857806306fdde03146103c0578063081812fc146103d5575b600080fd5b6103ab610396366004612f32565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103c86108f6565b6040516103b79190613726565b6103e86103e3366004612f19565b61097c565b6040516001600160a01b0390911681526020016103b7565b61041361040e366004612e0e565b6109aa565b005b610413610423366004613297565b610a2e565b6103c8610436366004612f19565b610a7b565b610413610449366004612cd7565b610b1d565b6000545b6040519081526020016103b7565b61045261046e36600461301d565b610b56565b6008546001600160a01b03166103e8565b610413610492366004612e0e565b610b86565b6104136104a5366004612d2d565b610bbc565b6104bd6104b8366004612e82565b610bc7565b6040516103b7959493929190613537565b6104136104dc366004612f19565b610e26565b6103e86104ef366004612f19565b610e3a565b610452610502366004612e0e565b610e68565b61041361051536600461322b565b610eb9565b610413610528366004612d2d565b610f03565b61041361053b366004612f19565b610f1e565b61045261054e366004612f19565b610fa1565b6103c8610561366004612cd7565b610fb4565b610579610574366004612cd7565b610fdb565b604080519283526020830191909152016103b7565b61045261059c36600461301d565b611009565b6103c86105af3660046131ef565b611052565b6103e86105c2366004612f19565b611091565b6104136105d5366004612cd7565b6110bc565b6104526105e8366004612f19565b6110f5565b6104136105fb3660046131ef565b61111a565b61045261060e366004612cd7565b6001600160a01b031660009081526005602052604090205490565b6103e861063736600461301d565b611138565b6103e861064a366004612f19565b611169565b6103c861065d3660046130c7565b6111b4565b610675610670366004613351565b6111c8565b6040516103b797969594939291906135bd565b6007546001600160a01b03166103e8565b6103c8611490565b6106b46106af366004612f19565b6114d5565b6040516103b79796959493929190613739565b6103c86106d53660046131cd565b611536565b6104136106e8366004612dd9565b6115f9565b6104136106fb366004612f19565b611669565b61071361070e3660046131cd565b6116bd565b6040516103b792919061378a565b61041361072f366004612d6e565b6116de565b610413610742366004612f19565b61179e565b610413610755366004612e0e565b6117a9565b6103c8610768366004612f19565b611803565b61041361077b366004612f19565b611884565b6103c861188f565b61079b610796366004612e3a565b6118d4565b6040516103b797969594939291906136c5565b6104526107bc366004612f19565b611a7a565b6107d46107cf36600461331c565b611a9f565b6040516103b7989796959493929190613635565b6107fb6107f636600461301d565b611c2e565b604080519788526001600160a01b039687166020890152948616948701949094529184166060860152909216608084015260a083019190915260c082015260e0016103b7565b6103c8611c64565b6103ab610857366004612cf4565b6001600160a01b0391821660009081526005602090815260408083209390941682526002909201909152205460ff1690565b6103c8610897366004612f19565b611ca9565b6108af6108aa36600461312a565b611cdb565b6040516103b7929190613598565b6104136108cb366004612cd7565b611ebc565b6104136108de366004612e0e565b611ef5565b6104136108f1366004612f6c565b611f4e565b600654604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109779190810190613051565b905090565b60008054821061098b57600080fd5b506000908152600160205260409020600201546001600160a01b031690565b806109b481611091565b6001600160a01b0316336001600160a01b0316146109d157600080fd5b60008281526001602052604080822060020180546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b6000848152600160205260408120600a018054610a6192879287928792909190610a5783613942565b9190505585611fb1565b610a6a57600080fd5b610a75848484612046565b50505050565b6000818152600360205260409020805460609190610a9890613907565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490613907565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b50505050509050919050565b6007546001600160a01b03163314610b3457600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600081604051602001610b699190613457565b604051602081830303815290604052805190602001209050919050565b80610b9081611091565b6001600160a01b0316336001600160a01b031614610bad57600080fd5b610bb7838361220b565b505050565b610bb7838383612319565b6060806060806060600086519050806001600160401b03811115610bed57610bed6139b3565b604051908082528060200260200182016040528015610c16578160200160208202803683370190505b509550806001600160401b03811115610c3157610c316139b3565b604051908082528060200260200182016040528015610c5a578160200160208202803683370190505b509450806001600160401b03811115610c7557610c756139b3565b604051908082528060200260200182016040528015610c9e578160200160208202803683370190505b509350806001600160401b03811115610cb957610cb96139b3565b604051908082528060200260200182016040528015610ce2578160200160208202803683370190505b509250806001600160401b03811115610cfd57610cfd6139b3565b604051908082528060200260200182016040528015610d26578160200160208202803683370190505b50915060005b81811015610e1b576060610d58898381518110610d4b57610d4b61399d565b60200260200101516114d5565b9050508b8781518110610d6d57610d6d61399d565b602002602001018b8881518110610d8657610d8661399d565b602002602001018b8981518110610d9f57610d9f61399d565b602002602001018b8a81518110610db857610db861399d565b6001600160a01b0395861660209182029290920101529383169093529281169091529190911690529050610deb81612673565b888381518110610dfd57610dfd61399d565b60209081029190910101525080610e1381613942565b915050610d2c565b505091939590929450565b610e376001600160a01b03826117a9565b50565b600080548210610e4957600080fd5b506000908152600160205260409020600301546001600160a01b031690565b6001600160a01b0382166000908152600560205260408120548210610e8c57600080fd5b506001600160a01b0391909116600090815260056020908152604080832093835260019093019052205490565b82610ec381611091565b6001600160a01b0316336001600160a01b03161480610a615750610ee681611169565b6001600160a01b0316336001600160a01b031614610a6a57600080fd5b610bb7838383604051806020016040528060008152506116de565b80610f2881611091565b6001600160a01b0316336001600160a01b031614610f4557600080fd5b610f50333084612319565b3382610f5e61046e82611ca9565b7fe7da089962443ca13b93acded259222f496b43d227e5f74af3a9303d99943201610f8886611ca9565b604051610f959190613726565b60405180910390a45050565b600080548210610fb057600080fd5b5090565b6001600160a01b0381166000908152600460205260409020805460609190610a9890613907565b600080610fe760005490565b6001600160a01b03841660009081526005602052604090205491509150915091565b60008061101583610b56565b60008181526002602052604090205490915061103057600080fd5b60008181526002602052604090205461104b906001906138ad565b9392505050565b60606000826040516020016110679190613457565b6040516020818303038152906040528051906020012090506110898482611536565b949350505050565b6000805482106110a057600080fd5b506000908152600160205260409020546001600160a01b031690565b6007546001600160a01b031633146110d357600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008054821061110457600080fd5b506000908152600160205260409020600a015490565b611134828260405180602001604052806000815250610eb9565b5050565b600060018161114684611009565b81526020810191909152604001600020600401546001600160a01b031692915050565b60008054821061117857600080fd5b600082815260016020819052604090912001546001600160a01b03908116908114156111ae576008546001600160a01b03165b90505b92915050565b60606111ab6111c284611009565b83611052565b606080606080606060008060008a116111e057600080fd5b6111e98b611a7a565b91508115611449576111fb8a8361395d565b1561120757600161120a565b60005b60ff166112178b8461387a565b6112219190613862565b905080891061122f57600080fd5b600061123b8a8c61388e565b90506112486001836138ad565b8a14801561125e575061125b8b8461395d565b15155b156112705761126d8b8461395d565b9a505b8a6001600160401b03811115611288576112886139b3565b6040519080825280602002602001820160405280156112b1578160200160208202803683370190505b5097508a6001600160401b038111156112cc576112cc6139b3565b6040519080825280602002602001820160405280156112f5578160200160208202803683370190505b5096508a6001600160401b03811115611310576113106139b3565b604051908082528060200260200182016040528015611339578160200160208202803683370190505b50955060005b8b8110156114425760008d8152600160205260408120600701908b6113845760018361136b86896138ad565b61137591906138ad565b61137f91906138ad565b61138e565b61138e8385613862565b8152602001908152602001600020548982815181106113af576113af61399d565b60200260200101818152505060006113df8a83815181106113d2576113d261399d565b6020026020010151610a7b565b90506113ea81612673565b8983815181106113fc576113fc61399d565b602002602001018181525050602081511188838151811061141f5761141f61399d565b91151560209283029190910190910152508061143a81613942565b91505061133f565b5050611471565b5060408051600080825260208201818152828401828152606084019094529198509096509094505b61147b8b88611cdb565b979c969b509499509397509495509192915050565b600654604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561093b57600080fd5b60606000806000806000806114e988611ca9565b6114f289611091565b6114fb8a611169565b6115048b610e3a565b61150d8c61097c565b6115168d6110f5565b61151f8e611a7a565b959e949d50929b5090995097509550909350915050565b606061154160005490565b831061154c57600080fd5b60008381526001602090815260408083208584526008019091529020805461157390613907565b80601f016020809104026020016040519081016040528092919081815260200182805461159f90613907565b80156115ec5780601f106115c1576101008083540402835291602001916115ec565b820191906000526020600020905b8154815290600101906020018083116115cf57829003601f168201915b5050505050905092915050565b3360008181526005602090815260408083206001600160a01b0387168085526002909101835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b8061167381611091565b6001600160a01b0316336001600160a01b031614806116ab575061169681611169565b6001600160a01b0316336001600160a01b0316145b6116b457600080fd5b6111348261268f565b6060806116c983610a7b565b6116d38585611536565b915091509250929050565b6116e9848484612319565b823b63ffffffff81161561179757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117299033908990889088906004016134fa565b602060405180830381600087803b15801561174357600080fd5b505af1158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190612f4f565b6001600160e01b03191663150b7a0260e01b1461179757600080fd5b5050505050565b610e37600082610b86565b806117b381611091565b6001600160a01b0316336001600160a01b0316146117d057600080fd5b5060009081526001602081905260409091200180546001600160a01b0319166001600160a01b0392909216919091179055565b60065460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ae9190810190613051565b610e376000826117a9565b6006546040805163d547cfb760e01b815290516060926001600160a01b03169163d547cfb7916004808301926000929190829003018186803b15801561093b57600080fd5b606080606080606060008060008a116118ec57600080fd5b6001600160a01b038b1660009081526005602052604090205491508115611a45576119178a8361395d565b15611923576001611926565b60005b60ff166119338b8461387a565b61193d9190613862565b905080891061194b57600080fd5b60006119578a8c61388e565b90506119646001836138ad565b8a14801561197a57506119778b8461395d565b15155b1561198c576119898b8461395d565b9a505b8a6001600160401b038111156119a4576119a46139b3565b6040519080825280602002602001820160405280156119cd578160200160208202803683370190505b50975060005b8b811015611a3e57611a0f8d8b611a05576001836119f186896138ad565b6119fb91906138ad565b61050291906138ad565b6105028385613862565b898281518110611a2157611a2161399d565b602090810291909101015280611a3681613942565b9150506119d3565b5050611a59565b506040805160008082526020820190925296505b611a6287610bc7565b9a9f939e50909c509a50979850919650945092505050565b600080548210611a8957600080fd5b5060009081526001602052604090206006015490565b60608060608060608060008060008b11611ab857600080fd5b60005491508115611bfa57611acd8b8361395d565b15611ad9576001611adc565b60005b60ff16611ae98c8461387a565b611af39190613862565b9050808a10611b0157600080fd5b6000611b0d8b8d61388e565b9050611b1a6001836138ad565b8b148015611b305750611b2d8c8461395d565b15155b15611b4257611b3f8c8461395d565b9b505b8b6001600160401b03811115611b5a57611b5a6139b3565b604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50985060005b8c811015611bf357611bc48b611bba57600182611ba685886138ad565b611bb091906138ad565b61054e91906138ad565b61054e8284613862565b8a8281518110611bd657611bd661399d565b602090810291909101015280611beb81613942565b915050611b89565b5050611c0e565b506040805160008082526020820190925297505b611c1788610bc7565b9b9f939e50919c509a509897509195509350915050565b6000806000806000806000611c4288611009565b9650611c4d876114d5565b9c9e949d50929b919a509850909650945092505050565b6006546040805163e8a3d48560e01b815290516060926001600160a01b03169163e8a3d485916004808301926000929190829003018186803b15801561093b57600080fd5b6060611cb460005490565b8210611cbf57600080fd5b60008281526001602052604090206005018054610a9890613907565b606080611ce760005490565b8410611cf257600080fd5b8251806001600160401b03811115611d0c57611d0c6139b3565b604051908082528060200260200182016040528015611d35578160200160208202803683370190505b509250806001600160401b03811115611d5057611d506139b3565b604051908082528060200260200182016040528015611d79578160200160208202803683370190505b50915060005b81811015611eb357600086815260016020526040812086516008909101908290889085908110611db157611db161399d565b602002602001015181526020019081526020016000208054611dd290613907565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfe90613907565b8015611e4b5780601f10611e2057610100808354040283529160200191611e4b565b820191906000526020600020905b815481529060010190602001808311611e2e57829003601f168201915b50505050509050611e5b81612673565b858381518110611e6d57611e6d61399d565b6020026020010181815250506020815111848381518110611e9057611e9061399d565b911515602092830291909101909101525080611eab81613942565b915050611d7f565b50509250929050565b6007546001600160a01b03163314611ed357600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b80611eff81611091565b6001600160a01b0316336001600160a01b031614611f1c57600080fd5b50600090815260016020526040902060030180546001600160a01b0319166001600160a01b0392909216919091179055565b814210611f5a57600080fd5b611f6785858585856126eb565b611f7057600080fd5b61179785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612759915050565b60008086868686604051602001611fcb94939291906134b5565b6040516020818303038152906040528051906020012090506000611ff7611ff18361296a565b856129a5565b905061200288611091565b6001600160a01b0316816001600160a01b0316148061203a575061202588611169565b6001600160a01b0316816001600160a01b0316145b98975050505050505050565b600082511161205457600080fd5b6000826040516020016120679190613457565b60405160208183030381529060405280519060200120905061208881610a7b565b516120ae57600081815260036020908152604090912084516120ac92860190612b96565b505b600084815260016020526040902082516120d2576120cd858584612a24565b6121ab565b600082815260098201602052604090205461218857600681018054600091826120fa83613942565b90915550905061210b816001613862565b60008481526009840160209081526040808320939093558382526007850190522083905561213885610b56565b3361214561046e89611ca9565b7f180a742bbd74b1be5156ad2b394637be17b0ebab9f54e4d250753399437ba20961216f8a611ca9565b8960405161217e92919061378a565b60405180910390a4505b6000828152600882016020908152604090912084516121a992860190612b96565b505b6121b484610b56565b336121c161046e88611ca9565b7f97bdcba1fbd5143d16d316cc7a4e6ccb2345fa2c5e7ec4705eb788fb6a202eaa6121eb89611ca9565b88886040516121fc939291906137af565b60405180910390a45050505050565b6001600160a01b0382166122795760008181526001602090815260408083206004908101546001600160a01b03168452909152812061224991612c16565b600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b61228282610fb4565b511561228d57600080fd5b6000818152600160205260409020600401546001600160a01b0316156122b257600080fd5b6122bb81611ca9565b6001600160a01b038316600090815260046020908152604090912082516122e89391929190910190612b96565b50600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b600061232482611091565b905060006123318361097c565b9050816001600160a01b0316856001600160a01b03161461235157600080fd5b336001600160a01b03831614806123705750336001600160a01b038216145b806123a157506001600160a01b038216600090815260056020908152604080832033845260020190915290205460ff165b6123aa57600080fd5b600083815260016020819052604090912080546001600160a01b038088166001600160a01b03199283168117845593830180548316821790556003909201805490911690921790915581161561244f5760008381526001602052604080822060020180546001600160a01b0319169055518491906001600160a01b038716907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45b61245a60008461220b565b6124638361268f565b6001600160a01b0385166000908152600560209081526040808320868452600301909152812054612496906001906138ad565b6001600160a01b03871660009081526005602052604081208054929350909160019182019183916124c791906138ad565b815260208082019290925260409081016000908120546001600160a01b038b168252600584528282208683526001908101909452919020819055915061250e908390613862565b6001600160a01b0388166000818152600560208181526040808420878552600381018352908420959095559282529091528154919061254c836138f0565b90915550506001600160a01b0380881660009081526005602081815260408084208a85526003018252808420849055938a168352529081208054908261259183613942565b9091555090506125a2816001613862565b6001600160a01b0380891660008181526005602090815260408083208c845260038101835281842096909655868352600190950190528381208a90559251899391928c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a461261661046e87611ca9565b876001600160a01b0316896001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db6126548a611ca9565b6040516126619190613726565b60405180910390a45050505050505050565b600081516000141561268757506000919050565b506020015190565b60008181526001602052604090205b600681015415611134576000816007016000600184600601546126c191906138ad565b81526020019081526020016000205490506126e5836126df83610a7b565b83612a24565b5061269e565b600080868686866040516020016127059493929190613473565b60405160208183030381529060405280519060200120905061272f6008546001600160a01b031690565b6001600160a01b0316612744611ff18361296a565b6001600160a01b031614979650505050505050565b60008061276584610b56565b6000818152600260205260409020549091506128ea5760008054908061278a83613942565b90915550915061279b826001613862565b60008281526002602090815260408083209390935584825260018082529290912080546001600160a01b038088166001600160a01b0319928316178355938201805490911690931790925585516127fa91600584019190880190612b96565b506001600160a01b03841660009081526005602052604081208054908261282083613942565b909155509050612831816001613862565b6001600160a01b0386166000818152600560209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a482856001600160a01b031660006001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db896040516128db9190613726565b60405180910390a45050612921565b6128f384611009565b600081815260016020526040902060020180546001600160a01b031916331790559150612921308484612319565b826001600160a01b031682827fbf3a4785433526d5666b7a9d19e1e2eaf5c084063ba37298cea8655cf88c0a8f8760405161295c9190613726565b60405180910390a450505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01610b69565b6000806000806129b485612b65565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015612a0f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008381526001602090815260408083208484526009810190925290912054612a4c57600080fd5b6000828152600982016020526040812054612a69906001906138ad565b9050600082600701600060018560060154612a8491906138ad565b8152602080820192909252604090810160009081205485825260078701909352208190559050612ab5826001613862565b600082815260098501602052604081209190915560068401805491612ad9836138f0565b909155505060008481526009840160209081526040808320839055600886019091528120612b0691612c16565b612b0f85610b56565b33612b1c61046e89611ca9565b7f86cb57904f14d8d9f75d3c31427ff5d8cbcf7f93b985e871c553c6618704744c612b468a611ca9565b89604051612b5592919061378a565b60405180910390a4505050505050565b60008060008351604114612b7857600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054612ba290613907565b90600052602060002090601f016020900481019282612bc45760008555612c0a565b82601f10612bdd57805160ff1916838001178555612c0a565b82800160010185558215612c0a579182015b82811115612c0a578251825591602001919060010190612bef565b50610fb0929150612c4c565b508054612c2290613907565b6000825580601f10612c32575050565b601f016020900490600052602060002090810190610e3791905b5b80821115610fb05760008155600101612c4d565b8035612c6c816139c9565b919050565b80358015158114612c6c57600080fd5b600082601f830112612c9257600080fd5b8135612ca5612ca08261383b565b6137e8565b818152846020838601011115612cba57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ce957600080fd5b813561104b816139c9565b60008060408385031215612d0757600080fd5b8235612d12816139c9565b91506020830135612d22816139c9565b809150509250929050565b600080600060608486031215612d4257600080fd5b8335612d4d816139c9565b92506020840135612d5d816139c9565b929592945050506040919091013590565b60008060008060808587031215612d8457600080fd5b8435612d8f816139c9565b93506020850135612d9f816139c9565b92506040850135915060608501356001600160401b03811115612dc157600080fd5b612dcd87828801612c81565b91505092959194509250565b60008060408385031215612dec57600080fd5b8235612df7816139c9565b9150612e0560208401612c71565b90509250929050565b60008060408385031215612e2157600080fd5b8235612e2c816139c9565b946020939093013593505050565b60008060008060808587031215612e5057600080fd5b8435612e5b816139c9565b93506020850135925060408501359150612e7760608601612c71565b905092959194509250565b60006020808385031215612e9557600080fd5b82356001600160401b03811115612eab57600080fd5b8301601f81018513612ebc57600080fd5b8035612eca612ca082613818565b80828252848201915084840188868560051b8701011115612eea57600080fd5b600094505b83851015612f0d578035835260019490940193918501918501612eef565b50979650505050505050565b600060208284031215612f2b57600080fd5b5035919050565b600060208284031215612f4457600080fd5b813561104b816139de565b600060208284031215612f6157600080fd5b815161104b816139de565b600080600080600060808688031215612f8457600080fd5b85356001600160401b0380821115612f9b57600080fd5b818801915088601f830112612faf57600080fd5b813581811115612fbe57600080fd5b896020828501011115612fd057600080fd5b60208301975080965050612fe660208901612c61565b945060408801359350606088013591508082111561300357600080fd5b5061301088828901612c81565b9150509295509295909350565b60006020828403121561302f57600080fd5b81356001600160401b0381111561304557600080fd5b61108984828501612c81565b60006020828403121561306357600080fd5b81516001600160401b0381111561307957600080fd5b8201601f8101841361308a57600080fd5b8051613098612ca08261383b565b8181528560208385010111156130ad57600080fd5b6130be8260208301602086016138c4565b95945050505050565b600080604083850312156130da57600080fd5b82356001600160401b03808211156130f157600080fd5b6130fd86838701612c81565b9350602085013591508082111561311357600080fd5b5061312085828601612c81565b9150509250929050565b6000806040838503121561313d57600080fd5b823591506020808401356001600160401b0381111561315b57600080fd5b8401601f8101861361316c57600080fd5b803561317a612ca082613818565b80828252848201915084840189868560051b870101111561319a57600080fd5b600094505b838510156131bd57803583526001949094019391850191850161319f565b5080955050505050509250929050565b600080604083850312156131e057600080fd5b50508035926020909101359150565b6000806040838503121561320257600080fd5b8235915060208301356001600160401b0381111561321f57600080fd5b61312085828601612c81565b60008060006060848603121561324057600080fd5b8335925060208401356001600160401b038082111561325e57600080fd5b61326a87838801612c81565b9350604086013591508082111561328057600080fd5b5061328d86828701612c81565b9150509250925092565b600080600080608085870312156132ad57600080fd5b8435935060208501356001600160401b03808211156132cb57600080fd5b6132d788838901612c81565b945060408701359150808211156132ed57600080fd5b6132f988838901612c81565b9350606087013591508082111561330f57600080fd5b50612dcd87828801612c81565b60008060006060848603121561333157600080fd5b833592506020840135915061334860408501612c71565b90509250925092565b6000806000806080858703121561336757600080fd5b843593506020850135925060408501359150612e7760608601612c71565b600081518084526020808501945080840160005b838110156133be5781516001600160a01b031687529582019590820190600101613399565b509495945050505050565b600081518084526020808501945080840160005b838110156133be5781511515875295820195908201906001016133dd565b600081518084526020808501945080840160005b838110156133be5781518752958201959082019060010161340f565b600081518084526134438160208601602086016138c4565b601f01601f19169290920160200192915050565b600082516134698184602087016138c4565b9190910192915050565b651e585d13919560d21b81528385600683013760609290921b6bffffffffffffffffffffffff191660069390920192830191909152601a820152603a01919050565b848152600084516134cd8160208501602089016138c4565b808301905084516134e58160208401602089016138c4565b01602081019390935250506040019392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061352d9083018461342b565b9695505050505050565b60a08152600061354a60a08301886133fb565b828103602084015261355c8188613385565b905082810360408401526135708187613385565b905082810360608401526135848186613385565b9050828103608084015261203a8185613385565b6040815260006135ab60408301856133fb565b82810360208401526130be81856133c9565b60e0815260006135d060e083018a6133fb565b82810360208401526135e2818a6133fb565b905082810360408401526135f681896133c9565b9050828103606084015261360a81886133fb565b9050828103608084015261361e81876133c9565b60a0840195909552505060c0015295945050505050565b60006101008083526136498184018c6133fb565b9050828103602084015261365d818b6133fb565b90508281036040840152613671818a613385565b905082810360608401526136858189613385565b905082810360808401526136998188613385565b905082810360a08401526136ad8187613385565b60c0840195909552505060e001529695505050505050565b60e0815260006136d860e083018a6133fb565b82810360208401526136ea818a6133fb565b905082810360408401526136fe8189613385565b905082810360608401526137128188613385565b9050828103608084015261361e8187613385565b6020815260006111ab602083018461342b565b60e08152600061374c60e083018a61342b565b6001600160a01b039889166020840152968816604083015250938616606085015291909416608083015260a082019390935260c00191909152919050565b60408152600061379d604083018561342b565b82810360208401526130be818561342b565b6060815260006137c2606083018661342b565b82810360208401526137d4818661342b565b9050828103604084015261352d818561342b565b604051601f8201601f191681016001600160401b0381118282101715613810576138106139b3565b604052919050565b60006001600160401b03821115613831576138316139b3565b5060051b60200190565b60006001600160401b03821115613854576138546139b3565b50601f01601f191660200190565b6000821982111561387557613875613971565b500190565b60008261388957613889613987565b500490565b60008160001904831182151516156138a8576138a8613971565b500290565b6000828210156138bf576138bf613971565b500390565b60005b838110156138df5781810151838201526020016138c7565b83811115610a755750506000910152565b6000816138ff576138ff613971565b506000190190565b600181811c9082168061391b57607f821691505b6020821081141561393c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561395657613956613971565b5060010190565b60008261396c5761396c613987565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3757600080fd5b6001600160e01b031981168114610e3757600080fdfea26469706673582212200d90ac9b3d5de6e1cbdc2ce82b5db4c7d87137910667056e61abdd56389a6e8364736f6c6343000806003360c0604052600760808190526616585d0813919560ca1b60a09081526100289160009190610067565b50604080518082019091526004808252635961747360e01b602090920191825261005491600191610067565b5034801561006157600080fd5b5061013b565b82805461007390610100565b90600052602060002090601f01602090048101928261009557600085556100db565b82601f106100ae57805160ff19168380011785556100db565b828001600101855582156100db579182015b828111156100db5782518255916020019190600101906100c0565b506100e79291506100eb565b5090565b5b808211156100e757600081556001016100ec565b600181811c9082168061011457607f821691505b6020821081141561013557634e487b7160e01b600052602260045260246000fd5b50919050565b6106148061014a6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806306fdde031461005c57806395d89b411461007a578063c87b56dd14610082578063d547cfb714610095578063e8a3d4851461009d575b600080fd5b6100646100a5565b604051610071919061031a565b60405180910390f35b610064610133565b610064610090366004610301565b610140565b6100646102c1565b6100646102e1565b600080546100b2906104d0565b80601f01602080910402602001604051908101604052809291908181526020018280546100de906104d0565b801561012b5780601f106101005761010080835404028352916020019161012b565b820191906000526020600020905b81548152906001019060200180831161010e57829003601f168201915b505050505081565b600180546100b2906104d0565b6060600061014c6102c1565b90506001835b600981111561017a57610166600a826103ac565b9050816101728161050b565b925050610152565b6000828451610189919061036f565b67ffffffffffffffff8111156101a1576101a161057c565b6040519080825280601f01601f1916602001820160405280156101cb576020820181803683370190505b50905060005b81518110156102b757845181101561022e578481815181106101f5576101f5610566565b602001015160f81c60f81b82828151811061021257610212610566565b60200101906001600160f81b031916908160001a9053506102a5565b6000600a600183855161024191906104b9565b61024b91906104b9565b61025690600a610403565b610260908a6103ac565b61026a9190610526565b9050610277816030610387565b60f81b83838151811061028c5761028c610566565b60200101906001600160f81b031916908160001a905350505b806102af8161050b565b9150506101d1565b5095945050505050565b606060405180606001604052806026815260200161059360269139905090565b60606040518060600160405280602681526020016105b960269139905090565b60006020828403121561031357600080fd5b5035919050565b600060208083528351808285015260005b818110156103475785810183015185820160400152820161032b565b81811115610359576000604083870101525b50601f01601f1916929092016040019392505050565b600082198211156103825761038261053a565b500190565b600060ff821660ff84168060ff038211156103a4576103a461053a565b019392505050565b6000826103bb576103bb610550565b500490565b600181815b808511156103fb5781600019048211156103e1576103e161053a565b808516156103ee57918102915b93841c93908002906103c5565b509250929050565b600061040f8383610416565b9392505050565b600082610425575060016104b3565b81610432575060006104b3565b816001811461044857600281146104525761046e565b60019150506104b3565b60ff8411156104635761046361053a565b50506001821b6104b3565b5060208310610133831016604e8410600b8410161715610491575081810a6104b3565b61049b83836103c0565b80600019048211156104af576104af61053a565b0290505b92915050565b6000828210156104cb576104cb61053a565b500390565b600181811c908216806104e457607f821691505b6020821081141561050557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561051f5761051f61053a565b5060010190565b60008261053557610535610550565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe68747470733a2f2f612e792e61742f6e66745f7472616e73666572732f6d657461646174612f68747470733a2f2f612e792e61742f6e66745f7472616e73666572732f636f6e74726163742fa2646970667358221220b8bd9d3f25025be3fb92d222001d5339ca3c590f92eadc6f80d5b14b2b04999164736f6c6343000806003300000000000000000000000087401fd9eb013d029d71ec057ef41ee70484e3c7

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103835760003560e01c806370a08231116101de578063c43a3f871161010f578063e63dfc97116100ad578063eb1af4d11161007c578063eb1af4d11461089c578063f3cb8385146108bd578063f91fc4c2146108d0578063fefd445f146108e357600080fd5b8063e63dfc97146107e8578063e8a3d48514610841578063e985e9c514610849578063ea78803f1461088957600080fd5b8063d547cfb7116100e9578063d547cfb714610780578063e2dadf4e14610788578063e3acd07d146107ae578063e54b7f3e146107c157600080fd5b8063c43a3f8714610747578063c87b56dd1461075a578063d06497bf1461076d57600080fd5b806397830de01161017c578063b2b3140d11610156578063b2b3140d146106ed578063b5a3844b14610700578063b88d4fde14610721578063bc4a96491461073457600080fd5b806397830de0146106a15780639ac8027c146106c7578063a22cb465146106da57600080fd5b80638a53ddb9116101b85780638a53ddb91461064f5780638c1858e7146106625780638da5cb5b1461068857806395d89b411461069957600080fd5b806370a082311461060057806373704e2c14610629578063776adef81461063c57600080fd5b806327ba7cc3116102b857806357f6b812116102565780636352211e116102305780636352211e146105b45780636c19e783146105c75780636ccbae5f146105da5780636dfedad7146105ed57600080fd5b806357f6b812146105665780635fd846f21461058e57806361ff33a1146105a157600080fd5b806342842e0e1161029257806342842e0e1461051a57806342966c681461052d5780634f6ccce71461054057806355ea6c471461055357600080fd5b806327ba7cc3146104e15780632f745c59146104f45780633812c6a81461050757600080fd5b806318160ddd116103255780632392c189116102ff5780632392c1891461048457806323b872dd14610497578063243c7540146104aa57806324b950fe146104ce57600080fd5b806318160ddd1461044e578063183d127214610460578063238ac9331461047357600080fd5b8063095ea7b311610361578063095ea7b3146104005780630b7bb3cb1461041557806312aaac701461042857806313af40351461043b57600080fd5b806301ffc9a71461038857806306fdde03146103c0578063081812fc146103d5575b600080fd5b6103ab610396366004612f32565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103c86108f6565b6040516103b79190613726565b6103e86103e3366004612f19565b61097c565b6040516001600160a01b0390911681526020016103b7565b61041361040e366004612e0e565b6109aa565b005b610413610423366004613297565b610a2e565b6103c8610436366004612f19565b610a7b565b610413610449366004612cd7565b610b1d565b6000545b6040519081526020016103b7565b61045261046e36600461301d565b610b56565b6008546001600160a01b03166103e8565b610413610492366004612e0e565b610b86565b6104136104a5366004612d2d565b610bbc565b6104bd6104b8366004612e82565b610bc7565b6040516103b7959493929190613537565b6104136104dc366004612f19565b610e26565b6103e86104ef366004612f19565b610e3a565b610452610502366004612e0e565b610e68565b61041361051536600461322b565b610eb9565b610413610528366004612d2d565b610f03565b61041361053b366004612f19565b610f1e565b61045261054e366004612f19565b610fa1565b6103c8610561366004612cd7565b610fb4565b610579610574366004612cd7565b610fdb565b604080519283526020830191909152016103b7565b61045261059c36600461301d565b611009565b6103c86105af3660046131ef565b611052565b6103e86105c2366004612f19565b611091565b6104136105d5366004612cd7565b6110bc565b6104526105e8366004612f19565b6110f5565b6104136105fb3660046131ef565b61111a565b61045261060e366004612cd7565b6001600160a01b031660009081526005602052604090205490565b6103e861063736600461301d565b611138565b6103e861064a366004612f19565b611169565b6103c861065d3660046130c7565b6111b4565b610675610670366004613351565b6111c8565b6040516103b797969594939291906135bd565b6007546001600160a01b03166103e8565b6103c8611490565b6106b46106af366004612f19565b6114d5565b6040516103b79796959493929190613739565b6103c86106d53660046131cd565b611536565b6104136106e8366004612dd9565b6115f9565b6104136106fb366004612f19565b611669565b61071361070e3660046131cd565b6116bd565b6040516103b792919061378a565b61041361072f366004612d6e565b6116de565b610413610742366004612f19565b61179e565b610413610755366004612e0e565b6117a9565b6103c8610768366004612f19565b611803565b61041361077b366004612f19565b611884565b6103c861188f565b61079b610796366004612e3a565b6118d4565b6040516103b797969594939291906136c5565b6104526107bc366004612f19565b611a7a565b6107d46107cf36600461331c565b611a9f565b6040516103b7989796959493929190613635565b6107fb6107f636600461301d565b611c2e565b604080519788526001600160a01b039687166020890152948616948701949094529184166060860152909216608084015260a083019190915260c082015260e0016103b7565b6103c8611c64565b6103ab610857366004612cf4565b6001600160a01b0391821660009081526005602090815260408083209390941682526002909201909152205460ff1690565b6103c8610897366004612f19565b611ca9565b6108af6108aa36600461312a565b611cdb565b6040516103b7929190613598565b6104136108cb366004612cd7565b611ebc565b6104136108de366004612e0e565b611ef5565b6104136108f1366004612f6c565b611f4e565b600654604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109779190810190613051565b905090565b60008054821061098b57600080fd5b506000908152600160205260409020600201546001600160a01b031690565b806109b481611091565b6001600160a01b0316336001600160a01b0316146109d157600080fd5b60008281526001602052604080822060020180546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b6000848152600160205260408120600a018054610a6192879287928792909190610a5783613942565b9190505585611fb1565b610a6a57600080fd5b610a75848484612046565b50505050565b6000818152600360205260409020805460609190610a9890613907565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490613907565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b50505050509050919050565b6007546001600160a01b03163314610b3457600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600081604051602001610b699190613457565b604051602081830303815290604052805190602001209050919050565b80610b9081611091565b6001600160a01b0316336001600160a01b031614610bad57600080fd5b610bb7838361220b565b505050565b610bb7838383612319565b6060806060806060600086519050806001600160401b03811115610bed57610bed6139b3565b604051908082528060200260200182016040528015610c16578160200160208202803683370190505b509550806001600160401b03811115610c3157610c316139b3565b604051908082528060200260200182016040528015610c5a578160200160208202803683370190505b509450806001600160401b03811115610c7557610c756139b3565b604051908082528060200260200182016040528015610c9e578160200160208202803683370190505b509350806001600160401b03811115610cb957610cb96139b3565b604051908082528060200260200182016040528015610ce2578160200160208202803683370190505b509250806001600160401b03811115610cfd57610cfd6139b3565b604051908082528060200260200182016040528015610d26578160200160208202803683370190505b50915060005b81811015610e1b576060610d58898381518110610d4b57610d4b61399d565b60200260200101516114d5565b9050508b8781518110610d6d57610d6d61399d565b602002602001018b8881518110610d8657610d8661399d565b602002602001018b8981518110610d9f57610d9f61399d565b602002602001018b8a81518110610db857610db861399d565b6001600160a01b0395861660209182029290920101529383169093529281169091529190911690529050610deb81612673565b888381518110610dfd57610dfd61399d565b60209081029190910101525080610e1381613942565b915050610d2c565b505091939590929450565b610e376001600160a01b03826117a9565b50565b600080548210610e4957600080fd5b506000908152600160205260409020600301546001600160a01b031690565b6001600160a01b0382166000908152600560205260408120548210610e8c57600080fd5b506001600160a01b0391909116600090815260056020908152604080832093835260019093019052205490565b82610ec381611091565b6001600160a01b0316336001600160a01b03161480610a615750610ee681611169565b6001600160a01b0316336001600160a01b031614610a6a57600080fd5b610bb7838383604051806020016040528060008152506116de565b80610f2881611091565b6001600160a01b0316336001600160a01b031614610f4557600080fd5b610f50333084612319565b3382610f5e61046e82611ca9565b7fe7da089962443ca13b93acded259222f496b43d227e5f74af3a9303d99943201610f8886611ca9565b604051610f959190613726565b60405180910390a45050565b600080548210610fb057600080fd5b5090565b6001600160a01b0381166000908152600460205260409020805460609190610a9890613907565b600080610fe760005490565b6001600160a01b03841660009081526005602052604090205491509150915091565b60008061101583610b56565b60008181526002602052604090205490915061103057600080fd5b60008181526002602052604090205461104b906001906138ad565b9392505050565b60606000826040516020016110679190613457565b6040516020818303038152906040528051906020012090506110898482611536565b949350505050565b6000805482106110a057600080fd5b506000908152600160205260409020546001600160a01b031690565b6007546001600160a01b031633146110d357600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008054821061110457600080fd5b506000908152600160205260409020600a015490565b611134828260405180602001604052806000815250610eb9565b5050565b600060018161114684611009565b81526020810191909152604001600020600401546001600160a01b031692915050565b60008054821061117857600080fd5b600082815260016020819052604090912001546001600160a01b03908116908114156111ae576008546001600160a01b03165b90505b92915050565b60606111ab6111c284611009565b83611052565b606080606080606060008060008a116111e057600080fd5b6111e98b611a7a565b91508115611449576111fb8a8361395d565b1561120757600161120a565b60005b60ff166112178b8461387a565b6112219190613862565b905080891061122f57600080fd5b600061123b8a8c61388e565b90506112486001836138ad565b8a14801561125e575061125b8b8461395d565b15155b156112705761126d8b8461395d565b9a505b8a6001600160401b03811115611288576112886139b3565b6040519080825280602002602001820160405280156112b1578160200160208202803683370190505b5097508a6001600160401b038111156112cc576112cc6139b3565b6040519080825280602002602001820160405280156112f5578160200160208202803683370190505b5096508a6001600160401b03811115611310576113106139b3565b604051908082528060200260200182016040528015611339578160200160208202803683370190505b50955060005b8b8110156114425760008d8152600160205260408120600701908b6113845760018361136b86896138ad565b61137591906138ad565b61137f91906138ad565b61138e565b61138e8385613862565b8152602001908152602001600020548982815181106113af576113af61399d565b60200260200101818152505060006113df8a83815181106113d2576113d261399d565b6020026020010151610a7b565b90506113ea81612673565b8983815181106113fc576113fc61399d565b602002602001018181525050602081511188838151811061141f5761141f61399d565b91151560209283029190910190910152508061143a81613942565b91505061133f565b5050611471565b5060408051600080825260208201818152828401828152606084019094529198509096509094505b61147b8b88611cdb565b979c969b509499509397509495509192915050565b600654604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b15801561093b57600080fd5b60606000806000806000806114e988611ca9565b6114f289611091565b6114fb8a611169565b6115048b610e3a565b61150d8c61097c565b6115168d6110f5565b61151f8e611a7a565b959e949d50929b5090995097509550909350915050565b606061154160005490565b831061154c57600080fd5b60008381526001602090815260408083208584526008019091529020805461157390613907565b80601f016020809104026020016040519081016040528092919081815260200182805461159f90613907565b80156115ec5780601f106115c1576101008083540402835291602001916115ec565b820191906000526020600020905b8154815290600101906020018083116115cf57829003601f168201915b5050505050905092915050565b3360008181526005602090815260408083206001600160a01b0387168085526002909101835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b8061167381611091565b6001600160a01b0316336001600160a01b031614806116ab575061169681611169565b6001600160a01b0316336001600160a01b0316145b6116b457600080fd5b6111348261268f565b6060806116c983610a7b565b6116d38585611536565b915091509250929050565b6116e9848484612319565b823b63ffffffff81161561179757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906117299033908990889088906004016134fa565b602060405180830381600087803b15801561174357600080fd5b505af1158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190612f4f565b6001600160e01b03191663150b7a0260e01b1461179757600080fd5b5050505050565b610e37600082610b86565b806117b381611091565b6001600160a01b0316336001600160a01b0316146117d057600080fd5b5060009081526001602081905260409091200180546001600160a01b0319166001600160a01b0392909216919091179055565b60065460405163c87b56dd60e01b8152600481018390526060916001600160a01b03169063c87b56dd9060240160006040518083038186803b15801561184857600080fd5b505afa15801561185c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ae9190810190613051565b610e376000826117a9565b6006546040805163d547cfb760e01b815290516060926001600160a01b03169163d547cfb7916004808301926000929190829003018186803b15801561093b57600080fd5b606080606080606060008060008a116118ec57600080fd5b6001600160a01b038b1660009081526005602052604090205491508115611a45576119178a8361395d565b15611923576001611926565b60005b60ff166119338b8461387a565b61193d9190613862565b905080891061194b57600080fd5b60006119578a8c61388e565b90506119646001836138ad565b8a14801561197a57506119778b8461395d565b15155b1561198c576119898b8461395d565b9a505b8a6001600160401b038111156119a4576119a46139b3565b6040519080825280602002602001820160405280156119cd578160200160208202803683370190505b50975060005b8b811015611a3e57611a0f8d8b611a05576001836119f186896138ad565b6119fb91906138ad565b61050291906138ad565b6105028385613862565b898281518110611a2157611a2161399d565b602090810291909101015280611a3681613942565b9150506119d3565b5050611a59565b506040805160008082526020820190925296505b611a6287610bc7565b9a9f939e50909c509a50979850919650945092505050565b600080548210611a8957600080fd5b5060009081526001602052604090206006015490565b60608060608060608060008060008b11611ab857600080fd5b60005491508115611bfa57611acd8b8361395d565b15611ad9576001611adc565b60005b60ff16611ae98c8461387a565b611af39190613862565b9050808a10611b0157600080fd5b6000611b0d8b8d61388e565b9050611b1a6001836138ad565b8b148015611b305750611b2d8c8461395d565b15155b15611b4257611b3f8c8461395d565b9b505b8b6001600160401b03811115611b5a57611b5a6139b3565b604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50985060005b8c811015611bf357611bc48b611bba57600182611ba685886138ad565b611bb091906138ad565b61054e91906138ad565b61054e8284613862565b8a8281518110611bd657611bd661399d565b602090810291909101015280611beb81613942565b915050611b89565b5050611c0e565b506040805160008082526020820190925297505b611c1788610bc7565b9b9f939e50919c509a509897509195509350915050565b6000806000806000806000611c4288611009565b9650611c4d876114d5565b9c9e949d50929b919a509850909650945092505050565b6006546040805163e8a3d48560e01b815290516060926001600160a01b03169163e8a3d485916004808301926000929190829003018186803b15801561093b57600080fd5b6060611cb460005490565b8210611cbf57600080fd5b60008281526001602052604090206005018054610a9890613907565b606080611ce760005490565b8410611cf257600080fd5b8251806001600160401b03811115611d0c57611d0c6139b3565b604051908082528060200260200182016040528015611d35578160200160208202803683370190505b509250806001600160401b03811115611d5057611d506139b3565b604051908082528060200260200182016040528015611d79578160200160208202803683370190505b50915060005b81811015611eb357600086815260016020526040812086516008909101908290889085908110611db157611db161399d565b602002602001015181526020019081526020016000208054611dd290613907565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfe90613907565b8015611e4b5780601f10611e2057610100808354040283529160200191611e4b565b820191906000526020600020905b815481529060010190602001808311611e2e57829003601f168201915b50505050509050611e5b81612673565b858381518110611e6d57611e6d61399d565b6020026020010181815250506020815111848381518110611e9057611e9061399d565b911515602092830291909101909101525080611eab81613942565b915050611d7f565b50509250929050565b6007546001600160a01b03163314611ed357600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b80611eff81611091565b6001600160a01b0316336001600160a01b031614611f1c57600080fd5b50600090815260016020526040902060030180546001600160a01b0319166001600160a01b0392909216919091179055565b814210611f5a57600080fd5b611f6785858585856126eb565b611f7057600080fd5b61179785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612759915050565b60008086868686604051602001611fcb94939291906134b5565b6040516020818303038152906040528051906020012090506000611ff7611ff18361296a565b856129a5565b905061200288611091565b6001600160a01b0316816001600160a01b0316148061203a575061202588611169565b6001600160a01b0316816001600160a01b0316145b98975050505050505050565b600082511161205457600080fd5b6000826040516020016120679190613457565b60405160208183030381529060405280519060200120905061208881610a7b565b516120ae57600081815260036020908152604090912084516120ac92860190612b96565b505b600084815260016020526040902082516120d2576120cd858584612a24565b6121ab565b600082815260098201602052604090205461218857600681018054600091826120fa83613942565b90915550905061210b816001613862565b60008481526009840160209081526040808320939093558382526007850190522083905561213885610b56565b3361214561046e89611ca9565b7f180a742bbd74b1be5156ad2b394637be17b0ebab9f54e4d250753399437ba20961216f8a611ca9565b8960405161217e92919061378a565b60405180910390a4505b6000828152600882016020908152604090912084516121a992860190612b96565b505b6121b484610b56565b336121c161046e88611ca9565b7f97bdcba1fbd5143d16d316cc7a4e6ccb2345fa2c5e7ec4705eb788fb6a202eaa6121eb89611ca9565b88886040516121fc939291906137af565b60405180910390a45050505050565b6001600160a01b0382166122795760008181526001602090815260408083206004908101546001600160a01b03168452909152812061224991612c16565b600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b61228282610fb4565b511561228d57600080fd5b6000818152600160205260409020600401546001600160a01b0316156122b257600080fd5b6122bb81611ca9565b6001600160a01b038316600090815260046020908152604090912082516122e89391929190910190612b96565b50600081815260016020526040902060040180546001600160a01b0384166001600160a01b03199091161790555050565b600061232482611091565b905060006123318361097c565b9050816001600160a01b0316856001600160a01b03161461235157600080fd5b336001600160a01b03831614806123705750336001600160a01b038216145b806123a157506001600160a01b038216600090815260056020908152604080832033845260020190915290205460ff165b6123aa57600080fd5b600083815260016020819052604090912080546001600160a01b038088166001600160a01b03199283168117845593830180548316821790556003909201805490911690921790915581161561244f5760008381526001602052604080822060020180546001600160a01b0319169055518491906001600160a01b038716907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45b61245a60008461220b565b6124638361268f565b6001600160a01b0385166000908152600560209081526040808320868452600301909152812054612496906001906138ad565b6001600160a01b03871660009081526005602052604081208054929350909160019182019183916124c791906138ad565b815260208082019290925260409081016000908120546001600160a01b038b168252600584528282208683526001908101909452919020819055915061250e908390613862565b6001600160a01b0388166000818152600560208181526040808420878552600381018352908420959095559282529091528154919061254c836138f0565b90915550506001600160a01b0380881660009081526005602081815260408084208a85526003018252808420849055938a168352529081208054908261259183613942565b9091555090506125a2816001613862565b6001600160a01b0380891660008181526005602090815260408083208c845260038101835281842096909655868352600190950190528381208a90559251899391928c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a461261661046e87611ca9565b876001600160a01b0316896001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db6126548a611ca9565b6040516126619190613726565b60405180910390a45050505050505050565b600081516000141561268757506000919050565b506020015190565b60008181526001602052604090205b600681015415611134576000816007016000600184600601546126c191906138ad565b81526020019081526020016000205490506126e5836126df83610a7b565b83612a24565b5061269e565b600080868686866040516020016127059493929190613473565b60405160208183030381529060405280519060200120905061272f6008546001600160a01b031690565b6001600160a01b0316612744611ff18361296a565b6001600160a01b031614979650505050505050565b60008061276584610b56565b6000818152600260205260409020549091506128ea5760008054908061278a83613942565b90915550915061279b826001613862565b60008281526002602090815260408083209390935584825260018082529290912080546001600160a01b038088166001600160a01b0319928316178355938201805490911690931790925585516127fa91600584019190880190612b96565b506001600160a01b03841660009081526005602052604081208054908261282083613942565b909155509050612831816001613862565b6001600160a01b0386166000818152600560209081526040808320898452600381018352818420959095558583526001909401905282812087905591518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a482856001600160a01b031660006001600160a01b03167faea4c1a300ad7e1fa4653406ce85b5ad8abbc04c517ec8c866f22a3099d154db896040516128db9190613726565b60405180910390a45050612921565b6128f384611009565b600081815260016020526040902060020180546001600160a01b031916331790559150612921308484612319565b826001600160a01b031682827fbf3a4785433526d5666b7a9d19e1e2eaf5c084063ba37298cea8655cf88c0a8f8760405161295c9190613726565b60405180910390a450505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01610b69565b6000806000806129b485612b65565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015612a0f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008381526001602090815260408083208484526009810190925290912054612a4c57600080fd5b6000828152600982016020526040812054612a69906001906138ad565b9050600082600701600060018560060154612a8491906138ad565b8152602080820192909252604090810160009081205485825260078701909352208190559050612ab5826001613862565b600082815260098501602052604081209190915560068401805491612ad9836138f0565b909155505060008481526009840160209081526040808320839055600886019091528120612b0691612c16565b612b0f85610b56565b33612b1c61046e89611ca9565b7f86cb57904f14d8d9f75d3c31427ff5d8cbcf7f93b985e871c553c6618704744c612b468a611ca9565b89604051612b5592919061378a565b60405180910390a4505050505050565b60008060008351604114612b7857600080fd5b50505060208101516040820151606090920151909260009190911a90565b828054612ba290613907565b90600052602060002090601f016020900481019282612bc45760008555612c0a565b82601f10612bdd57805160ff1916838001178555612c0a565b82800160010185558215612c0a579182015b82811115612c0a578251825591602001919060010190612bef565b50610fb0929150612c4c565b508054612c2290613907565b6000825580601f10612c32575050565b601f016020900490600052602060002090810190610e3791905b5b80821115610fb05760008155600101612c4d565b8035612c6c816139c9565b919050565b80358015158114612c6c57600080fd5b600082601f830112612c9257600080fd5b8135612ca5612ca08261383b565b6137e8565b818152846020838601011115612cba57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ce957600080fd5b813561104b816139c9565b60008060408385031215612d0757600080fd5b8235612d12816139c9565b91506020830135612d22816139c9565b809150509250929050565b600080600060608486031215612d4257600080fd5b8335612d4d816139c9565b92506020840135612d5d816139c9565b929592945050506040919091013590565b60008060008060808587031215612d8457600080fd5b8435612d8f816139c9565b93506020850135612d9f816139c9565b92506040850135915060608501356001600160401b03811115612dc157600080fd5b612dcd87828801612c81565b91505092959194509250565b60008060408385031215612dec57600080fd5b8235612df7816139c9565b9150612e0560208401612c71565b90509250929050565b60008060408385031215612e2157600080fd5b8235612e2c816139c9565b946020939093013593505050565b60008060008060808587031215612e5057600080fd5b8435612e5b816139c9565b93506020850135925060408501359150612e7760608601612c71565b905092959194509250565b60006020808385031215612e9557600080fd5b82356001600160401b03811115612eab57600080fd5b8301601f81018513612ebc57600080fd5b8035612eca612ca082613818565b80828252848201915084840188868560051b8701011115612eea57600080fd5b600094505b83851015612f0d578035835260019490940193918501918501612eef565b50979650505050505050565b600060208284031215612f2b57600080fd5b5035919050565b600060208284031215612f4457600080fd5b813561104b816139de565b600060208284031215612f6157600080fd5b815161104b816139de565b600080600080600060808688031215612f8457600080fd5b85356001600160401b0380821115612f9b57600080fd5b818801915088601f830112612faf57600080fd5b813581811115612fbe57600080fd5b896020828501011115612fd057600080fd5b60208301975080965050612fe660208901612c61565b945060408801359350606088013591508082111561300357600080fd5b5061301088828901612c81565b9150509295509295909350565b60006020828403121561302f57600080fd5b81356001600160401b0381111561304557600080fd5b61108984828501612c81565b60006020828403121561306357600080fd5b81516001600160401b0381111561307957600080fd5b8201601f8101841361308a57600080fd5b8051613098612ca08261383b565b8181528560208385010111156130ad57600080fd5b6130be8260208301602086016138c4565b95945050505050565b600080604083850312156130da57600080fd5b82356001600160401b03808211156130f157600080fd5b6130fd86838701612c81565b9350602085013591508082111561311357600080fd5b5061312085828601612c81565b9150509250929050565b6000806040838503121561313d57600080fd5b823591506020808401356001600160401b0381111561315b57600080fd5b8401601f8101861361316c57600080fd5b803561317a612ca082613818565b80828252848201915084840189868560051b870101111561319a57600080fd5b600094505b838510156131bd57803583526001949094019391850191850161319f565b5080955050505050509250929050565b600080604083850312156131e057600080fd5b50508035926020909101359150565b6000806040838503121561320257600080fd5b8235915060208301356001600160401b0381111561321f57600080fd5b61312085828601612c81565b60008060006060848603121561324057600080fd5b8335925060208401356001600160401b038082111561325e57600080fd5b61326a87838801612c81565b9350604086013591508082111561328057600080fd5b5061328d86828701612c81565b9150509250925092565b600080600080608085870312156132ad57600080fd5b8435935060208501356001600160401b03808211156132cb57600080fd5b6132d788838901612c81565b945060408701359150808211156132ed57600080fd5b6132f988838901612c81565b9350606087013591508082111561330f57600080fd5b50612dcd87828801612c81565b60008060006060848603121561333157600080fd5b833592506020840135915061334860408501612c71565b90509250925092565b6000806000806080858703121561336757600080fd5b843593506020850135925060408501359150612e7760608601612c71565b600081518084526020808501945080840160005b838110156133be5781516001600160a01b031687529582019590820190600101613399565b509495945050505050565b600081518084526020808501945080840160005b838110156133be5781511515875295820195908201906001016133dd565b600081518084526020808501945080840160005b838110156133be5781518752958201959082019060010161340f565b600081518084526134438160208601602086016138c4565b601f01601f19169290920160200192915050565b600082516134698184602087016138c4565b9190910192915050565b651e585d13919560d21b81528385600683013760609290921b6bffffffffffffffffffffffff191660069390920192830191909152601a820152603a01919050565b848152600084516134cd8160208501602089016138c4565b808301905084516134e58160208401602089016138c4565b01602081019390935250506040019392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061352d9083018461342b565b9695505050505050565b60a08152600061354a60a08301886133fb565b828103602084015261355c8188613385565b905082810360408401526135708187613385565b905082810360608401526135848186613385565b9050828103608084015261203a8185613385565b6040815260006135ab60408301856133fb565b82810360208401526130be81856133c9565b60e0815260006135d060e083018a6133fb565b82810360208401526135e2818a6133fb565b905082810360408401526135f681896133c9565b9050828103606084015261360a81886133fb565b9050828103608084015261361e81876133c9565b60a0840195909552505060c0015295945050505050565b60006101008083526136498184018c6133fb565b9050828103602084015261365d818b6133fb565b90508281036040840152613671818a613385565b905082810360608401526136858189613385565b905082810360808401526136998188613385565b905082810360a08401526136ad8187613385565b60c0840195909552505060e001529695505050505050565b60e0815260006136d860e083018a6133fb565b82810360208401526136ea818a6133fb565b905082810360408401526136fe8189613385565b905082810360608401526137128188613385565b9050828103608084015261361e8187613385565b6020815260006111ab602083018461342b565b60e08152600061374c60e083018a61342b565b6001600160a01b039889166020840152968816604083015250938616606085015291909416608083015260a082019390935260c00191909152919050565b60408152600061379d604083018561342b565b82810360208401526130be818561342b565b6060815260006137c2606083018661342b565b82810360208401526137d4818661342b565b9050828103604084015261352d818561342b565b604051601f8201601f191681016001600160401b0381118282101715613810576138106139b3565b604052919050565b60006001600160401b03821115613831576138316139b3565b5060051b60200190565b60006001600160401b03821115613854576138546139b3565b50601f01601f191660200190565b6000821982111561387557613875613971565b500190565b60008261388957613889613987565b500490565b60008160001904831182151516156138a8576138a8613971565b500290565b6000828210156138bf576138bf613971565b500390565b60005b838110156138df5781810151838201526020016138c7565b83811115610a755750506000910152565b6000816138ff576138ff613971565b506000190190565b600181811c9082168061391b57607f821691505b6020821081141561393c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561395657613956613971565b5060010190565b60008261396c5761396c613987565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3757600080fd5b6001600160e01b031981168114610e3757600080fdfea26469706673582212200d90ac9b3d5de6e1cbdc2ce82b5db4c7d87137910667056e61abdd56389a6e8364736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000087401fd9eb013d029d71ec057ef41ee70484e3c7

-----Decoded View---------------
Arg [0] : _signer (address): 0x87401FD9eb013D029D71Ec057eF41EE70484e3C7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000087401fd9eb013d029d71ec057ef41ee70484e3c7


Deployed Bytecode Sourcemap

1096:20584:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1960:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21767:14:1;;21760:22;21742:41;;21730:2;21715:18;1960:48:0;;;;;;;;6913:91;;;:::i;:::-;;;;;;;:::i;9399:152::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;15625:32:1;;;15607:51;;15595:2;15580:18;9399:152:0;15562:102:1;5926:190:0;;;;;;:::i;:::-;;:::i;:::-;;5235:261;;;;;;:::i;:::-;;:::i;10020:106::-;;;;;;:::i;:::-;;:::i;3657:83::-;;;;;;:::i;:::-;;:::i;7619:86::-;7663:7;7684:16;7619:86;;;21940:25:1;;;21928:2;21913:18;7619:86:0;21895:76:1;8070:120:0;;;;;;:::i;:::-;;:::i;7538:76::-;7598:11;;-1:-1:-1;;;;;7598:11:0;7538:76;;4995:141;;;;;;:::i;:::-;;:::i;6319:118::-;;;;;;:::i;:::-;;:::i;13198:640::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4641:100::-;;;;;;:::i;:::-;;:::i;8941:149::-;;;;;;:::i;:::-;;:::i;9836:179::-;;;;;;:::i;:::-;;:::i;5501:172::-;;;;;;:::i;:::-;;:::i;6442:133::-;;;;;;:::i;:::-;;:::i;4284:205::-;;;;;;:::i;:::-;;:::i;9704:127::-;;;;;;:::i;:::-;;:::i;7823:110::-;;;;;;:::i;:::-;;:::i;15738:148::-;;;;;;:::i;:::-;;:::i;:::-;;;;25308:25:1;;;25364:2;25349:18;;25342:34;;;;25281:18;15738:148:0;25263:119:1;8195:173:0;;;;;;:::i;:::-;;:::i;10279:190::-;;;;;;:::i;:::-;;:::i;8529:145::-;;;;;;:::i;:::-;;:::i;3745:87::-;;;;;;:::i;:::-;;:::i;9095:145::-;;;;;;:::i;:::-;;:::i;5678:111::-;;;;;;:::i;:::-;;:::i;7710:108::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7787:18:0;7766:7;7787:18;;;:10;:18;;;;;:26;;7710:108;7938:127;;;;;;:::i;:::-;;:::i;8679:257::-;;;;;;:::i;:::-;;:::i;10131:143::-;;;;;;:::i;:::-;;:::i;11316:1215::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;7459:74::-;7518:10;;-1:-1:-1;;;;;7518:10:0;7459:74;;7009:95;;;:::i;12847:346::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;10474:176::-;;;;;;:::i;:::-;;:::i;6121:193::-;;;;;;:::i;:::-;;:::i;5794:126::-;;;;;;:::i;:::-;;:::i;10655:167::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6580:326::-;;;;;;:::i;:::-;;:::i;5141:89::-;;;;;;:::i;:::-;;:::i;4495:141::-;;;;;;:::i;:::-;;:::i;7331:123::-;;;;;;:::i;:::-;;:::i;4746:96::-;;;;;;:::i;:::-;;:::i;7219:107::-;;;:::i;14786:947::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;9245:149::-;;;;;;:::i;:::-;;:::i;13843:938::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;12536:306::-;;;;;;:::i;:::-;;:::i;:::-;;;;24763:25:1;;;-1:-1:-1;;;;;24862:15:1;;;24857:2;24842:18;;24835:43;24914:15;;;24894:18;;;24887:43;;;;24966:15;;;24961:2;24946:18;;24939:43;25019:15;;;25013:3;24998:19;;24991:44;24815:3;25051:19;;25044:35;;;;25110:3;25095:19;;25088:35;24750:3;24735:19;12536:306:0;24717:412:1;7109:105:0;;;:::i;9556:143::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9656:18:0;;;9638:4;9656:18;;;:10;:18;;;;;;;;:38;;;;;;:27;;;;:38;;;;;;;;9556:143;8373:151;;;;;;:::i;:::-;;:::i;10827:484::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3837:96::-;;;;;;:::i;:::-;;:::i;4848:141::-;;;;;;:::i;:::-;;:::i;3940:243::-;;;;;;:::i;:::-;;:::i;6913:91::-;6979:13;;:20;;;-1:-1:-1;;;6979:20:0;;;;6952:13;;-1:-1:-1;;;;;6979:13:0;;:18;;:20;;;;;:4;;:20;;;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6979:20:0;;;;;;;;;;;;:::i;:::-;6972:27;;6913:91;:::o;9399:152::-;9459:7;7684:16;;9481:8;:24;9473:33;;;;;;-1:-1:-1;9518:4:0;:19;;;:9;:19;;;;;:28;;;-1:-1:-1;;;;;9518:28:0;;9399:152::o;5926:190::-;6005:8;3129:17;3137:8;3129:7;:17::i;:::-;-1:-1:-1;;;;;3115:31:0;:10;-1:-1:-1;;;;;3115:31:0;;3107:40;;;;;;6020:4:::1;:19:::0;;;:9:::1;:19;::::0;;;;;:28:::1;;:40:::0;;-1:-1:-1;;;;;;6020:40:0::1;-1:-1:-1::0;;;;;6020:40:0;::::1;::::0;;::::1;::::0;;;6070:41;;6020:19;;6079:10:::1;::::0;6070:41:::1;::::0;6020:4;6070:41:::1;5926:190:::0;;;:::o;5235:261::-;5408:4;:19;;;:9;:19;;;;;:25;;:27;;5364:84;;5384:8;;5394:4;;5400:6;;5408:27;;:25;:27;;;:::i;:::-;;;;;5437:10;5364:19;:84::i;:::-;5356:93;;;;;;5454:37;5468:8;5478:4;5484:6;5454:13;:37::i;:::-;5235:261;;;;:::o;10020:106::-;10099:4;:22;;;:15;:22;;;;;10092:29;;10072:13;;10099:22;10092:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10020:106;;;:::o;3657:83::-;7518:10;;-1:-1:-1;;;;;7518:10:0;3021;:21;3013:30;;;;;;3716:10:::1;:19:::0;;-1:-1:-1;;;;;;3716:19:0::1;-1:-1:-1::0;;;;;3716:19:0;;;::::1;::::0;;;::::1;::::0;;3657:83::o;8070:120::-;8129:7;8177:6;8160:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;8150:35;;;;;;8143:42;;8070:120;;;:::o;4995:141::-;5076:8;3129:17;3137:8;3129:7;:17::i;:::-;-1:-1:-1;;;;;3115:31:0;:10;-1:-1:-1;;;;;3115:31:0;;3107:40;;;;;;5091::::1;5109:11;5122:8;5091:17;:40::i;:::-;4995:141:::0;;;:::o;6319:118::-;6401:31;6411:5;6418:3;6423:8;6401:9;:31::i;13198:640::-;13264:23;13289;13314:26;13342:25;13369:26;13402:15;13420:9;:16;13402:34;;13464:7;-1:-1:-1;;;;;13450:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13450:22:0;;13441:31;;13500:7;-1:-1:-1;;;;;13486:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13486:22:0;;13477:31;;13539:7;-1:-1:-1;;;;;13525:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13525:22:0;;13513:34;;13577:7;-1:-1:-1;;;;;13563:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13563:22:0;;13552:33;;13616:7;-1:-1:-1;;;;;13602:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13602:22:0;;13590:34;;13634:9;13629:205;13653:7;13649:1;:11;13629:205;;;13673:20;13766;13773:9;13783:1;13773:12;;;;;;;;:::i;:::-;;;;;;;13766:6;:20::i;:::-;13699:87;;;13708:6;13715:1;13708:9;;;;;;;;:::i;:::-;;;;;;13719;13729:1;13719:12;;;;;;;;:::i;:::-;;;;;;13733:8;13742:1;13733:11;;;;;;;;:::i;:::-;;;;;;13746:9;13756:1;13746:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13699:87:0;;;13746:12;;;;;;;;;13699:87;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13804:24:0;13699:87;13804:16;:24::i;:::-;13792:6;13799:1;13792:9;;;;;;;;:::i;:::-;;;;;;;;;;:36;-1:-1:-1;13662:3:0;;;;:::i;:::-;;;;13629:205;;;;13397:441;13198:640;;;;;;;:::o;4641:100::-;4696:40;-1:-1:-1;;;;;4727:8:0;4696:11;:40::i;:::-;4641:100;:::o;8941:149::-;8998:7;7684:16;;9020:8;:24;9012:33;;;;;;-1:-1:-1;9057:4:0;:19;;;:9;:19;;;;;:28;;;-1:-1:-1;;;;;9057:28:0;;8941:149::o;9836:179::-;-1:-1:-1;;;;;7787:18:0;;9918:7;7787:18;;;:10;:18;;;;;:26;9940:6;:26;9932:35;;;;;;-1:-1:-1;;;;;;9979:18:0;;;;:4;:18;;;:10;:18;;;;;;;;:31;;;:23;;;;:31;;;;;9836:179::o;5501:172::-;5616:8;3243:17;3251:8;3243:7;:17::i;:::-;-1:-1:-1;;;;;3229:31:0;:10;-1:-1:-1;;;;;3229:31:0;;:69;;;;3278:20;3289:8;3278:10;:20::i;:::-;-1:-1:-1;;;;;3264:34:0;:10;-1:-1:-1;;;;;3264:34:0;;3221:78;;;;;6442:133;6528:42;6545:5;6552:3;6557:8;6528:42;;;;;;;;;;;;:16;:42::i;4284:205::-;4341:8;3129:17;3137:8;3129:7;:17::i;:::-;-1:-1:-1;;;;;3115:31:0;:10;-1:-1:-1;;;;;3115:31:0;;3107:40;;;;;;4356:46:::1;4366:10;4386:4;4393:8;4356:9;:46::i;:::-;4454:10;4444:8:::0;4417:25:::1;4424:17;4444:8:::0;4424:7:::1;:17::i;4417:25::-;4412:72;4466:17;4474:8;4466:7;:17::i;:::-;4412:72;;;;;;:::i;:::-;;;;;;;;4284:205:::0;;:::o;9704:127::-;9763:7;7684:16;;9785:6;:22;9777:31;;;;;;-1:-1:-1;9820:6:0;9704:127::o;7823:110::-;-1:-1:-1;;;;;7906:22:0;;:4;:22;;;:12;:22;;;;;7899:29;;7879:13;;7906:22;7899:29;;;:::i;15738:148::-;15797:14;15813:20;15848:13;7663:7;7684:16;;7619:86;15848:13;-1:-1:-1;;;;;7787:18:0;;7766:7;7787:18;;;:10;:18;;;;;:26;15840:41;;;;15738:148;;;:::o;8195:173::-;8252:7;8266:13;8282:14;8289:6;8282;:14::i;:::-;8309:4;:16;;;:9;:16;;;;;;8266:30;;-1:-1:-1;8301:30:0;;;;;;8343:4;:16;;;:9;:16;;;;;;:20;;8362:1;;8343:20;:::i;:::-;8336:27;8195:173;-1:-1:-1;;;8195:173:0:o;10279:190::-;10357:13;10377;10420:4;10403:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;10393:33;;;;;;10377:49;;10438:26;10448:8;10458:5;10438:9;:26::i;:::-;10431:33;10279:190;-1:-1:-1;;;;10279:190:0:o;8529:145::-;8585:7;7684:16;;8607:8;:24;8599:33;;;;;;-1:-1:-1;8644:4:0;:19;;;:9;:19;;;;;:25;-1:-1:-1;;;;;8644:25:0;;8529:145::o;3745:87::-;7518:10;;-1:-1:-1;;;;;7518:10:0;3021;:21;3013:30;;;;;;3806:11:::1;:21:::0;;-1:-1:-1;;;;;;3806:21:0::1;-1:-1:-1::0;;;;;3806:21:0;;;::::1;::::0;;;::::1;::::0;;3745:87::o;9095:145::-;9151:7;7684:16;;9173:8;:24;9165:33;;;;;;-1:-1:-1;9210:4:0;:19;;;:9;:19;;;;;:25;;;;9095:145::o;5678:111::-;5752:32;5765:8;5775:4;5752:32;;;;;;;;;;;;:12;:32::i;:::-;5678:111;;:::o;7938:127::-;8005:7;8026:9;8005:7;8036:12;8041:6;8036:4;:12::i;:::-;8026:23;;;;;;;;;;;-1:-1:-1;8026:23:0;:34;;;-1:-1:-1;;;;;8026:34:0;;7938:127;-1:-1:-1;;7938:127:0:o;8679:257::-;8738:7;7684:16;;8760:8;:24;8752:33;;;;;;8790:17;8810:19;;;:9;:19;;;;;;;;:28;;-1:-1:-1;;;;;8810:28:0;;;;8847:30;;8843:68;;;7598:11;;-1:-1:-1;;;;;7598:11:0;8897:8;8885:20;;8843:68;8922:9;8679:257;-1:-1:-1;;8679:257:0:o;10131:143::-;10213:13;10240:29;10250:12;10255:6;10250:4;:12::i;:::-;10264:4;10240:9;:29::i;11316:1215::-;11424:23;11449:21;11472:25;11499:23;11524:27;11553:20;11575:18;11617:1;11608:6;:10;11600:19;;;;;;11639;11649:8;11639:9;:19::i;:::-;11624:34;-1:-1:-1;11669:16:0;;11665:803;;11733:21;11748:6;11733:12;:21;:::i;:::-;:26;:34;;11766:1;11733:34;;;11762:1;11733:34;11706:62;;11707:21;11722:6;11707:12;:21;:::i;:::-;11706:62;;;;:::i;:::-;11693:75;;11790:10;11782:5;:18;11774:27;;;;;;11809:15;11827:14;11836:5;11827:6;:14;:::i;:::-;11809:32;-1:-1:-1;11860:14:0;11873:1;11860:10;:14;:::i;:::-;11851:5;:23;:53;;;;-1:-1:-1;11878:21:0;11893:6;11878:12;:21;:::i;:::-;:26;;11851:53;11847:103;;;11922:21;11937:6;11922:12;:21;:::i;:::-;11913:30;;11847:103;11980:6;-1:-1:-1;;;;;11966:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11966:21:0;;11957:30;;12014:6;-1:-1:-1;;;;;12000:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12000:21:0;;11993:28;;12052:6;-1:-1:-1;;;;;12041:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12041:18:0;;12027:32;;12070:9;12065:273;12089:6;12085:1;:10;12065:273;;;12121:4;:19;;;:9;:19;;;;;:24;;;12146:6;:53;;12198:1;12194;12169:22;12184:7;12169:12;:22;:::i;:::-;:26;;;;:::i;:::-;:30;;;;:::i;:::-;12146:53;;;12155:11;12165:1;12155:7;:11;:::i;:::-;12121:79;;;;;;;;;;;;12109:6;12116:1;12109:9;;;;;;;;:::i;:::-;;;;;;:91;;;;;12207:18;12228:17;12235:6;12242:1;12235:9;;;;;;;;:::i;:::-;;;;;;;12228:6;:17::i;:::-;12207:38;;12262:22;12279:4;12262:16;:22::i;:::-;12252:4;12257:1;12252:7;;;;;;;;:::i;:::-;;;;;;:32;;;;;12329:2;12314:4;12308:18;:23;12291:11;12303:1;12291:14;;;;;;;;:::i;:::-;:40;;;:14;;;;;;;;;;;:40;-1:-1:-1;12097:3:0;;;;:::i;:::-;;;;12065:273;;;;11687:656;11665:803;;;-1:-1:-1;12384:16:0;;;12368:1;12384:16;;;;;;12413;;;;;;12449:13;;;;;;;;;12384:16;;-1:-1:-1;12384:16:0;;-1:-1:-1;12413:16:0;;-1:-1:-1;11665:803:0;12498:28;12509:8;12519:6;12498:10;:28::i;:::-;11316:1215;;;;-1:-1:-1;11316:1215:0;;-1:-1:-1;12472:54:0;;-1:-1:-1;12472:54:0;;-1:-1:-1;11316:1215:0;;;-1:-1:-1;;11316:1215:0:o;7009:95::-;7077:13;;:22;;;-1:-1:-1;;;7077:22:0;;;;7050:13;;-1:-1:-1;;;;;7077:13:0;;:20;;:22;;;;;:4;;:22;;;;;;;:13;:22;;;;;;;;;;12847:346;12902:19;12923:18;12943:21;12966:15;12983:16;13001:13;13016:15;13046:17;13054:8;13046:7;:17::i;:::-;13065;13073:8;13065:7;:17::i;:::-;13084:20;13095:8;13084:10;:20::i;:::-;13106:18;13115:8;13106;:18::i;:::-;13126:21;13138:8;13126:11;:21::i;:::-;13149:17;13157:8;13149:7;:17::i;:::-;13168:19;13178:8;13168:9;:19::i;:::-;13038:150;;;;-1:-1:-1;13038:150:0;;-1:-1:-1;13038:150:0;;-1:-1:-1;13038:150:0;-1:-1:-1;13038:150:0;-1:-1:-1;13038:150:0;;-1:-1:-1;12847:346:0;-1:-1:-1;;12847:346:0:o;10474:176::-;10547:13;10586;7663:7;7684:16;;7619:86;10586:13;10575:8;:24;10567:33;;;;;;10612:4;:19;;;:9;:19;;;;;;;;:33;;;:26;;:33;;;;;10605:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10474:176;;;;:::o;6121:193::-;6208:10;6197:4;:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;6197:42:0;;;;;:31;;;;:42;;;;;;:54;;-1:-1:-1;;6197:54:0;;;;;;;;;;6261:48;;21742:41:1;;;6197:42:0;;6208:10;6261:48;;21715:18:1;6261:48:0;;;;;;;6121:193;;:::o;5794:126::-;5873:8;3243:17;3251:8;3243:7;:17::i;:::-;-1:-1:-1;;;;;3229:31:0;:10;-1:-1:-1;;;;;3229:31:0;;:69;;;;3278:20;3289:8;3278:10;:20::i;:::-;-1:-1:-1;;;;;3264:34:0;:10;-1:-1:-1;;;;;3264:34:0;;3229:69;3221:78;;;;;;5888:27:::1;5906:8;5888:17;:27::i;10655:167::-:0;10732:13;10747;10775;10782:5;10775:6;:13::i;:::-;10790:26;10800:8;10810:5;10790:9;:26::i;:::-;10767:50;;;;10655:167;;;;;:::o;6580:326::-;6684:31;6694:5;6701:3;6706:8;6684:9;:31::i;:::-;6761:16;;6790:9;;;;6786:116;;6815:66;;-1:-1:-1;;;6815:66:0;;-1:-1:-1;;;;;6815:30:0;;;;;:66;;6846:10;;6858:5;;6865:8;;6875:5;;6815:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6815:80:0;;6885:10;6815:80;;;6807:89;;;;;;6679:227;6580:326;;;;:::o;5141:89::-;5192:33;5210:3;5216:8;5192:9;:33::i;4495:141::-;4576:8;3129:17;3137:8;3129:7;:17::i;:::-;-1:-1:-1;;;;;3115:31:0;:10;-1:-1:-1;;;;;3115:31:0;;3107:40;;;;;;-1:-1:-1;4591:4:0::1;:19:::0;;;:9:::1;:19;::::0;;;;;;;:28:::1;:40:::0;;-1:-1:-1;;;;;;4591:40:0::1;-1:-1:-1::0;;;;;4591:40:0;;;::::1;::::0;;;::::1;::::0;;4495:141::o;7331:123::-;7417:13;;:32;;-1:-1:-1;;;7417:32:0;;;;;21940:25:1;;;7390:13:0;;-1:-1:-1;;;;;7417:13:0;;:22;;21913:18:1;;7417:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7417:32:0;;;;;;;;;;;;:::i;4746:96::-;4802:35;4822:3;4828:8;4802:11;:35::i;7219:107::-;7293:13;;:28;;;-1:-1:-1;;;7293:28:0;;;;7266:13;;-1:-1:-1;;;;;7293:13:0;;:26;;:28;;;;;:4;;:28;;;;;;;:13;:28;;;;;;;;;;14786:947;14894:25;14921:23;14946:26;14974:25;15001:26;15029:17;15048:18;15090:1;15081:6;:10;15073:19;;;;;;-1:-1:-1;;;;;7787:18:0;;7766:7;7787:18;;;:10;:18;;;;;:26;15097:29;-1:-1:-1;15137:13:0;;15133:529;;15195:18;15207:6;15195:9;:18;:::i;:::-;:23;:31;;15225:1;15195:31;;;15221:1;15195:31;15171:56;;15172:18;15184:6;15172:9;:18;:::i;:::-;15171:56;;;;:::i;:::-;15158:69;;15249:10;15241:5;:18;15233:27;;;;;;15268:15;15286:14;15295:5;15286:6;:14;:::i;:::-;15268:32;-1:-1:-1;15319:14:0;15332:1;15319:10;:14;:::i;:::-;15310:5;:23;:50;;;;-1:-1:-1;15337:18:0;15349:6;15337:9;:18;:::i;:::-;:23;;15310:50;15306:97;;;15378:18;15390:6;15378:9;:18;:::i;:::-;15369:27;;15306:97;15435:6;-1:-1:-1;;;;;15421:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15421:21:0;;15410:32;;15453:9;15448:144;15472:6;15468:1;:10;15448:144;;;15506:79;15526:6;15534;:50;;15583:1;15579;15557:19;15569:7;15557:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;15534:50::-;15543:11;15553:1;15543:7;:11;:::i;15506:79::-;15492:8;15501:1;15492:11;;;;;;;;:::i;:::-;;;;;;;;;;:93;15480:3;;;;:::i;:::-;;;;15448:144;;;;15152:445;15133:529;;;-1:-1:-1;15640:16:0;;;15622:1;15640:16;;;;;;;;;15629:27;;15133:529;15711:17;15719:8;15711:7;:17::i;:::-;14786:947;;15666:62;;-1:-1:-1;15666:62:0;;-1:-1:-1;15666:62:0;-1:-1:-1;15666:62:0;;-1:-1:-1;14786:947:0;;-1:-1:-1;14786:947:0;-1:-1:-1;14786:947:0;-1:-1:-1;;;14786:947:0:o;9245:149::-;9303:7;7684:16;;9325:8;:24;9317:33;;;;;;-1:-1:-1;9362:4:0;:19;;;:9;:19;;;;;:27;;;;9245:149::o;13843:938::-;13930:25;13957:23;13982;14007:26;14035:25;14062:26;14090:17;14109:18;14151:1;14142:6;:10;14134:19;;;;;;7663:7;7684:16;14158:25;-1:-1:-1;14194:13:0;;14190:514;;14252:18;14264:6;14252:9;:18;:::i;:::-;:23;:31;;14282:1;14252:31;;;14278:1;14252:31;14228:56;;14229:18;14241:6;14229:9;:18;:::i;:::-;14228:56;;;;:::i;:::-;14215:69;;14306:10;14298:5;:18;14290:27;;;;;;14325:15;14343:14;14352:5;14343:6;:14;:::i;:::-;14325:32;-1:-1:-1;14376:14:0;14389:1;14376:10;:14;:::i;:::-;14367:5;:23;:50;;;;-1:-1:-1;14394:18:0;14406:6;14394:9;:18;:::i;:::-;:23;;14367:50;14363:97;;;14435:18;14447:6;14435:9;:18;:::i;:::-;14426:27;;14363:97;14492:6;-1:-1:-1;;;;;14478:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14478:21:0;;14467:32;;14510:9;14505:129;14529:6;14525:1;:10;14505:129;;;14563:64;14576:6;:50;;14625:1;14621;14599:19;14611:7;14599:9;:19;:::i;:::-;:23;;;;:::i;:::-;:27;;;;:::i;14576:50::-;14585:11;14595:1;14585:7;:11;:::i;14563:64::-;14549:8;14558:1;14549:11;;;;;;;;:::i;:::-;;;;;;;;;;:78;14537:3;;;;:::i;:::-;;;;14505:129;;;;14209:430;14190:514;;;-1:-1:-1;14682:16:0;;;14664:1;14682:16;;;;;;;;;14671:27;;14190:514;14759:17;14767:8;14759:7;:17::i;:::-;13843:938;;14708:68;;-1:-1:-1;14708:68:0;;-1:-1:-1;14708:68:0;-1:-1:-1;14708:68:0;;-1:-1:-1;13843:938:0;;-1:-1:-1;13843:938:0;-1:-1:-1;13843:938:0;-1:-1:-1;;13843:938:0:o;12536:306::-;12595:15;12612:18;12632:21;12655:15;12672:16;12690:13;12705:15;12737:12;12742:6;12737:4;:12::i;:::-;12727:22;;12822:15;12829:7;12822:6;:15::i;:::-;12536:306;;12754:83;;-1:-1:-1;12754:83:0;;;;-1:-1:-1;12754:83:0;-1:-1:-1;12754:83:0;;-1:-1:-1;12754:83:0;-1:-1:-1;12536:306:0;-1:-1:-1;;;12536:306:0:o;7109:105::-;7182:13;;:27;;;-1:-1:-1;;;7182:27:0;;;;7155:13;;-1:-1:-1;;;;;7182:13:0;;:25;;:27;;;;;:4;;:27;;;;;;;:13;:27;;;;;;;;;;8373:151;8429:13;8468;7663:7;7684:16;;7619:86;8468:13;8457:8;:24;8449:33;;;;;;8494:4;:19;;;:9;:19;;;;;:25;;8487:32;;;;;:::i;10827:484::-;10912:23;10937:21;10984:13;7663:7;7684:16;;7619:86;10984:13;10973:8;:24;10965:33;;;;;;11021:14;;;-1:-1:-1;;;;;11049:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11049:22:0;;11040:31;;11097:7;-1:-1:-1;;;;;11086:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11086:19:0;;11076:29;;11115:9;11110:197;11134:7;11130:1;:11;11110:197;;;11154:20;11177:19;;;:9;:19;;;;;11204:10;;11177:26;;;;;11154:20;;11204:7;;11212:1;;11204:10;;;;;;:::i;:::-;;;;;;;11177:38;;;;;;;;;;;11154:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11233:24;11250:6;11233:16;:24::i;:::-;11221:6;11228:1;11221:9;;;;;;;;:::i;:::-;;;;;;:36;;;;;11299:2;11282:6;11276:20;:25;11263:7;11271:1;11263:10;;;;;;;;:::i;:::-;:38;;;:10;;;;;;;;;;;:38;-1:-1:-1;11143:3:0;;;;:::i;:::-;;;;11110:197;;;;10960:351;10827:484;;;;;:::o;3837:96::-;7518:10;;-1:-1:-1;;;;;7518:10:0;3021;:21;3013:30;;;;;;3903:13:::1;:25:::0;;-1:-1:-1;;;;;;3903:25:0::1;-1:-1:-1::0;;;;;3903:25:0;;;::::1;::::0;;;::::1;::::0;;3837:96::o;4848:141::-;4929:8;3129:17;3137:8;3129:7;:17::i;:::-;-1:-1:-1;;;;;3115:31:0;:10;-1:-1:-1;;;;;3115:31:0;;3107:40;;;;;;-1:-1:-1;4944:4:0::1;:19:::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;;-1:-1:-1;;;;;;4944:40:0::1;-1:-1:-1::0;;;;;4944:40:0;;;::::1;::::0;;;::::1;::::0;;4848:141::o;3940:243::-;4078:7;4060:15;:25;4052:34;;;;;;4099:50;4111:6;;4119:8;4129:7;4138:10;4099:11;:50::i;:::-;4091:59;;;;;;4155:23;4161:6;;4155:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4169:8:0;;-1:-1:-1;4155:5:0;;-1:-1:-1;;4155:23:0:i;21081:401::-;21234:4;21245:13;21288:8;21298:4;21304:6;21312;21271:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21261:59;;;;;;21245:75;;21325:15;21343:59;21358:31;21383:5;21358:24;:31::i;:::-;21391:10;21343:14;:59::i;:::-;21325:77;;21425:17;21433:8;21425:7;:17::i;:::-;-1:-1:-1;;;;;21414:28:0;:7;-1:-1:-1;;;;;21414:28:0;;:63;;;;21457:20;21468:8;21457:10;:20::i;:::-;-1:-1:-1;;;;;21446:31:0;:7;-1:-1:-1;;;;;21446:31:0;;21414:63;21407:70;21081:401;-1:-1:-1;;;;;;;;21081:401:0:o;18435:818::-;18561:1;18546:4;18540:18;:22;18532:31;;;;;;18568:13;18611:4;18594:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;18584:33;;;;;;18568:49;;18632:13;18639:5;18632:6;:13::i;:::-;18626:27;18622:79;;18666:4;:22;;;:15;:22;;;;;;;;:29;;;;;;;;:::i;:::-;;18622:79;18707:20;18730:19;;;:9;:19;;;;;18758:20;;18754:386;;18791:36;18805:8;18815:4;18821:5;18791:13;:36::i;:::-;18754:386;;;18849:21;;;;:14;;;:21;;;;;;18845:255;;18901:14;;;:16;;18884:14;;;18901:16;;;:::i;:::-;;;;-1:-1:-1;18884:33:0;-1:-1:-1;18948:10:0;18884:33;18957:1;18948:10;:::i;:::-;18924:21;;;;:14;;;:21;;;;;;;;:34;;;;18965:19;;;:11;;;:19;;;:27;;;19055:12;19062:4;19055:6;:12::i;:::-;19043:10;19016:25;19023:17;19031:8;19023:7;:17::i;19016:25::-;19004:89;19069:17;19077:8;19069:7;:17::i;:::-;19088:4;19004:89;;;;;;;:::i;:::-;;;;;;;;18877:223;18845:255;19105:20;;;;:13;;;:20;;;;;;;;:29;;;;;;;;:::i;:::-;;18754:386;19202:12;19209:4;19202:6;:12::i;:::-;19190:10;19163:25;19170:17;19178:8;19170:7;:17::i;19163:25::-;19149:99;19216:17;19224:8;19216:7;:17::i;:::-;19235:4;19241:6;19149:99;;;;;;;;:::i;:::-;;;;;;;;18527:726;;18435:818;;;:::o;17972:458::-;-1:-1:-1;;;;;18056:27:0;;18052:374;;18098:4;18111:19;;;:9;:19;;;;;;;;18098:12;18111:30;;;;-1:-1:-1;;;;;18111:30:0;18098:44;;;;;;;18091:51;;;:::i;:::-;18148:4;:19;;;:9;:19;;;;;:30;;:44;;-1:-1:-1;;;;;18148:44:0;;-1:-1:-1;;;;;;18148:44:0;;;;;;5678:111;;:::o;18052:374::-;18224:20;18232:11;18224:7;:20::i;:::-;18218:34;:39;18210:48;;;;;;18314:3;18272:19;;;:9;:19;;;;;:30;;;-1:-1:-1;;;;;18272:30:0;:46;18264:55;;;;;;18353:17;18361:8;18353:7;:17::i;:::-;-1:-1:-1;;;;;18325:25:0;;:4;:25;;;:12;:25;;;;;;;;:45;;;;:25;;:45;;;;;;:::i;:::-;-1:-1:-1;18376:4:0;:19;;;:9;:19;;;;;:30;;:44;;-1:-1:-1;;;;;18376:44:0;;-1:-1:-1;;;;;;18376:44:0;;;;;;17972:458;;:::o;16748:1219::-;16827:14;16844:17;16852:8;16844:7;:17::i;:::-;16827:34;;16866:17;16886:21;16898:8;16886:11;:21::i;:::-;16866:41;;16929:6;-1:-1:-1;;;;;16920:15:0;:5;-1:-1:-1;;;;;16920:15:0;;16912:24;;;;;;16949:10;-1:-1:-1;;;;;16949:20:0;;;;:47;;-1:-1:-1;16973:10:0;-1:-1:-1;;;;;16973:23:0;;;16949:47;:87;;;-1:-1:-1;;;;;;9656:18:0;;9638:4;9656:18;;;:10;:18;;;;;;;;17025:10;9656:38;;:27;;:38;;;;;;;;17000:36;16941:96;;;;;;17044:4;:19;;;:9;:19;;;;;;;;:31;;-1:-1:-1;;;;;17044:31:0;;;-1:-1:-1;;;;;;17044:31:0;;;;;;;17080:28;;;:48;;;;;;;;17133:28;;;;:34;;;;;;;;;;;17176:25;;;17172:134;;17248:3;17209:19;;;:9;:19;;;;;;:28;;:43;;-1:-1:-1;;;;;;17209:43:0;;;17263:37;17219:8;;17248:3;-1:-1:-1;;;;;17263:37:0;;;;;17248:3;;17263:37;17172:134;17310:41;17336:3;17342:8;17310:17;:41::i;:::-;17356:27;17374:8;17356:17;:27::i;:::-;-1:-1:-1;;;;;17407:17:0;;17390:14;17407:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;;:39;;17445:1;;17407:39;:::i;:::-;-1:-1:-1;;;;;17468:17:0;;17451:14;17468:17;;;:10;:17;;;;;17491:25;;17390:56;;-1:-1:-1;17451:14:0;;17468:22;;;;;17451:14;;17491:29;;17468:22;17491:29;:::i;:::-;17468:53;;;;;;;;;;;;;;-1:-1:-1;17468:53:0;;;;-1:-1:-1;;;;;17526:17:0;;;;:10;:17;;;;;:30;;;:22;;;;:30;;;;;;:39;;;17468:53;-1:-1:-1;17606:10:0;;17549:6;;17606:10;:::i;:::-;-1:-1:-1;;;;;17570:17:0;;:4;:17;;;:10;:17;;;;;;;;:33;;;:25;;;:33;;;;;:46;;;;17621:17;;;;;;:27;;;17570:17;17621:27;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17660:17:0;;;:4;:17;;;:10;:17;;;;;;;;:35;;;:25;;:35;;;;;17653:42;;;17720:15;;;;;;;;;:25;;;17660:4;17720:25;;;:::i;:::-;;;;-1:-1:-1;17700:45:0;-1:-1:-1;17786:13:0;17700:45;17798:1;17786:13;:::i;:::-;-1:-1:-1;;;;;17750:15:0;;;:4;:15;;;:10;:15;;;;;;;;:33;;;:23;;;:33;;;;;:49;;;;17804:31;;;:20;;;;:31;;;;;:42;;;17856:30;;17774:8;;17750:15;;17856:30;;;;;;17917:25;17924:17;17932:8;17924:7;:17::i;17917:25::-;17912:3;-1:-1:-1;;;;;17896:66:0;17905:5;-1:-1:-1;;;;;17896:66:0;;17944:17;17952:8;17944:7;:17::i;:::-;17896:66;;;;;;:::i;:::-;;;;;;;;16822:1145;;;;;16748:1219;;;:::o;21487:190::-;21555:11;21583:3;21577:17;21598:1;21577:22;21573:50;;;-1:-1:-1;21614:3:0;;21487:190;-1:-1:-1;21487:190:0:o;21573:50::-;-1:-1:-1;21664:2:0;21655:12;21649:19;;21487:190::o;19800:247::-;19859:20;19882:19;;;:9;:19;;;;;19906:137;19913:14;;;;:18;19906:137;;19939:13;19955:6;:11;;:31;19984:1;19967:6;:14;;;:18;;;;:::i;:::-;19955:31;;;;;;;;;;;;19939:47;;19992:45;20006:8;20016:13;20023:5;20016:6;:13::i;:::-;20031:5;19992:13;:45::i;:::-;19933:110;19906:137;;20769:307;20897:4;20908:13;20961:6;;20969:8;20979:7;20934:53;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20924:64;;;;;;20908:80;;21063:8;7598:11;;-1:-1:-1;;;;;7598:11:0;;7538:76;21063:8;-1:-1:-1;;;;;21000:71:0;:59;21015:31;21040:5;21015:24;:31::i;21000:59::-;-1:-1:-1;;;;;21000:71:0;;;20769:307;-1:-1:-1;;;;;;;20769:307:0:o;15893:849::-;15962:16;15983:13;15999:14;16006:6;15999;:14::i;:::-;16022:4;:16;;;:9;:16;;;;;;15983:30;;-1:-1:-1;16018:671:0;;16062:4;:18;;;:4;:18;;;:::i;:::-;;;;-1:-1:-1;16051:29:0;-1:-1:-1;16105:12:0;16051:29;16116:1;16105:12;:::i;:::-;16086:4;:16;;;:9;:16;;;;;;;;:31;;;;16149:19;;;:9;:19;;;;;;;16174:26;;-1:-1:-1;;;;;16174:26:0;;;-1:-1:-1;;;;;;16174:26:0;;;;;;16206:18;;;:38;;;;;;;;;;;16250:24;;;;:15;;;;:24;;;;;:::i;:::-;-1:-1:-1;;;;;;16297:20:0;;16280:14;16297:20;;;:10;:20;;;;;:30;;;16280:14;16297:30;;;:::i;:::-;;;;-1:-1:-1;16280:47:0;-1:-1:-1;16374:10:0;16280:47;16383:1;16374:10;:::i;:::-;-1:-1:-1;;;;;16333:20:0;;:4;:20;;;:10;:20;;;;;;;;:38;;;:28;;;:38;;;;;:51;;;;16390:33;;;:25;;;;:33;;;;;:44;;;16445:42;;16362:8;;16333:4;16445:42;;16333:4;;16445:42;16531:5;16521:8;-1:-1:-1;;;;;16498:47:0;16515:3;-1:-1:-1;;;;;16498:47:0;;16538:6;16498:47;;;;;;:::i;:::-;;;;;;;;16045:506;;16018:671;;;16574:12;16579:6;16574:4;:12::i;:::-;16592:4;:19;;;:9;:19;;;;;:28;;:41;;-1:-1:-1;;;;;;16592:41:0;16623:10;16592:41;;;16563:23;-1:-1:-1;16639:44:0;16657:4;16664:8;16563:23;16639:9;:44::i;:::-;16720:8;-1:-1:-1;;;;;16698:39:0;16710:8;16703:5;16698:39;16730:6;16698:39;;;;;;:::i;:::-;;;;;;;;15957:785;;15893:849;;:::o;20054:182::-;20164:66;;14067::1;20164::0;;;14055:79:1;14150:12;;;14143:28;;;20133:7:0;;14187:12:1;;20164:66:0;14045:160:1;20528:236:0;20631:7;20646:9;20657;20668:7;20679:27;20695:10;20679:15;:27::i;:::-;20718:41;;;;;;;;;;;;22203:25:1;;;22276:4;22264:17;;22244:18;;;22237:45;;;;22298:18;;;22291:34;;;22341:18;;;22334:34;;;20645:61:0;;-1:-1:-1;20645:61:0;;-1:-1:-1;20645:61:0;-1:-1:-1;20718:41:0;;22175:19:1;;20718:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20718:41:0;;-1:-1:-1;;20718:41:0;;;20528:236;-1:-1:-1;;;;;;;20528:236:0:o;19258:537::-;19348:20;19371:19;;;:9;:19;;;;;;;;19403:21;;;:14;;;:21;;;;;;;19395:35;;;;;;19435:14;19452:21;;;:14;;;:21;;;;;;:25;;19476:1;;19452:25;:::i;:::-;19435:42;;19482:14;19499:6;:11;;:31;19528:1;19511:6;:14;;;:18;;;;:::i;:::-;19499:31;;;;;;;;;;;;;;-1:-1:-1;19499:31:0;;;;19535:19;;;:11;;;:19;;;;:28;;;19499:31;-1:-1:-1;19593:10:0;19547:6;19602:1;19593:10;:::i;:::-;19568:22;;;;:14;;;:22;;;;;:35;;;;19608:14;;;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;19636:21:0;;;;:14;;;:21;;;;;;;;19629:28;;;19669:13;;;:20;;;;;19662:27;;;:::i;:::-;19752:12;19759:4;19752:6;:12::i;:::-;19740:10;19713:25;19720:17;19728:8;19720:7;:17::i;19713:25::-;19699:91;19766:17;19774:8;19766:7;:17::i;:::-;19785:4;19699:91;;;;;;;:::i;:::-;;;;;;;;19343:452;;;19258:537;;;:::o;20241:282::-;20314:9;20325;20336:7;20358:10;:17;20379:2;20358:23;20350:32;;;;;;-1:-1:-1;;;20429:2:0;20413:19;;20407:26;20465:2;20449:19;;20443:26;20509:2;20493:19;;;20487:26;20407;;20484:1;20479:35;;;;;20241: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;14210:616::-;-1:-1:-1;;;14533:3:1;14526:21;14590:6;14582;14578:1;14573:3;14569:11;14556:41;14711:2;14707:15;;;;-1:-1:-1;;14703:53:1;14659:1;14616:16;;;;14651:10;;;14692:65;;;;14781:2;14773:11;;14766:27;14817:2;14809:11;;;-1:-1:-1;14516:310:1:o;14831:625::-;15096:6;15091:3;15084:19;15066:3;15132:6;15126:13;15148:60;15201:6;15196:2;15191:3;15187:12;15182:2;15174:6;15170:15;15148:60;:::i;:::-;15236:6;15231:3;15227:16;15217:26;;15274:6;15268:13;15290:61;15342:8;15337:2;15333;15329:11;15324:2;15316:6;15312:15;15290:61;:::i;:::-;15370:17;15411:2;15403:11;;15396:27;;;;-1:-1:-1;;15447:2:1;15439:11;;;-1:-1:-1;;;15074:382:1:o;15669:488::-;-1:-1:-1;;;;;15938:15:1;;;15920:34;;15990:15;;15985:2;15970:18;;15963:43;16037:2;16022:18;;16015:34;;;16085:3;16080:2;16065:18;;16058:31;;;15863:4;;16106:45;;16131:19;;16123:6;16106:45;:::i;:::-;16098:53;15872:285;-1:-1:-1;;;;;;15872:285:1:o;16162:1080::-;16653:3;16642:9;16635:22;16616:4;16680:57;16732:3;16721:9;16717:19;16709:6;16680:57;:::i;:::-;16785:9;16777:6;16773:22;16768:2;16757:9;16753:18;16746:50;16819:44;16856:6;16848;16819:44;:::i;:::-;16805:58;;16911:9;16903:6;16899:22;16894:2;16883:9;16879:18;16872:50;16945:44;16982:6;16974;16945:44;:::i;:::-;16931:58;;17037:9;17029:6;17025:22;17020:2;17009:9;17005:18;16998:50;17071:44;17108:6;17100;17071:44;:::i;:::-;17057:58;;17164:9;17156:6;17152:22;17146:3;17135:9;17131:19;17124:51;17192:44;17229:6;17221;17192:44;:::i;17247:456::-;17498:2;17487:9;17480:21;17461:4;17524:56;17576:2;17565:9;17561:18;17553:6;17524:56;:::i;:::-;17628:9;17620:6;17616:22;17611:2;17600:9;17596:18;17589:50;17656:41;17690:6;17682;17656:41;:::i;17708:1206::-;18243:3;18232:9;18225:22;18206:4;18270:57;18322:3;18311:9;18307:19;18299:6;18270:57;:::i;:::-;18375:9;18367:6;18363:22;18358:2;18347:9;18343:18;18336:50;18409:44;18446:6;18438;18409:44;:::i;:::-;18395:58;;18501:9;18493:6;18489:22;18484:2;18473:9;18469:18;18462:50;18535:41;18569:6;18561;18535:41;:::i;:::-;18521:55;;18624:9;18616:6;18612:22;18607:2;18596:9;18592:18;18585:50;18658:44;18695:6;18687;18658:44;:::i;:::-;18644:58;;18751:9;18743:6;18739:22;18733:3;18722:9;18718:19;18711:51;18779:41;18813:6;18805;18779:41;:::i;:::-;18851:3;18836:19;;18829:35;;;;-1:-1:-1;;18895:3:1;18880:19;18873:35;18771:49;18215:699;-1:-1:-1;;;;;18215:699:1:o;18919:1449::-;19507:4;19536:3;19566:2;19555:9;19548:21;19592:56;19644:2;19633:9;19629:18;19621:6;19592:56;:::i;:::-;19578:70;;19696:9;19688:6;19684:22;19679:2;19668:9;19664:18;19657:50;19730:44;19767:6;19759;19730:44;:::i;:::-;19716:58;;19822:9;19814:6;19810:22;19805:2;19794:9;19790:18;19783:50;19856:44;19893:6;19885;19856:44;:::i;:::-;19842:58;;19948:9;19940:6;19936:22;19931:2;19920:9;19916:18;19909:50;19982:44;20019:6;20011;19982:44;:::i;:::-;19968:58;;20075:9;20067:6;20063:22;20057:3;20046:9;20042:19;20035:51;20109:44;20146:6;20138;20109:44;:::i;:::-;20095:58;;20202:9;20194:6;20190:22;20184:3;20173:9;20169:19;20162:51;20230:44;20267:6;20259;20230:44;:::i;:::-;20305:3;20290:19;;20283:35;;;;-1:-1:-1;;20349:3:1;20334:19;20327:35;20222:52;19516:852;-1:-1:-1;;;;;;19516:852:1:o;20373:1224::-;20920:3;20909:9;20902:22;20883:4;20947:57;20999:3;20988:9;20984:19;20976:6;20947:57;:::i;:::-;21052:9;21044:6;21040:22;21035:2;21024:9;21020:18;21013:50;21086:44;21123:6;21115;21086:44;:::i;:::-;21072:58;;21178:9;21170:6;21166:22;21161:2;21150:9;21146:18;21139:50;21212:44;21249:6;21241;21212:44;:::i;:::-;21198:58;;21304:9;21296:6;21292:22;21287:2;21276:9;21272:18;21265:50;21338:44;21375:6;21367;21338:44;:::i;:::-;21324:58;;21431:9;21423:6;21419:22;21413:3;21402:9;21398:19;21391:51;21459:44;21496:6;21488;21459:44;:::i;22379:219::-;22528:2;22517:9;22510:21;22491:4;22548:44;22588:2;22577:9;22573:18;22565:6;22548:44;:::i;22603:724::-;22920:3;22909:9;22902:22;22883:4;22941:45;22981:3;22970:9;22966:19;22958:6;22941:45;:::i;:::-;-1:-1:-1;;;;;23060:15:1;;;23055:2;23040:18;;23033:43;23112:15;;;23107:2;23092:18;;23085:43;-1:-1:-1;23164:15:1;;;23159:2;23144:18;;23137:43;23217:15;;;;23211:3;23196:19;;23189:44;23013:3;23249:19;;23242:35;;;;23308:3;23293:19;23286:35;;;;22933:53;22892:435;-1:-1:-1;22892:435:1:o;23332:381::-;23529:2;23518:9;23511:21;23492:4;23555:44;23595:2;23584:9;23580:18;23572:6;23555:44;:::i;:::-;23647:9;23639:6;23635:22;23630:2;23619:9;23615:18;23608:50;23675:32;23700:6;23692;23675:32;:::i;23718:543::-;23963:2;23952:9;23945:21;23926:4;23989:44;24029:2;24018:9;24014:18;24006:6;23989:44;:::i;:::-;24081:9;24073:6;24069:22;24064:2;24053:9;24049:18;24042:50;24115:32;24140:6;24132;24115:32;:::i;:::-;24101:46;;24195:9;24187:6;24183:22;24178:2;24167:9;24163:18;24156:50;24223:32;24248:6;24240;24223:32;:::i;25387:275::-;25458:2;25452:9;25523:2;25504:13;;-1:-1:-1;;25500:27:1;25488:40;;-1:-1:-1;;;;;25543:34:1;;25579:22;;;25540:62;25537:2;;;25605:18;;:::i;:::-;25641:2;25634:22;25432:230;;-1:-1:-1;25432:230:1:o;25667:183::-;25727:4;-1:-1:-1;;;;;25752:6:1;25749:30;25746:2;;;25782:18;;:::i;:::-;-1:-1:-1;25827:1:1;25823:14;25839:4;25819:25;;25736:114::o;25855:186::-;25903:4;-1:-1:-1;;;;;25928:6:1;25925:30;25922:2;;;25958:18;;:::i;:::-;-1:-1:-1;26024:2:1;26003:15;-1:-1:-1;;25999:29:1;26030:4;25995:40;;25912:129::o;26046:128::-;26086:3;26117:1;26113:6;26110:1;26107:13;26104:2;;;26123:18;;:::i;:::-;-1:-1:-1;26159:9:1;;26094:80::o;26179:120::-;26219:1;26245;26235:2;;26250:18;;:::i;:::-;-1:-1:-1;26284:9:1;;26225:74::o;26304:168::-;26344:7;26410:1;26406;26402:6;26398:14;26395:1;26392:21;26387:1;26380:9;26373:17;26369:45;26366:2;;;26417:18;;:::i;:::-;-1:-1:-1;26457:9:1;;26356:116::o;26477:125::-;26517:4;26545:1;26542;26539:8;26536:2;;;26550:18;;:::i;:::-;-1:-1:-1;26587:9:1;;26526:76::o;26607:258::-;26679:1;26689:113;26703:6;26700:1;26697:13;26689:113;;;26779:11;;;26773:18;26760:11;;;26753:39;26725:2;26718:10;26689:113;;;26820:6;26817:1;26814:13;26811:2;;;-1:-1:-1;;26855:1:1;26837:16;;26830:27;26660:205::o;26870:136::-;26909:3;26937:5;26927:2;;26946:18;;:::i;:::-;-1:-1:-1;;;26982:18:1;;26917:89::o;27011:380::-;27090:1;27086:12;;;;27133;;;27154:2;;27208:4;27200:6;27196:17;27186:27;;27154:2;27261;27253:6;27250:14;27230:18;27227:38;27224:2;;;27307:10;27302:3;27298:20;27295:1;27288:31;27342:4;27339:1;27332:15;27370:4;27367:1;27360:15;27224:2;;27066:325;;;:::o;27396:135::-;27435:3;-1:-1:-1;;27456:17:1;;27453:2;;;27476:18;;:::i;:::-;-1:-1:-1;27523:1:1;27512:13;;27443:88::o;27536:112::-;27568:1;27594;27584:2;;27599:18;;:::i;:::-;-1:-1:-1;27633:9:1;;27574:74::o;27653:127::-;27714:10;27709:3;27705:20;27702:1;27695:31;27745:4;27742:1;27735:15;27769:4;27766:1;27759:15;27785:127;27846:10;27841:3;27837:20;27834:1;27827:31;27877:4;27874:1;27867:15;27901:4;27898:1;27891:15;27917:127;27978:10;27973:3;27969:20;27966:1;27959:31;28009:4;28006:1;27999:15;28033:4;28030:1;28023:15;28049:127;28110:10;28105:3;28101:20;28098:1;28091:31;28141:4;28138:1;28131:15;28165:4;28162:1;28155:15;28181:131;-1:-1:-1;;;;;28256:31:1;;28246:42;;28236:2;;28302:1;28299;28292:12;28317:131;-1:-1:-1;;;;;;28391:32:1;;28381:43;;28371:2;;28438:1;28435;28428:12

Swarm Source

ipfs://b8bd9d3f25025be3fb92d222001d5339ca3c590f92eadc6f80d5b14b2b049991
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.