ERC-721
Overview
Max Total Supply
254 REM004
Holders
95
Market
Volume (24H)
0.006 ETH
Min Price (24H)
$6.70 @ 0.002000 ETH
Max Price (24H)
$6.70 @ 0.002000 ETH
Other Info
Token Contract
Balance
3 REM004Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
remosworldsubcontract
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* ____ | _ \ ___ _ __ ___ ___ | |_) |/ _ \| '_ ` _ \ / _ \ | _ <| __/| | | | | || (_) | |_| \_\\___||_| |_| |_| \___/ ______ _ _ _____ _ _ _ _ | ___ \(_) | || ___| | |(_)| | (_) | |_/ / _ __ __ ___ | || |__ __| | _ | |_ _ ___ _ __ | __/ | |\ \/ // _ \| || __| / _` || || __|| | / _ \ | '_ \ | | | | > <| __/| || |___| (_| || || |_ | || (_) || | | | \_| |_|/_/\_\\___||_|\____/ \__,_||_| \__||_| \___/ |_| |_| Artist and Founder: Joey Tadiar Smart Contract: giudev.eth Technology: Forint Finance Ltd */ import "./contract.sol"; import "./library.sol"; pragma solidity ^0.8.14; contract remosworldsubcontract is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; IERC721A public remosAddress; string public uriPrefix = ""; string public uriSuffix = ""; bool public revealed = false; bool public paused = true; mapping(address => uint) public minted; mapping(uint => bool) public idMinted; uint256 public maxSupply = 500; uint256 public maxWalletAmount; uint256 public mintedNFT; uint256 public priceNFT = 0 ether; string public hiddenMetadataUri = "ipfs://QmZd4qP5whKbLHs2uVPMxPv9voDx9mNsvSbqC9CaAmShKo/"; string public _name = "REMO: Pixel Edition"; string public _symbol = "REM004"; constructor() ERC721A(_name, _symbol) {} modifier mintCompliance(uint256 _mintAmount) { require(msg.value >= priceNFT * _mintAmount, "Insufficient Funds"); require(totalSupply() + _mintAmount <= maxSupply, "Mintable supply exceeded!"); require(paused == false, "Contract paused"); _;} function checkBalance(address _addr) public view returns (uint256) { uint256 balance = remosAddress.balanceOf(_addr); return balance;} function checkNFT(uint256[]memory _tokenId) public view returns (uint256[] memory, uint256[] memory) { uint256 _mintedAmount; uint256 _notMintedAmount; for (uint256 i = 0; i < _tokenId.length; i++) { if (idMinted[_tokenId[i]] == false) { _notMintedAmount ++;} else { _mintedAmount ++;}} uint256[] memory _notMintedNFT = new uint256[](_notMintedAmount); uint256[] memory _mintedNFT = new uint256[](_mintedAmount); uint256 _counterNotMinted; uint256 _counterMinted; for (uint256 i = 0; i < _tokenId.length; i++) { if (idMinted[_tokenId[i]] == false) { _notMintedNFT[_counterNotMinted] = _tokenId[i]; _counterNotMinted ++;} else { _mintedNFT[_counterMinted] = _tokenId[i]; _counterMinted ++;}} return (_notMintedNFT, _mintedNFT);} function setPrice(uint256 _price) public onlyOwner { priceNFT = _price;} function setNFTAddress(address _addr) public onlyOwner { remosAddress = IERC721A(_addr);} function ownerBlacklistBatchNFT(uint256[]memory _nftId) public onlyOwner { for (uint256 i = 0; i < _nftId.length; i++) { idMinted[_nftId[i]] = true;}} function blacklistBatchNFT(uint256[]memory _nftId) private { for (uint256 i = 0; i < _nftId.length; i++) { idMinted[_nftId[i]] = true;}} function mint(uint256[] memory _tokenId) public payable mintCompliance(_tokenId.length) nonReentrant { for (uint256 i = 0; i < _tokenId.length; i++) { require(remosAddress.ownerOf(_tokenId[i]) == _msgSender() && idMinted[_tokenId[i]] == false, "Not NFT owner or NFT not valid");} _safeMint(_msgSender(), _tokenId.length); blacklistBatchNFT(_tokenId);} function _startTokenId() internal view virtual override returns (uint256) { return 1;} function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token'); if (revealed == false) { return hiddenMetadataUri;} string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)): '';} function setRevealed(bool _state) public onlyOwner { revealed = _state;} function setPause(bool _state) public onlyOwner { paused = _state;} function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri;} function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix;} function _baseURI() internal view virtual override returns (string memory) { return uriPrefix;} function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix;} function getMinted() public view returns (uint256, uint256) { uint256 _mintedNFT = totalSupply(); uint256 _totalSupply = maxSupply; return (_mintedNFT, _totalSupply);} receive() external payable {} fallback() external payable {} function transferERC20(address _tokenAddr, address _to, uint _amount) public onlyOwner nonReentrant { require(new_type_IERC20(_tokenAddr).transfer(_to, _amount), "Could not transfer out tokens!");} function transferERC20O(address _tokenAddr, address _to, uint _amount) public onlyOwner nonReentrant { old_type_IERC20(_tokenAddr).transfer(_to, _amount);} function withdrawEther(address _to) public onlyOwner nonReentrant { (bool os, ) = payable(_to).call{value: address(this).balance}(''); require(os);}}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.14; import "./interface.sol"; contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId();} //Returns the starting token ID function _startTokenId() internal view virtual returns (uint256) { return 0;} //Returns the next token ID to be minted function _nextTokenId() internal view returns (uint256) { return _currentIndex;} //Returns the total number of tokens in existence function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked {return _currentIndex - _burnCounter - _startTokenId();}} //Returns the total amount of tokens minted in the contract function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId();}} //Returns the total number of tokens burned function _totalBurned() internal view returns (uint256) { return _burnCounter;} function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;} function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;} function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;} function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;} function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX);} function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux} packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed;} function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr];} return packed;}}} revert OwnerQueryForNonexistentToken();} function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0;} function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]);} function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index);}} function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId));} function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId)));} 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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';} //Base URI for computing {tokenURI}. function _baseURI() internal view virtual returns (string memory) { return '';} function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value}} function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value}} function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved();} _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId);} function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId];} function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), 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 { _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 { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer();}} //Returns whether `tokenId` exists function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && _packedOwnerships[tokenId] & BITMASK_BURNED == 0;} //Equivalent to `_safeMint(to, quantity, '')` function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, '');} //Safely mints `quantity` tokens and transfers them to `to` function _safeMint(address to, uint256 quantity, bytes memory _data) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer();}} while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert();} else { do {emit Transfer(address(0), to, updatedIndex++);} while (updatedIndex < end);} _currentIndex = updatedIndex;} _afterTokenTransfers(address(0), to, startTokenId, quantity);} //Mints `quantity` tokens and transfers them to `to` function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do {emit Transfer(address(0), to, updatedIndex++);} while (updatedIndex < end); _currentIndex = updatedIndex;} _afterTokenTransfers(address(0), to, startTokenId, quantity);} //Transfers `tokenId` from `from` to `to` function _transfer(address from, address to, uint256 tokenId) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked;}}}} emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1);} //Equivalent to `_burn(tokenId, false)` function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false);} //Destroys `tokenId` function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();} _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked;}}}} emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked {_burnCounter++;}} //Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract function _checkContractOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (bytes4 retval) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;} catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer();} else { assembly {revert(add(32, reason), mload(reason))}}}} //Hook that is called before a set of serially-ordered token ids are about to be transferred function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} //Hook that is called after a set of serially-ordered token ids have been transferred function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} //Returns the message sender (defaults to `msg.sender`) function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender;} //Converts a `uint256` to its ASCII `string` decimal representation function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10)} temp { // Keep dividing `temp` until zero. temp := div(temp, 10)} { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10)))} let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length)}}} abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED;} //Prevents a contract from calling itself, directly or indirectly. //Calling a `nonReentrant` function from another `nonReentrant`function is not supported. modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; _status = _NOT_ENTERED;}} abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender;} function _msgData() internal view virtual returns (bytes calldata) { return msg.data;}} abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { //dev Initializes the contract setting the deployer as the initial owner _transferOwnership(_msgSender());} function owner() public view virtual returns (address) { //Returns the address of the current owner return _owner;} modifier onlyOwner() { //Throws if called by any account other than the owner require(owner() == _msgSender(), "Ownable: caller is not the owner"); _;} function renounceOwnership() public virtual onlyOwner { //Leaves the contract without owner _transferOwnership(address(0));} function transferOwnership(address newOwner) public virtual onlyOwner { //Transfers ownership of the contract to a new account (`newOwner`) require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner);} function _transferOwnership(address newOwner) internal virtual { //Transfers ownership of the contract to a new account (`newOwner`) address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner);}}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.14; interface IERC721A { // The caller must own the token or be an approved operator error ApprovalCallerNotOwnerNorApproved(); //The token does not exist error ApprovalQueryForNonexistentToken(); //The caller cannot approve to their own address error ApproveToCaller(); //The caller cannot approve to the current owner error ApprovalToCurrentOwner(); //Cannot query the balance for the zero address error BalanceQueryForZeroAddress(); //Cannot mint to the zero address error MintToZeroAddress(); //The quantity of tokens minted must be more than zero error MintZeroQuantity(); //The token does not exist error OwnerQueryForNonexistentToken(); //The caller must own the token or be an approved operator. error TransferCallerNotOwnerNorApproved(); ///The token must be owned by `from` error TransferFromIncorrectOwner(); //Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. error TransferToNonERC721ReceiverImplementer(); //Cannot transfer to the zero address error TransferToZeroAddress(); //The token does not exist error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned;} //Returns the total amount of tokens stored by the contract //Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens function totalSupply() external view returns (uint256); //Returns true if this contract implements the interface defined by `interfaceId` function supportsInterface(bytes4 interfaceId) external view returns (bool); //Emitted when `tokenId` token is transferred from `from` to `to` event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); //Emitted when `owner` enables `approved` to manage the `tokenId` token event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); //Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets event ApprovalForAll(address indexed owner, address indexed operator, bool approved); //Returns the number of tokens in `owner` account function balanceOf(address owner) external view returns (uint256 balance); //Returns the owner of the `tokenId` token function ownerOf(uint256 tokenId) external view returns (address owner); //Safely transfers `tokenId` token from `from` to `to` //Requirements: `from` cannot be the zero address // `to` cannot be the zero address // `tokenId` token must exist and be owned by `from` // If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll} // If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; //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. //Requirements: `from` cannot be the zero address. // `to` cannot be the zero address. // `tokenId` token must exist and be owned by `from` // If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll} // If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer function safeTransferFrom(address from, address to, uint256 tokenId) external; //Transfers `tokenId` token from `from` to `to` //Requirements: `from` cannot be the zero address // `to` cannot be the zero address // `tokenId` token must be owned by `from` // If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll} function transferFrom(address from, address to, uint256 tokenId) external; //Gives permission to `to` to transfer `tokenId` token to another account function approve(address to, uint256 tokenId) external; //Approve or remove `operator` as an operator for the caller //Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller //Requirements: The `operator` cannot be the caller. function setApprovalForAll(address operator, bool _approved) external; //Returns the account approved for `tokenId` token. //Requirements: `tokenId` must exist function getApproved(uint256 tokenId) external view returns (address operator); //Returns if the `operator` is allowed to manage all of the assets of `owner` function isApprovedForAll(address owner, address operator) external view returns (bool); //Returns the token collection name function name() external view returns (string memory); //Returns the token collection symbol function symbol() external view returns (string memory); //Returns the Uniform Resource Identifier (URI) for `tokenId` token function tokenURI(uint256 tokenId) external view returns (string memory);} interface ERC721A__IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);} interface new_type_IERC20 { function transfer(address, uint) external returns (bool);} interface old_type_IERC20 { function transfer(address, uint) external;}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.14; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0";} uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10;} bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10;} return string(buffer);} function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00";} uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8;} return toHexString(value, length);} function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4;} require(value == 0, "Strings: hex length insufficient"); return string(buffer);} function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"}],"name":"checkNFT","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"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":[],"name":"getMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_nftId","type":"uint256[]"}],"name":"ownerBlacklistBatchNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remosAddress","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20O","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":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260405180602001604052806000815250600b90816200002491906200062f565b5060405180602001604052806000815250600c90816200004591906200062f565b506000600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506101f46010556000601355604051806060016040528060368152602001620050ad6036913960149081620000b191906200062f565b506040518060400160405280601381526020017f52454d4f3a20506978656c2045646974696f6e0000000000000000000000000081525060159081620000f891906200062f565b506040518060400160405280600681526020017f52454d3030340000000000000000000000000000000000000000000000000000815250601690816200013f91906200062f565b503480156200014d57600080fd5b50601580546200015d906200041e565b80601f01602080910402602001604051908101604052809291908181526020018280546200018b906200041e565b8015620001dc5780601f10620001b057610100808354040283529160200191620001dc565b820191906000526020600020905b815481529060010190602001808311620001be57829003601f168201915b505050505060168054620001f0906200041e565b80601f01602080910402602001604051908101604052809291908181526020018280546200021e906200041e565b80156200026f5780601f1062000243576101008083540402835291602001916200026f565b820191906000526020600020905b8154815290600101906020018083116200025157829003601f168201915b505050505081600290816200028591906200062f565b5080600390816200029791906200062f565b50620002a8620002de60201b60201c565b6000819055505050620002d0620002c4620002e760201b60201c565b620002ef60201b60201c565b600160098190555062000716565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043757607f821691505b6020821081036200044d576200044c620003ef565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000478565b620004c3868362000478565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005106200050a6200050484620004db565b620004e5565b620004db565b9050919050565b6000819050919050565b6200052c83620004ef565b620005446200053b8262000517565b84845462000485565b825550505050565b600090565b6200055b6200054c565b6200056881848462000521565b505050565b5b8181101562000590576200058460008262000551565b6001810190506200056e565b5050565b601f821115620005df57620005a98162000453565b620005b48462000468565b81016020851015620005c4578190505b620005dc620005d38562000468565b8301826200056d565b50505b505050565b600082821c905092915050565b60006200060460001984600802620005e4565b1980831691505092915050565b60006200061f8383620005f1565b9150826002028217905092915050565b6200063a82620003b5565b67ffffffffffffffff811115620006565762000655620003c0565b5b6200066282546200041e565b6200066f82828562000594565b600060209050601f831160018114620006a7576000841562000692578287015190505b6200069e858262000611565b8655506200070e565b601f198416620006b78662000453565b60005b82811015620006e157848901518255600182019150602085019450602081019050620006ba565b86831015620007015784890151620006fd601f891682620005f1565b8355505b6001600288020188555050505b505050505050565b61498780620007266000396000f3fe6080604052600436106102815760003560e01c80638da5cb5b1161014f578063b09f1266116100c1578063d5abeb011161007a578063d5abeb01146109b6578063e0a80853146109e1578063e985e9c514610a0a578063f044951314610a47578063f2fde38b14610a70578063f8e93ef914610a9957610288565b8063b09f1266146108a8578063b236ff82146108d3578063b88d4fde146108fc578063bedb86fb14610925578063c87b56dd1461094e578063d28d88521461098b57610288565b80639db5dbe4116101135780639db5dbe4146107ab578063a22cb465146107d4578063a45ba8e7146107fd578063aa4bde2814610828578063ac72200d14610853578063af933b571461087f57610288565b80638da5cb5b146106c35780638e09a116146106ee57806391b7f5ed1461072c57806395d89b41146107555780639d03e6d01461078057610288565b806351830227116101f357806365627f15116101ac57806365627f15146105c757806369d03738146105f25780636f0b78711461061b57806370a0823114610646578063715018a6146106835780637ec4a6591461069a57610288565b806351830227146104a15780635503a0e8146104cc5780635c975abb146104f75780635f5152261461052257806362b99ad41461055f5780636352211e1461058a57610288565b806318160ddd1161024557806318160ddd146103815780631e7269c5146103ac57806323b872dd146103e95780634272f4471461041257806342842e0e1461044f5780634fdd43cb1461047857610288565b806301ffc9a71461028a57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f57806316ba10e01461035857610288565b3661028857005b005b34801561029657600080fd5b506102b160048036038101906102ac919061346e565b610ab5565b6040516102be91906134b6565b60405180910390f35b3480156102d357600080fd5b506102dc610b47565b6040516102e99190613561565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906135b9565b610bd9565b6040516103269190613627565b60405180910390f35b34801561033b57600080fd5b506103566004803603810190610351919061366e565b610c55565b005b34801561036457600080fd5b5061037f600480360381019061037a91906137e3565b610dfb565b005b34801561038d57600080fd5b50610396610e8a565b6040516103a3919061383b565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613856565b610ea1565b6040516103e0919061383b565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613883565b610eb9565b005b34801561041e57600080fd5b50610439600480360381019061043491906135b9565b610ec9565b60405161044691906134b6565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613883565b610ee9565b005b34801561048457600080fd5b5061049f600480360381019061049a91906137e3565b610f09565b005b3480156104ad57600080fd5b506104b6610f98565b6040516104c391906134b6565b60405180910390f35b3480156104d857600080fd5b506104e1610fab565b6040516104ee9190613561565b60405180910390f35b34801561050357600080fd5b5061050c611039565b60405161051991906134b6565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190613856565b61104c565b604051610556919061383b565b60405180910390f35b34801561056b57600080fd5b506105746110f6565b6040516105819190613561565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906135b9565b611184565b6040516105be9190613627565b60405180910390f35b3480156105d357600080fd5b506105dc611196565b6040516105e99190613935565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190613856565b6111bc565b005b34801561062757600080fd5b5061063061127c565b60405161063d919061383b565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190613856565b611282565b60405161067a919061383b565b60405180910390f35b34801561068f57600080fd5b5061069861133a565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906137e3565b6113c2565b005b3480156106cf57600080fd5b506106d8611451565b6040516106e59190613627565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613a18565b61147b565b604051610723929190613b1f565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906135b9565b6116b3565b005b34801561076157600080fd5b5061076a611739565b6040516107779190613561565b60405180910390f35b34801561078c57600080fd5b506107956117cb565b6040516107a2919061383b565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190613883565b6117d1565b005b3480156107e057600080fd5b506107fb60048036038101906107f69190613b82565b611964565b005b34801561080957600080fd5b50610812611adb565b60405161081f9190613561565b60405180910390f35b34801561083457600080fd5b5061083d611b69565b60405161084a919061383b565b60405180910390f35b34801561085f57600080fd5b50610868611b6f565b604051610876929190613bc2565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613856565b611b91565b005b3480156108b457600080fd5b506108bd611cdc565b6040516108ca9190613561565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190613883565b611d6a565b005b34801561090857600080fd5b50610923600480360381019061091e9190613c8c565b611ead565b005b34801561093157600080fd5b5061094c60048036038101906109479190613d0f565b611f20565b005b34801561095a57600080fd5b50610975600480360381019061097091906135b9565b611fb9565b6040516109829190613561565b60405180910390f35b34801561099757600080fd5b506109a0612111565b6040516109ad9190613561565b60405180910390f35b3480156109c257600080fd5b506109cb61219f565b6040516109d8919061383b565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613d0f565b6121a5565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613d3c565b61223e565b604051610a3e91906134b6565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a699190613a18565b6122d2565b005b348015610a7c57600080fd5b50610a976004803603810190610a929190613856565b6123b7565b005b610ab36004803603810190610aae9190613a18565b6124ae565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b405750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610b5690613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290613dab565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b6000610be4826127b5565b610c1a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6082612814565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc7576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce66128e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4957610d1281610d0d6128e0565b61223e565b610d48576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610e036128e8565b73ffffffffffffffffffffffffffffffffffffffff16610e21611451565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613e28565b60405180910390fd5b80600c9081610e869190613fea565b5050565b6000610e946128f0565b6001546000540303905090565b600e6020528060005260406000206000915090505481565b610ec48383836128f9565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610f0483838360405180602001604052806000815250611ead565b505050565b610f116128e8565b73ffffffffffffffffffffffffffffffffffffffff16610f2f611451565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613e28565b60405180910390fd5b8060149081610f949190613fea565b5050565b600d60009054906101000a900460ff1681565b600c8054610fb890613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe490613dab565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b505050505081565b600d60019054906101000a900460ff1681565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110aa9190613627565b602060405180830381865afa1580156110c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110eb91906140d1565b905080915050919050565b600b805461110390613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461112f90613dab565b801561117c5780601f106111515761010080835404028352916020019161117c565b820191906000526020600020905b81548152906001019060200180831161115f57829003601f168201915b505050505081565b600061118f82612814565b9050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111c46128e8565b73ffffffffffffffffffffffffffffffffffffffff166111e2611451565b73ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613e28565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113426128e8565b73ffffffffffffffffffffffffffffffffffffffff16611360611451565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90613e28565b60405180910390fd5b6113c06000612ca0565b565b6113ca6128e8565b73ffffffffffffffffffffffffffffffffffffffff166113e8611451565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613e28565b60405180910390fd5b80600b908161144d9190613fea565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060008060005b85518110156115085760001515600f60008884815181106114a8576114a76140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515036114e65781806114de9061415c565b9250506114f5565b82806114f19061415c565b9350505b80806115009061415c565b915050611484565b5060008167ffffffffffffffff811115611525576115246136b8565b5b6040519080825280602002602001820160405280156115535781602001602082028036833780820191505090505b50905060008367ffffffffffffffff811115611572576115716136b8565b5b6040519080825280602002602001820160405280156115a05781602001602082028036833780820191505090505b50905060008060005b89518110156116a15760001515600f60008c84815181106115cd576115cc6140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515036116455789818151811061160b5761160a6140fe565b5b6020026020010151858481518110611626576116256140fe565b5b602002602001018181525050828061163d9061415c565b93505061168e565b898181518110611658576116576140fe565b5b6020026020010151848381518110611673576116726140fe565b5b602002602001018181525050818061168a9061415c565b9250505b80806116999061415c565b9150506115a9565b50838397509750505050505050915091565b6116bb6128e8565b73ffffffffffffffffffffffffffffffffffffffff166116d9611451565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690613e28565b60405180910390fd5b8060138190555050565b60606003805461174890613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461177490613dab565b80156117c15780601f10611796576101008083540402835291602001916117c1565b820191906000526020600020905b8154815290600101906020018083116117a457829003601f168201915b5050505050905090565b60135481565b6117d96128e8565b73ffffffffffffffffffffffffffffffffffffffff166117f7611451565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613e28565b60405180910390fd5b600260095403611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906141f0565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016118d5929190614210565b6020604051808303816000875af11580156118f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611918919061424e565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906142c7565b60405180910390fd5b6001600981905550505050565b61196c6128e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119dd6128e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a8a6128e0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611acf91906134b6565b60405180910390a35050565b60148054611ae890613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1490613dab565b8015611b615780601f10611b3657610100808354040283529160200191611b61565b820191906000526020600020905b815481529060010190602001808311611b4457829003601f168201915b505050505081565b60115481565b6000806000611b7c610e8a565b90506000601054905081819350935050509091565b611b996128e8565b73ffffffffffffffffffffffffffffffffffffffff16611bb7611451565b73ffffffffffffffffffffffffffffffffffffffff1614611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613e28565b60405180910390fd5b600260095403611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c49906141f0565b60405180910390fd5b600260098190555060008173ffffffffffffffffffffffffffffffffffffffff1647604051611c8090614318565b60006040518083038185875af1925050503d8060008114611cbd576040519150601f19603f3d011682016040523d82523d6000602084013e611cc2565b606091505b5050905080611cd057600080fd5b50600160098190555050565b60168054611ce990613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1590613dab565b8015611d625780601f10611d3757610100808354040283529160200191611d62565b820191906000526020600020905b815481529060010190602001808311611d4557829003601f168201915b505050505081565b611d726128e8565b73ffffffffffffffffffffffffffffffffffffffff16611d90611451565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90613e28565b60405180910390fd5b600260095403611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e22906141f0565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611e6e929190614210565b600060405180830381600087803b158015611e8857600080fd5b505af1158015611e9c573d6000803e3d6000fd5b505050506001600981905550505050565b611eb88484846128f9565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611f1a57611ee384848484612d66565b611f19576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611f286128e8565b73ffffffffffffffffffffffffffffffffffffffff16611f46611451565b73ffffffffffffffffffffffffffffffffffffffff1614611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9390613e28565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6060611fc4826127b5565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061439f565b60405180910390fd5b60001515600d60009054906101000a900460ff161515036120b0576014805461202b90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461205790613dab565b80156120a45780601f10612079576101008083540402835291602001916120a4565b820191906000526020600020905b81548152906001019060200180831161208757829003601f168201915b5050505050905061210c565b60006120ba612eb6565b905060008151116120da5760405180602001604052806000815250612108565b806120e484612f48565b600c6040516020016120f89392919061447e565b6040516020818303038152906040525b9150505b919050565b6015805461211e90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461214a90613dab565b80156121975780601f1061216c57610100808354040283529160200191612197565b820191906000526020600020905b81548152906001019060200180831161217a57829003601f168201915b505050505081565b60105481565b6121ad6128e8565b73ffffffffffffffffffffffffffffffffffffffff166121cb611451565b73ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613e28565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122da6128e8565b73ffffffffffffffffffffffffffffffffffffffff166122f8611451565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613e28565b60405180910390fd5b60005b81518110156123b3576001600f6000848481518110612373576123726140fe565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123ab9061415c565b915050612351565b5050565b6123bf6128e8565b73ffffffffffffffffffffffffffffffffffffffff166123dd611451565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90613e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614521565b60405180910390fd5b6124ab81612ca0565b50565b8051806013546124be9190614541565b341015612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f7906145cf565b60405180910390fd5b6010548161250c610e8a565b61251691906145ef565b1115612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061466f565b60405180910390fd5b60001515600d60019054906101000a900460ff161515146125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a4906146db565b60405180910390fd5b6002600954036125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e9906141f0565b60405180910390fd5b600260098190555060005b825181101561278d5761260e6128e8565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110612675576126746140fe565b5b60200260200101516040518263ffffffff1660e01b8152600401612699919061383b565b602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614710565b73ffffffffffffffffffffffffffffffffffffffff1614801561273b575060001515600f6000858481518110612713576127126140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515145b61277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614789565b60405180910390fd5b80806127859061415c565b9150506125fd565b506127a06127996128e8565b83516130a8565b6127a9826130c6565b60016009819055505050565b6000816127c06128f0565b111580156127cf575060005482105b801561280d575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806128236128f0565b116128a9576000548110156128a85760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036128a6575b6000810361289c576004600083600190039350838152602001908152602001600020549050612872565b80925050506128db565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b600061290482612814565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461296b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661298c6128e0565b73ffffffffffffffffffffffffffffffffffffffff1614806129bb57506129ba856129b56128e0565b61223e565b5b80612a0057506129c96128e0565b73ffffffffffffffffffffffffffffffffffffffff166129e884610bd9565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612a39576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a9f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aac858585600161312f565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612ba986613135565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831603612c315760006001840190506000600460008381526020019081526020016000205403612c2f576000548114612c2e578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c99858585600161313f565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d8c6128e0565b8786866040518563ffffffff1660e01b8152600401612dae94939291906147fe565b6020604051808303816000875af1925050508015612dea57506040513d601f19601f82011682018060405250810190612de7919061485f565b60015b612e63573d8060008114612e1a576040519150601f19603f3d011682016040523d82523d6000602084013e612e1f565b606091505b506000815103612e5b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054612ec590613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054612ef190613dab565b8015612f3e5780601f10612f1357610100808354040283529160200191612f3e565b820191906000526020600020905b815481529060010190602001808311612f2157829003601f168201915b5050505050905090565b606060008203612f8f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130a3565b600082905060005b60008214612fc1578080612faa9061415c565b915050600a82612fba91906148bb565b9150612f97565b60008167ffffffffffffffff811115612fdd57612fdc6136b8565b5b6040519080825280601f01601f19166020018201604052801561300f5781602001600182028036833780820191505090505b5090505b6000851461309c5760018261302891906148ec565b9150600a856130379190614920565b603061304391906145ef565b60f81b818381518110613059576130586140fe565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561309591906148bb565b9450613013565b8093505050505b919050565b6130c2828260405180602001604052806000815250613145565b5050565b60005b815181101561312b576001600f60008484815181106130eb576130ea6140fe565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806131239061415c565b9150506130c9565b5050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131b1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036131eb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131f8600085838661312f565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e161325d600185146133f8565b901b60a042901b61326d86613135565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14613371575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133216000878480600101955087612d66565b613357576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132b257826000541461336c57600080fd5b6133dc565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613372575b8160008190555050506133f2600085838661313f565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61344b81613416565b811461345657600080fd5b50565b60008135905061346881613442565b92915050565b6000602082840312156134845761348361340c565b5b600061349284828501613459565b91505092915050565b60008115159050919050565b6134b08161349b565b82525050565b60006020820190506134cb60008301846134a7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561350b5780820151818401526020810190506134f0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613533826134d1565b61353d81856134dc565b935061354d8185602086016134ed565b61355681613517565b840191505092915050565b6000602082019050818103600083015261357b8184613528565b905092915050565b6000819050919050565b61359681613583565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce61340c565b5b60006135dd848285016135a4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613611826135e6565b9050919050565b61362181613606565b82525050565b600060208201905061363c6000830184613618565b92915050565b61364b81613606565b811461365657600080fd5b50565b60008135905061366881613642565b92915050565b600080604083850312156136855761368461340c565b5b600061369385828601613659565b92505060206136a4858286016135a4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136f082613517565b810181811067ffffffffffffffff8211171561370f5761370e6136b8565b5b80604052505050565b6000613722613402565b905061372e82826136e7565b919050565b600067ffffffffffffffff82111561374e5761374d6136b8565b5b61375782613517565b9050602081019050919050565b82818337600083830152505050565b600061378661378184613733565b613718565b9050828152602081018484840111156137a2576137a16136b3565b5b6137ad848285613764565b509392505050565b600082601f8301126137ca576137c96136ae565b5b81356137da848260208601613773565b91505092915050565b6000602082840312156137f9576137f861340c565b5b600082013567ffffffffffffffff81111561381757613816613411565b5b613823848285016137b5565b91505092915050565b61383581613583565b82525050565b6000602082019050613850600083018461382c565b92915050565b60006020828403121561386c5761386b61340c565b5b600061387a84828501613659565b91505092915050565b60008060006060848603121561389c5761389b61340c565b5b60006138aa86828701613659565b93505060206138bb86828701613659565b92505060406138cc868287016135a4565b9150509250925092565b6000819050919050565b60006138fb6138f66138f1846135e6565b6138d6565b6135e6565b9050919050565b600061390d826138e0565b9050919050565b600061391f82613902565b9050919050565b61392f81613914565b82525050565b600060208201905061394a6000830184613926565b92915050565b600067ffffffffffffffff82111561396b5761396a6136b8565b5b602082029050602081019050919050565b600080fd5b600061399461398f84613950565b613718565b905080838252602082019050602084028301858111156139b7576139b661397c565b5b835b818110156139e057806139cc88826135a4565b8452602084019350506020810190506139b9565b5050509392505050565b600082601f8301126139ff576139fe6136ae565b5b8135613a0f848260208601613981565b91505092915050565b600060208284031215613a2e57613a2d61340c565b5b600082013567ffffffffffffffff811115613a4c57613a4b613411565b5b613a58848285016139ea565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9681613583565b82525050565b6000613aa88383613a8d565b60208301905092915050565b6000602082019050919050565b6000613acc82613a61565b613ad68185613a6c565b9350613ae183613a7d565b8060005b83811015613b12578151613af98882613a9c565b9750613b0483613ab4565b925050600181019050613ae5565b5085935050505092915050565b60006040820190508181036000830152613b398185613ac1565b90508181036020830152613b4d8184613ac1565b90509392505050565b613b5f8161349b565b8114613b6a57600080fd5b50565b600081359050613b7c81613b56565b92915050565b60008060408385031215613b9957613b9861340c565b5b6000613ba785828601613659565b9250506020613bb885828601613b6d565b9150509250929050565b6000604082019050613bd7600083018561382c565b613be4602083018461382c565b9392505050565b600067ffffffffffffffff821115613c0657613c056136b8565b5b613c0f82613517565b9050602081019050919050565b6000613c2f613c2a84613beb565b613718565b905082815260208101848484011115613c4b57613c4a6136b3565b5b613c56848285613764565b509392505050565b600082601f830112613c7357613c726136ae565b5b8135613c83848260208601613c1c565b91505092915050565b60008060008060808587031215613ca657613ca561340c565b5b6000613cb487828801613659565b9450506020613cc587828801613659565b9350506040613cd6878288016135a4565b925050606085013567ffffffffffffffff811115613cf757613cf6613411565b5b613d0387828801613c5e565b91505092959194509250565b600060208284031215613d2557613d2461340c565b5b6000613d3384828501613b6d565b91505092915050565b60008060408385031215613d5357613d5261340c565b5b6000613d6185828601613659565b9250506020613d7285828601613659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dc357607f821691505b602082108103613dd657613dd5613d7c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e126020836134dc565b9150613e1d82613ddc565b602082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613eaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e6d565b613eb48683613e6d565b95508019841693508086168417925050509392505050565b6000613ee7613ee2613edd84613583565b6138d6565b613583565b9050919050565b6000819050919050565b613f0183613ecc565b613f15613f0d82613eee565b848454613e7a565b825550505050565b600090565b613f2a613f1d565b613f35818484613ef8565b505050565b5b81811015613f5957613f4e600082613f22565b600181019050613f3b565b5050565b601f821115613f9e57613f6f81613e48565b613f7884613e5d565b81016020851015613f87578190505b613f9b613f9385613e5d565b830182613f3a565b50505b505050565b600082821c905092915050565b6000613fc160001984600802613fa3565b1980831691505092915050565b6000613fda8383613fb0565b9150826002028217905092915050565b613ff3826134d1565b67ffffffffffffffff81111561400c5761400b6136b8565b5b6140168254613dab565b614021828285613f5d565b600060209050601f8311600181146140545760008415614042578287015190505b61404c8582613fce565b8655506140b4565b601f19841661406286613e48565b60005b8281101561408a57848901518255600182019150602085019450602081019050614065565b868310156140a757848901516140a3601f891682613fb0565b8355505b6001600288020188555050505b505050505050565b6000815190506140cb8161358d565b92915050565b6000602082840312156140e7576140e661340c565b5b60006140f5848285016140bc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416782613583565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141995761419861412d565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006141da601f836134dc565b91506141e5826141a4565b602082019050919050565b60006020820190508181036000830152614209816141cd565b9050919050565b60006040820190506142256000830185613618565b614232602083018461382c565b9392505050565b60008151905061424881613b56565b92915050565b6000602082840312156142645761426361340c565b5b600061427284828501614239565b91505092915050565b7f436f756c64206e6f74207472616e73666572206f757420746f6b656e73210000600082015250565b60006142b1601e836134dc565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b600081905092915050565b50565b60006143026000836142e7565b915061430d826142f2565b600082019050919050565b6000614323826142f5565b9150819050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614389602f836134dc565b91506143948261432d565b604082019050919050565b600060208201905081810360008301526143b88161437c565b9050919050565b600081905092915050565b60006143d5826134d1565b6143df81856143bf565b93506143ef8185602086016134ed565b80840191505092915050565b6000815461440881613dab565b61441281866143bf565b9450600182166000811461442d576001811461444257614475565b60ff1983168652811515820286019350614475565b61444b85613e48565b60005b8381101561446d5781548189015260018201915060208101905061444e565b838801955050505b50505092915050565b600061448a82866143ca565b915061449682856143ca565b91506144a282846143fb565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450b6026836134dc565b9150614516826144af565b604082019050919050565b6000602082019050818103600083015261453a816144fe565b9050919050565b600061454c82613583565b915061455783613583565b925082820261456581613583565b9150828204841483151761457c5761457b61412d565b5b5092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b60006145b96012836134dc565b91506145c482614583565b602082019050919050565b600060208201905081810360008301526145e8816145ac565b9050919050565b60006145fa82613583565b915061460583613583565b925082820190508082111561461d5761461c61412d565b5b92915050565b7f4d696e7461626c6520737570706c792065786365656465642100000000000000600082015250565b60006146596019836134dc565b915061466482614623565b602082019050919050565b600060208201905081810360008301526146888161464c565b9050919050565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b60006146c5600f836134dc565b91506146d08261468f565b602082019050919050565b600060208201905081810360008301526146f4816146b8565b9050919050565b60008151905061470a81613642565b92915050565b6000602082840312156147265761472561340c565b5b6000614734848285016146fb565b91505092915050565b7f4e6f74204e4654206f776e6572206f72204e4654206e6f742076616c69640000600082015250565b6000614773601e836134dc565b915061477e8261473d565b602082019050919050565b600060208201905081810360008301526147a281614766565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147d0826147a9565b6147da81856147b4565b93506147ea8185602086016134ed565b6147f381613517565b840191505092915050565b60006080820190506148136000830187613618565b6148206020830186613618565b61482d604083018561382c565b818103606083015261483f81846147c5565b905095945050505050565b60008151905061485981613442565b92915050565b6000602082840312156148755761487461340c565b5b60006148838482850161484a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148c682613583565b91506148d183613583565b9250826148e1576148e061488c565b5b828204905092915050565b60006148f782613583565b915061490283613583565b925082820390508181111561491a5761491961412d565b5b92915050565b600061492b82613583565b915061493683613583565b9250826149465761494561488c565b5b82820690509291505056fea264697066735822122065ecdcdbeb55a463a3c76403fb2a26e4c0217022fb50fe28630e4320c3f7fdc564736f6c63430008120033697066733a2f2f516d5a643471503577684b624c4873327556504d78507639766f4478396d4e737653627143394361416d53684b6f2f
Deployed Bytecode
0x6080604052600436106102815760003560e01c80638da5cb5b1161014f578063b09f1266116100c1578063d5abeb011161007a578063d5abeb01146109b6578063e0a80853146109e1578063e985e9c514610a0a578063f044951314610a47578063f2fde38b14610a70578063f8e93ef914610a9957610288565b8063b09f1266146108a8578063b236ff82146108d3578063b88d4fde146108fc578063bedb86fb14610925578063c87b56dd1461094e578063d28d88521461098b57610288565b80639db5dbe4116101135780639db5dbe4146107ab578063a22cb465146107d4578063a45ba8e7146107fd578063aa4bde2814610828578063ac72200d14610853578063af933b571461087f57610288565b80638da5cb5b146106c35780638e09a116146106ee57806391b7f5ed1461072c57806395d89b41146107555780639d03e6d01461078057610288565b806351830227116101f357806365627f15116101ac57806365627f15146105c757806369d03738146105f25780636f0b78711461061b57806370a0823114610646578063715018a6146106835780637ec4a6591461069a57610288565b806351830227146104a15780635503a0e8146104cc5780635c975abb146104f75780635f5152261461052257806362b99ad41461055f5780636352211e1461058a57610288565b806318160ddd1161024557806318160ddd146103815780631e7269c5146103ac57806323b872dd146103e95780634272f4471461041257806342842e0e1461044f5780634fdd43cb1461047857610288565b806301ffc9a71461028a57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f57806316ba10e01461035857610288565b3661028857005b005b34801561029657600080fd5b506102b160048036038101906102ac919061346e565b610ab5565b6040516102be91906134b6565b60405180910390f35b3480156102d357600080fd5b506102dc610b47565b6040516102e99190613561565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906135b9565b610bd9565b6040516103269190613627565b60405180910390f35b34801561033b57600080fd5b506103566004803603810190610351919061366e565b610c55565b005b34801561036457600080fd5b5061037f600480360381019061037a91906137e3565b610dfb565b005b34801561038d57600080fd5b50610396610e8a565b6040516103a3919061383b565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613856565b610ea1565b6040516103e0919061383b565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613883565b610eb9565b005b34801561041e57600080fd5b50610439600480360381019061043491906135b9565b610ec9565b60405161044691906134b6565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613883565b610ee9565b005b34801561048457600080fd5b5061049f600480360381019061049a91906137e3565b610f09565b005b3480156104ad57600080fd5b506104b6610f98565b6040516104c391906134b6565b60405180910390f35b3480156104d857600080fd5b506104e1610fab565b6040516104ee9190613561565b60405180910390f35b34801561050357600080fd5b5061050c611039565b60405161051991906134b6565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190613856565b61104c565b604051610556919061383b565b60405180910390f35b34801561056b57600080fd5b506105746110f6565b6040516105819190613561565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906135b9565b611184565b6040516105be9190613627565b60405180910390f35b3480156105d357600080fd5b506105dc611196565b6040516105e99190613935565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190613856565b6111bc565b005b34801561062757600080fd5b5061063061127c565b60405161063d919061383b565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190613856565b611282565b60405161067a919061383b565b60405180910390f35b34801561068f57600080fd5b5061069861133a565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906137e3565b6113c2565b005b3480156106cf57600080fd5b506106d8611451565b6040516106e59190613627565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613a18565b61147b565b604051610723929190613b1f565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906135b9565b6116b3565b005b34801561076157600080fd5b5061076a611739565b6040516107779190613561565b60405180910390f35b34801561078c57600080fd5b506107956117cb565b6040516107a2919061383b565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190613883565b6117d1565b005b3480156107e057600080fd5b506107fb60048036038101906107f69190613b82565b611964565b005b34801561080957600080fd5b50610812611adb565b60405161081f9190613561565b60405180910390f35b34801561083457600080fd5b5061083d611b69565b60405161084a919061383b565b60405180910390f35b34801561085f57600080fd5b50610868611b6f565b604051610876929190613bc2565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a19190613856565b611b91565b005b3480156108b457600080fd5b506108bd611cdc565b6040516108ca9190613561565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190613883565b611d6a565b005b34801561090857600080fd5b50610923600480360381019061091e9190613c8c565b611ead565b005b34801561093157600080fd5b5061094c60048036038101906109479190613d0f565b611f20565b005b34801561095a57600080fd5b50610975600480360381019061097091906135b9565b611fb9565b6040516109829190613561565b60405180910390f35b34801561099757600080fd5b506109a0612111565b6040516109ad9190613561565b60405180910390f35b3480156109c257600080fd5b506109cb61219f565b6040516109d8919061383b565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613d0f565b6121a5565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190613d3c565b61223e565b604051610a3e91906134b6565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a699190613a18565b6122d2565b005b348015610a7c57600080fd5b50610a976004803603810190610a929190613856565b6123b7565b005b610ab36004803603810190610aae9190613a18565b6124ae565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b405750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610b5690613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290613dab565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b6000610be4826127b5565b610c1a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6082612814565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc7576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce66128e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4957610d1281610d0d6128e0565b61223e565b610d48576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610e036128e8565b73ffffffffffffffffffffffffffffffffffffffff16610e21611451565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613e28565b60405180910390fd5b80600c9081610e869190613fea565b5050565b6000610e946128f0565b6001546000540303905090565b600e6020528060005260406000206000915090505481565b610ec48383836128f9565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610f0483838360405180602001604052806000815250611ead565b505050565b610f116128e8565b73ffffffffffffffffffffffffffffffffffffffff16610f2f611451565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613e28565b60405180910390fd5b8060149081610f949190613fea565b5050565b600d60009054906101000a900460ff1681565b600c8054610fb890613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe490613dab565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b505050505081565b600d60019054906101000a900460ff1681565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110aa9190613627565b602060405180830381865afa1580156110c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110eb91906140d1565b905080915050919050565b600b805461110390613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461112f90613dab565b801561117c5780601f106111515761010080835404028352916020019161117c565b820191906000526020600020905b81548152906001019060200180831161115f57829003601f168201915b505050505081565b600061118f82612814565b9050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111c46128e8565b73ffffffffffffffffffffffffffffffffffffffff166111e2611451565b73ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613e28565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6113426128e8565b73ffffffffffffffffffffffffffffffffffffffff16611360611451565b73ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90613e28565b60405180910390fd5b6113c06000612ca0565b565b6113ca6128e8565b73ffffffffffffffffffffffffffffffffffffffff166113e8611451565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613e28565b60405180910390fd5b80600b908161144d9190613fea565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060008060005b85518110156115085760001515600f60008884815181106114a8576114a76140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515036114e65781806114de9061415c565b9250506114f5565b82806114f19061415c565b9350505b80806115009061415c565b915050611484565b5060008167ffffffffffffffff811115611525576115246136b8565b5b6040519080825280602002602001820160405280156115535781602001602082028036833780820191505090505b50905060008367ffffffffffffffff811115611572576115716136b8565b5b6040519080825280602002602001820160405280156115a05781602001602082028036833780820191505090505b50905060008060005b89518110156116a15760001515600f60008c84815181106115cd576115cc6140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515036116455789818151811061160b5761160a6140fe565b5b6020026020010151858481518110611626576116256140fe565b5b602002602001018181525050828061163d9061415c565b93505061168e565b898181518110611658576116576140fe565b5b6020026020010151848381518110611673576116726140fe565b5b602002602001018181525050818061168a9061415c565b9250505b80806116999061415c565b9150506115a9565b50838397509750505050505050915091565b6116bb6128e8565b73ffffffffffffffffffffffffffffffffffffffff166116d9611451565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690613e28565b60405180910390fd5b8060138190555050565b60606003805461174890613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461177490613dab565b80156117c15780601f10611796576101008083540402835291602001916117c1565b820191906000526020600020905b8154815290600101906020018083116117a457829003601f168201915b5050505050905090565b60135481565b6117d96128e8565b73ffffffffffffffffffffffffffffffffffffffff166117f7611451565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613e28565b60405180910390fd5b600260095403611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906141f0565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016118d5929190614210565b6020604051808303816000875af11580156118f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611918919061424e565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906142c7565b60405180910390fd5b6001600981905550505050565b61196c6128e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119dd6128e0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a8a6128e0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611acf91906134b6565b60405180910390a35050565b60148054611ae890613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1490613dab565b8015611b615780601f10611b3657610100808354040283529160200191611b61565b820191906000526020600020905b815481529060010190602001808311611b4457829003601f168201915b505050505081565b60115481565b6000806000611b7c610e8a565b90506000601054905081819350935050509091565b611b996128e8565b73ffffffffffffffffffffffffffffffffffffffff16611bb7611451565b73ffffffffffffffffffffffffffffffffffffffff1614611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613e28565b60405180910390fd5b600260095403611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c49906141f0565b60405180910390fd5b600260098190555060008173ffffffffffffffffffffffffffffffffffffffff1647604051611c8090614318565b60006040518083038185875af1925050503d8060008114611cbd576040519150601f19603f3d011682016040523d82523d6000602084013e611cc2565b606091505b5050905080611cd057600080fd5b50600160098190555050565b60168054611ce990613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1590613dab565b8015611d625780601f10611d3757610100808354040283529160200191611d62565b820191906000526020600020905b815481529060010190602001808311611d4557829003601f168201915b505050505081565b611d726128e8565b73ffffffffffffffffffffffffffffffffffffffff16611d90611451565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90613e28565b60405180910390fd5b600260095403611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e22906141f0565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611e6e929190614210565b600060405180830381600087803b158015611e8857600080fd5b505af1158015611e9c573d6000803e3d6000fd5b505050506001600981905550505050565b611eb88484846128f9565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611f1a57611ee384848484612d66565b611f19576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611f286128e8565b73ffffffffffffffffffffffffffffffffffffffff16611f46611451565b73ffffffffffffffffffffffffffffffffffffffff1614611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9390613e28565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6060611fc4826127b5565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061439f565b60405180910390fd5b60001515600d60009054906101000a900460ff161515036120b0576014805461202b90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461205790613dab565b80156120a45780601f10612079576101008083540402835291602001916120a4565b820191906000526020600020905b81548152906001019060200180831161208757829003601f168201915b5050505050905061210c565b60006120ba612eb6565b905060008151116120da5760405180602001604052806000815250612108565b806120e484612f48565b600c6040516020016120f89392919061447e565b6040516020818303038152906040525b9150505b919050565b6015805461211e90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461214a90613dab565b80156121975780601f1061216c57610100808354040283529160200191612197565b820191906000526020600020905b81548152906001019060200180831161217a57829003601f168201915b505050505081565b60105481565b6121ad6128e8565b73ffffffffffffffffffffffffffffffffffffffff166121cb611451565b73ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613e28565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122da6128e8565b73ffffffffffffffffffffffffffffffffffffffff166122f8611451565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613e28565b60405180910390fd5b60005b81518110156123b3576001600f6000848481518110612373576123726140fe565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123ab9061415c565b915050612351565b5050565b6123bf6128e8565b73ffffffffffffffffffffffffffffffffffffffff166123dd611451565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90613e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614521565b60405180910390fd5b6124ab81612ca0565b50565b8051806013546124be9190614541565b341015612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f7906145cf565b60405180910390fd5b6010548161250c610e8a565b61251691906145ef565b1115612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e9061466f565b60405180910390fd5b60001515600d60019054906101000a900460ff161515146125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a4906146db565b60405180910390fd5b6002600954036125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e9906141f0565b60405180910390fd5b600260098190555060005b825181101561278d5761260e6128e8565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110612675576126746140fe565b5b60200260200101516040518263ffffffff1660e01b8152600401612699919061383b565b602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614710565b73ffffffffffffffffffffffffffffffffffffffff1614801561273b575060001515600f6000858481518110612713576127126140fe565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff161515145b61277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614789565b60405180910390fd5b80806127859061415c565b9150506125fd565b506127a06127996128e8565b83516130a8565b6127a9826130c6565b60016009819055505050565b6000816127c06128f0565b111580156127cf575060005482105b801561280d575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806128236128f0565b116128a9576000548110156128a85760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036128a6575b6000810361289c576004600083600190039350838152602001908152602001600020549050612872565b80925050506128db565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b600061290482612814565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461296b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661298c6128e0565b73ffffffffffffffffffffffffffffffffffffffff1614806129bb57506129ba856129b56128e0565b61223e565b5b80612a0057506129c96128e0565b73ffffffffffffffffffffffffffffffffffffffff166129e884610bd9565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612a39576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a9f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612aac858585600161312f565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612ba986613135565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831603612c315760006001840190506000600460008381526020019081526020016000205403612c2f576000548114612c2e578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c99858585600161313f565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d8c6128e0565b8786866040518563ffffffff1660e01b8152600401612dae94939291906147fe565b6020604051808303816000875af1925050508015612dea57506040513d601f19601f82011682018060405250810190612de7919061485f565b60015b612e63573d8060008114612e1a576040519150601f19603f3d011682016040523d82523d6000602084013e612e1f565b606091505b506000815103612e5b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054612ec590613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054612ef190613dab565b8015612f3e5780601f10612f1357610100808354040283529160200191612f3e565b820191906000526020600020905b815481529060010190602001808311612f2157829003601f168201915b5050505050905090565b606060008203612f8f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130a3565b600082905060005b60008214612fc1578080612faa9061415c565b915050600a82612fba91906148bb565b9150612f97565b60008167ffffffffffffffff811115612fdd57612fdc6136b8565b5b6040519080825280601f01601f19166020018201604052801561300f5781602001600182028036833780820191505090505b5090505b6000851461309c5760018261302891906148ec565b9150600a856130379190614920565b603061304391906145ef565b60f81b818381518110613059576130586140fe565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561309591906148bb565b9450613013565b8093505050505b919050565b6130c2828260405180602001604052806000815250613145565b5050565b60005b815181101561312b576001600f60008484815181106130eb576130ea6140fe565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806131239061415c565b9150506130c9565b5050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131b1576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036131eb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131f8600085838661312f565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e161325d600185146133f8565b901b60a042901b61326d86613135565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14613371575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133216000878480600101955087612d66565b613357576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132b257826000541461336c57600080fd5b6133dc565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613372575b8160008190555050506133f2600085838661313f565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61344b81613416565b811461345657600080fd5b50565b60008135905061346881613442565b92915050565b6000602082840312156134845761348361340c565b5b600061349284828501613459565b91505092915050565b60008115159050919050565b6134b08161349b565b82525050565b60006020820190506134cb60008301846134a7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561350b5780820151818401526020810190506134f0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613533826134d1565b61353d81856134dc565b935061354d8185602086016134ed565b61355681613517565b840191505092915050565b6000602082019050818103600083015261357b8184613528565b905092915050565b6000819050919050565b61359681613583565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce61340c565b5b60006135dd848285016135a4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613611826135e6565b9050919050565b61362181613606565b82525050565b600060208201905061363c6000830184613618565b92915050565b61364b81613606565b811461365657600080fd5b50565b60008135905061366881613642565b92915050565b600080604083850312156136855761368461340c565b5b600061369385828601613659565b92505060206136a4858286016135a4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136f082613517565b810181811067ffffffffffffffff8211171561370f5761370e6136b8565b5b80604052505050565b6000613722613402565b905061372e82826136e7565b919050565b600067ffffffffffffffff82111561374e5761374d6136b8565b5b61375782613517565b9050602081019050919050565b82818337600083830152505050565b600061378661378184613733565b613718565b9050828152602081018484840111156137a2576137a16136b3565b5b6137ad848285613764565b509392505050565b600082601f8301126137ca576137c96136ae565b5b81356137da848260208601613773565b91505092915050565b6000602082840312156137f9576137f861340c565b5b600082013567ffffffffffffffff81111561381757613816613411565b5b613823848285016137b5565b91505092915050565b61383581613583565b82525050565b6000602082019050613850600083018461382c565b92915050565b60006020828403121561386c5761386b61340c565b5b600061387a84828501613659565b91505092915050565b60008060006060848603121561389c5761389b61340c565b5b60006138aa86828701613659565b93505060206138bb86828701613659565b92505060406138cc868287016135a4565b9150509250925092565b6000819050919050565b60006138fb6138f66138f1846135e6565b6138d6565b6135e6565b9050919050565b600061390d826138e0565b9050919050565b600061391f82613902565b9050919050565b61392f81613914565b82525050565b600060208201905061394a6000830184613926565b92915050565b600067ffffffffffffffff82111561396b5761396a6136b8565b5b602082029050602081019050919050565b600080fd5b600061399461398f84613950565b613718565b905080838252602082019050602084028301858111156139b7576139b661397c565b5b835b818110156139e057806139cc88826135a4565b8452602084019350506020810190506139b9565b5050509392505050565b600082601f8301126139ff576139fe6136ae565b5b8135613a0f848260208601613981565b91505092915050565b600060208284031215613a2e57613a2d61340c565b5b600082013567ffffffffffffffff811115613a4c57613a4b613411565b5b613a58848285016139ea565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9681613583565b82525050565b6000613aa88383613a8d565b60208301905092915050565b6000602082019050919050565b6000613acc82613a61565b613ad68185613a6c565b9350613ae183613a7d565b8060005b83811015613b12578151613af98882613a9c565b9750613b0483613ab4565b925050600181019050613ae5565b5085935050505092915050565b60006040820190508181036000830152613b398185613ac1565b90508181036020830152613b4d8184613ac1565b90509392505050565b613b5f8161349b565b8114613b6a57600080fd5b50565b600081359050613b7c81613b56565b92915050565b60008060408385031215613b9957613b9861340c565b5b6000613ba785828601613659565b9250506020613bb885828601613b6d565b9150509250929050565b6000604082019050613bd7600083018561382c565b613be4602083018461382c565b9392505050565b600067ffffffffffffffff821115613c0657613c056136b8565b5b613c0f82613517565b9050602081019050919050565b6000613c2f613c2a84613beb565b613718565b905082815260208101848484011115613c4b57613c4a6136b3565b5b613c56848285613764565b509392505050565b600082601f830112613c7357613c726136ae565b5b8135613c83848260208601613c1c565b91505092915050565b60008060008060808587031215613ca657613ca561340c565b5b6000613cb487828801613659565b9450506020613cc587828801613659565b9350506040613cd6878288016135a4565b925050606085013567ffffffffffffffff811115613cf757613cf6613411565b5b613d0387828801613c5e565b91505092959194509250565b600060208284031215613d2557613d2461340c565b5b6000613d3384828501613b6d565b91505092915050565b60008060408385031215613d5357613d5261340c565b5b6000613d6185828601613659565b9250506020613d7285828601613659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dc357607f821691505b602082108103613dd657613dd5613d7c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e126020836134dc565b9150613e1d82613ddc565b602082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613eaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e6d565b613eb48683613e6d565b95508019841693508086168417925050509392505050565b6000613ee7613ee2613edd84613583565b6138d6565b613583565b9050919050565b6000819050919050565b613f0183613ecc565b613f15613f0d82613eee565b848454613e7a565b825550505050565b600090565b613f2a613f1d565b613f35818484613ef8565b505050565b5b81811015613f5957613f4e600082613f22565b600181019050613f3b565b5050565b601f821115613f9e57613f6f81613e48565b613f7884613e5d565b81016020851015613f87578190505b613f9b613f9385613e5d565b830182613f3a565b50505b505050565b600082821c905092915050565b6000613fc160001984600802613fa3565b1980831691505092915050565b6000613fda8383613fb0565b9150826002028217905092915050565b613ff3826134d1565b67ffffffffffffffff81111561400c5761400b6136b8565b5b6140168254613dab565b614021828285613f5d565b600060209050601f8311600181146140545760008415614042578287015190505b61404c8582613fce565b8655506140b4565b601f19841661406286613e48565b60005b8281101561408a57848901518255600182019150602085019450602081019050614065565b868310156140a757848901516140a3601f891682613fb0565b8355505b6001600288020188555050505b505050505050565b6000815190506140cb8161358d565b92915050565b6000602082840312156140e7576140e661340c565b5b60006140f5848285016140bc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416782613583565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141995761419861412d565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006141da601f836134dc565b91506141e5826141a4565b602082019050919050565b60006020820190508181036000830152614209816141cd565b9050919050565b60006040820190506142256000830185613618565b614232602083018461382c565b9392505050565b60008151905061424881613b56565b92915050565b6000602082840312156142645761426361340c565b5b600061427284828501614239565b91505092915050565b7f436f756c64206e6f74207472616e73666572206f757420746f6b656e73210000600082015250565b60006142b1601e836134dc565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b600081905092915050565b50565b60006143026000836142e7565b915061430d826142f2565b600082019050919050565b6000614323826142f5565b9150819050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614389602f836134dc565b91506143948261432d565b604082019050919050565b600060208201905081810360008301526143b88161437c565b9050919050565b600081905092915050565b60006143d5826134d1565b6143df81856143bf565b93506143ef8185602086016134ed565b80840191505092915050565b6000815461440881613dab565b61441281866143bf565b9450600182166000811461442d576001811461444257614475565b60ff1983168652811515820286019350614475565b61444b85613e48565b60005b8381101561446d5781548189015260018201915060208101905061444e565b838801955050505b50505092915050565b600061448a82866143ca565b915061449682856143ca565b91506144a282846143fb565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450b6026836134dc565b9150614516826144af565b604082019050919050565b6000602082019050818103600083015261453a816144fe565b9050919050565b600061454c82613583565b915061455783613583565b925082820261456581613583565b9150828204841483151761457c5761457b61412d565b5b5092915050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b60006145b96012836134dc565b91506145c482614583565b602082019050919050565b600060208201905081810360008301526145e8816145ac565b9050919050565b60006145fa82613583565b915061460583613583565b925082820190508082111561461d5761461c61412d565b5b92915050565b7f4d696e7461626c6520737570706c792065786365656465642100000000000000600082015250565b60006146596019836134dc565b915061466482614623565b602082019050919050565b600060208201905081810360008301526146888161464c565b9050919050565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b60006146c5600f836134dc565b91506146d08261468f565b602082019050919050565b600060208201905081810360008301526146f4816146b8565b9050919050565b60008151905061470a81613642565b92915050565b6000602082840312156147265761472561340c565b5b6000614734848285016146fb565b91505092915050565b7f4e6f74204e4654206f776e6572206f72204e4654206e6f742076616c69640000600082015250565b6000614773601e836134dc565b915061477e8261473d565b602082019050919050565b600060208201905081810360008301526147a281614766565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147d0826147a9565b6147da81856147b4565b93506147ea8185602086016134ed565b6147f381613517565b840191505092915050565b60006080820190506148136000830187613618565b6148206020830186613618565b61482d604083018561382c565b818103606083015261483f81846147c5565b905095945050505050565b60008151905061485981613442565b92915050565b6000602082840312156148755761487461340c565b5b60006148838482850161484a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148c682613583565b91506148d183613583565b9250826148e1576148e061488c565b5b828204905092915050565b60006148f782613583565b915061490283613583565b925082820390508181111561491a5761491961412d565b5b92915050565b600061492b82613583565b915061493683613583565b9250826149465761494561488c565b5b82820690509291505056fea264697066735822122065ecdcdbeb55a463a3c76403fb2a26e4c0217022fb50fe28630e4320c3f7fdc564736f6c63430008120033
Deployed Bytecode Sourcemap
865:5063:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3656:465:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7129:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8494:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8045:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4996:99:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2892:282:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1145:38:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9160:129:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1189:37:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9295:144:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4645:131:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1075:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1040;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1109:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1901:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1006:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6986:137:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;971:28:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3105:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1311:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4127:216:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23860:140;;;;;;;;;;;;;:::i;:::-;;4782:99:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23542:131:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2057:956:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3019:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7228:97:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1346:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5369:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8694:297:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1385:90:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1269:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5101:191;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;5763:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1531:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5582:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9445:329:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4564:75:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4039:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1482:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1233:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4478:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8997:157:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3208:170:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24006:269:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3546:387:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3656:465:0;3741:4;4051:10;4036:25;;:11;:25;;;;:54;;;;4080:10;4065:25;;:11;:25;;;;4036:54;:83;;;;4109:10;4094:25;;:11;:25;;;;4036:83;4017:102;;3656:465;;;:::o;7129:93::-;7183:13;7215:5;7208:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7129:93;:::o;8494:194::-;8562:7;8586:16;8594:7;8586;:16::i;:::-;8581:64;;8611:34;;;;;;;;;;;;;;8581:64;8662:15;:24;8678:7;8662:24;;;;;;;;;;;;;;;;;;;;;8655:31;;8494:194;;;:::o;8045:443::-;8117:13;8149:27;8168:7;8149:18;:27::i;:::-;8117:61;;8198:5;8192:11;;:2;:11;;;8188:48;;8212:24;;;;;;;;;;;;;;8188:48;8273:5;8250:28;;:19;:17;:19::i;:::-;:28;;;8246:159;;8297:44;8314:5;8321:19;:17;:19::i;:::-;8297:16;:44::i;:::-;8292:113;;8368:35;;;;;;;;;;;;;;8292:113;8246:159;8441:2;8414:15;:24;8430:7;8414:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8478:7;8474:2;8458:28;;8467:5;8458:28;;;;;;;;;;;;8107:381;8045:443;;:::o;4996:99:1:-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5083:10:1::1;5071:9;:22;;;;;;:::i;:::-;;4996:99:::0;:::o;2892:282:0:-;2945:7;3156:15;:13;:15::i;:::-;3141:12;;3125:13;;:28;:46;3118:53;;2892:282;:::o;1145:38:1:-;;;;;;;;;;;;;;;;;:::o;9160:129:0:-;9259:28;9269:4;9275:2;9279:7;9259:9;:28::i;:::-;9160:129;;;:::o;1189:37:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;9295:144:0:-;9398:39;9415:4;9421:2;9425:7;9398:39;;;;;;;;;;;;:16;:39::i;:::-;9295:144;;;:::o;4645:131:1:-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4756:18:1::1;4736:17;:38;;;;;;:::i;:::-;;4645:131:::0;:::o;1075:28::-;;;;;;;;;;;;;:::o;1040:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1109:25::-;;;;;;;;;;;;;:::o;1901:150::-;1959:7;1978:15;1996:12;;;;;;;;;;;:22;;;2019:5;1996:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1978:47;;2042:7;2035:14;;;1901:150;;;:::o;1006:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6986:137:0:-;7050:7;7092:27;7111:7;7092:18;:27::i;:::-;7069:52;;6986:137;;;:::o;971:28:1:-;;;;;;;;;;;;;:::o;3105:97::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3194:5:1::1;3170:12;;:30;;;;;;;;;;;;;;;;;;3105:97:::0;:::o;1311:24::-;;;;:::o;4127:216:0:-;4191:7;4231:1;4214:19;;:5;:19;;;4210:60;;4242:28;;;;;;;;;;;;;;4210:60;223:13;4287:18;:25;4306:5;4287:25;;;;;;;;;;;;;;;;:54;4280:61;;4127:216;;;:::o;23860:140::-;23792:12;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23968:30:::1;23995:1;23968:18;:30::i;:::-;23860:140::o:0;4782:99:1:-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4869:10:1::1;4857:9;:22;;;;;;:::i;:::-;;4782:99:::0;:::o;23542:131:0:-;23588:7;23665:6;;;;;;;;;;;23658:13;;23542:131;:::o;2057:956:1:-;2122:16;2140;2177:21;2208:24;2248:9;2243:190;2267:8;:15;2263:1;:19;2243:190;;;2332:5;2307:30;;:8;:21;2316:8;2325:1;2316:11;;;;;;;;:::i;:::-;;;;;;;;2307:21;;;;;;;;;;;;;;;;;;;;;:30;;;2303:129;;2357:19;;;;;:::i;:::-;;;;2303:129;;;2414:16;;;;;:::i;:::-;;;;2303:129;2284:3;;;;;:::i;:::-;;;;2243:190;;;;2443:30;2490:16;2476:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2443:64;;2517:27;2561:13;2547:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2517:58;;2585:25;2620:22;2658:9;2653:314;2677:8;:15;2673:1;:19;2653:314;;;2742:5;2717:30;;:8;:21;2726:8;2735:1;2726:11;;;;;;;;:::i;:::-;;;;;;;;2717:21;;;;;;;;;;;;;;;;;;;;;:30;;;2713:253;;2802:8;2811:1;2802:11;;;;;;;;:::i;:::-;;;;;;;;2767:13;2781:17;2767:32;;;;;;;;:::i;:::-;;;;;;;:46;;;;;2831:20;;;;;:::i;:::-;;;;2713:253;;;2918:8;2927:1;2918:11;;;;;;;;:::i;:::-;;;;;;;;2889:10;2900:14;2889:26;;;;;;;;:::i;:::-;;;;;;;:40;;;;;2947:17;;;;;:::i;:::-;;;;2713:253;2694:3;;;;;:::i;:::-;;;;2653:314;;;;2985:13;3000:10;2977:34;;;;;;;;;;2057:956;;;:::o;3019:80::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3091:6:1::1;3080:8;:17;;;;3019:80:::0;:::o;7228:97:0:-;7284:13;7316:7;7309:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7228:97;:::o;1346:33:1:-;;;;:::o;5369:207::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1:::1;22814:7;;:19:::0;22806:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1;22943:7;:18;;;;5505:10:1::2;5489:36;;;5526:3;5531:7;5489:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5481:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22401:1:0::1;22982:7;:22;;;;5369:207:1::0;;;:::o;8694:297:0:-;8804:19;:17;:19::i;:::-;8792:31;;:8;:31;;;8788:61;;8832:17;;;;;;;;;;;;;;8788:61;8911:8;8859:18;:39;8878:19;:17;:19::i;:::-;8859:39;;;;;;;;;;;;;;;:49;8899:8;8859:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;8970:8;8934:55;;8949:19;:17;:19::i;:::-;8934:55;;;8980:8;8934:55;;;;;;:::i;:::-;;;;;;;;8694:297;;:::o;1385:90:1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1269:30::-;;;;:::o;5101:191::-;5143:7;5152;5171:18;5192:13;:11;:13::i;:::-;5171:34;;5215:20;5238:9;;5215:32;;5265:10;5277:12;5257:33;;;;;;5101:191;;:::o;5763:164::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1:::1;22814:7;;:19:::0;22806:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1;22943:7;:18;;;;5840:7:1::2;5861:3;5853:17;;5878:21;5853:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5839:65;;;5922:2;5914:11;;;::::0;::::2;;5829:98;22401:1:0::1;22982:7;:22;;;;5763:164:1::0;:::o;1531:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5582:167::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1:::1;22814:7;;:19:::0;22806:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1;22943:7;:18;;;;5713:10:1::2;5697:36;;;5734:3;5739:7;5697:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;22401:1:0::1;22982:7;:22;;;;5582:167:1::0;;;:::o;9445:329:0:-;9568:28;9578:4;9584:2;9588:7;9568:9;:28::i;:::-;9628:1;9610:2;:14;;;:19;9606:167;;9648:56;9679:4;9685:2;9689:7;9698:5;9648:30;:56::i;:::-;9643:130;;9731:40;;;;;;;;;;;;;;9643:130;9606:167;9445:329;;;;:::o;4564:75:1:-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4631:6:1::1;4622;;:15;;;;;;;;;;;;;;;;;;4564:75:::0;:::o;4039:429::-;4113:13;4146:17;4154:8;4146:7;:17::i;:::-;4138:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;4241:5;4229:17;;:8;;;;;;;;;;;:17;;;4225:63;;4269:17;4262:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4225:63;4297:28;4328:10;:8;:10::i;:::-;4297:41;;4386:1;4361:14;4355:28;:32;:111;;;;;;;;;;;;;;;;;4414:14;4430:19;:8;:17;:19::i;:::-;4451:9;4397:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4355:111;4348:118;;;4039:429;;;;:::o;1482:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1233:30::-;;;;:::o;4478:80::-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4550:6:1::1;4539:8;;:17;;;;;;;;;;;;;;;;;;4478:80:::0;:::o;8997:157:0:-;9094:4;9117:18;:25;9136:5;9117:25;;;;;;;;;;;;;;;:35;9143:8;9117:35;;;;;;;;;;;;;;;;;;;;;;;;;9110:42;;8997:157;;;;:::o;3208:170:1:-;23792:12:0;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3296:9:1::1;3291:86;3315:6;:13;3311:1;:17;3291:86;;;3371:4;3349:8;:19;3358:6;3365:1;3358:9;;;;;;;;:::i;:::-;;;;;;;;3349:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3330:3;;;;;:::i;:::-;;;;3291:86;;;;3208:170:::0;:::o;24006:269:0:-;23792:12;:10;:12::i;:::-;23781:23;;:7;:5;:7::i;:::-;:23;;;23773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24190:1:::1;24170:22;;:8;:22;;::::0;24162:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24245:28;24264:8;24245:18;:28::i;:::-;24006:269:::0;:::o;3546:387:1:-;3617:8;:15;1707:11;1696:8;;:22;;;;:::i;:::-;1683:9;:35;;1675:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1790:9;;1775:11;1759:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;1751:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1857:5;1847:15;;:6;;;;;;;;;;;:15;;;1839:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1:0::1;22814:7;;:19:::0;22806:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:1;22943:7;:18;;;;3662:9:1::2;3657:188;3681:8;:15;3677:1;:19;3657:188;;;3762:12;:10;:12::i;:::-;3725:49;;:12;;;;;;;;;;;:20;;;3746:8;3755:1;3746:11;;;;;;;;:::i;:::-;;;;;;;;3725:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;:83;;;;;3803:5;3778:30;;:8;:21;3787:8;3796:1;3787:11;;;;;;;;:::i;:::-;;;;;;;;3778:21;;;;;;;;;;;;;;;;;;;;;:30;;;3725:83;3717:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;3698:3;;;;;:::i;:::-;;;;3657:188;;;;3854:40;3864:12;:10;:12::i;:::-;3878:8;:15;3854:9;:40::i;:::-;3904:27;3922:8;3904:17;:27::i;:::-;22401:1:0::1;22982:7;:22;;;;3546:387:1::0;;:::o;9819:187:0:-;9876:4;9918:7;9899:15;:13;:15::i;:::-;:26;;:53;;;;;9939:13;;9929:7;:23;9899:53;:105;;;;;10003:1;975:8;9956:17;:26;9974:7;9956:26;;;;;;;;;;;;:43;:48;9899:105;9892:112;;9819:187;;;:::o;5176:1027::-;5243:7;5262:12;5277:7;5262:22;;5341:4;5322:15;:13;:15::i;:::-;:23;5318:835;;5374:13;;5367:4;:20;5363:790;;;5411:14;5428:17;:23;5446:4;5428:23;;;;;;;;;;;;5411:40;;5542:1;975:8;5515:6;:23;:28;5511:641;;6026:86;6043:1;6033:6;:11;6026:86;;6085:17;:25;6103:6;;;;;;;6085:25;;;;;;;;;;;;6076:34;;6026:86;;;6144:6;6137:13;;;;;;5511:641;5389:764;5363:790;5318:835;6170:31;;;;;;;;;;;;;;5176:1027;;;;:::o;20275:98::-;20335:7;20361:10;20354:17;;20275:98;:::o;23041:91::-;23094:7;23120:10;23113:17;;23041:91;:::o;3939:94:1:-;4004:7;4030:1;4023:8;;3939:94;:::o;13979:2356:0:-;14059:27;14089;14108:7;14089:18;:27::i;:::-;14059:57;;14171:4;14130:45;;14146:19;14130:45;;;14126:86;;14184:28;;;;;;;;;;;;;;14126:86;14222:22;14271:4;14248:27;;:19;:17;:19::i;:::-;:27;;;:86;;;;14291:43;14308:4;14314:19;:17;:19::i;:::-;14291:16;:43::i;:::-;14248:86;:145;;;;14374:19;:17;:19::i;:::-;14350:43;;:20;14362:7;14350:11;:20::i;:::-;:43;;;14248:145;14222:172;;14409:17;14404:66;;14435:35;;;;;;;;;;;;;;14404:66;14498:1;14484:16;;:2;:16;;;14480:52;;14509:23;;;;;;;;;;;;;;14480:52;14542:43;14564:4;14570:2;14574:7;14583:1;14542:21;:43::i;:::-;14654:15;:24;14670:7;14654:24;;;;;;;;;;;;14647:31;;;;;;;;;;;15038:18;:24;15057:4;15038:24;;;;;;;;;;;;;;;;15036:26;;;;;;;;;;;;15106:18;:22;15125:2;15106:22;;;;;;;;;;;;;;;;15104:24;;;;;;;;;;;1251:8;862:3;15477:15;:41;;15436:21;15454:2;15436:17;:21::i;:::-;:83;:126;15391:17;:26;15409:7;15391:26;;;;;;;;;;;:171;;;;15728:1;1251:8;15678:19;:46;:51;15674:565;;15749:19;15781:1;15771:7;:11;15749:33;;15936:1;15902:17;:30;15920:11;15902:30;;;;;;;;;;;;:35;15898:340;;16038:13;;16023:11;:28;16019:218;;16216:19;16183:17;:30;16201:11;16183:30;;;;;;;;;;;:52;;;;16019:218;15898:340;15731:508;15674:565;16273:7;16269:2;16254:27;;16263:4;16254:27;;;;;;;;;;;;16291:42;16312:4;16318:2;16322:7;16331:1;16291:20;:42::i;:::-;14049:2286;;13979:2356;;;:::o;24281:258::-;24430:16;24449:6;;;;;;;;;;;24430:25;;24474:8;24465:6;;:17;;;;;;;;;;;;;;;;;;24528:8;24497:40;;24518:8;24497:40;;;;;;;;;;;;24344:195;24281:258;:::o;19203:576::-;19323:4;19368:2;19343:45;;;19389:19;:17;:19::i;:::-;19410:4;19416:7;19425:5;19343:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19339:439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19620:1;19603:6;:13;:18;19599:178;;19648:40;;;;;;;;;;;;;;19599:178;19767:6;19761:13;19752:6;19748:2;19744:15;19737:38;19339:439;19487:54;;;19477:64;;;:6;:64;;;;19470:71;;;19203:576;;;;;;:::o;4887:103:1:-;4947:13;4979:9;4972:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4887:103;:::o;195:483:3:-;251:13;289:1;280:5;:10;276:42;;306:10;;;;;;;;;;;;;;;;;;;;;276:42;327:12;342:5;327:20;;357:14;381:66;396:1;388:4;:9;381:66;;413:8;;;;;:::i;:::-;;;;443:2;435:10;;;;;:::i;:::-;;;381:66;;;456:19;488:6;478:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;456:39;;505:141;521:1;512:5;:10;505:141;;548:1;538:11;;;;;:::i;:::-;;;614:2;606:5;:10;;;;:::i;:::-;593:2;:24;;;;:::i;:::-;580:39;;563:6;570;563:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;642:2;633:11;;;;;:::i;:::-;;;505:141;;;669:6;655:21;;;;;195:483;;;;:::o;10062:97:0:-;10130:27;10140:2;10144:8;10130:27;;;;;;;;;;;;:9;:27::i;:::-;10062:97;;:::o;3384:156:1:-;3458:9;3453:86;3477:6;:13;3473:1;:17;3453:86;;;3533:4;3511:8;:19;3520:6;3527:1;3520:9;;;;;;;;:::i;:::-;;;;;;;;3511:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3492:3;;;;;:::i;:::-;;;;3453:86;;;;3384:156;:::o;19882:116:0:-;;;;;:::o;7779:130::-;7843:14;7902:5;7892:15;;7779:130;;;:::o;20094:115::-;;;;;:::o;10229:2067::-;10317:20;10340:13;;10317:36;;10381:1;10367:16;;:2;:16;;;10363:48;;10392:19;;;;;;;;;;;;;;10363:48;10437:1;10425:8;:13;10421:44;;10447:18;;;;;;;;;;;;;;10421:44;10475:61;10505:1;10509:2;10513:12;10527:8;10475:21;:61::i;:::-;11067:1;357:2;11038:1;:25;;11037:31;11025:8;:44;10999:18;:22;11018:2;10999:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;1119:3;11457:29;11484:1;11472:8;:13;11457:14;:29::i;:::-;:56;;862:3;11395:15;:41;;11354:21;11372:2;11354:17;:21::i;:::-;:83;:160;11304:17;:31;11322:12;11304:31;;;;;;;;;;;:210;;;;11528:20;11551:12;11528:35;;11577:11;11606:8;11591:12;:23;11577:37;;11650:1;11632:2;:14;;;:19;11628:554;;11671:287;11726:12;11722:2;11701:38;;11718:1;11701:38;;;;;;;;;;;;11766:69;11805:1;11809:2;11813:14;;;;;;11829:5;11766:30;:69::i;:::-;11761:151;;11870:40;;;;;;;;;;;;;;11761:151;11953:3;11938:12;:18;11671:287;;12037:12;12020:13;;:29;12016:43;;12051:8;;;12016:43;11628:554;;;12102:79;12136:14;;;;;;12132:2;12111:40;;12128:1;12111:40;;;;;;;;;;;;12176:3;12161:12;:18;12102:79;;11628:554;12211:12;12195:13;:28;;;;10782:1443;;12234:60;12263:1;12267:2;12271:12;12285:8;12234:20;:60::i;:::-;10307:1989;10229:2067;;;:::o;7915:124::-;7973:14;8032:5;8022:15;;7915:124;;;:::o;7:75:4:-;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:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:180;5184:77;5181:1;5174:88;5281:4;5278:1;5271:15;5305:4;5302:1;5295:15;5322:281;5405:27;5427:4;5405:27;:::i;:::-;5397:6;5393:40;5535:6;5523:10;5520:22;5499:18;5487:10;5484:34;5481:62;5478:88;;;5546:18;;:::i;:::-;5478:88;5586:10;5582:2;5575:22;5365:238;5322:281;;:::o;5609:129::-;5643:6;5670:20;;:::i;:::-;5660:30;;5699:33;5727:4;5719:6;5699:33;:::i;:::-;5609:129;;;:::o;5744:308::-;5806:4;5896:18;5888:6;5885:30;5882:56;;;5918:18;;:::i;:::-;5882:56;5956:29;5978:6;5956:29;:::i;:::-;5948:37;;6040:4;6034;6030:15;6022:23;;5744:308;;;:::o;6058:146::-;6155:6;6150:3;6145;6132:30;6196:1;6187:6;6182:3;6178:16;6171:27;6058:146;;;:::o;6210:425::-;6288:5;6313:66;6329:49;6371:6;6329:49;:::i;:::-;6313:66;:::i;:::-;6304:75;;6402:6;6395:5;6388:21;6440:4;6433:5;6429:16;6478:3;6469:6;6464:3;6460:16;6457:25;6454:112;;;6485:79;;:::i;:::-;6454:112;6575:54;6622:6;6617:3;6612;6575:54;:::i;:::-;6294:341;6210:425;;;;;:::o;6655:340::-;6711:5;6760:3;6753:4;6745:6;6741:17;6737:27;6727:122;;6768:79;;:::i;:::-;6727:122;6885:6;6872:20;6910:79;6985:3;6977:6;6970:4;6962:6;6958:17;6910:79;:::i;:::-;6901:88;;6717:278;6655:340;;;;:::o;7001:509::-;7070:6;7119:2;7107:9;7098:7;7094:23;7090:32;7087:119;;;7125:79;;:::i;:::-;7087:119;7273:1;7262:9;7258:17;7245:31;7303:18;7295:6;7292:30;7289:117;;;7325:79;;:::i;:::-;7289:117;7430:63;7485:7;7476:6;7465:9;7461:22;7430:63;:::i;:::-;7420:73;;7216:287;7001:509;;;;:::o;7516:118::-;7603:24;7621:5;7603:24;:::i;:::-;7598:3;7591:37;7516:118;;:::o;7640:222::-;7733:4;7771:2;7760:9;7756:18;7748:26;;7784:71;7852:1;7841:9;7837:17;7828:6;7784:71;:::i;:::-;7640:222;;;;:::o;7868:329::-;7927:6;7976:2;7964:9;7955:7;7951:23;7947:32;7944:119;;;7982:79;;:::i;:::-;7944:119;8102:1;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8073:117;7868:329;;;;:::o;8203:619::-;8280:6;8288;8296;8345:2;8333:9;8324:7;8320:23;8316:32;8313:119;;;8351:79;;:::i;:::-;8313:119;8471:1;8496:53;8541:7;8532:6;8521:9;8517:22;8496:53;:::i;:::-;8486:63;;8442:117;8598:2;8624:53;8669:7;8660:6;8649:9;8645:22;8624:53;:::i;:::-;8614:63;;8569:118;8726:2;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8697:118;8203:619;;;;;:::o;8828:60::-;8856:3;8877:5;8870:12;;8828:60;;;:::o;8894:142::-;8944:9;8977:53;8995:34;9004:24;9022:5;9004:24;:::i;:::-;8995:34;:::i;:::-;8977:53;:::i;:::-;8964:66;;8894:142;;;:::o;9042:126::-;9092:9;9125:37;9156:5;9125:37;:::i;:::-;9112:50;;9042:126;;;:::o;9174:143::-;9241:9;9274:37;9305:5;9274:37;:::i;:::-;9261:50;;9174:143;;;:::o;9323:165::-;9427:54;9475:5;9427:54;:::i;:::-;9422:3;9415:67;9323:165;;:::o;9494:256::-;9604:4;9642:2;9631:9;9627:18;9619:26;;9655:88;9740:1;9729:9;9725:17;9716:6;9655:88;:::i;:::-;9494:256;;;;:::o;9756:311::-;9833:4;9923:18;9915:6;9912:30;9909:56;;;9945:18;;:::i;:::-;9909:56;9995:4;9987:6;9983:17;9975:25;;10055:4;10049;10045:15;10037:23;;9756:311;;;:::o;10073:117::-;10182:1;10179;10172:12;10213:710;10309:5;10334:81;10350:64;10407:6;10350:64;:::i;:::-;10334:81;:::i;:::-;10325:90;;10435:5;10464:6;10457:5;10450:21;10498:4;10491:5;10487:16;10480:23;;10551:4;10543:6;10539:17;10531:6;10527:30;10580:3;10572:6;10569:15;10566:122;;;10599:79;;:::i;:::-;10566:122;10714:6;10697:220;10731:6;10726:3;10723:15;10697:220;;;10806:3;10835:37;10868:3;10856:10;10835:37;:::i;:::-;10830:3;10823:50;10902:4;10897:3;10893:14;10886:21;;10773:144;10757:4;10752:3;10748:14;10741:21;;10697:220;;;10701:21;10315:608;;10213:710;;;;;:::o;10946:370::-;11017:5;11066:3;11059:4;11051:6;11047:17;11043:27;11033:122;;11074:79;;:::i;:::-;11033:122;11191:6;11178:20;11216:94;11306:3;11298:6;11291:4;11283:6;11279:17;11216:94;:::i;:::-;11207:103;;11023:293;10946:370;;;;:::o;11322:539::-;11406:6;11455:2;11443:9;11434:7;11430:23;11426:32;11423:119;;;11461:79;;:::i;:::-;11423:119;11609:1;11598:9;11594:17;11581:31;11639:18;11631:6;11628:30;11625:117;;;11661:79;;:::i;:::-;11625:117;11766:78;11836:7;11827:6;11816:9;11812:22;11766:78;:::i;:::-;11756:88;;11552:302;11322:539;;;;:::o;11867:114::-;11934:6;11968:5;11962:12;11952:22;;11867:114;;;:::o;11987:184::-;12086:11;12120:6;12115:3;12108:19;12160:4;12155:3;12151:14;12136:29;;11987:184;;;;:::o;12177:132::-;12244:4;12267:3;12259:11;;12297:4;12292:3;12288:14;12280:22;;12177:132;;;:::o;12315:108::-;12392:24;12410:5;12392:24;:::i;:::-;12387:3;12380:37;12315:108;;:::o;12429:179::-;12498:10;12519:46;12561:3;12553:6;12519:46;:::i;:::-;12597:4;12592:3;12588:14;12574:28;;12429:179;;;;:::o;12614:113::-;12684:4;12716;12711:3;12707:14;12699:22;;12614:113;;;:::o;12763:732::-;12882:3;12911:54;12959:5;12911:54;:::i;:::-;12981:86;13060:6;13055:3;12981:86;:::i;:::-;12974:93;;13091:56;13141:5;13091:56;:::i;:::-;13170:7;13201:1;13186:284;13211:6;13208:1;13205:13;13186:284;;;13287:6;13281:13;13314:63;13373:3;13358:13;13314:63;:::i;:::-;13307:70;;13400:60;13453:6;13400:60;:::i;:::-;13390:70;;13246:224;13233:1;13230;13226:9;13221:14;;13186:284;;;13190:14;13486:3;13479:10;;12887:608;;;12763:732;;;;:::o;13501:634::-;13722:4;13760:2;13749:9;13745:18;13737:26;;13809:9;13803:4;13799:20;13795:1;13784:9;13780:17;13773:47;13837:108;13940:4;13931:6;13837:108;:::i;:::-;13829:116;;13992:9;13986:4;13982:20;13977:2;13966:9;13962:18;13955:48;14020:108;14123:4;14114:6;14020:108;:::i;:::-;14012:116;;13501:634;;;;;:::o;14141:116::-;14211:21;14226:5;14211:21;:::i;:::-;14204:5;14201:32;14191:60;;14247:1;14244;14237:12;14191:60;14141:116;:::o;14263:133::-;14306:5;14344:6;14331:20;14322:29;;14360:30;14384:5;14360:30;:::i;:::-;14263:133;;;;:::o;14402:468::-;14467:6;14475;14524:2;14512:9;14503:7;14499:23;14495:32;14492:119;;;14530:79;;:::i;:::-;14492:119;14650:1;14675:53;14720:7;14711:6;14700:9;14696:22;14675:53;:::i;:::-;14665:63;;14621:117;14777:2;14803:50;14845:7;14836:6;14825:9;14821:22;14803:50;:::i;:::-;14793:60;;14748:115;14402:468;;;;;:::o;14876:332::-;14997:4;15035:2;15024:9;15020:18;15012:26;;15048:71;15116:1;15105:9;15101:17;15092:6;15048:71;:::i;:::-;15129:72;15197:2;15186:9;15182:18;15173:6;15129:72;:::i;:::-;14876:332;;;;;:::o;15214:307::-;15275:4;15365:18;15357:6;15354:30;15351:56;;;15387:18;;:::i;:::-;15351:56;15425:29;15447:6;15425:29;:::i;:::-;15417:37;;15509:4;15503;15499:15;15491:23;;15214:307;;;:::o;15527:423::-;15604:5;15629:65;15645:48;15686:6;15645:48;:::i;:::-;15629:65;:::i;:::-;15620:74;;15717:6;15710:5;15703:21;15755:4;15748:5;15744:16;15793:3;15784:6;15779:3;15775:16;15772:25;15769:112;;;15800:79;;:::i;:::-;15769:112;15890:54;15937:6;15932:3;15927;15890:54;:::i;:::-;15610:340;15527:423;;;;;:::o;15969:338::-;16024:5;16073:3;16066:4;16058:6;16054:17;16050:27;16040:122;;16081:79;;:::i;:::-;16040:122;16198:6;16185:20;16223:78;16297:3;16289:6;16282:4;16274:6;16270:17;16223:78;:::i;:::-;16214:87;;16030:277;15969:338;;;;:::o;16313:943::-;16408:6;16416;16424;16432;16481:3;16469:9;16460:7;16456:23;16452:33;16449:120;;;16488:79;;:::i;:::-;16449:120;16608:1;16633:53;16678:7;16669:6;16658:9;16654:22;16633:53;:::i;:::-;16623:63;;16579:117;16735:2;16761:53;16806:7;16797:6;16786:9;16782:22;16761:53;:::i;:::-;16751:63;;16706:118;16863:2;16889:53;16934:7;16925:6;16914:9;16910:22;16889:53;:::i;:::-;16879:63;;16834:118;17019:2;17008:9;17004:18;16991:32;17050:18;17042:6;17039:30;17036:117;;;17072:79;;:::i;:::-;17036:117;17177:62;17231:7;17222:6;17211:9;17207:22;17177:62;:::i;:::-;17167:72;;16962:287;16313:943;;;;;;;:::o;17262:323::-;17318:6;17367:2;17355:9;17346:7;17342:23;17338:32;17335:119;;;17373:79;;:::i;:::-;17335:119;17493:1;17518:50;17560:7;17551:6;17540:9;17536:22;17518:50;:::i;:::-;17508:60;;17464:114;17262:323;;;;:::o;17591:474::-;17659:6;17667;17716:2;17704:9;17695:7;17691:23;17687:32;17684:119;;;17722:79;;:::i;:::-;17684:119;17842:1;17867:53;17912:7;17903:6;17892:9;17888:22;17867:53;:::i;:::-;17857:63;;17813:117;17969:2;17995:53;18040:7;18031:6;18020:9;18016:22;17995:53;:::i;:::-;17985:63;;17940:118;17591:474;;;;;:::o;18071:180::-;18119:77;18116:1;18109:88;18216:4;18213:1;18206:15;18240:4;18237:1;18230:15;18257:320;18301:6;18338:1;18332:4;18328:12;18318:22;;18385:1;18379:4;18375:12;18406:18;18396:81;;18462:4;18454:6;18450:17;18440:27;;18396:81;18524:2;18516:6;18513:14;18493:18;18490:38;18487:84;;18543:18;;:::i;:::-;18487:84;18308:269;18257:320;;;:::o;18583:182::-;18723:34;18719:1;18711:6;18707:14;18700:58;18583:182;:::o;18771:366::-;18913:3;18934:67;18998:2;18993:3;18934:67;:::i;:::-;18927:74;;19010:93;19099:3;19010:93;:::i;:::-;19128:2;19123:3;19119:12;19112:19;;18771:366;;;:::o;19143:419::-;19309:4;19347:2;19336:9;19332:18;19324:26;;19396:9;19390:4;19386:20;19382:1;19371:9;19367:17;19360:47;19424:131;19550:4;19424:131;:::i;:::-;19416:139;;19143:419;;;:::o;19568:141::-;19617:4;19640:3;19632:11;;19663:3;19660:1;19653:14;19697:4;19694:1;19684:18;19676:26;;19568:141;;;:::o;19715:93::-;19752:6;19799:2;19794;19787:5;19783:14;19779:23;19769:33;;19715:93;;;:::o;19814:107::-;19858:8;19908:5;19902:4;19898:16;19877:37;;19814:107;;;;:::o;19927:393::-;19996:6;20046:1;20034:10;20030:18;20069:97;20099:66;20088:9;20069:97;:::i;:::-;20187:39;20217:8;20206:9;20187:39;:::i;:::-;20175:51;;20259:4;20255:9;20248:5;20244:21;20235:30;;20308:4;20298:8;20294:19;20287:5;20284:30;20274:40;;20003:317;;19927:393;;;;;:::o;20326:142::-;20376:9;20409:53;20427:34;20436:24;20454:5;20436:24;:::i;:::-;20427:34;:::i;:::-;20409:53;:::i;:::-;20396:66;;20326:142;;;:::o;20474:75::-;20517:3;20538:5;20531:12;;20474:75;;;:::o;20555:269::-;20665:39;20696:7;20665:39;:::i;:::-;20726:91;20775:41;20799:16;20775:41;:::i;:::-;20767:6;20760:4;20754:11;20726:91;:::i;:::-;20720:4;20713:105;20631:193;20555:269;;;:::o;20830:73::-;20875:3;20830:73;:::o;20909:189::-;20986:32;;:::i;:::-;21027:65;21085:6;21077;21071:4;21027:65;:::i;:::-;20962:136;20909:189;;:::o;21104:186::-;21164:120;21181:3;21174:5;21171:14;21164:120;;;21235:39;21272:1;21265:5;21235:39;:::i;:::-;21208:1;21201:5;21197:13;21188:22;;21164:120;;;21104:186;;:::o;21296:543::-;21397:2;21392:3;21389:11;21386:446;;;21431:38;21463:5;21431:38;:::i;:::-;21515:29;21533:10;21515:29;:::i;:::-;21505:8;21501:44;21698:2;21686:10;21683:18;21680:49;;;21719:8;21704:23;;21680:49;21742:80;21798:22;21816:3;21798:22;:::i;:::-;21788:8;21784:37;21771:11;21742:80;:::i;:::-;21401:431;;21386:446;21296:543;;;:::o;21845:117::-;21899:8;21949:5;21943:4;21939:16;21918:37;;21845:117;;;;:::o;21968:169::-;22012:6;22045:51;22093:1;22089:6;22081:5;22078:1;22074:13;22045:51;:::i;:::-;22041:56;22126:4;22120;22116:15;22106:25;;22019:118;21968:169;;;;:::o;22142:295::-;22218:4;22364:29;22389:3;22383:4;22364:29;:::i;:::-;22356:37;;22426:3;22423:1;22419:11;22413:4;22410:21;22402:29;;22142:295;;;;:::o;22442:1395::-;22559:37;22592:3;22559:37;:::i;:::-;22661:18;22653:6;22650:30;22647:56;;;22683:18;;:::i;:::-;22647:56;22727:38;22759:4;22753:11;22727:38;:::i;:::-;22812:67;22872:6;22864;22858:4;22812:67;:::i;:::-;22906:1;22930:4;22917:17;;22962:2;22954:6;22951:14;22979:1;22974:618;;;;23636:1;23653:6;23650:77;;;23702:9;23697:3;23693:19;23687:26;23678:35;;23650:77;23753:67;23813:6;23806:5;23753:67;:::i;:::-;23747:4;23740:81;23609:222;22944:887;;22974:618;23026:4;23022:9;23014:6;23010:22;23060:37;23092:4;23060:37;:::i;:::-;23119:1;23133:208;23147:7;23144:1;23141:14;23133:208;;;23226:9;23221:3;23217:19;23211:26;23203:6;23196:42;23277:1;23269:6;23265:14;23255:24;;23324:2;23313:9;23309:18;23296:31;;23170:4;23167:1;23163:12;23158:17;;23133:208;;;23369:6;23360:7;23357:19;23354:179;;;23427:9;23422:3;23418:19;23412:26;23470:48;23512:4;23504:6;23500:17;23489:9;23470:48;:::i;:::-;23462:6;23455:64;23377:156;23354:179;23579:1;23575;23567:6;23563:14;23559:22;23553:4;23546:36;22981:611;;;22944:887;;22534:1303;;;22442:1395;;:::o;23843:143::-;23900:5;23931:6;23925:13;23916:22;;23947:33;23974:5;23947:33;:::i;:::-;23843:143;;;;:::o;23992:351::-;24062:6;24111:2;24099:9;24090:7;24086:23;24082:32;24079:119;;;24117:79;;:::i;:::-;24079:119;24237:1;24262:64;24318:7;24309:6;24298:9;24294:22;24262:64;:::i;:::-;24252:74;;24208:128;23992:351;;;;:::o;24349:180::-;24397:77;24394:1;24387:88;24494:4;24491:1;24484:15;24518:4;24515:1;24508:15;24535:180;24583:77;24580:1;24573:88;24680:4;24677:1;24670:15;24704:4;24701:1;24694:15;24721:233;24760:3;24783:24;24801:5;24783:24;:::i;:::-;24774:33;;24829:66;24822:5;24819:77;24816:103;;24899:18;;:::i;:::-;24816:103;24946:1;24939:5;24935:13;24928:20;;24721:233;;;:::o;24960:181::-;25100:33;25096:1;25088:6;25084:14;25077:57;24960:181;:::o;25147:366::-;25289:3;25310:67;25374:2;25369:3;25310:67;:::i;:::-;25303:74;;25386:93;25475:3;25386:93;:::i;:::-;25504:2;25499:3;25495:12;25488:19;;25147:366;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25519:419;;;:::o;25944:332::-;26065:4;26103:2;26092:9;26088:18;26080:26;;26116:71;26184:1;26173:9;26169:17;26160:6;26116:71;:::i;:::-;26197:72;26265:2;26254:9;26250:18;26241:6;26197:72;:::i;:::-;25944:332;;;;;:::o;26282:137::-;26336:5;26367:6;26361:13;26352:22;;26383:30;26407:5;26383:30;:::i;:::-;26282:137;;;;:::o;26425:345::-;26492:6;26541:2;26529:9;26520:7;26516:23;26512:32;26509:119;;;26547:79;;:::i;:::-;26509:119;26667:1;26692:61;26745:7;26736:6;26725:9;26721:22;26692:61;:::i;:::-;26682:71;;26638:125;26425:345;;;;:::o;26776:180::-;26916:32;26912:1;26904:6;26900:14;26893:56;26776:180;:::o;26962:366::-;27104:3;27125:67;27189:2;27184:3;27125:67;:::i;:::-;27118:74;;27201:93;27290:3;27201:93;:::i;:::-;27319:2;27314:3;27310:12;27303:19;;26962:366;;;:::o;27334:419::-;27500:4;27538:2;27527:9;27523:18;27515:26;;27587:9;27581:4;27577:20;27573:1;27562:9;27558:17;27551:47;27615:131;27741:4;27615:131;:::i;:::-;27607:139;;27334:419;;;:::o;27759:147::-;27860:11;27897:3;27882:18;;27759:147;;;;:::o;27912:114::-;;:::o;28032:398::-;28191:3;28212:83;28293:1;28288:3;28212:83;:::i;:::-;28205:90;;28304:93;28393:3;28304:93;:::i;:::-;28422:1;28417:3;28413:11;28406:18;;28032:398;;;:::o;28436:379::-;28620:3;28642:147;28785:3;28642:147;:::i;:::-;28635:154;;28806:3;28799:10;;28436:379;;;:::o;28821:234::-;28961:34;28957:1;28949:6;28945:14;28938:58;29030:17;29025:2;29017:6;29013:15;29006:42;28821:234;:::o;29061:366::-;29203:3;29224:67;29288:2;29283:3;29224:67;:::i;:::-;29217:74;;29300:93;29389:3;29300:93;:::i;:::-;29418:2;29413:3;29409:12;29402:19;;29061:366;;;:::o;29433:419::-;29599:4;29637:2;29626:9;29622:18;29614:26;;29686:9;29680:4;29676:20;29672:1;29661:9;29657:17;29650:47;29714:131;29840:4;29714:131;:::i;:::-;29706:139;;29433:419;;;:::o;29858:148::-;29960:11;29997:3;29982:18;;29858:148;;;;:::o;30012:390::-;30118:3;30146:39;30179:5;30146:39;:::i;:::-;30201:89;30283:6;30278:3;30201:89;:::i;:::-;30194:96;;30299:65;30357:6;30352:3;30345:4;30338:5;30334:16;30299:65;:::i;:::-;30389:6;30384:3;30380:16;30373:23;;30122:280;30012:390;;;;:::o;30432:874::-;30535:3;30572:5;30566:12;30601:36;30627:9;30601:36;:::i;:::-;30653:89;30735:6;30730:3;30653:89;:::i;:::-;30646:96;;30773:1;30762:9;30758:17;30789:1;30784:166;;;;30964:1;30959:341;;;;30751:549;;30784:166;30868:4;30864:9;30853;30849:25;30844:3;30837:38;30930:6;30923:14;30916:22;30908:6;30904:35;30899:3;30895:45;30888:52;;30784:166;;30959:341;31026:38;31058:5;31026:38;:::i;:::-;31086:1;31100:154;31114:6;31111:1;31108:13;31100:154;;;31188:7;31182:14;31178:1;31173:3;31169:11;31162:35;31238:1;31229:7;31225:15;31214:26;;31136:4;31133:1;31129:12;31124:17;;31100:154;;;31283:6;31278:3;31274:16;31267:23;;30966:334;;30751:549;;30539:767;;30432:874;;;;:::o;31312:589::-;31537:3;31559:95;31650:3;31641:6;31559:95;:::i;:::-;31552:102;;31671:95;31762:3;31753:6;31671:95;:::i;:::-;31664:102;;31783:92;31871:3;31862:6;31783:92;:::i;:::-;31776:99;;31892:3;31885:10;;31312:589;;;;;;:::o;31907:225::-;32047:34;32043:1;32035:6;32031:14;32024:58;32116:8;32111:2;32103:6;32099:15;32092:33;31907:225;:::o;32138:366::-;32280:3;32301:67;32365:2;32360:3;32301:67;:::i;:::-;32294:74;;32377:93;32466:3;32377:93;:::i;:::-;32495:2;32490:3;32486:12;32479:19;;32138:366;;;:::o;32510:419::-;32676:4;32714:2;32703:9;32699:18;32691:26;;32763:9;32757:4;32753:20;32749:1;32738:9;32734:17;32727:47;32791:131;32917:4;32791:131;:::i;:::-;32783:139;;32510:419;;;:::o;32935:410::-;32975:7;32998:20;33016:1;32998:20;:::i;:::-;32993:25;;33032:20;33050:1;33032:20;:::i;:::-;33027:25;;33087:1;33084;33080:9;33109:30;33127:11;33109:30;:::i;:::-;33098:41;;33288:1;33279:7;33275:15;33272:1;33269:22;33249:1;33242:9;33222:83;33199:139;;33318:18;;:::i;:::-;33199:139;32983:362;32935:410;;;;:::o;33351:168::-;33491:20;33487:1;33479:6;33475:14;33468:44;33351:168;:::o;33525:366::-;33667:3;33688:67;33752:2;33747:3;33688:67;:::i;:::-;33681:74;;33764:93;33853:3;33764:93;:::i;:::-;33882:2;33877:3;33873:12;33866:19;;33525:366;;;:::o;33897:419::-;34063:4;34101:2;34090:9;34086:18;34078:26;;34150:9;34144:4;34140:20;34136:1;34125:9;34121:17;34114:47;34178:131;34304:4;34178:131;:::i;:::-;34170:139;;33897:419;;;:::o;34322:191::-;34362:3;34381:20;34399:1;34381:20;:::i;:::-;34376:25;;34415:20;34433:1;34415:20;:::i;:::-;34410:25;;34458:1;34455;34451:9;34444:16;;34479:3;34476:1;34473:10;34470:36;;;34486:18;;:::i;:::-;34470:36;34322:191;;;;:::o;34519:175::-;34659:27;34655:1;34647:6;34643:14;34636:51;34519:175;:::o;34700:366::-;34842:3;34863:67;34927:2;34922:3;34863:67;:::i;:::-;34856:74;;34939:93;35028:3;34939:93;:::i;:::-;35057:2;35052:3;35048:12;35041:19;;34700:366;;;:::o;35072:419::-;35238:4;35276:2;35265:9;35261:18;35253:26;;35325:9;35319:4;35315:20;35311:1;35300:9;35296:17;35289:47;35353:131;35479:4;35353:131;:::i;:::-;35345:139;;35072:419;;;:::o;35497:165::-;35637:17;35633:1;35625:6;35621:14;35614:41;35497:165;:::o;35668:366::-;35810:3;35831:67;35895:2;35890:3;35831:67;:::i;:::-;35824:74;;35907:93;35996:3;35907:93;:::i;:::-;36025:2;36020:3;36016:12;36009:19;;35668:366;;;:::o;36040:419::-;36206:4;36244:2;36233:9;36229:18;36221:26;;36293:9;36287:4;36283:20;36279:1;36268:9;36264:17;36257:47;36321:131;36447:4;36321:131;:::i;:::-;36313:139;;36040:419;;;:::o;36465:143::-;36522:5;36553:6;36547:13;36538:22;;36569:33;36596:5;36569:33;:::i;:::-;36465:143;;;;:::o;36614:351::-;36684:6;36733:2;36721:9;36712:7;36708:23;36704:32;36701:119;;;36739:79;;:::i;:::-;36701:119;36859:1;36884:64;36940:7;36931:6;36920:9;36916:22;36884:64;:::i;:::-;36874:74;;36830:128;36614:351;;;;:::o;36971:180::-;37111:32;37107:1;37099:6;37095:14;37088:56;36971:180;:::o;37157:366::-;37299:3;37320:67;37384:2;37379:3;37320:67;:::i;:::-;37313:74;;37396:93;37485:3;37396:93;:::i;:::-;37514:2;37509:3;37505:12;37498:19;;37157:366;;;:::o;37529:419::-;37695:4;37733:2;37722:9;37718:18;37710:26;;37782:9;37776:4;37772:20;37768:1;37757:9;37753:17;37746:47;37810:131;37936:4;37810:131;:::i;:::-;37802:139;;37529:419;;;:::o;37954:98::-;38005:6;38039:5;38033:12;38023:22;;37954:98;;;:::o;38058:168::-;38141:11;38175:6;38170:3;38163:19;38215:4;38210:3;38206:14;38191:29;;38058:168;;;;:::o;38232:373::-;38318:3;38346:38;38378:5;38346:38;:::i;:::-;38400:70;38463:6;38458:3;38400:70;:::i;:::-;38393:77;;38479:65;38537:6;38532:3;38525:4;38518:5;38514:16;38479:65;:::i;:::-;38569:29;38591:6;38569:29;:::i;:::-;38564:3;38560:39;38553:46;;38322:283;38232:373;;;;:::o;38611:640::-;38806:4;38844:3;38833:9;38829:19;38821:27;;38858:71;38926:1;38915:9;38911:17;38902:6;38858:71;:::i;:::-;38939:72;39007:2;38996:9;38992:18;38983:6;38939:72;:::i;:::-;39021;39089:2;39078:9;39074:18;39065:6;39021:72;:::i;:::-;39140:9;39134:4;39130:20;39125:2;39114:9;39110:18;39103:48;39168:76;39239:4;39230:6;39168:76;:::i;:::-;39160:84;;38611:640;;;;;;;:::o;39257:141::-;39313:5;39344:6;39338:13;39329:22;;39360:32;39386:5;39360:32;:::i;:::-;39257:141;;;;:::o;39404:349::-;39473:6;39522:2;39510:9;39501:7;39497:23;39493:32;39490:119;;;39528:79;;:::i;:::-;39490:119;39648:1;39673:63;39728:7;39719:6;39708:9;39704:22;39673:63;:::i;:::-;39663:73;;39619:127;39404:349;;;;:::o;39759:180::-;39807:77;39804:1;39797:88;39904:4;39901:1;39894:15;39928:4;39925:1;39918:15;39945:185;39985:1;40002:20;40020:1;40002:20;:::i;:::-;39997:25;;40036:20;40054:1;40036:20;:::i;:::-;40031:25;;40075:1;40065:35;;40080:18;;:::i;:::-;40065:35;40122:1;40119;40115:9;40110:14;;39945:185;;;;:::o;40136:194::-;40176:4;40196:20;40214:1;40196:20;:::i;:::-;40191:25;;40230:20;40248:1;40230:20;:::i;:::-;40225:25;;40274:1;40271;40267:9;40259:17;;40298:1;40292:4;40289:11;40286:37;;;40303:18;;:::i;:::-;40286:37;40136:194;;;;:::o;40336:176::-;40368:1;40385:20;40403:1;40385:20;:::i;:::-;40380:25;;40419:20;40437:1;40419:20;:::i;:::-;40414:25;;40458:1;40448:35;;40463:18;;:::i;:::-;40448:35;40504:1;40501;40497:9;40492:14;;40336:176;;;;:::o
Swarm Source
ipfs://65ecdcdbeb55a463a3c76403fb2a26e4c0217022fb50fe28630e4320c3f7fdc5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.