Overview
CRO Balance
0 CRO
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,224 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 11977714 | 277 days ago | IN | 0 CRO | 0.4721144 | ||||
Set Approval For... | 11863314 | 285 days ago | IN | 0 CRO | 0.4709556 | ||||
Set Approval For... | 8431376 | 508 days ago | IN | 0 CRO | 0.22176926 | ||||
Set Approval For... | 8025090 | 535 days ago | IN | 0 CRO | 0.22264224 | ||||
Set Approval For... | 7145786 | 592 days ago | IN | 0 CRO | 0.23070773 | ||||
Set Approval For... | 6842946 | 612 days ago | IN | 0 CRO | 0.22524852 | ||||
Set Approval For... | 6385397 | 642 days ago | IN | 0 CRO | 0.23002758 | ||||
Set Approval For... | 6250601 | 651 days ago | IN | 0 CRO | 0.2303222 | ||||
Safe Transfer Fr... | 6187654 | 655 days ago | IN | 0 CRO | 0.60247914 | ||||
Set Approval For... | 6005364 | 667 days ago | IN | 0 CRO | 0.23093296 | ||||
Set Approval For... | 5947817 | 671 days ago | IN | 0 CRO | 0.23098862 | ||||
Set Approval For... | 5609811 | 693 days ago | IN | 0 CRO | 0.15196484 | ||||
Set Approval For... | 5609810 | 693 days ago | IN | 0 CRO | 0.15196484 | ||||
Set Approval For... | 5609809 | 693 days ago | IN | 0 CRO | 0.25490462 | ||||
Set Approval For... | 5589688 | 694 days ago | IN | 0 CRO | 0.2317756 | ||||
Set Approval For... | 5308600 | 713 days ago | IN | 0 CRO | 0.23245306 | ||||
Set Approval For... | 5191856 | 721 days ago | IN | 0 CRO | 0.23270799 | ||||
Set Approval For... | 5191676 | 721 days ago | IN | 0 CRO | 0.23263708 | ||||
Set Approval For... | 5160686 | 723 days ago | IN | 0 CRO | 0.23270518 | ||||
Set Approval For... | 5129073 | 725 days ago | IN | 0 CRO | 0.23277492 | ||||
Set Approval For... | 5097635 | 727 days ago | IN | 0 CRO | 0.23284279 | ||||
Set Approval For... | 4952557 | 736 days ago | IN | 0 CRO | 0.23316077 | ||||
Transfer From | 4592402 | 760 days ago | IN | 0 CRO | 0.20334528 | ||||
Transfer From | 4592149 | 760 days ago | IN | 0 CRO | 0.59984172 | ||||
Set Approval For... | 4531491 | 764 days ago | IN | 0 CRO | 0.23408071 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
2799246 | 878 days ago | 180 CRO | ||||
2799241 | 878 days ago | 180 CRO | ||||
2799237 | 878 days ago | 180 CRO | ||||
2799229 | 878 days ago | 180 CRO | ||||
2799204 | 878 days ago | 180 CRO | ||||
2799159 | 878 days ago | 180 CRO | ||||
2799155 | 878 days ago | 180 CRO | ||||
2799146 | 878 days ago | 180 CRO | ||||
2799142 | 878 days ago | 180 CRO | ||||
2799128 | 878 days ago | 180 CRO | ||||
2799124 | 878 days ago | 180 CRO | ||||
2799103 | 878 days ago | 180 CRO | ||||
2799096 | 878 days ago | 180 CRO | ||||
2799096 | 878 days ago | 180 CRO | ||||
2799089 | 878 days ago | 180 CRO | ||||
2799027 | 878 days ago | 180 CRO | ||||
2799024 | 878 days ago | 180 CRO | ||||
2798995 | 878 days ago | 180 CRO | ||||
2798993 | 878 days ago | 180 CRO | ||||
2798992 | 878 days ago | 180 CRO | ||||
2798992 | 878 days ago | 180 CRO | ||||
2798989 | 878 days ago | 180 CRO | ||||
2798986 | 878 days ago | 180 CRO | ||||
2798982 | 878 days ago | 180 CRO | ||||
2798979 | 878 days ago | 180 CRO |
Loading...
Loading
Contract Name:
RektApesContract
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-05-01 */ /** *Submitted for verification at cronoscan.com on 2022-04-22 */ /* Author: @Anon_Grunt */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.11; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function transferFrom(address from, address to, uint256 tokenId) external; function safeTransferFrom(address from, address to, uint256 tokenId) external; function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } abstract contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; constructor () { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { bytes32[] _values; mapping (bytes32 => uint256) _indexes; } struct Bytes32Set { Set _inner; } struct AddressSet { Set _inner; } struct UintSet { Set _inner; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = toDeleteIndex + 1; set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { MapEntry[] _entries; mapping (bytes32 => uint256) _indexes; } struct UintToAddressMap { Map _inner; } function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } function _remove(Map storage map, bytes32 key) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; MapEntry storage lastEntry = map._entries[lastIndex]; map._entries[toDeleteIndex] = lastEntry; map._indexes[lastEntry._key] = toDeleteIndex + 1; map._entries.pop(); delete map._indexes[key]; return true; } else { return false; } } function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } function _length(Map storage map) private view returns (uint256) { return map._entries.length; } function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } library Strings { function toString(uint256 _value) internal pure returns (string memory) { uint256 j = _value; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_value != 0) { k = k-1; uint8 temp = (48 + uint8(_value - _value / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _value /= 10; } return string(bstr); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; mapping (address => EnumerableSet.UintSet) private _holderTokens; mapping (uint256 => address) private _tokenApprovals; mapping (address => mapping (address => bool)) private _operatorApprovals; mapping (uint256 => string) private _tokenURIs; EnumerableMap.UintToAddressMap private _tokenOwners; string private _name; string private _symbol; string private _baseURI; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _holderTokens[owner].length(); } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory _empty = ""; string memory base = baseURI(); //if (bytes(base).length == 0) { return _tokenURI; } // If no base URI return tokenURI //if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If both set concatenate baseURI and tokenURI if (keccak256(abi.encodePacked(base)) == keccak256(abi.encodePacked(_empty))) { return _tokenURI; } if (keccak256(abi.encodePacked(_tokenURI)) != keccak256(abi.encodePacked(_empty))) { return string(abi.encodePacked(base, _tokenURI)); } return string(abi.encodePacked(base, tokenId.toString())); // If baseURI but not tokenURI concatenate baseURI and tokenID } function baseURI() public view virtual returns (string memory) { return _baseURI; } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } function totalSupply() public view virtual override returns (uint256) { return _tokenOwners.length(); } // indexed by id function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all"); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } abstract contract Ownable is Context { address private _owner; modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract RektApesContract is ERC721, Ownable { using SafeMath for uint256; uint256 public maxSupply = 1000; uint256 public currentSupply; bool public isSaleEnabled = false; bool internal locked; modifier noreentry() { require(!locked, "No re-entrance"); locked = true; _; locked = false; } address public receiver = 0x0B3De431D3609C93c755747014C536763b378E33; //0x1C77905fEAfD85f7fdeD7aD5f871F93C2B11dcfF; constructor(string memory baseURI) ERC721("Rekt Apes", "Rekt Apes") { setBaseURI(baseURI); } function setTokenReceiver(address _new) public onlyOwner { require(receiver != _new && receiver != address(0)); receiver = _new; } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function mintNFT() public payable noreentry { require(isSaleEnabled == true, "Sale hasn't started"); require(currentSupply <= maxSupply, "Sale has already ended"); uint256 cost = calculatePrice(); require(msg.value >= cost, "Value below mint price"); uint256 index = ++currentSupply; _safeMint(msg.sender, index); (bool success,) = receiver.call{value: address(this).balance}(""); } function mintMultipleNFT(uint256 _amount) public payable noreentry { require(isSaleEnabled == true, "Sale hasn't started"); require(_amount > 0, "Number cannot be zero"); require(totalSupply().add(_amount) <= maxSupply, "Sale has already ended"); uint256 cost = calculatePriceMultiple(_amount); require(msg.value >= cost, "Value below mint price"); for (uint i = 0; i < _amount; i++) { uint256 index = ++currentSupply; _safeMint(msg.sender, index); } } function calculatePrice() public view returns (uint256) { if (currentSupply >= 801) { return 180 * 10**18; } else if (currentSupply >= 601) { return 160 * 10**18; } else if (currentSupply >= 401) { return 140 * 10**18; } else if (currentSupply >= 201) { return 120 * 10**18; } else { return 100 * 10**18; } } function calculatePriceMultiple(uint256 _amount) public view returns (uint256) { uint256 over = currentSupply + _amount; uint256 under; if (over >= 801) { under = (801 - currentSupply) * 160; over = (over - 801) * 180; } else if (over >= 601) { under = (601 - currentSupply) * 140; over = (over - 601) * 160; } else if (over >= 401) { under = (401 - currentSupply) * 120; over = (over - 401) * 140; } else if (over >= 201) { under = (201 - currentSupply) * 100; over = (over - 201) * 120; } else { under = 0; over = _amount * 100; } return (under + over) * 10**18; } function burn(uint256 _amount) public onlyOwner { require(_amount > 0 && _amount <= 1000, "You can only burn a 1 - 1000 at the time"); require(totalSupply() <= maxSupply - _amount, "There NFT's are allready claimed"); maxSupply = maxSupply.sub(_amount); } function setBaseURI(string memory baseURI) public onlyOwner { _setBaseURI(baseURI); } function toggleSale() public onlyOwner { isSaleEnabled = !isSaleEnabled; } function reserveGiveaway(uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= maxSupply, "Exceeds maxSupply"); for(uint256 i=0; i<_amount; i++) { _safeMint(receiver, currentSupply++); } } function withdrawAll() public onlyOwner { require(payable(msg.sender).send(address(this).balance)); } // No tokens should be sent into the contract: burn / take them // Maybe require more gas function burnRdnmTkn(address _token, address _to) external { IERC20(_token).transfer(_to, IERC20(_token).balanceOf(address(this))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"burnRdnmTkn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculatePriceMultiple","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintMultipleNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"reserveGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setTokenReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526103e8600b556000600d60006101000a81548160ff021916908315150217905550730b3de431d3609c93c755747014c536763b378e33600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008757600080fd5b50604051620059de380380620059de8339818101604052810190620000ad91906200068b565b6040518060400160405280600981526020017f52656b74204170657300000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f52656b7420417065730000000000000000000000000000000000000000000000815250620001316301ffc9a760e01b6200027660201b60201c565b8160079080519060200190620001499291906200043e565b508060089080519060200190620001629291906200043e565b506200017b6380ac58cd60e01b6200027660201b60201c565b62000193635b5e139f60e01b6200027660201b60201c565b620001ab63780e9d6360e01b6200027660201b60201c565b50506000620001bf6200034d60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200026f816200035560201b60201c565b5062000835565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603620002e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d8906200073d565b60405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b620003656200034d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200038b620003f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003db90620007af565b60405180910390fd5b620003f5816200042260201b60201c565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600990805190602001906200043a9291906200043e565b5050565b8280546200044c9062000800565b90600052602060002090601f016020900481019282620004705760008555620004bc565b82601f106200048b57805160ff1916838001178555620004bc565b82800160010185558215620004bc579182015b82811115620004bb5782518255916020019190600101906200049e565b5b509050620004cb9190620004cf565b5090565b5b80821115620004ea576000816000905550600101620004d0565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000557826200050c565b810181811067ffffffffffffffff821117156200057957620005786200051d565b5b80604052505050565b60006200058e620004ee565b90506200059c82826200054c565b919050565b600067ffffffffffffffff821115620005bf57620005be6200051d565b5b620005ca826200050c565b9050602081019050919050565b60005b83811015620005f7578082015181840152602081019050620005da565b8381111562000607576000848401525b50505050565b6000620006246200061e84620005a1565b62000582565b90508281526020810184848401111562000643576200064262000507565b5b62000650848285620005d7565b509392505050565b600082601f83011262000670576200066f62000502565b5b8151620006828482602086016200060d565b91505092915050565b600060208284031215620006a457620006a3620004f8565b5b600082015167ffffffffffffffff811115620006c557620006c4620004fd565b5b620006d38482850162000658565b91505092915050565b600082825260208201905092915050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b600062000725601c83620006dc565b91506200073282620006ed565b602082019050919050565b60006020820190508181036000830152620007588162000716565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000797602083620006dc565b9150620007a4826200075f565b602082019050919050565b60006020820190508181036000830152620007ca8162000788565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081957607f821691505b6020821081036200082f576200082e620007d1565b5b50919050565b61519980620008456000396000f3fe60806040526004361061020f5760003560e01c80638462151c11610118578063ba839def116100a0578063d5abeb011161006f578063d5abeb011461076d578063e891e9d114610798578063e985e9c5146107c1578063f2fde38b146107fe578063f7260d3e146108275761020f565b8063ba839def1461069d578063c87b56dd146106da578063cc69c4e814610717578063d348b409146107425761020f565b806395d89b41116100e757806395d89b41146105db578063a202ce4a14610606578063a22cb46514610622578063a40f1aa51461064b578063b88d4fde146106745761020f565b80638462151c14610533578063853828b6146105705780638da5cb5b14610587578063935fd24c146105b25761020f565b806342966c681161019b5780636c0360eb1161016a5780636c0360eb1461047257806370a082311461049d578063715018a6146104da578063771282f6146104f15780637d8966e41461051c5761020f565b806342966c68146103a65780634f6ccce7146103cf57806355f804b31461040c5780636352211e146104355761020f565b806314f710fe116101e257806314f710fe146102e257806318160ddd146102ec57806323b872dd146103175780632f745c591461034057806342842e0e1461037d5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906135fe565b610852565b6040516102489190613646565b60405180910390f35b34801561025d57600080fd5b506102666108b9565b60405161027391906136fa565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613752565b61094b565b6040516102b091906137c0565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613807565b6109d0565b005b6102ea610ae7565b005b3480156102f857600080fd5b50610301610d0f565b60405161030e9190613856565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613871565b610d20565b005b34801561034c57600080fd5b5061036760048036038101906103629190613807565b610d80565b6040516103749190613856565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613871565b610ddb565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613752565b610dfb565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613752565b610f3d565b6040516104039190613856565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906139f9565b610f60565b005b34801561044157600080fd5b5061045c60048036038101906104579190613752565b610fe8565b60405161046991906137c0565b60405180910390f35b34801561047e57600080fd5b5061048761101f565b60405161049491906136fa565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613a42565b6110b1565b6040516104d19190613856565b60405180910390f35b3480156104e657600080fd5b506104ef61116f565b005b3480156104fd57600080fd5b506105066112ac565b6040516105139190613856565b60405180910390f35b34801561052857600080fd5b506105316112b2565b005b34801561053f57600080fd5b5061055a60048036038101906105559190613a42565b61135a565b6040516105679190613b2d565b60405180910390f35b34801561057c57600080fd5b50610585611463565b005b34801561059357600080fd5b5061059c61151f565b6040516105a991906137c0565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613b4f565b611549565b005b3480156105e757600080fd5b506105f0611645565b6040516105fd91906136fa565b60405180910390f35b610620600480360381019061061b9190613752565b6116d7565b005b34801561062e57600080fd5b5061064960048036038101906106449190613bbb565b6118eb565b005b34801561065757600080fd5b50610672600480360381019061066d9190613752565b611a6b565b005b34801561068057600080fd5b5061069b60048036038101906106969190613c9c565b611ba9565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613752565b611c0b565b6040516106d19190613856565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190613752565b611d7c565b60405161070e91906136fa565b60405180910390f35b34801561072357600080fd5b5061072c611f98565b6040516107399190613646565b60405180910390f35b34801561074e57600080fd5b50610757611fab565b6040516107649190613856565b60405180910390f35b34801561077957600080fd5b5061078261202c565b60405161078f9190613856565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190613a42565b612032565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613b4f565b6121a8565b6040516107f59190613646565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613a42565b61223c565b005b34801561083357600080fd5b5061083c6123e7565b60405161084991906137c0565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600780546108c890613d4e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613d4e565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b60006109568261240d565b610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90613df1565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109db82610fe8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613e83565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6a61242a565b73ffffffffffffffffffffffffffffffffffffffff161480610a995750610a9881610a9361242a565b6121a8565b5b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613f15565b60405180910390fd5b610ae28383612432565b505050565b600d60019054906101000a900460ff1615610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613f81565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555060011515600d60009054906101000a900460ff16151514610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613fed565b60405180910390fd5b600b54600c541115610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690614059565b60405180910390fd5b6000610bf9611fab565b905080341015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906140c5565b60405180910390fd5b6000600c60008154610c4f90614114565b9190508190559050610c6133826124eb565b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610ca99061418d565b60006040518083038185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b505090505050506000600d60016101000a81548160ff021916908315150217905550565b6000610d1b6005612509565b905090565b610d31610d2b61242a565b8261251e565b610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790614214565b60405180910390fd5b610d7b8383836125fc565b505050565b6000610dd382600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061281290919063ffffffff16565b905092915050565b610df683838360405180602001604052806000815250611ba9565b505050565b610e0361242a565b73ffffffffffffffffffffffffffffffffffffffff16610e2161151f565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614280565b60405180910390fd5b600081118015610e8957506103e88111155b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614312565b60405180910390fd5b80600b54610ed69190614332565b610ede610d0f565b1115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906143b2565b60405180910390fd5b610f3481600b5461282c90919063ffffffff16565b600b8190555050565b600080610f5483600561288590919063ffffffff16565b50905080915050919050565b610f6861242a565b73ffffffffffffffffffffffffffffffffffffffff16610f8661151f565b73ffffffffffffffffffffffffffffffffffffffff1614610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390614280565b60405180910390fd5b610fe5816128b1565b50565b60006110188260405180606001604052806029815260200161513b6029913960056128cb9092919063ffffffff16565b9050919050565b60606009805461102e90613d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461105a90613d4e565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890614444565b60405180910390fd5b611168600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206128ea565b9050919050565b61117761242a565b73ffffffffffffffffffffffffffffffffffffffff1661119561151f565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290614280565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b6112ba61242a565b73ffffffffffffffffffffffffffffffffffffffff166112d861151f565b73ffffffffffffffffffffffffffffffffffffffff161461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590614280565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60606000611367836110b1565b9050600081036113c357600067ffffffffffffffff81111561138c5761138b6138ce565b5b6040519080825280602002602001820160405280156113ba5781602001602082028036833780820191505090505b5091505061145e565b60008167ffffffffffffffff8111156113df576113de6138ce565b5b60405190808252806020026020018201604052801561140d5781602001602082028036833780820191505090505b50905060005b82811015611457576114258582610d80565b82828151811061143857611437614464565b5b602002602001018181525050808061144f90614114565b915050611413565b8193505050505b919050565b61146b61242a565b73ffffffffffffffffffffffffffffffffffffffff1661148961151f565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690614280565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061151d57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159f91906137c0565b602060405180830381865afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e091906144a8565b6040518363ffffffff1660e01b81526004016115fd9291906144d5565b6020604051808303816000875af115801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190614513565b505050565b60606008805461165490613d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461168090613d4e565b80156116cd5780601f106116a2576101008083540402835291602001916116cd565b820191906000526020600020905b8154815290600101906020018083116116b057829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1615611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613f81565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555060011515600d60009054906101000a900460ff16151514611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613fed565b60405180910390fd5b600081116117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d29061458c565b60405180910390fd5b600b546117f8826117ea610d0f565b6128ff90919063ffffffff16565b1115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614059565b60405180910390fd5b600061184482611c0b565b905080341015611889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611880906140c5565b60405180910390fd5b60005b828110156118cb576000600c600081546118a590614114565b91905081905590506118b733826124eb565b5080806118c390614114565b91505061188c565b50506000600d60016101000a81548160ff02191690831515021790555050565b6118f361242a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906145f8565b60405180910390fd5b806003600061196d61242a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1a61242a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a5f9190613646565b60405180910390a35050565b611a7361242a565b73ffffffffffffffffffffffffffffffffffffffff16611a9161151f565b73ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614280565b60405180910390fd5b600b54611b0482611af6610d0f565b6128ff90919063ffffffff16565b1115611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90614664565b60405180910390fd5b60005b81811015611ba557611b92600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000815480929190611b8990614114565b919050556124eb565b8080611b9d90614114565b915050611b48565b5050565b611bba611bb461242a565b8361251e565b611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614214565b60405180910390fd5b611c058484848461295d565b50505050565b60008082600c54611c1c9190614684565b905060006103218210611c685760a0600c54610321611c3b9190614332565b611c4591906146da565b905060b461032183611c579190614332565b611c6191906146da565b9150611d54565b6102598210611cb057608c600c54610259611c839190614332565b611c8d91906146da565b905060a061025983611c9f9190614332565b611ca991906146da565b9150611d53565b6101918210611cf8576078600c54610191611ccb9190614332565b611cd591906146da565b9050608c61019183611ce79190614332565b611cf191906146da565b9150611d52565b60c98210611d3d576064600c5460c9611d119190614332565b611d1b91906146da565b9050607860c983611d2c9190614332565b611d3691906146da565b9150611d51565b60009050606484611d4e91906146da565b91505b5b5b5b670de0b6b3a76400008282611d699190614684565b611d7391906146da565b92505050919050565b6060611d878261240d565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd906147a6565b60405180910390fd5b6000600460008481526020019081526020016000208054611de690613d4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1290613d4e565b8015611e5f5780601f10611e3457610100808354040283529160200191611e5f565b820191906000526020600020905b815481529060010190602001808311611e4257829003601f168201915b5050505050905060006040518060200160405280600081525090506000611e8461101f565b905081604051602001611e979190614802565b6040516020818303038152906040528051906020012081604051602001611ebe9190614802565b6040516020818303038152906040528051906020012003611ee457829350505050611f93565b81604051602001611ef59190614802565b6040516020818303038152906040528051906020012083604051602001611f1c9190614802565b6040516020818303038152906040528051906020012014611f63578083604051602001611f4a929190614819565b6040516020818303038152906040529350505050611f93565b80611f6d866129b9565b604051602001611f7e929190614819565b60405160208183030381529060405293505050505b919050565b600d60009054906101000a900460ff1681565b6000610321600c5410611fc9576809c2007651b25000009050612029565b610259600c5410611fe5576808ac7230489e8000009050612029565b610191600c541061200157680796e3ea3f8ab000009050612029565b60c9600c541061201c5768068155a43676e000009050612029565b68056bc75e2d6310000090505b90565b600b5481565b61203a61242a565b73ffffffffffffffffffffffffffffffffffffffff1661205861151f565b73ffffffffffffffffffffffffffffffffffffffff16146120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a590614280565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561215b5750600073ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61216457600080fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224461242a565b73ffffffffffffffffffffffffffffffffffffffff1661226261151f565b73ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af90614280565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906148af565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612423826005612afb90919063ffffffff16565b9050919050565b600033905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a583610fe8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612505828260405180602001604052806000815250612b15565b5050565b600061251782600001612b70565b9050919050565b60006125298261240d565b612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614941565b60405180910390fd5b600061257383610fe8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125e257508373ffffffffffffffffffffffffffffffffffffffff166125ca8461094b565b73ffffffffffffffffffffffffffffffffffffffff16145b806125f357506125f281856121a8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661261c82610fe8565b73ffffffffffffffffffffffffffffffffffffffff1614612672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612669906149d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d890614a65565b60405180910390fd5b6126ec838383612b81565b6126f7600082612432565b61274881600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8690919063ffffffff16565b5061279a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612ba090919063ffffffff16565b506127b181836005612bba9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006128218360000183612bef565b60001c905092915050565b600082821115612871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286890614ad1565b60405180910390fd5b818361287d9190614332565b905092915050565b6000806000806128988660000186612c63565b915091508160001c8160001c9350935050509250929050565b80600990805190602001906128c79291906134ef565b5050565b60006128de846000018460001b84612ced565b60001c90509392505050565b60006128f882600001612d8e565b9050919050565b600080828461290e9190614684565b905083811015612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614b3d565b60405180910390fd5b8091505092915050565b6129688484846125fc565b61297484848484612d9f565b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614bcf565b60405180910390fd5b50505050565b6060600082905060005b600082146129ed5780806129d690614114565b915050600a826129e69190614c1e565b91506129c3565b60008167ffffffffffffffff811115612a0957612a086138ce565b5b6040519080825280601f01601f191660200182016040528015612a3b5781602001600182028036833780820191505090505b50905060008290505b60008614612aef57600181612a599190614332565b90506000600a8088612a6b9190614c1e565b612a7591906146da565b87612a809190614332565b6030612a8c9190614c5c565b905060008160f81b905080848481518110612aaa57612aa9614464565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88612ae69190614c1e565b97505050612a44565b81945050505050919050565b6000612b0d836000018360001b612f03565b905092915050565b612b1f8383612f26565b612b2c6000848484612d9f565b612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290614bcf565b60405180910390fd5b505050565b600081600001805490509050919050565b505050565b6000612b98836000018360001b6130b3565b905092915050565b6000612bb2836000018360001b6131cb565b905092915050565b6000612be6846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b61323b565b90509392505050565b600081836000018054905011612c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3190614d05565b60405180910390fd5b826000018281548110612c5057612c4f614464565b5b9060005260206000200154905092915050565b60008082846000018054905011612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614d97565b60405180910390fd5b6000846000018481548110612cc757612cc6614464565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4691906136fa565b60405180910390fd5b5084600001600182612d619190614332565b81548110612d7257612d71614464565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b6000612dc08473ffffffffffffffffffffffffffffffffffffffff16613326565b612dcd5760019050612efb565b6000612e9463150b7a0260e01b612de261242a565b888787604051602401612df89493929190614e2d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615109603291398773ffffffffffffffffffffffffffffffffffffffff166133399092919063ffffffff16565b9050600081806020019051810190612eac9190614e8e565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90614f07565b60405180910390fd5b612f9e8161240d565b15612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd590614f73565b60405180910390fd5b612fea60008383612b81565b61303b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612ba090919063ffffffff16565b5061305281836005612bba9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080836001016000848152602001908152602001600020549050600081146131bf5760006001826130e59190614332565b90506000600186600001805490506130fd9190614332565b9050600086600001828154811061311757613116614464565b5b906000526020600020015490508087600001848154811061313b5761313a614464565b5b90600052602060002001819055506001836131569190614684565b876001016000838152602001908152602001600020819055508660000180548061318357613182614f93565b5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131c5565b60009150505b92915050565b60006131d78383613351565b613230578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613235565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081036132e15784600001604051806040016040528086815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050846000018054905085600101600086815260200190815260200160002081905550600191505061331f565b82856000016001836132f39190614332565b8154811061330457613303614464565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080823b905060008111915050919050565b60606133488484600085613374565b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b6060824710156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090615034565b60405180910390fd5b6133c285613326565b613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f8906150a0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161342a91906150f1565b60006040518083038185875af1925050503d8060008114613467576040519150601f19603f3d011682016040523d82523d6000602084013e61346c565b606091505b509150915061347c828286613488565b92505050949350505050565b60608315613498578290506134e8565b6000835111156134ab5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134df91906136fa565b60405180910390fd5b9392505050565b8280546134fb90613d4e565b90600052602060002090601f01602090048101928261351d5760008555613564565b82601f1061353657805160ff1916838001178555613564565b82800160010185558215613564579182015b82811115613563578251825591602001919060010190613548565b5b5090506135719190613575565b5090565b5b8082111561358e576000816000905550600101613576565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135db816135a6565b81146135e657600080fd5b50565b6000813590506135f8816135d2565b92915050565b6000602082840312156136145761361361359c565b5b6000613622848285016135e9565b91505092915050565b60008115159050919050565b6136408161362b565b82525050565b600060208201905061365b6000830184613637565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561369b578082015181840152602081019050613680565b838111156136aa576000848401525b50505050565b6000601f19601f8301169050919050565b60006136cc82613661565b6136d6818561366c565b93506136e681856020860161367d565b6136ef816136b0565b840191505092915050565b6000602082019050818103600083015261371481846136c1565b905092915050565b6000819050919050565b61372f8161371c565b811461373a57600080fd5b50565b60008135905061374c81613726565b92915050565b6000602082840312156137685761376761359c565b5b60006137768482850161373d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137aa8261377f565b9050919050565b6137ba8161379f565b82525050565b60006020820190506137d560008301846137b1565b92915050565b6137e48161379f565b81146137ef57600080fd5b50565b600081359050613801816137db565b92915050565b6000806040838503121561381e5761381d61359c565b5b600061382c858286016137f2565b925050602061383d8582860161373d565b9150509250929050565b6138508161371c565b82525050565b600060208201905061386b6000830184613847565b92915050565b60008060006060848603121561388a5761388961359c565b5b6000613898868287016137f2565b93505060206138a9868287016137f2565b92505060406138ba8682870161373d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613906826136b0565b810181811067ffffffffffffffff82111715613925576139246138ce565b5b80604052505050565b6000613938613592565b905061394482826138fd565b919050565b600067ffffffffffffffff821115613964576139636138ce565b5b61396d826136b0565b9050602081019050919050565b82818337600083830152505050565b600061399c61399784613949565b61392e565b9050828152602081018484840111156139b8576139b76138c9565b5b6139c384828561397a565b509392505050565b600082601f8301126139e0576139df6138c4565b5b81356139f0848260208601613989565b91505092915050565b600060208284031215613a0f57613a0e61359c565b5b600082013567ffffffffffffffff811115613a2d57613a2c6135a1565b5b613a39848285016139cb565b91505092915050565b600060208284031215613a5857613a5761359c565b5b6000613a66848285016137f2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613aa48161371c565b82525050565b6000613ab68383613a9b565b60208301905092915050565b6000602082019050919050565b6000613ada82613a6f565b613ae48185613a7a565b9350613aef83613a8b565b8060005b83811015613b20578151613b078882613aaa565b9750613b1283613ac2565b925050600181019050613af3565b5085935050505092915050565b60006020820190508181036000830152613b478184613acf565b905092915050565b60008060408385031215613b6657613b6561359c565b5b6000613b74858286016137f2565b9250506020613b85858286016137f2565b9150509250929050565b613b988161362b565b8114613ba357600080fd5b50565b600081359050613bb581613b8f565b92915050565b60008060408385031215613bd257613bd161359c565b5b6000613be0858286016137f2565b9250506020613bf185828601613ba6565b9150509250929050565b600067ffffffffffffffff821115613c1657613c156138ce565b5b613c1f826136b0565b9050602081019050919050565b6000613c3f613c3a84613bfb565b61392e565b905082815260208101848484011115613c5b57613c5a6138c9565b5b613c6684828561397a565b509392505050565b600082601f830112613c8357613c826138c4565b5b8135613c93848260208601613c2c565b91505092915050565b60008060008060808587031215613cb657613cb561359c565b5b6000613cc4878288016137f2565b9450506020613cd5878288016137f2565b9350506040613ce68782880161373d565b925050606085013567ffffffffffffffff811115613d0757613d066135a1565b5b613d1387828801613c6e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d6657607f821691505b602082108103613d7957613d78613d1f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ddb602c8361366c565b9150613de682613d7f565b604082019050919050565b60006020820190508181036000830152613e0a81613dce565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6d60218361366c565b9150613e7882613e11565b604082019050919050565b60006020820190508181036000830152613e9c81613e60565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613eff60388361366c565b9150613f0a82613ea3565b604082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4e6f2072652d656e7472616e6365000000000000000000000000000000000000600082015250565b6000613f6b600e8361366c565b9150613f7682613f35565b602082019050919050565b60006020820190508181036000830152613f9a81613f5e565b9050919050565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b6000613fd760138361366c565b9150613fe282613fa1565b602082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b600061404360168361366c565b915061404e8261400d565b602082019050919050565b6000602082019050818103600083015261407281614036565b9050919050565b7f56616c75652062656c6f77206d696e7420707269636500000000000000000000600082015250565b60006140af60168361366c565b91506140ba82614079565b602082019050919050565b600060208201905081810360008301526140de816140a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411f8261371c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614151576141506140e5565b5b600182019050919050565b600081905092915050565b50565b600061417760008361415c565b915061418282614167565b600082019050919050565b60006141988261416a565b9150819050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006141fe60318361366c565b9150614209826141a2565b604082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061426a60208361366c565b915061427582614234565b602082019050919050565b600060208201905081810360008301526142998161425d565b9050919050565b7f596f752063616e206f6e6c79206275726e20612031202d20313030302061742060008201527f7468652074696d65000000000000000000000000000000000000000000000000602082015250565b60006142fc60288361366c565b9150614307826142a0565b604082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b600061433d8261371c565b91506143488361371c565b92508282101561435b5761435a6140e5565b5b828203905092915050565b7f5468657265204e465427732061726520616c6c726561647920636c61696d6564600082015250565b600061439c60208361366c565b91506143a782614366565b602082019050919050565b600060208201905081810360008301526143cb8161438f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061442e602a8361366c565b9150614439826143d2565b604082019050919050565b6000602082019050818103600083015261445d81614421565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506144a281613726565b92915050565b6000602082840312156144be576144bd61359c565b5b60006144cc84828501614493565b91505092915050565b60006040820190506144ea60008301856137b1565b6144f76020830184613847565b9392505050565b60008151905061450d81613b8f565b92915050565b6000602082840312156145295761452861359c565b5b6000614537848285016144fe565b91505092915050565b7f4e756d6265722063616e6e6f74206265207a65726f0000000000000000000000600082015250565b600061457660158361366c565b915061458182614540565b602082019050919050565b600060208201905081810360008301526145a581614569565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145e260198361366c565b91506145ed826145ac565b602082019050919050565b60006020820190508181036000830152614611816145d5565b9050919050565b7f45786365656473206d6178537570706c79000000000000000000000000000000600082015250565b600061464e60118361366c565b915061465982614618565b602082019050919050565b6000602082019050818103600083015261467d81614641565b9050919050565b600061468f8261371c565b915061469a8361371c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146cf576146ce6140e5565b5b828201905092915050565b60006146e58261371c565b91506146f08361371c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614729576147286140e5565b5b828202905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614790602f8361366c565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b600081905092915050565b60006147dc82613661565b6147e681856147c6565b93506147f681856020860161367d565b80840191505092915050565b600061480e82846147d1565b915081905092915050565b600061482582856147d1565b915061483182846147d1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061489960268361366c565b91506148a48261483d565b604082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061492b602c8361366c565b9150614936826148cf565b604082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006149bd60298361366c565b91506149c882614961565b604082019050919050565b600060208201905081810360008301526149ec816149b0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f60248361366c565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000614abb601e8361366c565b9150614ac682614a85565b602082019050919050565b60006020820190508181036000830152614aea81614aae565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b27601b8361366c565b9150614b3282614af1565b602082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614bb960328361366c565b9150614bc482614b5d565b604082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c298261371c565b9150614c348361371c565b925082614c4457614c43614bef565b5b828204905092915050565b600060ff82169050919050565b6000614c6782614c4f565b9150614c7283614c4f565b92508260ff03821115614c8857614c876140e5565b5b828201905092915050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cef60228361366c565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8160228361366c565b9150614d8c82614d25565b604082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b6000614dc28261377f565b9050919050565b614dd281614db7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000614dff82614dd8565b614e098185614de3565b9350614e1981856020860161367d565b614e22816136b0565b840191505092915050565b6000608082019050614e426000830187614dc9565b614e4f60208301866137b1565b614e5c6040830185613847565b8181036060830152614e6e8184614df4565b905095945050505050565b600081519050614e88816135d2565b92915050565b600060208284031215614ea457614ea361359c565b5b6000614eb284828501614e79565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ef160208361366c565b9150614efc82614ebb565b602082019050919050565b60006020820190508181036000830152614f2081614ee4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f5d601c8361366c565b9150614f6882614f27565b602082019050919050565b60006020820190508181036000830152614f8c81614f50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061501e60268361366c565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061508a601d8361366c565b915061509582615054565b602082019050919050565b600060208201905081810360008301526150b98161507d565b9050919050565b60006150cb82614dd8565b6150d5818561415c565b93506150e581856020860161367d565b80840191505092915050565b60006150fd82846150c0565b91508190509291505056fe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220d7942596495bf233381c0a64b0ff421815fe9a8c5304806d4d055eafd03ea26864736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d52597575736779554334326435543461746646656e4555554a504c69456679743931424e57614b676f64656a2f00000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80638462151c11610118578063ba839def116100a0578063d5abeb011161006f578063d5abeb011461076d578063e891e9d114610798578063e985e9c5146107c1578063f2fde38b146107fe578063f7260d3e146108275761020f565b8063ba839def1461069d578063c87b56dd146106da578063cc69c4e814610717578063d348b409146107425761020f565b806395d89b41116100e757806395d89b41146105db578063a202ce4a14610606578063a22cb46514610622578063a40f1aa51461064b578063b88d4fde146106745761020f565b80638462151c14610533578063853828b6146105705780638da5cb5b14610587578063935fd24c146105b25761020f565b806342966c681161019b5780636c0360eb1161016a5780636c0360eb1461047257806370a082311461049d578063715018a6146104da578063771282f6146104f15780637d8966e41461051c5761020f565b806342966c68146103a65780634f6ccce7146103cf57806355f804b31461040c5780636352211e146104355761020f565b806314f710fe116101e257806314f710fe146102e257806318160ddd146102ec57806323b872dd146103175780632f745c591461034057806342842e0e1461037d5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906135fe565b610852565b6040516102489190613646565b60405180910390f35b34801561025d57600080fd5b506102666108b9565b60405161027391906136fa565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613752565b61094b565b6040516102b091906137c0565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613807565b6109d0565b005b6102ea610ae7565b005b3480156102f857600080fd5b50610301610d0f565b60405161030e9190613856565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190613871565b610d20565b005b34801561034c57600080fd5b5061036760048036038101906103629190613807565b610d80565b6040516103749190613856565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613871565b610ddb565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613752565b610dfb565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613752565b610f3d565b6040516104039190613856565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906139f9565b610f60565b005b34801561044157600080fd5b5061045c60048036038101906104579190613752565b610fe8565b60405161046991906137c0565b60405180910390f35b34801561047e57600080fd5b5061048761101f565b60405161049491906136fa565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613a42565b6110b1565b6040516104d19190613856565b60405180910390f35b3480156104e657600080fd5b506104ef61116f565b005b3480156104fd57600080fd5b506105066112ac565b6040516105139190613856565b60405180910390f35b34801561052857600080fd5b506105316112b2565b005b34801561053f57600080fd5b5061055a60048036038101906105559190613a42565b61135a565b6040516105679190613b2d565b60405180910390f35b34801561057c57600080fd5b50610585611463565b005b34801561059357600080fd5b5061059c61151f565b6040516105a991906137c0565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613b4f565b611549565b005b3480156105e757600080fd5b506105f0611645565b6040516105fd91906136fa565b60405180910390f35b610620600480360381019061061b9190613752565b6116d7565b005b34801561062e57600080fd5b5061064960048036038101906106449190613bbb565b6118eb565b005b34801561065757600080fd5b50610672600480360381019061066d9190613752565b611a6b565b005b34801561068057600080fd5b5061069b60048036038101906106969190613c9c565b611ba9565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613752565b611c0b565b6040516106d19190613856565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190613752565b611d7c565b60405161070e91906136fa565b60405180910390f35b34801561072357600080fd5b5061072c611f98565b6040516107399190613646565b60405180910390f35b34801561074e57600080fd5b50610757611fab565b6040516107649190613856565b60405180910390f35b34801561077957600080fd5b5061078261202c565b60405161078f9190613856565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190613a42565b612032565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613b4f565b6121a8565b6040516107f59190613646565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613a42565b61223c565b005b34801561083357600080fd5b5061083c6123e7565b60405161084991906137c0565b60405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600780546108c890613d4e565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613d4e565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b60006109568261240d565b610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90613df1565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109db82610fe8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613e83565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6a61242a565b73ffffffffffffffffffffffffffffffffffffffff161480610a995750610a9881610a9361242a565b6121a8565b5b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613f15565b60405180910390fd5b610ae28383612432565b505050565b600d60019054906101000a900460ff1615610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613f81565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555060011515600d60009054906101000a900460ff16151514610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613fed565b60405180910390fd5b600b54600c541115610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690614059565b60405180910390fd5b6000610bf9611fab565b905080341015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906140c5565b60405180910390fd5b6000600c60008154610c4f90614114565b9190508190559050610c6133826124eb565b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610ca99061418d565b60006040518083038185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b505090505050506000600d60016101000a81548160ff021916908315150217905550565b6000610d1b6005612509565b905090565b610d31610d2b61242a565b8261251e565b610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790614214565b60405180910390fd5b610d7b8383836125fc565b505050565b6000610dd382600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061281290919063ffffffff16565b905092915050565b610df683838360405180602001604052806000815250611ba9565b505050565b610e0361242a565b73ffffffffffffffffffffffffffffffffffffffff16610e2161151f565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614280565b60405180910390fd5b600081118015610e8957506103e88111155b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614312565b60405180910390fd5b80600b54610ed69190614332565b610ede610d0f565b1115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906143b2565b60405180910390fd5b610f3481600b5461282c90919063ffffffff16565b600b8190555050565b600080610f5483600561288590919063ffffffff16565b50905080915050919050565b610f6861242a565b73ffffffffffffffffffffffffffffffffffffffff16610f8661151f565b73ffffffffffffffffffffffffffffffffffffffff1614610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390614280565b60405180910390fd5b610fe5816128b1565b50565b60006110188260405180606001604052806029815260200161513b6029913960056128cb9092919063ffffffff16565b9050919050565b60606009805461102e90613d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461105a90613d4e565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890614444565b60405180910390fd5b611168600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206128ea565b9050919050565b61117761242a565b73ffffffffffffffffffffffffffffffffffffffff1661119561151f565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290614280565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b6112ba61242a565b73ffffffffffffffffffffffffffffffffffffffff166112d861151f565b73ffffffffffffffffffffffffffffffffffffffff161461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590614280565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60606000611367836110b1565b9050600081036113c357600067ffffffffffffffff81111561138c5761138b6138ce565b5b6040519080825280602002602001820160405280156113ba5781602001602082028036833780820191505090505b5091505061145e565b60008167ffffffffffffffff8111156113df576113de6138ce565b5b60405190808252806020026020018201604052801561140d5781602001602082028036833780820191505090505b50905060005b82811015611457576114258582610d80565b82828151811061143857611437614464565b5b602002602001018181525050808061144f90614114565b915050611413565b8193505050505b919050565b61146b61242a565b73ffffffffffffffffffffffffffffffffffffffff1661148961151f565b73ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690614280565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061151d57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159f91906137c0565b602060405180830381865afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e091906144a8565b6040518363ffffffff1660e01b81526004016115fd9291906144d5565b6020604051808303816000875af115801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190614513565b505050565b60606008805461165490613d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461168090613d4e565b80156116cd5780601f106116a2576101008083540402835291602001916116cd565b820191906000526020600020905b8154815290600101906020018083116116b057829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1615611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613f81565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555060011515600d60009054906101000a900460ff16151514611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613fed565b60405180910390fd5b600081116117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d29061458c565b60405180910390fd5b600b546117f8826117ea610d0f565b6128ff90919063ffffffff16565b1115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614059565b60405180910390fd5b600061184482611c0b565b905080341015611889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611880906140c5565b60405180910390fd5b60005b828110156118cb576000600c600081546118a590614114565b91905081905590506118b733826124eb565b5080806118c390614114565b91505061188c565b50506000600d60016101000a81548160ff02191690831515021790555050565b6118f361242a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906145f8565b60405180910390fd5b806003600061196d61242a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1a61242a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a5f9190613646565b60405180910390a35050565b611a7361242a565b73ffffffffffffffffffffffffffffffffffffffff16611a9161151f565b73ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614280565b60405180910390fd5b600b54611b0482611af6610d0f565b6128ff90919063ffffffff16565b1115611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90614664565b60405180910390fd5b60005b81811015611ba557611b92600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000815480929190611b8990614114565b919050556124eb565b8080611b9d90614114565b915050611b48565b5050565b611bba611bb461242a565b8361251e565b611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614214565b60405180910390fd5b611c058484848461295d565b50505050565b60008082600c54611c1c9190614684565b905060006103218210611c685760a0600c54610321611c3b9190614332565b611c4591906146da565b905060b461032183611c579190614332565b611c6191906146da565b9150611d54565b6102598210611cb057608c600c54610259611c839190614332565b611c8d91906146da565b905060a061025983611c9f9190614332565b611ca991906146da565b9150611d53565b6101918210611cf8576078600c54610191611ccb9190614332565b611cd591906146da565b9050608c61019183611ce79190614332565b611cf191906146da565b9150611d52565b60c98210611d3d576064600c5460c9611d119190614332565b611d1b91906146da565b9050607860c983611d2c9190614332565b611d3691906146da565b9150611d51565b60009050606484611d4e91906146da565b91505b5b5b5b670de0b6b3a76400008282611d699190614684565b611d7391906146da565b92505050919050565b6060611d878261240d565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd906147a6565b60405180910390fd5b6000600460008481526020019081526020016000208054611de690613d4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1290613d4e565b8015611e5f5780601f10611e3457610100808354040283529160200191611e5f565b820191906000526020600020905b815481529060010190602001808311611e4257829003601f168201915b5050505050905060006040518060200160405280600081525090506000611e8461101f565b905081604051602001611e979190614802565b6040516020818303038152906040528051906020012081604051602001611ebe9190614802565b6040516020818303038152906040528051906020012003611ee457829350505050611f93565b81604051602001611ef59190614802565b6040516020818303038152906040528051906020012083604051602001611f1c9190614802565b6040516020818303038152906040528051906020012014611f63578083604051602001611f4a929190614819565b6040516020818303038152906040529350505050611f93565b80611f6d866129b9565b604051602001611f7e929190614819565b60405160208183030381529060405293505050505b919050565b600d60009054906101000a900460ff1681565b6000610321600c5410611fc9576809c2007651b25000009050612029565b610259600c5410611fe5576808ac7230489e8000009050612029565b610191600c541061200157680796e3ea3f8ab000009050612029565b60c9600c541061201c5768068155a43676e000009050612029565b68056bc75e2d6310000090505b90565b600b5481565b61203a61242a565b73ffffffffffffffffffffffffffffffffffffffff1661205861151f565b73ffffffffffffffffffffffffffffffffffffffff16146120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a590614280565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561215b5750600073ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61216457600080fd5b80600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224461242a565b73ffffffffffffffffffffffffffffffffffffffff1661226261151f565b73ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af90614280565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e906148af565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612423826005612afb90919063ffffffff16565b9050919050565b600033905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a583610fe8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612505828260405180602001604052806000815250612b15565b5050565b600061251782600001612b70565b9050919050565b60006125298261240d565b612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614941565b60405180910390fd5b600061257383610fe8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125e257508373ffffffffffffffffffffffffffffffffffffffff166125ca8461094b565b73ffffffffffffffffffffffffffffffffffffffff16145b806125f357506125f281856121a8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661261c82610fe8565b73ffffffffffffffffffffffffffffffffffffffff1614612672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612669906149d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d890614a65565b60405180910390fd5b6126ec838383612b81565b6126f7600082612432565b61274881600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b8690919063ffffffff16565b5061279a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612ba090919063ffffffff16565b506127b181836005612bba9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006128218360000183612bef565b60001c905092915050565b600082821115612871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286890614ad1565b60405180910390fd5b818361287d9190614332565b905092915050565b6000806000806128988660000186612c63565b915091508160001c8160001c9350935050509250929050565b80600990805190602001906128c79291906134ef565b5050565b60006128de846000018460001b84612ced565b60001c90509392505050565b60006128f882600001612d8e565b9050919050565b600080828461290e9190614684565b905083811015612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614b3d565b60405180910390fd5b8091505092915050565b6129688484846125fc565b61297484848484612d9f565b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614bcf565b60405180910390fd5b50505050565b6060600082905060005b600082146129ed5780806129d690614114565b915050600a826129e69190614c1e565b91506129c3565b60008167ffffffffffffffff811115612a0957612a086138ce565b5b6040519080825280601f01601f191660200182016040528015612a3b5781602001600182028036833780820191505090505b50905060008290505b60008614612aef57600181612a599190614332565b90506000600a8088612a6b9190614c1e565b612a7591906146da565b87612a809190614332565b6030612a8c9190614c5c565b905060008160f81b905080848481518110612aaa57612aa9614464565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88612ae69190614c1e565b97505050612a44565b81945050505050919050565b6000612b0d836000018360001b612f03565b905092915050565b612b1f8383612f26565b612b2c6000848484612d9f565b612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290614bcf565b60405180910390fd5b505050565b600081600001805490509050919050565b505050565b6000612b98836000018360001b6130b3565b905092915050565b6000612bb2836000018360001b6131cb565b905092915050565b6000612be6846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b61323b565b90509392505050565b600081836000018054905011612c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3190614d05565b60405180910390fd5b826000018281548110612c5057612c4f614464565b5b9060005260206000200154905092915050565b60008082846000018054905011612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614d97565b60405180910390fd5b6000846000018481548110612cc757612cc6614464565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4691906136fa565b60405180910390fd5b5084600001600182612d619190614332565b81548110612d7257612d71614464565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b6000612dc08473ffffffffffffffffffffffffffffffffffffffff16613326565b612dcd5760019050612efb565b6000612e9463150b7a0260e01b612de261242a565b888787604051602401612df89493929190614e2d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615109603291398773ffffffffffffffffffffffffffffffffffffffff166133399092919063ffffffff16565b9050600081806020019051810190612eac9190614e8e565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8c90614f07565b60405180910390fd5b612f9e8161240d565b15612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd590614f73565b60405180910390fd5b612fea60008383612b81565b61303b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612ba090919063ffffffff16565b5061305281836005612bba9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080836001016000848152602001908152602001600020549050600081146131bf5760006001826130e59190614332565b90506000600186600001805490506130fd9190614332565b9050600086600001828154811061311757613116614464565b5b906000526020600020015490508087600001848154811061313b5761313a614464565b5b90600052602060002001819055506001836131569190614684565b876001016000838152602001908152602001600020819055508660000180548061318357613182614f93565b5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506131c5565b60009150505b92915050565b60006131d78383613351565b613230578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613235565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081036132e15784600001604051806040016040528086815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050846000018054905085600101600086815260200190815260200160002081905550600191505061331f565b82856000016001836132f39190614332565b8154811061330457613303614464565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080823b905060008111915050919050565b60606133488484600085613374565b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b6060824710156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090615034565b60405180910390fd5b6133c285613326565b613401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f8906150a0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161342a91906150f1565b60006040518083038185875af1925050503d8060008114613467576040519150601f19603f3d011682016040523d82523d6000602084013e61346c565b606091505b509150915061347c828286613488565b92505050949350505050565b60608315613498578290506134e8565b6000835111156134ab5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134df91906136fa565b60405180910390fd5b9392505050565b8280546134fb90613d4e565b90600052602060002090601f01602090048101928261351d5760008555613564565b82601f1061353657805160ff1916838001178555613564565b82800160010185558215613564579182015b82811115613563578251825591602001919060010190613548565b5b5090506135719190613575565b5090565b5b8082111561358e576000816000905550600101613576565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135db816135a6565b81146135e657600080fd5b50565b6000813590506135f8816135d2565b92915050565b6000602082840312156136145761361361359c565b5b6000613622848285016135e9565b91505092915050565b60008115159050919050565b6136408161362b565b82525050565b600060208201905061365b6000830184613637565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561369b578082015181840152602081019050613680565b838111156136aa576000848401525b50505050565b6000601f19601f8301169050919050565b60006136cc82613661565b6136d6818561366c565b93506136e681856020860161367d565b6136ef816136b0565b840191505092915050565b6000602082019050818103600083015261371481846136c1565b905092915050565b6000819050919050565b61372f8161371c565b811461373a57600080fd5b50565b60008135905061374c81613726565b92915050565b6000602082840312156137685761376761359c565b5b60006137768482850161373d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137aa8261377f565b9050919050565b6137ba8161379f565b82525050565b60006020820190506137d560008301846137b1565b92915050565b6137e48161379f565b81146137ef57600080fd5b50565b600081359050613801816137db565b92915050565b6000806040838503121561381e5761381d61359c565b5b600061382c858286016137f2565b925050602061383d8582860161373d565b9150509250929050565b6138508161371c565b82525050565b600060208201905061386b6000830184613847565b92915050565b60008060006060848603121561388a5761388961359c565b5b6000613898868287016137f2565b93505060206138a9868287016137f2565b92505060406138ba8682870161373d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613906826136b0565b810181811067ffffffffffffffff82111715613925576139246138ce565b5b80604052505050565b6000613938613592565b905061394482826138fd565b919050565b600067ffffffffffffffff821115613964576139636138ce565b5b61396d826136b0565b9050602081019050919050565b82818337600083830152505050565b600061399c61399784613949565b61392e565b9050828152602081018484840111156139b8576139b76138c9565b5b6139c384828561397a565b509392505050565b600082601f8301126139e0576139df6138c4565b5b81356139f0848260208601613989565b91505092915050565b600060208284031215613a0f57613a0e61359c565b5b600082013567ffffffffffffffff811115613a2d57613a2c6135a1565b5b613a39848285016139cb565b91505092915050565b600060208284031215613a5857613a5761359c565b5b6000613a66848285016137f2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613aa48161371c565b82525050565b6000613ab68383613a9b565b60208301905092915050565b6000602082019050919050565b6000613ada82613a6f565b613ae48185613a7a565b9350613aef83613a8b565b8060005b83811015613b20578151613b078882613aaa565b9750613b1283613ac2565b925050600181019050613af3565b5085935050505092915050565b60006020820190508181036000830152613b478184613acf565b905092915050565b60008060408385031215613b6657613b6561359c565b5b6000613b74858286016137f2565b9250506020613b85858286016137f2565b9150509250929050565b613b988161362b565b8114613ba357600080fd5b50565b600081359050613bb581613b8f565b92915050565b60008060408385031215613bd257613bd161359c565b5b6000613be0858286016137f2565b9250506020613bf185828601613ba6565b9150509250929050565b600067ffffffffffffffff821115613c1657613c156138ce565b5b613c1f826136b0565b9050602081019050919050565b6000613c3f613c3a84613bfb565b61392e565b905082815260208101848484011115613c5b57613c5a6138c9565b5b613c6684828561397a565b509392505050565b600082601f830112613c8357613c826138c4565b5b8135613c93848260208601613c2c565b91505092915050565b60008060008060808587031215613cb657613cb561359c565b5b6000613cc4878288016137f2565b9450506020613cd5878288016137f2565b9350506040613ce68782880161373d565b925050606085013567ffffffffffffffff811115613d0757613d066135a1565b5b613d1387828801613c6e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d6657607f821691505b602082108103613d7957613d78613d1f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ddb602c8361366c565b9150613de682613d7f565b604082019050919050565b60006020820190508181036000830152613e0a81613dce565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6d60218361366c565b9150613e7882613e11565b604082019050919050565b60006020820190508181036000830152613e9c81613e60565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613eff60388361366c565b9150613f0a82613ea3565b604082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4e6f2072652d656e7472616e6365000000000000000000000000000000000000600082015250565b6000613f6b600e8361366c565b9150613f7682613f35565b602082019050919050565b60006020820190508181036000830152613f9a81613f5e565b9050919050565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b6000613fd760138361366c565b9150613fe282613fa1565b602082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b600061404360168361366c565b915061404e8261400d565b602082019050919050565b6000602082019050818103600083015261407281614036565b9050919050565b7f56616c75652062656c6f77206d696e7420707269636500000000000000000000600082015250565b60006140af60168361366c565b91506140ba82614079565b602082019050919050565b600060208201905081810360008301526140de816140a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411f8261371c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614151576141506140e5565b5b600182019050919050565b600081905092915050565b50565b600061417760008361415c565b915061418282614167565b600082019050919050565b60006141988261416a565b9150819050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006141fe60318361366c565b9150614209826141a2565b604082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061426a60208361366c565b915061427582614234565b602082019050919050565b600060208201905081810360008301526142998161425d565b9050919050565b7f596f752063616e206f6e6c79206275726e20612031202d20313030302061742060008201527f7468652074696d65000000000000000000000000000000000000000000000000602082015250565b60006142fc60288361366c565b9150614307826142a0565b604082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b600061433d8261371c565b91506143488361371c565b92508282101561435b5761435a6140e5565b5b828203905092915050565b7f5468657265204e465427732061726520616c6c726561647920636c61696d6564600082015250565b600061439c60208361366c565b91506143a782614366565b602082019050919050565b600060208201905081810360008301526143cb8161438f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061442e602a8361366c565b9150614439826143d2565b604082019050919050565b6000602082019050818103600083015261445d81614421565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506144a281613726565b92915050565b6000602082840312156144be576144bd61359c565b5b60006144cc84828501614493565b91505092915050565b60006040820190506144ea60008301856137b1565b6144f76020830184613847565b9392505050565b60008151905061450d81613b8f565b92915050565b6000602082840312156145295761452861359c565b5b6000614537848285016144fe565b91505092915050565b7f4e756d6265722063616e6e6f74206265207a65726f0000000000000000000000600082015250565b600061457660158361366c565b915061458182614540565b602082019050919050565b600060208201905081810360008301526145a581614569565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145e260198361366c565b91506145ed826145ac565b602082019050919050565b60006020820190508181036000830152614611816145d5565b9050919050565b7f45786365656473206d6178537570706c79000000000000000000000000000000600082015250565b600061464e60118361366c565b915061465982614618565b602082019050919050565b6000602082019050818103600083015261467d81614641565b9050919050565b600061468f8261371c565b915061469a8361371c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146cf576146ce6140e5565b5b828201905092915050565b60006146e58261371c565b91506146f08361371c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614729576147286140e5565b5b828202905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614790602f8361366c565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b600081905092915050565b60006147dc82613661565b6147e681856147c6565b93506147f681856020860161367d565b80840191505092915050565b600061480e82846147d1565b915081905092915050565b600061482582856147d1565b915061483182846147d1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061489960268361366c565b91506148a48261483d565b604082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061492b602c8361366c565b9150614936826148cf565b604082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006149bd60298361366c565b91506149c882614961565b604082019050919050565b600060208201905081810360008301526149ec816149b0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f60248361366c565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000614abb601e8361366c565b9150614ac682614a85565b602082019050919050565b60006020820190508181036000830152614aea81614aae565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b27601b8361366c565b9150614b3282614af1565b602082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614bb960328361366c565b9150614bc482614b5d565b604082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c298261371c565b9150614c348361371c565b925082614c4457614c43614bef565b5b828204905092915050565b600060ff82169050919050565b6000614c6782614c4f565b9150614c7283614c4f565b92508260ff03821115614c8857614c876140e5565b5b828201905092915050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cef60228361366c565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8160228361366c565b9150614d8c82614d25565b604082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b6000614dc28261377f565b9050919050565b614dd281614db7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000614dff82614dd8565b614e098185614de3565b9350614e1981856020860161367d565b614e22816136b0565b840191505092915050565b6000608082019050614e426000830187614dc9565b614e4f60208301866137b1565b614e5c6040830185613847565b8181036060830152614e6e8184614df4565b905095945050505050565b600081519050614e88816135d2565b92915050565b600060208284031215614ea457614ea361359c565b5b6000614eb284828501614e79565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ef160208361366c565b9150614efc82614ebb565b602082019050919050565b60006020820190508181036000830152614f2081614ee4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f5d601c8361366c565b9150614f6882614f27565b602082019050919050565b60006020820190508181036000830152614f8c81614f50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061501e60268361366c565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061508a601d8361366c565b915061509582615054565b602082019050919050565b600060208201905081810360008301526150b98161507d565b9050919050565b60006150cb82614dd8565b6150d5818561415c565b93506150e581856020860161367d565b80840191505092915050565b60006150fd82846150c0565b91508190509291505056fe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220d7942596495bf233381c0a64b0ff421815fe9a8c5304806d4d055eafd03ea26864736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d52597575736779554334326435543461746646656e4555554a504c69456679743931424e57614b676f64656a2f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmRYuusgyUC42d5T4atfFenEUUJPLiEfyt91BNWaKgodej/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d52597575736779554334326435543461746646656e4555
Arg [3] : 554a504c69456679743931424e57614b676f64656a2f00000000000000000000
Deployed Bytecode Sourcemap
31717:4440:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3379:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22084:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24168:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23781:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32960:456;;;:::i;:::-;;23473:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24856:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23319:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25169:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35086:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23599:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35383:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21915:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23230:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21684:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31302:152;;;;;;;;;;;;;:::i;:::-;;31840:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35474:74;;;;;;;;;;;;;:::i;:::-;;32491:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35795:101;;;;;;;;;;;;;:::i;:::-;;31223:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36002:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22176:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33422:551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24397:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35554:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25312:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34378:702;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22272:952;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31877:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33979:393;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31802:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32328:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24700:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31460:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32089:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:154;3464:4;3488:20;:33;3509:11;3488:33;;;;;;;;;;;;;;;;;;;;;;;;;;;3481:40;;3379:154;;;:::o;22084:86::-;22138:13;22162:5;22155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22084:86;:::o;24168:223::-;24244:7;24272:16;24280:7;24272;:16::i;:::-;24264:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24355:15;:24;24371:7;24355:24;;;;;;;;;;;;;;;;;;;;;24348:31;;24168:223;;;:::o;23781:381::-;23862:13;23878:23;23893:7;23878:14;:23::i;:::-;23862:39;;23926:5;23920:11;;:2;:11;;;23912:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24004:5;23988:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;24013:44;24037:5;24044:12;:10;:12::i;:::-;24013:23;:44::i;:::-;23988:69;23980:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;24129:21;24138:2;24142:7;24129:8;:21::i;:::-;23851:311;23781:381;;:::o;32960:456::-;31985:6;;;;;;;;;;;31984:7;31976:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;32030:4;32021:6;;:13;;;;;;;;;;;;;;;;;;33040:4:::1;33023:21;;:13;;;;;;;;;;;:21;;;33015:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;33104:9;;33087:13;;:26;;33079:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33151:12;33166:16;:14;:16::i;:::-;33151:31;;33214:4;33201:9;:17;;33193:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33256:13;33274;;33272:15;;;;;:::i;:::-;;;;;;;33256:31;;33298:28;33308:10;33320:5;33298:9;:28::i;:::-;33340:12;33357:8;;;;;;;;;;;:13;;33378:21;33357:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33339:65;;;33004:412;;;32066:5:::0;32057:6;;:14;;;;;;;;;;;;;;;;;;32960:456::o;23473:103::-;23534:7;23552:21;:12;:19;:21::i;:::-;23545:28;;23473:103;:::o;24856:307::-;25017:41;25036:12;:10;:12::i;:::-;25050:7;25017:18;:41::i;:::-;25009:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25123:28;25133:4;25139:2;25143:7;25123:9;:28::i;:::-;24856:307;;;:::o;23319:148::-;23416:7;23434:30;23458:5;23434:13;:20;23448:5;23434:20;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;23427:37;;23319:148;;;;:::o;25169:137::-;25264:39;25281:4;25287:2;25291:7;25264:39;;;;;;;;;;;;:16;:39::i;:::-;25169:137;;;:::o;35086:291::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35163:1:::1;35153:7;:11;:30;;;;;35179:4;35168:7;:15;;35153:30;35145:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35276:7;35264:9;;:19;;;;:::i;:::-;35247:13;:11;:13::i;:::-;:36;;35239:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35343:22;35357:7;35343:9;;:13;;:22;;;;:::i;:::-;35331:9;:34;;;;35086:291:::0;:::o;23599:176::-;23674:7;23695:15;23716:22;23732:5;23716:12;:15;;:22;;;;:::i;:::-;23694:44;;;23756:7;23749:14;;;23599:176;;;:::o;35383:85::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35445:20:::1;35457:7;35445:11;:20::i;:::-;35383:85:::0;:::o;21915:163::-;21987:7;22005:70;22022:7;22005:70;;;;;;;;;;;;;;;;;:12;:16;;:70;;;;;:::i;:::-;21998:77;;21915:163;;;:::o;23230:83::-;23278:13;23302:8;23295:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23230:83;:::o;21684:225::-;21756:7;21801:1;21784:19;;:5;:19;;;21776:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21868:29;:13;:20;21882:5;21868:20;;;;;;;;;;;;;;;:27;:29::i;:::-;21861:36;;21684:225;;;:::o;31302:152::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31409:1:::1;31372:40;;31393:6;;;;;;;;;;;31372:40;;;;;;;;;;;;31440:1;31423:6;;:19;;;;;;;;;;;;;;;;;;31302:152::o:0;31840:28::-;;;;:::o;35474:74::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35532:13:::1;;;;;;;;;;;35531:14;35515:13;;:30;;;;;;;;;;;;;;;;;;35474:74::o:0;32491:463::-;32553:16;32582:18;32603:17;32613:6;32603:9;:17::i;:::-;32582:38;;32649:1;32635:10;:15;32631:312;;32675:1;32661:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32654:23;;;;;32631:312;32710:23;32750:10;32736:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32710:51;;32776:13;32804:100;32828:10;32820:5;:18;32804:100;;;32867:34;32887:6;32895:5;32867:19;:34::i;:::-;32851:6;32858:5;32851:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;32840:7;;;;;:::i;:::-;;;;32804:100;;;32925:6;32918:13;;;;;32491:463;;;;:::o;35795:101::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35853:10:::1;35845:24;;:47;35870:21;35845:47;;;;;;;;;;;;;;;;;;;;;;;35837:56;;;::::0;::::1;;35795:101::o:0;31223:73::-;31269:7;31287:6;;;;;;;;;;;31280:13;;31223:73;:::o;36002:152::-;36080:6;36073:23;;;36097:3;36109:6;36102:24;;;36135:4;36102:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36073:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36002:152;;:::o;22176:90::-;22232:13;22256:7;22249:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22176:90;:::o;33422:551::-;31985:6;;;;;;;;;;;31984:7;31976:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;32030:4;32021:6;;:13;;;;;;;;;;;;;;;;;;33525:4:::1;33508:21;;:13;;;;;;;;;;;:21;;;33500:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;33582:1;33572:7;:11;33564:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;33658:9;;33628:26;33646:7;33628:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;33620:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33705:12;33720:31;33743:7;33720:22;:31::i;:::-;33705:46;;33783:4;33770:9;:17;;33762:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33830:6;33825:137;33846:7;33842:1;:11;33825:137;;;33876:13;33894;;33892:15;;;;;:::i;:::-;;;;;;;33876:31;;33922:28;33932:10;33944:5;33922:9;:28::i;:::-;33860:102;33855:3;;;;;:::i;:::-;;;;33825:137;;;;33489:484;32066:5:::0;32057:6;;:14;;;;;;;;;;;;;;;;;;33422:551;:::o;24397:297::-;24512:12;:10;:12::i;:::-;24500:24;;:8;:24;;;24492:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24610:8;24565:18;:32;24584:12;:10;:12::i;:::-;24565:32;;;;;;;;;;;;;;;:42;24598:8;24565:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24663:8;24634:48;;24649:12;:10;:12::i;:::-;24634:48;;;24673:8;24634:48;;;;;;:::i;:::-;;;;;;;;24397:297;;:::o;35554:235::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35662:9:::1;;35632:26;35650:7;35632:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;35624:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35708:9;35704:74;35723:7;35721:1;:9;35704:74;;;35739:36;35749:8;;;;;;;;;;;35759:13;;:15;;;;;;;;;:::i;:::-;;;;;35739:9;:36::i;:::-;35732:3;;;;;:::i;:::-;;;;35704:74;;;;35554:235:::0;:::o;25312:289::-;25444:41;25463:12;:10;:12::i;:::-;25477:7;25444:18;:41::i;:::-;25436:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25550:39;25564:4;25570:2;25574:7;25583:5;25550:13;:39::i;:::-;25312:289;;;;:::o;34378:702::-;34448:7;34468:12;34499:7;34483:13;;:23;;;;:::i;:::-;34468:38;;34517:13;34560:3;34552:4;:11;34543:485;;34599:3;34582:13;;34576:3;:19;;;;:::i;:::-;34575:27;;;;:::i;:::-;34567:35;;34626:3;34619;34612:4;:10;;;;:::i;:::-;34611:18;;;;:::i;:::-;34604:25;;34543:485;;;34659:3;34651:4;:11;34647:381;;34698:3;34681:13;;34675:3;:19;;;;:::i;:::-;34674:27;;;;:::i;:::-;34666:35;;34725:3;34718;34711:4;:10;;;;:::i;:::-;34710:18;;;;:::i;:::-;34703:25;;34647:381;;;34758:3;34750:4;:11;34746:282;;34797:3;34780:13;;34774:3;:19;;;;:::i;:::-;34773:27;;;;:::i;:::-;34765:35;;34824:3;34817;34810:4;:10;;;;:::i;:::-;34809:18;;;;:::i;:::-;34802:25;;34746:282;;;34857:3;34849:4;:11;34845:183;;34896:3;34879:13;;34873:3;:19;;;;:::i;:::-;34872:27;;;;:::i;:::-;34864:35;;34923:3;34916;34909:4;:10;;;;:::i;:::-;34908:18;;;;:::i;:::-;34901:25;;34845:183;;;34971:1;34963:9;;35022:3;35012:7;:13;;;;:::i;:::-;35005:20;;34845:183;34746:282;34647:381;34543:485;35062:6;35054:4;35046:5;:12;;;;:::i;:::-;35045:23;;;;:::i;:::-;35038:30;;;;34378:702;;;:::o;22272:952::-;22345:13;22379:16;22387:7;22379;:16::i;:::-;22371:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:23;22486:10;:19;22497:7;22486:19;;;;;;;;;;;22460:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22516:20;:25;;;;;;;;;;;;;;22552:18;22573:9;:7;:9::i;:::-;22552:30;;22905:6;22888:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;22878:35;;;;;;22868:4;22851:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;22841:33;;;;;;:72;22837:99;;22924:9;22917:16;;;;;;;22837:99;23019:6;23002:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;22992:35;;;;;;22977:9;22960:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;22950:38;;;;;;:77;22946:136;;23062:4;23068:9;23045:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23031:48;;;;;;;22946:136;23123:4;23129:18;:7;:16;:18::i;:::-;23106:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23092:57;;;;;22272:952;;;;:::o;31877:33::-;;;;;;;;;;;;;:::o;33979:393::-;34026:7;34072:3;34055:13;;:20;34046:315;;34086:12;34079:19;;;;34046:315;34137:3;34120:13;;:20;34116:245;;34151:12;34144:19;;;;34116:245;34202:3;34185:13;;:20;34181:180;;34216:12;34209:19;;;;34181:180;34267:3;34250:13;;:20;34246:115;;34281:12;34274:19;;;;34246:115;34346:12;34339:19;;33979:393;;:::o;31802:31::-;;;;:::o;32328:157::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32416:4:::1;32404:16;;:8;;;;;;;;;;;:16;;;;:42;;;;;32444:1;32424:22;;:8;;;;;;;;;;;:22;;;;32404:42;32396:51;;;::::0;::::1;;32469:4;32458:8;;:15;;;;;;;;;;;;;;;;;;32328:157:::0;:::o;24700:150::-;24797:4;24812:18;:25;24831:5;24812:25;;;;;;;;;;;;;;;:35;24838:8;24812:35;;;;;;;;;;;;;;;;;;;;;;;;;24805:42;;24700:150;;;;:::o;31460:248::-;30896:12;:10;:12::i;:::-;30885:23;;:7;:5;:7::i;:::-;:23;;;30877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31569:1:::1;31549:22;;:8;:22;;::::0;31541:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31659:8;31630:38;;31651:6;;;;;;;;;;;31630:38;;;;;;;;;;;;31688:8;31679:6;;:17;;;;;;;;;;;;;;;;;;31460:248:::0;:::o;32089:68::-;;;;;;;;;;;;;:::o;26763:113::-;26828:4;26843:30;26865:7;26843:12;:21;;:30;;;;:::i;:::-;26836:37;;26763:113;;;:::o;208:101::-;261:15;295:10;280:26;;208:101;:::o;29870:187::-;29963:2;29936:15;:24;29952:7;29936:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30019:7;30015:2;29981:46;;29990:23;30005:7;29990:14;:23::i;:::-;29981:46;;;;;;;;;;;;29870:187;;:::o;27247:114::-;27323:26;27333:2;27337:7;27323:26;;;;;;;;;;;;:9;:26::i;:::-;27247:114;;:::o;17139:109::-;17208:7;17226:19;17234:3;:10;;17226:7;:19::i;:::-;17219:26;;17139:109;;;:::o;26882:359::-;26975:4;27000:16;27008:7;27000;:16::i;:::-;26992:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27076:13;27092:23;27107:7;27092:14;:23::i;:::-;27076:39;;27145:5;27134:16;;:7;:16;;;:51;;;;27178:7;27154:31;;:20;27166:7;27154:11;:20::i;:::-;:31;;;27134:51;:94;;;;27189:39;27213:5;27220:7;27189:23;:39::i;:::-;27134:94;27126:103;;;26882:359;;;;:::o;28498:545::-;28623:4;28596:31;;:23;28611:7;28596:14;:23::i;:::-;:31;;;28588:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28724:1;28710:16;;:2;:16;;;28702:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28780:39;28801:4;28807:2;28811:7;28780:20;:39::i;:::-;28830:29;28847:1;28851:7;28830:8;:29::i;:::-;28872:35;28899:7;28872:13;:19;28886:4;28872:19;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;;28918:30;28940:7;28918:13;:17;28932:2;28918:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;28959:29;28976:7;28985:2;28959:12;:16;;:29;;;;;:::i;:::-;;29023:7;29019:2;29004:27;;29013:4;29004:27;;;;;;;;;;;;28498:545;;;:::o;13705:128::-;13776:7;13802:22;13806:3;:10;;13818:5;13802:3;:22::i;:::-;13794:31;;13787:38;;13705:128;;;;:::o;4880:162::-;4938:7;4971:1;4966;:6;;4958:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;5029:1;5025;:5;;;;:::i;:::-;5018:12;;4880:162;;;;:::o;17254:240::-;17334:7;17343;17364:11;17377:13;17394:22;17398:3;:10;;17410:5;17394:3;:22::i;:::-;17363:53;;;;17443:3;17435:12;;17473:5;17465:14;;17427:55;;;;;;17254:240;;;;;:::o;29274:86::-;29349:8;29338;:19;;;;;;;;;;;;:::i;:::-;;29274:86;:::o;17915:199::-;18022:7;18064:44;18069:3;:10;;18089:3;18081:12;;18095;18064:4;:44::i;:::-;18056:53;;18033:78;;17915:199;;;;;:::o;13599:100::-;13659:7;13677:19;13685:3;:10;;13677:7;:19::i;:::-;13670:26;;13599:100;;;:::o;4691:183::-;4749:7;4769:9;4785:1;4781;:5;;;;:::i;:::-;4769:17;;4810:1;4805;:6;;4797:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4861:1;4854:8;;;4691:183;;;;:::o;26481:276::-;26595:28;26605:4;26611:2;26615:7;26595:9;:28::i;:::-;26642:48;26665:4;26671:2;26675:7;26684:5;26642:22;:48::i;:::-;26634:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26481:276;;;;:::o;18146:539::-;18203:13;18229:9;18241:6;18229:18;;18258:11;18280:69;18292:1;18287;:6;18280:69;;18310:5;;;;;:::i;:::-;;;;18335:2;18330:7;;;;;:::i;:::-;;;18280:69;;;18359:17;18389:3;18379:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18359:34;;18404:9;18416:3;18404:15;;18430:214;18447:1;18437:6;:11;18430:214;;18471:1;18469;:3;;;;:::i;:::-;18465:7;;18487:10;18535:2;18530;18521:6;:11;;;;:::i;:::-;:16;;;;:::i;:::-;18512:6;:25;;;;:::i;:::-;18501:2;:37;;;;:::i;:::-;18487:52;;18554:9;18573:4;18566:12;;18554:24;;18603:2;18593:4;18598:1;18593:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;18630:2;18620:12;;;;;:::i;:::-;;;18450:194;;18430:214;;;18668:4;18654:19;;;;;;18146:539;;;:::o;16996:137::-;17080:4;17095:35;17105:3;:10;;17125:3;17117:12;;17095:9;:35::i;:::-;17088:42;;16996:137;;;;:::o;27367:254::-;27463:18;27469:2;27473:7;27463:5;:18::i;:::-;27500:54;27531:1;27535:2;27539:7;27548:5;27500:22;:54::i;:::-;27492:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27367:254;;;:::o;15326:96::-;15382:7;15400:3;:12;;:19;;;;15393:26;;15326:96;;;:::o;30668:93::-;;;;:::o;13332:123::-;13402:4;13417:35;13425:3;:10;;13445:5;13437:14;;13417:7;:35::i;:::-;13410:42;;13332:123;;;;:::o;13209:117::-;13276:4;13291:32;13296:3;:10;;13316:5;13308:14;;13291:4;:32::i;:::-;13284:39;;13209:117;;;;:::o;16685:171::-;16774:4;16789:64;16794:3;:10;;16814:3;16806:12;;16844:5;16828:23;;16820:32;;16789:4;:64::i;:::-;16782:71;;16685:171;;;;;:::o;11677:204::-;11744:7;11793:5;11772:3;:11;;:18;;;;:26;11764:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11855:3;:11;;11867:5;11855:18;;;;;;;;:::i;:::-;;;;;;;;;;11848:25;;11677:204;;;;:::o;15428:281::-;15495:7;15504;15554:5;15532:3;:12;;:19;;;;:27;15524:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:22;15634:3;:12;;15647:5;15634:19;;;;;;;;:::i;:::-;;;;;;;;;;;;15609:44;;15672:5;:10;;;15684:5;:12;;;15664:33;;;;;15428:281;;;;;:::o;16354:319::-;16448:7;16468:16;16487:3;:12;;:17;16500:3;16487:17;;;;;;;;;;;;16468:36;;16535:1;16523:8;:13;;16538:12;16515:36;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16605:3;:12;;16629:1;16618:8;:12;;;;:::i;:::-;16605:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;16598:40;;;16354:319;;;;;:::o;11576:95::-;11632:7;11650:3;:11;;:18;;;;11643:25;;11576:95;;;:::o;29366:498::-;29478:4;29500:15;:2;:13;;;:15::i;:::-;29495:38;;29526:4;29519:11;;;;29495:38;29543:23;29569:178;29609:45;;;29656:12;:10;:12::i;:::-;29670:4;29676:7;29685:5;29585:107;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29569:178;;;;;;;;;;;;;;;;;:2;:15;;;;:178;;;;;:::i;:::-;29543:204;;29758:13;29785:10;29774:32;;;;;;;;;;;;:::i;:::-;29758:48;;19623:10;29835:16;;29825:26;;;:6;:26;;;;29817:35;;;;29366:498;;;;;;;:::o;15209:111::-;15280:4;15316:1;15295:3;:12;;:17;15308:3;15295:17;;;;;;;;;;;;:22;;15288:29;;15209:111;;;;:::o;27627:404::-;27721:1;27707:16;;:2;:16;;;27699:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27780:16;27788:7;27780;:16::i;:::-;27779:17;27771:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27842:45;27871:1;27875:2;27879:7;27842:20;:45::i;:::-;27900:30;27922:7;27900:13;:17;27914:2;27900:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;27941:29;27958:7;27967:2;27941:12;:16;;:29;;;;;:::i;:::-;;28011:7;28007:2;27986:33;;28003:1;27986:33;;;;;;;;;;;;27627:404;;:::o;10534:915::-;10600:4;10718:18;10739:3;:12;;:19;10752:5;10739:19;;;;;;;;;;;;10718:40;;10789:1;10775:10;:15;10771:667;;10809:21;10846:1;10833:10;:14;;;;:::i;:::-;10809:38;;10862:17;10903:1;10882:3;:11;;:18;;;;:22;;;;:::i;:::-;10862:42;;11149:17;11169:3;:11;;11181:9;11169:22;;;;;;;;:::i;:::-;;;;;;;;;;11149:42;;11235:9;11206:3;:11;;11218:13;11206:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;11301:1;11285:13;:17;;;;:::i;:::-;11259:3;:12;;:23;11272:9;11259:23;;;;;;;;;;;:43;;;;11317:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11356:3;:12;;:19;11369:5;11356:19;;;;;;;;;;;11349:26;;;11399:4;11392:11;;;;;;;;10771:667;11430:5;11423:12;;;10534:915;;;;;:::o;10110:418::-;10173:4;10195:21;10205:3;10210:5;10195:9;:21::i;:::-;10190:327;;10233:3;:11;;10250:5;10233:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10416:3;:11;;:18;;;;10394:3;:12;;:19;10407:5;10394:19;;;;;;;;;;;:40;;;;10456:4;10449:11;;;;10190:327;10500:5;10493:12;;10110:418;;;;;:::o;14099:474::-;14175:4;14192:16;14211:3;:12;;:17;14224:3;14211:17;;;;;;;;;;;;14192:36;;14257:1;14245:8;:13;14241:321;;14312:3;:12;;14330:38;;;;;;;;14347:3;14330:38;;;;14360:5;14330:38;;;14312:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14404:3;:12;;:19;;;;14384:3;:12;;:17;14397:3;14384:17;;;;;;;;;;;:39;;;;14445:4;14438:11;;;;;14241:321;14518:5;14482:3;:12;;14506:1;14495:8;:12;;;;:::i;:::-;14482:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;:41;;;;14545:5;14538:12;;;14099:474;;;;;;:::o;6154:235::-;6214:4;6231:12;6342:7;6330:20;6322:28;;6376:1;6369:4;:8;6362:15;;;6154:235;;;:::o;6969:181::-;7072:12;7095:52;7117:6;7125:4;7131:1;7134:12;7095:21;:52::i;:::-;7088:59;;6969:181;;;;;:::o;11455:115::-;11528:4;11566:1;11543:3;:12;;:19;11556:5;11543:19;;;;;;;;;;;;:24;;11536:31;;11455:115;;;;:::o;7374:532::-;7501:12;7559:5;7534:21;:30;;7526:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;7626:18;7637:6;7626:10;:18::i;:::-;7618:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7750:12;7764:23;7791:6;:11;;7811:5;7819:4;7791:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7749:75;;;;7842:52;7860:7;7869:10;7881:12;7842:17;:52::i;:::-;7835:59;;;;7374:532;;;;;;:::o;9156:701::-;9271:12;9300:7;9296:550;;;9318:10;9311:17;;;;9296:550;9452:1;9432:10;:17;:21;9428:407;;;9693:10;9687:17;9754:15;9741:10;9737:2;9733:19;9726:44;9428:407;9819:12;9812:20;;;;;;;;;;;:::i;:::-;;;;;;;;9156:701;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:114::-;8938:6;8972:5;8966:12;8956:22;;8871:114;;;:::o;8991:184::-;9090:11;9124:6;9119:3;9112:19;9164:4;9159:3;9155:14;9140:29;;8991:184;;;;:::o;9181:132::-;9248:4;9271:3;9263:11;;9301:4;9296:3;9292:14;9284:22;;9181:132;;;:::o;9319:108::-;9396:24;9414:5;9396:24;:::i;:::-;9391:3;9384:37;9319:108;;:::o;9433:179::-;9502:10;9523:46;9565:3;9557:6;9523:46;:::i;:::-;9601:4;9596:3;9592:14;9578:28;;9433:179;;;;:::o;9618:113::-;9688:4;9720;9715:3;9711:14;9703:22;;9618:113;;;:::o;9767:732::-;9886:3;9915:54;9963:5;9915:54;:::i;:::-;9985:86;10064:6;10059:3;9985:86;:::i;:::-;9978:93;;10095:56;10145:5;10095:56;:::i;:::-;10174:7;10205:1;10190:284;10215:6;10212:1;10209:13;10190:284;;;10291:6;10285:13;10318:63;10377:3;10362:13;10318:63;:::i;:::-;10311:70;;10404:60;10457:6;10404:60;:::i;:::-;10394:70;;10250:224;10237:1;10234;10230:9;10225:14;;10190:284;;;10194:14;10490:3;10483:10;;9891:608;;;9767:732;;;;:::o;10505:373::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:108;10866:4;10857:6;10763:108;:::i;:::-;10755:116;;10505:373;;;;:::o;10884:474::-;10952:6;10960;11009:2;10997:9;10988:7;10984:23;10980:32;10977:119;;;11015:79;;:::i;:::-;10977:119;11135:1;11160:53;11205:7;11196:6;11185:9;11181:22;11160:53;:::i;:::-;11150:63;;11106:117;11262:2;11288:53;11333:7;11324:6;11313:9;11309:22;11288:53;:::i;:::-;11278:63;;11233:118;10884:474;;;;;:::o;11364:116::-;11434:21;11449:5;11434:21;:::i;:::-;11427:5;11424:32;11414:60;;11470:1;11467;11460:12;11414:60;11364:116;:::o;11486:133::-;11529:5;11567:6;11554:20;11545:29;;11583:30;11607:5;11583:30;:::i;:::-;11486:133;;;;:::o;11625:468::-;11690:6;11698;11747:2;11735:9;11726:7;11722:23;11718:32;11715:119;;;11753:79;;:::i;:::-;11715:119;11873:1;11898:53;11943:7;11934:6;11923:9;11919:22;11898:53;:::i;:::-;11888:63;;11844:117;12000:2;12026:50;12068:7;12059:6;12048:9;12044:22;12026:50;:::i;:::-;12016:60;;11971:115;11625:468;;;;;:::o;12099:307::-;12160:4;12250:18;12242:6;12239:30;12236:56;;;12272:18;;:::i;:::-;12236:56;12310:29;12332:6;12310:29;:::i;:::-;12302:37;;12394:4;12388;12384:15;12376:23;;12099:307;;;:::o;12412:410::-;12489:5;12514:65;12530:48;12571:6;12530:48;:::i;:::-;12514:65;:::i;:::-;12505:74;;12602:6;12595:5;12588:21;12640:4;12633:5;12629:16;12678:3;12669:6;12664:3;12660:16;12657:25;12654:112;;;12685:79;;:::i;:::-;12654:112;12775:41;12809:6;12804:3;12799;12775:41;:::i;:::-;12495:327;12412:410;;;;;:::o;12841:338::-;12896:5;12945:3;12938:4;12930:6;12926:17;12922:27;12912:122;;12953:79;;:::i;:::-;12912:122;13070:6;13057:20;13095:78;13169:3;13161:6;13154:4;13146:6;13142:17;13095:78;:::i;:::-;13086:87;;12902:277;12841:338;;;;:::o;13185:943::-;13280:6;13288;13296;13304;13353:3;13341:9;13332:7;13328:23;13324:33;13321:120;;;13360:79;;:::i;:::-;13321:120;13480:1;13505:53;13550:7;13541:6;13530:9;13526:22;13505:53;:::i;:::-;13495:63;;13451:117;13607:2;13633:53;13678:7;13669:6;13658:9;13654:22;13633:53;:::i;:::-;13623:63;;13578:118;13735:2;13761:53;13806:7;13797:6;13786:9;13782:22;13761:53;:::i;:::-;13751:63;;13706:118;13891:2;13880:9;13876:18;13863:32;13922:18;13914:6;13911:30;13908:117;;;13944:79;;:::i;:::-;13908:117;14049:62;14103:7;14094:6;14083:9;14079:22;14049:62;:::i;:::-;14039:72;;13834:287;13185:943;;;;;;;:::o;14134:180::-;14182:77;14179:1;14172:88;14279:4;14276:1;14269:15;14303:4;14300:1;14293:15;14320:320;14364:6;14401:1;14395:4;14391:12;14381:22;;14448:1;14442:4;14438:12;14469:18;14459:81;;14525:4;14517:6;14513:17;14503:27;;14459:81;14587:2;14579:6;14576:14;14556:18;14553:38;14550:84;;14606:18;;:::i;:::-;14550:84;14371:269;14320:320;;;:::o;14646:231::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:14;14850:2;14842:6;14838:15;14831:39;14646:231;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:220::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:3;15884:2;15876:6;15872:15;15865:28;15680:220;:::o;15906:366::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16278:419;;;:::o;16703:243::-;16843:34;16839:1;16831:6;16827:14;16820:58;16912:26;16907:2;16899:6;16895:15;16888:51;16703:243;:::o;16952:366::-;17094:3;17115:67;17179:2;17174:3;17115:67;:::i;:::-;17108:74;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16952:366;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:164::-;17889:16;17885:1;17877:6;17873:14;17866:40;17749:164;:::o;17919:366::-;18061:3;18082:67;18146:2;18141:3;18082:67;:::i;:::-;18075:74;;18158:93;18247:3;18158:93;:::i;:::-;18276:2;18271:3;18267:12;18260:19;;17919:366;;;:::o;18291:419::-;18457:4;18495:2;18484:9;18480:18;18472:26;;18544:9;18538:4;18534:20;18530:1;18519:9;18515:17;18508:47;18572:131;18698:4;18572:131;:::i;:::-;18564:139;;18291:419;;;:::o;18716:169::-;18856:21;18852:1;18844:6;18840:14;18833:45;18716:169;:::o;18891:366::-;19033:3;19054:67;19118:2;19113:3;19054:67;:::i;:::-;19047:74;;19130:93;19219:3;19130:93;:::i;:::-;19248:2;19243:3;19239:12;19232:19;;18891:366;;;:::o;19263:419::-;19429:4;19467:2;19456:9;19452:18;19444:26;;19516:9;19510:4;19506:20;19502:1;19491:9;19487:17;19480:47;19544:131;19670:4;19544:131;:::i;:::-;19536:139;;19263:419;;;:::o;19688:172::-;19828:24;19824:1;19816:6;19812:14;19805:48;19688:172;:::o;19866:366::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:419::-;20404:4;20442:2;20431:9;20427:18;20419:26;;20491:9;20485:4;20481:20;20477:1;20466:9;20462:17;20455:47;20519:131;20645:4;20519:131;:::i;:::-;20511:139;;20238:419;;;:::o;20663:172::-;20803:24;20799:1;20791:6;20787:14;20780:48;20663:172;:::o;20841:366::-;20983:3;21004:67;21068:2;21063:3;21004:67;:::i;:::-;20997:74;;21080:93;21169:3;21080:93;:::i;:::-;21198:2;21193:3;21189:12;21182:19;;20841:366;;;:::o;21213:419::-;21379:4;21417:2;21406:9;21402:18;21394:26;;21466:9;21460:4;21456:20;21452:1;21441:9;21437:17;21430:47;21494:131;21620:4;21494:131;:::i;:::-;21486:139;;21213:419;;;:::o;21638:180::-;21686:77;21683:1;21676:88;21783:4;21780:1;21773:15;21807:4;21804:1;21797:15;21824:233;21863:3;21886:24;21904:5;21886:24;:::i;:::-;21877:33;;21932:66;21925:5;21922:77;21919:103;;22002:18;;:::i;:::-;21919:103;22049:1;22042:5;22038:13;22031:20;;21824:233;;;:::o;22063:147::-;22164:11;22201:3;22186:18;;22063:147;;;;:::o;22216:114::-;;:::o;22336:398::-;22495:3;22516:83;22597:1;22592:3;22516:83;:::i;:::-;22509:90;;22608:93;22697:3;22608:93;:::i;:::-;22726:1;22721:3;22717:11;22710:18;;22336:398;;;:::o;22740:379::-;22924:3;22946:147;23089:3;22946:147;:::i;:::-;22939:154;;23110:3;23103:10;;22740:379;;;:::o;23125:236::-;23265:34;23261:1;23253:6;23249:14;23242:58;23334:19;23329:2;23321:6;23317:15;23310:44;23125:236;:::o;23367:366::-;23509:3;23530:67;23594:2;23589:3;23530:67;:::i;:::-;23523:74;;23606:93;23695:3;23606:93;:::i;:::-;23724:2;23719:3;23715:12;23708:19;;23367:366;;;:::o;23739:419::-;23905:4;23943:2;23932:9;23928:18;23920:26;;23992:9;23986:4;23982:20;23978:1;23967:9;23963:17;23956:47;24020:131;24146:4;24020:131;:::i;:::-;24012:139;;23739:419;;;:::o;24164:182::-;24304:34;24300:1;24292:6;24288:14;24281:58;24164:182;:::o;24352:366::-;24494:3;24515:67;24579:2;24574:3;24515:67;:::i;:::-;24508:74;;24591:93;24680:3;24591:93;:::i;:::-;24709:2;24704:3;24700:12;24693:19;;24352:366;;;:::o;24724:419::-;24890:4;24928:2;24917:9;24913:18;24905:26;;24977:9;24971:4;24967:20;24963:1;24952:9;24948:17;24941:47;25005:131;25131:4;25005:131;:::i;:::-;24997:139;;24724:419;;;:::o;25149:227::-;25289:34;25285:1;25277:6;25273:14;25266:58;25358:10;25353:2;25345:6;25341:15;25334:35;25149:227;:::o;25382:366::-;25524:3;25545:67;25609:2;25604:3;25545:67;:::i;:::-;25538:74;;25621:93;25710:3;25621:93;:::i;:::-;25739:2;25734:3;25730:12;25723:19;;25382:366;;;:::o;25754:419::-;25920:4;25958:2;25947:9;25943:18;25935:26;;26007:9;26001:4;25997:20;25993:1;25982:9;25978:17;25971:47;26035:131;26161:4;26035:131;:::i;:::-;26027:139;;25754:419;;;:::o;26179:191::-;26219:4;26239:20;26257:1;26239:20;:::i;:::-;26234:25;;26273:20;26291:1;26273:20;:::i;:::-;26268:25;;26312:1;26309;26306:8;26303:34;;;26317:18;;:::i;:::-;26303:34;26362:1;26359;26355:9;26347:17;;26179:191;;;;:::o;26376:182::-;26516:34;26512:1;26504:6;26500:14;26493:58;26376:182;:::o;26564:366::-;26706:3;26727:67;26791:2;26786:3;26727:67;:::i;:::-;26720:74;;26803:93;26892:3;26803:93;:::i;:::-;26921:2;26916:3;26912:12;26905:19;;26564:366;;;:::o;26936:419::-;27102:4;27140:2;27129:9;27125:18;27117:26;;27189:9;27183:4;27179:20;27175:1;27164:9;27160:17;27153:47;27217:131;27343:4;27217:131;:::i;:::-;27209:139;;26936:419;;;:::o;27361:229::-;27501:34;27497:1;27489:6;27485:14;27478:58;27570:12;27565:2;27557:6;27553:15;27546:37;27361:229;:::o;27596:366::-;27738:3;27759:67;27823:2;27818:3;27759:67;:::i;:::-;27752:74;;27835:93;27924:3;27835:93;:::i;:::-;27953:2;27948:3;27944:12;27937:19;;27596:366;;;:::o;27968:419::-;28134:4;28172:2;28161:9;28157:18;28149:26;;28221:9;28215:4;28211:20;28207:1;28196:9;28192:17;28185:47;28249:131;28375:4;28249:131;:::i;:::-;28241:139;;27968:419;;;:::o;28393:180::-;28441:77;28438:1;28431:88;28538:4;28535:1;28528:15;28562:4;28559:1;28552:15;28579:143;28636:5;28667:6;28661:13;28652:22;;28683:33;28710:5;28683:33;:::i;:::-;28579:143;;;;:::o;28728:351::-;28798:6;28847:2;28835:9;28826:7;28822:23;28818:32;28815:119;;;28853:79;;:::i;:::-;28815:119;28973:1;28998:64;29054:7;29045:6;29034:9;29030:22;28998:64;:::i;:::-;28988:74;;28944:128;28728:351;;;;:::o;29085:332::-;29206:4;29244:2;29233:9;29229:18;29221:26;;29257:71;29325:1;29314:9;29310:17;29301:6;29257:71;:::i;:::-;29338:72;29406:2;29395:9;29391:18;29382:6;29338:72;:::i;:::-;29085:332;;;;;:::o;29423:137::-;29477:5;29508:6;29502:13;29493:22;;29524:30;29548:5;29524:30;:::i;:::-;29423:137;;;;:::o;29566:345::-;29633:6;29682:2;29670:9;29661:7;29657:23;29653:32;29650:119;;;29688:79;;:::i;:::-;29650:119;29808:1;29833:61;29886:7;29877:6;29866:9;29862:22;29833:61;:::i;:::-;29823:71;;29779:125;29566:345;;;;:::o;29917:171::-;30057:23;30053:1;30045:6;30041:14;30034:47;29917:171;:::o;30094:366::-;30236:3;30257:67;30321:2;30316:3;30257:67;:::i;:::-;30250:74;;30333:93;30422:3;30333:93;:::i;:::-;30451:2;30446:3;30442:12;30435:19;;30094:366;;;:::o;30466:419::-;30632:4;30670:2;30659:9;30655:18;30647:26;;30719:9;30713:4;30709:20;30705:1;30694:9;30690:17;30683:47;30747:131;30873:4;30747:131;:::i;:::-;30739:139;;30466:419;;;:::o;30891:175::-;31031:27;31027:1;31019:6;31015:14;31008:51;30891:175;:::o;31072:366::-;31214:3;31235:67;31299:2;31294:3;31235:67;:::i;:::-;31228:74;;31311:93;31400:3;31311:93;:::i;:::-;31429:2;31424:3;31420:12;31413:19;;31072:366;;;:::o;31444:419::-;31610:4;31648:2;31637:9;31633:18;31625:26;;31697:9;31691:4;31687:20;31683:1;31672:9;31668:17;31661:47;31725:131;31851:4;31725:131;:::i;:::-;31717:139;;31444:419;;;:::o;31869:167::-;32009:19;32005:1;31997:6;31993:14;31986:43;31869:167;:::o;32042:366::-;32184:3;32205:67;32269:2;32264:3;32205:67;:::i;:::-;32198:74;;32281:93;32370:3;32281:93;:::i;:::-;32399:2;32394:3;32390:12;32383:19;;32042:366;;;:::o;32414:419::-;32580:4;32618:2;32607:9;32603:18;32595:26;;32667:9;32661:4;32657:20;32653:1;32642:9;32638:17;32631:47;32695:131;32821:4;32695:131;:::i;:::-;32687:139;;32414:419;;;:::o;32839:305::-;32879:3;32898:20;32916:1;32898:20;:::i;:::-;32893:25;;32932:20;32950:1;32932:20;:::i;:::-;32927:25;;33086:1;33018:66;33014:74;33011:1;33008:81;33005:107;;;33092:18;;:::i;:::-;33005:107;33136:1;33133;33129:9;33122:16;;32839:305;;;;:::o;33150:348::-;33190:7;33213:20;33231:1;33213:20;:::i;:::-;33208:25;;33247:20;33265:1;33247:20;:::i;:::-;33242:25;;33435:1;33367:66;33363:74;33360:1;33357:81;33352:1;33345:9;33338:17;33334:105;33331:131;;;33442:18;;:::i;:::-;33331:131;33490:1;33487;33483:9;33472:20;;33150:348;;;;:::o;33504:234::-;33644:34;33640:1;33632:6;33628:14;33621:58;33713:17;33708:2;33700:6;33696:15;33689:42;33504:234;:::o;33744:366::-;33886:3;33907:67;33971:2;33966:3;33907:67;:::i;:::-;33900:74;;33983:93;34072:3;33983:93;:::i;:::-;34101:2;34096:3;34092:12;34085:19;;33744:366;;;:::o;34116:419::-;34282:4;34320:2;34309:9;34305:18;34297:26;;34369:9;34363:4;34359:20;34355:1;34344:9;34340:17;34333:47;34397:131;34523:4;34397:131;:::i;:::-;34389:139;;34116:419;;;:::o;34541:148::-;34643:11;34680:3;34665:18;;34541:148;;;;:::o;34695:377::-;34801:3;34829:39;34862:5;34829:39;:::i;:::-;34884:89;34966:6;34961:3;34884:89;:::i;:::-;34877:96;;34982:52;35027:6;35022:3;35015:4;35008:5;35004:16;34982:52;:::i;:::-;35059:6;35054:3;35050:16;35043:23;;34805:267;34695:377;;;;:::o;35078:275::-;35210:3;35232:95;35323:3;35314:6;35232:95;:::i;:::-;35225:102;;35344:3;35337:10;;35078:275;;;;:::o;35359:435::-;35539:3;35561:95;35652:3;35643:6;35561:95;:::i;:::-;35554:102;;35673:95;35764:3;35755:6;35673:95;:::i;:::-;35666:102;;35785:3;35778:10;;35359:435;;;;;:::o;35800:225::-;35940:34;35936:1;35928:6;35924:14;35917:58;36009:8;36004:2;35996:6;35992:15;35985:33;35800:225;:::o;36031:366::-;36173:3;36194:67;36258:2;36253:3;36194:67;:::i;:::-;36187:74;;36270:93;36359:3;36270:93;:::i;:::-;36388:2;36383:3;36379:12;36372:19;;36031:366;;;:::o;36403:419::-;36569:4;36607:2;36596:9;36592:18;36584:26;;36656:9;36650:4;36646:20;36642:1;36631:9;36627:17;36620:47;36684:131;36810:4;36684:131;:::i;:::-;36676:139;;36403:419;;;:::o;36828:231::-;36968:34;36964:1;36956:6;36952:14;36945:58;37037:14;37032:2;37024:6;37020:15;37013:39;36828:231;:::o;37065:366::-;37207:3;37228:67;37292:2;37287:3;37228:67;:::i;:::-;37221:74;;37304:93;37393:3;37304:93;:::i;:::-;37422:2;37417:3;37413:12;37406:19;;37065:366;;;:::o;37437:419::-;37603:4;37641:2;37630:9;37626:18;37618:26;;37690:9;37684:4;37680:20;37676:1;37665:9;37661:17;37654:47;37718:131;37844:4;37718:131;:::i;:::-;37710:139;;37437:419;;;:::o;37862:228::-;38002:34;37998:1;37990:6;37986:14;37979:58;38071:11;38066:2;38058:6;38054:15;38047:36;37862:228;:::o;38096:366::-;38238:3;38259:67;38323:2;38318:3;38259:67;:::i;:::-;38252:74;;38335:93;38424:3;38335:93;:::i;:::-;38453:2;38448:3;38444:12;38437:19;;38096:366;;;:::o;38468:419::-;38634:4;38672:2;38661:9;38657:18;38649:26;;38721:9;38715:4;38711:20;38707:1;38696:9;38692:17;38685:47;38749:131;38875:4;38749:131;:::i;:::-;38741:139;;38468:419;;;:::o;38893:223::-;39033:34;39029:1;39021:6;39017:14;39010:58;39102:6;39097:2;39089:6;39085:15;39078:31;38893:223;:::o;39122:366::-;39264:3;39285:67;39349:2;39344:3;39285:67;:::i;:::-;39278:74;;39361:93;39450:3;39361:93;:::i;:::-;39479:2;39474:3;39470:12;39463:19;;39122:366;;;:::o;39494:419::-;39660:4;39698:2;39687:9;39683:18;39675:26;;39747:9;39741:4;39737:20;39733:1;39722:9;39718:17;39711:47;39775:131;39901:4;39775:131;:::i;:::-;39767:139;;39494:419;;;:::o;39919:180::-;40059:32;40055:1;40047:6;40043:14;40036:56;39919:180;:::o;40105:366::-;40247:3;40268:67;40332:2;40327:3;40268:67;:::i;:::-;40261:74;;40344:93;40433:3;40344:93;:::i;:::-;40462:2;40457:3;40453:12;40446:19;;40105:366;;;:::o;40477:419::-;40643:4;40681:2;40670:9;40666:18;40658:26;;40730:9;40724:4;40720:20;40716:1;40705:9;40701:17;40694:47;40758:131;40884:4;40758:131;:::i;:::-;40750:139;;40477:419;;;:::o;40902:177::-;41042:29;41038:1;41030:6;41026:14;41019:53;40902:177;:::o;41085:366::-;41227:3;41248:67;41312:2;41307:3;41248:67;:::i;:::-;41241:74;;41324:93;41413:3;41324:93;:::i;:::-;41442:2;41437:3;41433:12;41426:19;;41085:366;;;:::o;41457:419::-;41623:4;41661:2;41650:9;41646:18;41638:26;;41710:9;41704:4;41700:20;41696:1;41685:9;41681:17;41674:47;41738:131;41864:4;41738:131;:::i;:::-;41730:139;;41457:419;;;:::o;41882:237::-;42022:34;42018:1;42010:6;42006:14;41999:58;42091:20;42086:2;42078:6;42074:15;42067:45;41882:237;:::o;42125:366::-;42267:3;42288:67;42352:2;42347:3;42288:67;:::i;:::-;42281:74;;42364:93;42453:3;42364:93;:::i;:::-;42482:2;42477:3;42473:12;42466:19;;42125:366;;;:::o;42497:419::-;42663:4;42701:2;42690:9;42686:18;42678:26;;42750:9;42744:4;42740:20;42736:1;42725:9;42721:17;42714:47;42778:131;42904:4;42778:131;:::i;:::-;42770:139;;42497:419;;;:::o;42922:180::-;42970:77;42967:1;42960:88;43067:4;43064:1;43057:15;43091:4;43088:1;43081:15;43108:185;43148:1;43165:20;43183:1;43165:20;:::i;:::-;43160:25;;43199:20;43217:1;43199:20;:::i;:::-;43194:25;;43238:1;43228:35;;43243:18;;:::i;:::-;43228:35;43285:1;43282;43278:9;43273:14;;43108:185;;;;:::o;43299:86::-;43334:7;43374:4;43367:5;43363:16;43352:27;;43299:86;;;:::o;43391:237::-;43429:3;43448:18;43464:1;43448:18;:::i;:::-;43443:23;;43480:18;43496:1;43480:18;:::i;:::-;43475:23;;43570:1;43564:4;43560:12;43557:1;43554:19;43551:45;;;43576:18;;:::i;:::-;43551:45;43620:1;43617;43613:9;43606:16;;43391:237;;;;:::o;43634:221::-;43774:34;43770:1;43762:6;43758:14;43751:58;43843:4;43838:2;43830:6;43826:15;43819:29;43634:221;:::o;43861:366::-;44003:3;44024:67;44088:2;44083:3;44024:67;:::i;:::-;44017:74;;44100:93;44189:3;44100:93;:::i;:::-;44218:2;44213:3;44209:12;44202:19;;43861:366;;;:::o;44233:419::-;44399:4;44437:2;44426:9;44422:18;44414:26;;44486:9;44480:4;44476:20;44472:1;44461:9;44457:17;44450:47;44514:131;44640:4;44514:131;:::i;:::-;44506:139;;44233:419;;;:::o;44658:221::-;44798:34;44794:1;44786:6;44782:14;44775:58;44867:4;44862:2;44854:6;44850:15;44843:29;44658:221;:::o;44885:366::-;45027:3;45048:67;45112:2;45107:3;45048:67;:::i;:::-;45041:74;;45124:93;45213:3;45124:93;:::i;:::-;45242:2;45237:3;45233:12;45226:19;;44885:366;;;:::o;45257:419::-;45423:4;45461:2;45450:9;45446:18;45438:26;;45510:9;45504:4;45500:20;45496:1;45485:9;45481:17;45474:47;45538:131;45664:4;45538:131;:::i;:::-;45530:139;;45257:419;;;:::o;45682:104::-;45727:7;45756:24;45774:5;45756:24;:::i;:::-;45745:35;;45682:104;;;:::o;45792:142::-;45895:32;45921:5;45895:32;:::i;:::-;45890:3;45883:45;45792:142;;:::o;45940:98::-;45991:6;46025:5;46019:12;46009:22;;45940:98;;;:::o;46044:168::-;46127:11;46161:6;46156:3;46149:19;46201:4;46196:3;46192:14;46177:29;;46044:168;;;;:::o;46218:360::-;46304:3;46332:38;46364:5;46332:38;:::i;:::-;46386:70;46449:6;46444:3;46386:70;:::i;:::-;46379:77;;46465:52;46510:6;46505:3;46498:4;46491:5;46487:16;46465:52;:::i;:::-;46542:29;46564:6;46542:29;:::i;:::-;46537:3;46533:39;46526:46;;46308:270;46218:360;;;;:::o;46584:672::-;46795:4;46833:3;46822:9;46818:19;46810:27;;46847:87;46931:1;46920:9;46916:17;46907:6;46847:87;:::i;:::-;46944:72;47012:2;47001:9;46997:18;46988:6;46944:72;:::i;:::-;47026;47094:2;47083:9;47079:18;47070:6;47026:72;:::i;:::-;47145:9;47139:4;47135:20;47130:2;47119:9;47115:18;47108:48;47173:76;47244:4;47235:6;47173:76;:::i;:::-;47165:84;;46584:672;;;;;;;:::o;47262:141::-;47318:5;47349:6;47343:13;47334:22;;47365:32;47391:5;47365:32;:::i;:::-;47262:141;;;;:::o;47409:349::-;47478:6;47527:2;47515:9;47506:7;47502:23;47498:32;47495:119;;;47533:79;;:::i;:::-;47495:119;47653:1;47678:63;47733:7;47724:6;47713:9;47709:22;47678:63;:::i;:::-;47668:73;;47624:127;47409:349;;;;:::o;47764:182::-;47904:34;47900:1;47892:6;47888:14;47881:58;47764:182;:::o;47952:366::-;48094:3;48115:67;48179:2;48174:3;48115:67;:::i;:::-;48108:74;;48191:93;48280:3;48191:93;:::i;:::-;48309:2;48304:3;48300:12;48293:19;;47952:366;;;:::o;48324:419::-;48490:4;48528:2;48517:9;48513:18;48505:26;;48577:9;48571:4;48567:20;48563:1;48552:9;48548:17;48541:47;48605:131;48731:4;48605:131;:::i;:::-;48597:139;;48324:419;;;:::o;48749:178::-;48889:30;48885:1;48877:6;48873:14;48866:54;48749:178;:::o;48933:366::-;49075:3;49096:67;49160:2;49155:3;49096:67;:::i;:::-;49089:74;;49172:93;49261:3;49172:93;:::i;:::-;49290:2;49285:3;49281:12;49274:19;;48933:366;;;:::o;49305:419::-;49471:4;49509:2;49498:9;49494:18;49486:26;;49558:9;49552:4;49548:20;49544:1;49533:9;49529:17;49522:47;49586:131;49712:4;49586:131;:::i;:::-;49578:139;;49305:419;;;:::o;49730:180::-;49778:77;49775:1;49768:88;49875:4;49872:1;49865:15;49899:4;49896:1;49889:15;49916:225;50056:34;50052:1;50044:6;50040:14;50033:58;50125:8;50120:2;50112:6;50108:15;50101:33;49916:225;:::o;50147:366::-;50289:3;50310:67;50374:2;50369:3;50310:67;:::i;:::-;50303:74;;50386:93;50475:3;50386:93;:::i;:::-;50504:2;50499:3;50495:12;50488:19;;50147:366;;;:::o;50519:419::-;50685:4;50723:2;50712:9;50708:18;50700:26;;50772:9;50766:4;50762:20;50758:1;50747:9;50743:17;50736:47;50800:131;50926:4;50800:131;:::i;:::-;50792:139;;50519:419;;;:::o;50944:179::-;51084:31;51080:1;51072:6;51068:14;51061:55;50944:179;:::o;51129:366::-;51271:3;51292:67;51356:2;51351:3;51292:67;:::i;:::-;51285:74;;51368:93;51457:3;51368:93;:::i;:::-;51486:2;51481:3;51477:12;51470:19;;51129:366;;;:::o;51501:419::-;51667:4;51705:2;51694:9;51690:18;51682:26;;51754:9;51748:4;51744:20;51740:1;51729:9;51725:17;51718:47;51782:131;51908:4;51782:131;:::i;:::-;51774:139;;51501:419;;;:::o;51926:373::-;52030:3;52058:38;52090:5;52058:38;:::i;:::-;52112:88;52193:6;52188:3;52112:88;:::i;:::-;52105:95;;52209:52;52254:6;52249:3;52242:4;52235:5;52231:16;52209:52;:::i;:::-;52286:6;52281:3;52277:16;52270:23;;52034:265;51926:373;;;;:::o;52305:271::-;52435:3;52457:93;52546:3;52537:6;52457:93;:::i;:::-;52450:100;;52567:3;52560:10;;52305:271;;;;:::o
Swarm Source
ipfs://d7942596495bf233381c0a64b0ff421815fe9a8c5304806d4d055eafd03ea268
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.