ERC-721
Overview
Max Total Supply
4,444 BMWTF
Holders
1,457
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
9 BMWTFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BearMarket
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.3; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ 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; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * 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. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev 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. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev 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. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256( abi.encodePacked(computedHash, proofElement) ); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256( abi.encodePacked(proofElement, computedHash) ); } } return computedHash; } } contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // 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 ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require( owner != address(0), "ERC721A: balance query for the zero address" ); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require( _exists(tokenId), "ERC721A: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721A: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract BearMarket is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; using MerkleProof for bytes32; string public baseURI; uint256 public mintPrice = 0.03 ether; uint256 public maxPerTransaction = 100; uint256 public maxPerWallet = 100; uint256 public maxTotalSupply = 4444; uint256 public chanceFreeMintsAvailable = 1000; bool public isPublicLive = false; bool public isWhitelistLive = false; bytes32 private merkleTreeRoot; mapping(address => uint256) public whitelistMintsPerWallet; mapping(address => uint256) public mintsPerWallet; address private Address1 = 0x64f38f0827866a9532032CF590D10931f1357e57; address private Address2 = 0x2Be08be360bd2ef8A7231F44997432D15F80c9b1; address private Address3 = 0xF49a51d8a176ce0C3d974080C269bF4d2CC44821; address private Address4 = 0xC85bA6c679dA5d0f89E793Aa10938F6dE98e6Ef2; address private Address5 = 0x1a66f593EC0353b448cD87d9A497Eef49E2238A4; address private Address6 = 0x2fa3E5B998D5360348BBE6Ec1dd8b979E7e19223; address private Address7 = 0xC949ae1C8ADc893595360902f3882Cf2D2C4D2f5; address private Address8 = 0xE46b8449Ccc2D0Cd1410604Ba11A4B06C0412b9B; address private Address9 = 0x6a4aBC5a2Ec37A852411e6f0E5c820534DcaAC3F; address private Address10 = 0x2cb873cA9394AeF1b9e3840396cD774268FF7B7E; constructor() ERC721A("bearmarketwtf", "BMWTF", maxPerTransaction, maxTotalSupply) {} function mintPublic(uint256 _amount) external payable nonReentrant { require(isPublicLive, "Sale not live"); require(_amount > 0, "You must mint at least one"); require(totalSupply() + _amount <= 4434, "Exceeds total supply"); require(_amount <= maxPerTransaction, "Exceeds max per transaction"); require(mintPrice * _amount <= msg.value, "Not enough ETH sent for selected amount"); uint256 refund = chanceFreeMintsAvailable > 0 && isFreeMint() ? _amount * mintPrice : 0; if (refund > 0) { chanceFreeMintsAvailable = chanceFreeMintsAvailable - _amount; payable(_msgSender()).transfer(refund); } mintsPerWallet[_msgSender()] = mintsPerWallet[_msgSender()] + _amount; _safeMint(_msgSender(), _amount); } function mintWhitelist(bytes32[] memory _proof) external nonReentrant { require(isWhitelistLive, "Whitelist sale not live"); require(totalSupply() + 1 <= 4434, "Exceeds total supply"); require(whitelistMintsPerWallet[_msgSender()] < 1, "Exceeds max whitelist mints per wallet"); require(MerkleProof.verify(_proof, merkleTreeRoot, keccak256(abi.encodePacked(_msgSender()))), "Invalid proof"); whitelistMintsPerWallet[_msgSender()] = 1; _safeMint(_msgSender(), 1); } function mintPrivate(address _receiver, uint256 _amount) external onlyOwner { require(totalSupply() + _amount <= maxTotalSupply, "Exceeds total supply"); _safeMint(_receiver, _amount); } function flipPublicSaleState() external onlyOwner { isPublicLive = !isPublicLive; } function flipWhitelistSaleState() external onlyOwner { isWhitelistLive = !isWhitelistLive; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function isFreeMint() internal view returns (bool) { return (uint256(keccak256(abi.encodePacked( tx.origin, blockhash(block.number - 1), block.timestamp, _msgSender() ))) & 0xFFFF) % 2 == 0; } function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } function setChanceFreeMintsAvailable(uint256 _chanceFreeMintsAvailable) external onlyOwner { chanceFreeMintsAvailable = _chanceFreeMintsAvailable; } function setMaxTotalSupply(uint256 _maxTotalSupply) external onlyOwner { maxTotalSupply = _maxTotalSupply; } function setMaxPerTransaction(uint256 _maxPerTransaction) external onlyOwner { maxPerTransaction = _maxPerTransaction; } function setMaxPerWallet(uint256 _maxPerWallet) external onlyOwner { maxPerWallet = _maxPerWallet; } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function setMerkleTreeRoot(bytes32 _merkleTreeRoot) external onlyOwner { merkleTreeRoot = _merkleTreeRoot; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; uint256 balance9 = (balance * 250) / 10000; uint256 balance8 = (balance * 250) / 10000; uint256 balance7 = (balance * 550) / 10000; uint256 balance6 = (balance * 550) / 10000; uint256 balance5 = (balance * 1900) / 10000; uint256 balance4 = (balance * 1900) / 10000; uint256 balance3 = (balance * 1450) / 10000; uint256 balance2 = (balance * 1000) / 10000; uint256 balance1 = (balance * 1900) / 10000; payable(Address1).transfer(balance1); payable(Address2).transfer(balance2); payable(Address3).transfer(balance3); payable(Address4).transfer(balance4); payable(Address5).transfer(balance5); payable(Address6).transfer(balance6); payable(Address7).transfer(balance7); payable(Address8).transfer(balance8); payable(Address9).transfer(balance9); uint256 balance10 = balance - (balance1 + balance2 + balance3 + balance4 + balance5 + balance6 + balance7 + balance8 + balance9); payable(Address10).transfer(balance10); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chanceFreeMintsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"isPublicLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPrivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerWallet","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":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chanceFreeMintsAvailable","type":"uint256"}],"name":"setChanceFreeMintsAvailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTransaction","type":"uint256"}],"name":"setMaxPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTotalSupply","type":"uint256"}],"name":"setMaxTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleTreeRoot","type":"bytes32"}],"name":"setMerkleTreeRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052600080556000600755666a94d74f430000600b556064600c556064600d5561115c600e556103e8600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055507364f38f0827866a9532032cf590d10931f1357e57601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732be08be360bd2ef8a7231f44997432d15f80c9b1601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f49a51d8a176ce0c3d974080c269bf4d2cc44821601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c85ba6c679da5d0f89e793aa10938f6de98e6ef2601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a66f593ec0353b448cd87d9a497eef49e2238a4601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732fa3e5b998d5360348bbe6ec1dd8b979e7e19223601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c949ae1c8adc893595360902f3882cf2d2c4d2f5601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e46b8449ccc2d0cd1410604ba11a4b06c0412b9b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736a4abc5a2ec37a852411e6f0e5c820534dcaac3f601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732cb873ca9394aef1b9e3840396cd774268ff7b7e601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620003c357600080fd5b506040518060400160405280600d81526020017f626561726d61726b6574777466000000000000000000000000000000000000008152506040518060400160405280600581526020017f424d575446000000000000000000000000000000000000000000000000000000815250600c54600e54600081116200047c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004739062000724565b60405180910390fd5b60008211620004c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b99062000702565b60405180910390fd5b8360019080519060200190620004da92919062000604565b508260029080519060200190620004f392919062000604565b508160a08181525050806080818152505050505050620005286200051c6200053660201b60201c565b6200053e60201b60201c565b60016009819055506200085a565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620006129062000757565b90600052602060002090601f01602090048101928262000636576000855562000682565b82601f106200065157805160ff191683800117855562000682565b8280016001018555821562000682579182015b828111156200068157825182559160200191906001019062000664565b5b50905062000691919062000695565b5090565b5b80821115620006b057600081600090555060010162000696565b5090565b6000620006c360278362000746565b9150620006d082620007bc565b604082019050919050565b6000620006ea602e8362000746565b9150620006f7826200080b565b604082019050919050565b600060208201905081810360008301526200071d81620006b4565b9050919050565b600060208201905081810360008301526200073f81620006db565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200077057607f821691505b602082108114156200078757620007866200078d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051615a016200088b600039600081816130360152818161305f01526137ab015260005050615a016000f3fe60806040526004361061025b5760003560e01c806355f804b311610144578063a5ce1b4d116100b6578063d7224ba01161007a578063d7224ba0146108d1578063e268e4d3146108fc578063e985e9c514610925578063efd0cbf914610962578063f2fde38b1461097e578063f4a0a528146109a75761025b565b8063a5ce1b4d14610800578063b88d4fde1461082b578063c87b56dd14610854578063ccfdd2f814610891578063d1beca64146108ba5761025b565b806370a082311161010857806370a0823114610716578063715018a6146107535780638da5cb5b1461076a57806395d89b4114610795578063a10866ef146107c0578063a22cb465146107d75761025b565b806355f804b31461062f5780635e5f3ce4146106585780636352211e146106835780636817c76c146106c05780636c0360eb146106eb5761025b565b80633281fa3f116101dd57806344d84381116101a157806344d843811461050d578063453c2310146105365780634b980d67146105615780634d0df5fc1461058c5780634f6ccce7146105c957806350dc4656146106065761025b565b80633281fa3f146104505780633627d3a11461047b5780633ccfd60b146104a45780633f3e4c11146104bb57806342842e0e146104e45761025b565b806318160ddd1161022457806318160ddd1461035757806323b872dd1461038257806327a69949146103ab5780632ab4d052146103e85780632f745c59146104135761025b565b8062d759191461026057806301ffc9a71461028957806306fdde03146102c6578063081812fc146102f1578063095ea7b31461032e575b600080fd5b34801561026c57600080fd5b506102876004803603810190610282919061421a565b6109d0565b005b34801561029557600080fd5b506102b060048036038101906102ab9190614187565b610a56565b6040516102bd919061486f565b60405180910390f35b3480156102d257600080fd5b506102db610ba0565b6040516102e8919061488a565b60405180910390f35b3480156102fd57600080fd5b506103186004803603810190610313919061421a565b610c32565b6040516103259190614808565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906140e1565b610cb7565b005b34801561036357600080fd5b5061036c610dd0565b6040516103799190614c4c565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613fdb565b610dd9565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613f76565b610de9565b6040516103df9190614c4c565b60405180910390f35b3480156103f457600080fd5b506103fd610e01565b60405161040a9190614c4c565b60405180910390f35b34801561041f57600080fd5b5061043a600480360381019061043591906140e1565b610e07565b6040516104479190614c4c565b60405180910390f35b34801561045c57600080fd5b50610465611005565b604051610472919061486f565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906140e1565b611018565b005b3480156104b057600080fd5b506104b96110f9565b005b3480156104c757600080fd5b506104e260048036038101906104dd919061421a565b61171e565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613fdb565b6117a4565b005b34801561051957600080fd5b50610534600480360381019061052f919061411d565b6117c4565b005b34801561054257600080fd5b5061054b611a24565b6040516105589190614c4c565b60405180910390f35b34801561056d57600080fd5b50610576611a2a565b6040516105839190614c4c565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190613f76565b611a30565b6040516105c09190614c4c565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb919061421a565b611a48565b6040516105fd9190614c4c565b60405180910390f35b34801561061257600080fd5b5061062d6004803603810190610628919061415e565b611a9b565b005b34801561063b57600080fd5b50610656600480360381019061065191906141d9565b611b21565b005b34801561066457600080fd5b5061066d611bb7565b60405161067a919061486f565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a5919061421a565b611bca565b6040516106b79190614808565b60405180910390f35b3480156106cc57600080fd5b506106d5611be0565b6040516106e29190614c4c565b60405180910390f35b3480156106f757600080fd5b50610700611be6565b60405161070d919061488a565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613f76565b611c74565b60405161074a9190614c4c565b60405180910390f35b34801561075f57600080fd5b50610768611d5d565b005b34801561077657600080fd5b5061077f611de5565b60405161078c9190614808565b60405180910390f35b3480156107a157600080fd5b506107aa611e0f565b6040516107b7919061488a565b60405180910390f35b3480156107cc57600080fd5b506107d5611ea1565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906140a5565b611f49565b005b34801561080c57600080fd5b506108156120ca565b6040516108229190614c4c565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061402a565b6120d0565b005b34801561086057600080fd5b5061087b6004803603810190610876919061421a565b61212c565b604051610888919061488a565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b3919061421a565b6121d3565b005b3480156108c657600080fd5b506108cf612259565b005b3480156108dd57600080fd5b506108e6612301565b6040516108f39190614c4c565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061421a565b612307565b005b34801561093157600080fd5b5061094c60048036038101906109479190613f9f565b61238d565b604051610959919061486f565b60405180910390f35b61097c6004803603810190610977919061421a565b612421565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613f76565b612745565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061421a565b61283d565b005b6109d86128c3565b73ffffffffffffffffffffffffffffffffffffffff166109f6611de5565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a4c565b60405180910390fd5b80600f8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b8957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b995750610b98826128cb565b5b9050919050565b606060018054610baf90614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb90614ff2565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b6000610c3d82612935565b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390614c0c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc282611bca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614aec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d526128c3565b73ffffffffffffffffffffffffffffffffffffffff161480610d815750610d8081610d7b6128c3565b61238d565b5b610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db7906149cc565b60405180910390fd5b610dcb838383612942565b505050565b60008054905090565b610de48383836129f4565b505050565b60126020528060005260406000206000915090505481565b600e5481565b6000610e1283611c74565b8210610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a906148ac565b60405180910390fd5b6000610e5d610dd0565b905060008060005b83811015610fc3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f5757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610faf5786841415610fa0578195505050505050610fff565b8380610fab90615055565b9450505b508080610fbb90615055565b915050610e65565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614bac565b60405180910390fd5b92915050565b601060019054906101000a900460ff1681565b6110206128c3565b73ffffffffffffffffffffffffffffffffffffffff1661103e611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614a4c565b60405180910390fd5b600e54816110a0610dd0565b6110aa9190614da3565b11156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061494c565b60405180910390fd5b6110f58282612fad565b5050565b6111016128c3565b73ffffffffffffffffffffffffffffffffffffffff1661111f611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614a4c565b60405180910390fd5b6000479050600061271060fa8361118c9190614e2a565b6111969190614df9565b9050600061271060fa846111aa9190614e2a565b6111b49190614df9565b90506000612710610226856111c99190614e2a565b6111d39190614df9565b90506000612710610226866111e89190614e2a565b6111f29190614df9565b9050600061271061076c876112079190614e2a565b6112119190614df9565b9050600061271061076c886112269190614e2a565b6112309190614df9565b905060006127106105aa896112459190614e2a565b61124f9190614df9565b905060006127106103e88a6112649190614e2a565b61126e9190614df9565b9050600061271061076c8b6112839190614e2a565b61128d9190614df9565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112f7573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611360573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156113c9573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611432573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561149b573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611504573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f1935050505015801561156d573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f193505050501580156115d6573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8a9081150290604051600060405180830381858888f1935050505015801561163f573d6000803e3d6000fd5b5060008989898989898989896116559190614da3565b61165f9190614da3565b6116699190614da3565b6116739190614da3565b61167d9190614da3565b6116879190614da3565b6116919190614da3565b61169b9190614da3565b8b6116a69190614eb8565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611710573d6000803e3d6000fd5b505050505050505050505050565b6117266128c3565b73ffffffffffffffffffffffffffffffffffffffff16611744611de5565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614a4c565b60405180910390fd5b80600e8190555050565b6117bf838383604051806020016040528060008152506120d0565b505050565b6002600954141561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190614bcc565b60405180910390fd5b6002600981905550601060019054906101000a900460ff16611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906149ac565b60405180910390fd5b611152600161186e610dd0565b6118789190614da3565b11156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b09061494c565b60405180910390fd5b6001601260006118c76128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399061496c565b60405180910390fd5b61197c816011546119516128c3565b604051602001611961919061474f565b60405160208183030381529060405280519060200120612fcb565b6119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290614b8c565b60405180910390fd5b6001601260006119c96128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a19611a126128c3565b6001612fad565b600160098190555050565b600d5481565b600c5481565b60136020528060005260406000206000915090505481565b6000611a52610dd0565b8210611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a9061490c565b60405180910390fd5b819050919050565b611aa36128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ac1611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90614a4c565b60405180910390fd5b8060118190555050565b611b296128c3565b73ffffffffffffffffffffffffffffffffffffffff16611b47611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490614a4c565b60405180910390fd5b80600a9080519060200190611bb3929190613cb5565b5050565b601060009054906101000a900460ff1681565b6000611bd582612fe2565b600001519050919050565b600b5481565b600a8054611bf390614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614ff2565b8015611c6c5780601f10611c4157610100808354040283529160200191611c6c565b820191906000526020600020905b815481529060010190602001808311611c4f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc906149ec565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611d656128c3565b73ffffffffffffffffffffffffffffffffffffffff16611d83611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090614a4c565b60405180910390fd5b611de360006131e5565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611e1e90614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4a90614ff2565b8015611e975780601f10611e6c57610100808354040283529160200191611e97565b820191906000526020600020905b815481529060010190602001808311611e7a57829003601f168201915b5050505050905090565b611ea96128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ec7611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490614a4c565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611f516128c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614a8c565b60405180910390fd5b8060066000611fcc6128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120796128c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120be919061486f565b60405180910390a35050565b600f5481565b6120db8484846129f4565b6120e7848484846132ab565b612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90614b2c565b60405180910390fd5b50505050565b606061213782612935565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614a6c565b60405180910390fd5b6000612180613442565b905060008151116121a057604051806020016040528060008152506121cb565b806121aa846134d4565b6040516020016121bb9291906147e4565b6040516020818303038152906040525b915050919050565b6121db6128c3565b73ffffffffffffffffffffffffffffffffffffffff166121f9611de5565b73ffffffffffffffffffffffffffffffffffffffff161461224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614a4c565b60405180910390fd5b80600c8190555050565b6122616128c3565b73ffffffffffffffffffffffffffffffffffffffff1661227f611de5565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614a4c565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b60075481565b61230f6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661232d611de5565b73ffffffffffffffffffffffffffffffffffffffff1614612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a4c565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60026009541415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614bcc565b60405180910390fd5b6002600981905550601060009054906101000a900460ff166124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b590614a0c565b60405180910390fd5b60008111612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f89061498c565b60405180910390fd5b6111528161250d610dd0565b6125179190614da3565b1115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061494c565b60405180910390fd5b600c5481111561259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259490614b0c565b60405180910390fd5b3481600b546125ac9190614e2a565b11156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e490614acc565b60405180910390fd5b600080600f541180156126045750612603613681565b5b61260f57600061261e565b600b548261261d9190614e2a565b5b9050600081111561268c5781600f546126379190614eb8565b600f819055506126456128c3565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561268a573d6000803e3d6000fd5b505b81601360006126996128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de9190614da3565b601360006126ea6128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127396127336128c3565b83612fad565b50600160098190555050565b61274d6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661276b611de5565b73ffffffffffffffffffffffffffffffffffffffff16146127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890614a4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612828906148cc565b60405180910390fd5b61283a816131e5565b50565b6128456128c3565b73ffffffffffffffffffffffffffffffffffffffff16612863611de5565b73ffffffffffffffffffffffffffffffffffffffff16146128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614a4c565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006129ff82612fe2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612a266128c3565b73ffffffffffffffffffffffffffffffffffffffff161480612a825750612a4b6128c3565b73ffffffffffffffffffffffffffffffffffffffff16612a6a84610c32565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a9e5750612a9d8260000151612a986128c3565b61238d565b5b905080612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad790614aac565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990614a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb99061492c565b60405180910390fd5b612bcf85858560016136de565b612bdf6000848460000151612942565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612c4d9190614e84565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cf19190614d5d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612df79190614da3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f3d57612e6d81612935565b15612f3c576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fa586868660016136e4565b505050505050565b612fc78282604051806020016040528060008152506136ea565b5050565b600082612fd88584613bc9565b1490509392505050565b612fea613d3b565b612ff382612935565b613032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613029906148ec565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106130965760017f0000000000000000000000000000000000000000000000000000000000000000846130899190614eb8565b6130939190614da3565b90505b60008390505b8181106131a4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613190578093505050506131e0565b50808061319c90614fc8565b91505061309c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790614bec565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006132cc8473ffffffffffffffffffffffffffffffffffffffff16613ca2565b15613435578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f56128c3565b8786866040518563ffffffff1660e01b81526004016133179493929190614823565b602060405180830381600087803b15801561333157600080fd5b505af192505050801561336257506040513d601f19601f8201168201806040525081019061335f91906141b0565b60015b6133e5573d8060008114613392576040519150601f19603f3d011682016040523d82523d6000602084013e613397565b606091505b506000815114156133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d490614b2c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061343a565b600190505b949350505050565b6060600a805461345190614ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461347d90614ff2565b80156134ca5780601f1061349f576101008083540402835291602001916134ca565b820191906000526020600020905b8154815290600101906020018083116134ad57829003601f168201915b5050505050905090565b6060600082141561351c576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061367c565b600082905060005b6000821461354e57808061353790615055565b915050600a826135479190614df9565b9150613524565b60008167ffffffffffffffff811115613590577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135c25781602001600182028036833780820191505090505b5090505b60008514613675576001826135db9190614eb8565b9150600a856135ea91906150d6565b60306135f69190614da3565b60f81b818381518110613632577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561366e9190614df9565b94506135c6565b8093505050505b919050565b600080600261ffff326001436136979190614eb8565b40426136a16128c3565b6040516020016136b4949392919061476a565b6040516020818303038152906040528051906020012060001c166136d891906150d6565b14905090565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375790614b6c565b60405180910390fd5b61376981612935565b156137a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a090614b4c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390614c2c565b60405180910390fd5b61381960008583866136de565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516139169190614d5d565b6fffffffffffffffffffffffffffffffff16815260200185836020015161393d9190614d5d565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613bac57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b4c60008884886132ab565b613b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8290614b2c565b60405180910390fd5b8180613b9690615055565b9250508080613ba490615055565b915050613adb565b5080600081905550613bc160008785886136e4565b505050505050565b60008082905060005b8451811015613c97576000858281518110613c16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311613c57578281604051602001613c3a9291906147b8565b604051602081830303815290604052805190602001209250613c83565b8083604051602001613c6a9291906147b8565b6040516020818303038152906040528051906020012092505b508080613c8f90615055565b915050613bd2565b508091505092915050565b600080823b905060008111915050919050565b828054613cc190614ff2565b90600052602060002090601f016020900481019282613ce35760008555613d2a565b82601f10613cfc57805160ff1916838001178555613d2a565b82800160010185558215613d2a579182015b82811115613d29578251825591602001919060010190613d0e565b5b509050613d379190613d75565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d8e576000816000905550600101613d76565b5090565b6000613da5613da084614c8c565b614c67565b90508083825260208201905082856020860282011115613dc457600080fd5b60005b85811015613df45781613dda8882613ece565b845260208401935060208301925050600181019050613dc7565b5050509392505050565b6000613e11613e0c84614cb8565b614c67565b905082815260208101848484011115613e2957600080fd5b613e34848285614f86565b509392505050565b6000613e4f613e4a84614ce9565b614c67565b905082815260208101848484011115613e6757600080fd5b613e72848285614f86565b509392505050565b600081359050613e8981615958565b92915050565b600082601f830112613ea057600080fd5b8135613eb0848260208601613d92565b91505092915050565b600081359050613ec88161596f565b92915050565b600081359050613edd81615986565b92915050565b600081359050613ef28161599d565b92915050565b600081519050613f078161599d565b92915050565b600082601f830112613f1e57600080fd5b8135613f2e848260208601613dfe565b91505092915050565b600082601f830112613f4857600080fd5b8135613f58848260208601613e3c565b91505092915050565b600081359050613f70816159b4565b92915050565b600060208284031215613f8857600080fd5b6000613f9684828501613e7a565b91505092915050565b60008060408385031215613fb257600080fd5b6000613fc085828601613e7a565b9250506020613fd185828601613e7a565b9150509250929050565b600080600060608486031215613ff057600080fd5b6000613ffe86828701613e7a565b935050602061400f86828701613e7a565b925050604061402086828701613f61565b9150509250925092565b6000806000806080858703121561404057600080fd5b600061404e87828801613e7a565b945050602061405f87828801613e7a565b935050604061407087828801613f61565b925050606085013567ffffffffffffffff81111561408d57600080fd5b61409987828801613f0d565b91505092959194509250565b600080604083850312156140b857600080fd5b60006140c685828601613e7a565b92505060206140d785828601613eb9565b9150509250929050565b600080604083850312156140f457600080fd5b600061410285828601613e7a565b925050602061411385828601613f61565b9150509250929050565b60006020828403121561412f57600080fd5b600082013567ffffffffffffffff81111561414957600080fd5b61415584828501613e8f565b91505092915050565b60006020828403121561417057600080fd5b600061417e84828501613ece565b91505092915050565b60006020828403121561419957600080fd5b60006141a784828501613ee3565b91505092915050565b6000602082840312156141c257600080fd5b60006141d084828501613ef8565b91505092915050565b6000602082840312156141eb57600080fd5b600082013567ffffffffffffffff81111561420557600080fd5b61421184828501613f37565b91505092915050565b60006020828403121561422c57600080fd5b600061423a84828501613f61565b91505092915050565b61424c81614eec565b82525050565b61426361425e82614eec565b61509e565b82525050565b61427281614efe565b82525050565b61428961428482614f0a565b6150b0565b82525050565b600061429a82614d1a565b6142a48185614d30565b93506142b4818560208601614f95565b6142bd816151c3565b840191505092915050565b60006142d382614d25565b6142dd8185614d41565b93506142ed818560208601614f95565b6142f6816151c3565b840191505092915050565b600061430c82614d25565b6143168185614d52565b9350614326818560208601614f95565b80840191505092915050565b600061433f602283614d41565b915061434a826151e1565b604082019050919050565b6000614362602683614d41565b915061436d82615230565b604082019050919050565b6000614385602a83614d41565b91506143908261527f565b604082019050919050565b60006143a8602383614d41565b91506143b3826152ce565b604082019050919050565b60006143cb602583614d41565b91506143d68261531d565b604082019050919050565b60006143ee601483614d41565b91506143f98261536c565b602082019050919050565b6000614411602683614d41565b915061441c82615395565b604082019050919050565b6000614434601a83614d41565b915061443f826153e4565b602082019050919050565b6000614457601783614d41565b91506144628261540d565b602082019050919050565b600061447a603983614d41565b915061448582615436565b604082019050919050565b600061449d602b83614d41565b91506144a882615485565b604082019050919050565b60006144c0600d83614d41565b91506144cb826154d4565b602082019050919050565b60006144e3602683614d41565b91506144ee826154fd565b604082019050919050565b6000614506602083614d41565b91506145118261554c565b602082019050919050565b6000614529602f83614d41565b915061453482615575565b604082019050919050565b600061454c601a83614d41565b9150614557826155c4565b602082019050919050565b600061456f603283614d41565b915061457a826155ed565b604082019050919050565b6000614592602783614d41565b915061459d8261563c565b604082019050919050565b60006145b5602283614d41565b91506145c08261568b565b604082019050919050565b60006145d8601b83614d41565b91506145e3826156da565b602082019050919050565b60006145fb603383614d41565b915061460682615703565b604082019050919050565b600061461e601d83614d41565b915061462982615752565b602082019050919050565b6000614641602183614d41565b915061464c8261577b565b604082019050919050565b6000614664600d83614d41565b915061466f826157ca565b602082019050919050565b6000614687602e83614d41565b9150614692826157f3565b604082019050919050565b60006146aa601f83614d41565b91506146b582615842565b602082019050919050565b60006146cd602f83614d41565b91506146d88261586b565b604082019050919050565b60006146f0602d83614d41565b91506146fb826158ba565b604082019050919050565b6000614713602283614d41565b915061471e82615909565b604082019050919050565b61473281614f7c565b82525050565b61474961474482614f7c565b6150cc565b82525050565b600061475b8284614252565b60148201915081905092915050565b60006147768287614252565b6014820191506147868286614278565b6020820191506147968285614738565b6020820191506147a68284614252565b60148201915081905095945050505050565b60006147c48285614278565b6020820191506147d48284614278565b6020820191508190509392505050565b60006147f08285614301565b91506147fc8284614301565b91508190509392505050565b600060208201905061481d6000830184614243565b92915050565b60006080820190506148386000830187614243565b6148456020830186614243565b6148526040830185614729565b8181036060830152614864818461428f565b905095945050505050565b60006020820190506148846000830184614269565b92915050565b600060208201905081810360008301526148a481846142c8565b905092915050565b600060208201905081810360008301526148c581614332565b9050919050565b600060208201905081810360008301526148e581614355565b9050919050565b6000602082019050818103600083015261490581614378565b9050919050565b600060208201905081810360008301526149258161439b565b9050919050565b60006020820190508181036000830152614945816143be565b9050919050565b60006020820190508181036000830152614965816143e1565b9050919050565b6000602082019050818103600083015261498581614404565b9050919050565b600060208201905081810360008301526149a581614427565b9050919050565b600060208201905081810360008301526149c58161444a565b9050919050565b600060208201905081810360008301526149e58161446d565b9050919050565b60006020820190508181036000830152614a0581614490565b9050919050565b60006020820190508181036000830152614a25816144b3565b9050919050565b60006020820190508181036000830152614a45816144d6565b9050919050565b60006020820190508181036000830152614a65816144f9565b9050919050565b60006020820190508181036000830152614a858161451c565b9050919050565b60006020820190508181036000830152614aa58161453f565b9050919050565b60006020820190508181036000830152614ac581614562565b9050919050565b60006020820190508181036000830152614ae581614585565b9050919050565b60006020820190508181036000830152614b05816145a8565b9050919050565b60006020820190508181036000830152614b25816145cb565b9050919050565b60006020820190508181036000830152614b45816145ee565b9050919050565b60006020820190508181036000830152614b6581614611565b9050919050565b60006020820190508181036000830152614b8581614634565b9050919050565b60006020820190508181036000830152614ba581614657565b9050919050565b60006020820190508181036000830152614bc58161467a565b9050919050565b60006020820190508181036000830152614be58161469d565b9050919050565b60006020820190508181036000830152614c05816146c0565b9050919050565b60006020820190508181036000830152614c25816146e3565b9050919050565b60006020820190508181036000830152614c4581614706565b9050919050565b6000602082019050614c616000830184614729565b92915050565b6000614c71614c82565b9050614c7d8282615024565b919050565b6000604051905090565b600067ffffffffffffffff821115614ca757614ca6615194565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cd357614cd2615194565b5b614cdc826151c3565b9050602081019050919050565b600067ffffffffffffffff821115614d0457614d03615194565b5b614d0d826151c3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d6882614f40565b9150614d7383614f40565b9250826fffffffffffffffffffffffffffffffff03821115614d9857614d97615107565b5b828201905092915050565b6000614dae82614f7c565b9150614db983614f7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dee57614ded615107565b5b828201905092915050565b6000614e0482614f7c565b9150614e0f83614f7c565b925082614e1f57614e1e615136565b5b828204905092915050565b6000614e3582614f7c565b9150614e4083614f7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7957614e78615107565b5b828202905092915050565b6000614e8f82614f40565b9150614e9a83614f40565b925082821015614ead57614eac615107565b5b828203905092915050565b6000614ec382614f7c565b9150614ece83614f7c565b925082821015614ee157614ee0615107565b5b828203905092915050565b6000614ef782614f5c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fb3578082015181840152602081019050614f98565b83811115614fc2576000848401525b50505050565b6000614fd382614f7c565b91506000821415614fe757614fe6615107565b5b600182039050919050565b6000600282049050600182168061500a57607f821691505b6020821081141561501e5761501d615165565b5b50919050565b61502d826151c3565b810181811067ffffffffffffffff8211171561504c5761504b615194565b5b80604052505050565b600061506082614f7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509357615092615107565b5b600182019050919050565b60006150a9826150ba565b9050919050565b6000819050919050565b60006150c5826151d4565b9050919050565b6000819050919050565b60006150e182614f7c565b91506150ec83614f7c565b9250826150fc576150fb615136565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320746f74616c20737570706c79000000000000000000000000600082015250565b7f45786365656473206d61782077686974656c697374206d696e7473207065722060008201527f77616c6c65740000000000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206174206c65617374206f6e65000000000000600082015250565b7f57686974656c6973742073616c65206e6f74206c697665000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7420666f722073656c656374656460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e0000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61596181614eec565b811461596c57600080fd5b50565b61597881614efe565b811461598357600080fd5b50565b61598f81614f0a565b811461599a57600080fd5b50565b6159a681614f14565b81146159b157600080fd5b50565b6159bd81614f7c565b81146159c857600080fd5b5056fea2646970667358221220cfdb9f51e36c1d34caab3b743b85c27458f2913226ff48280f1fc6a7937f499c64736f6c63430008030033
Deployed Bytecode
0x60806040526004361061025b5760003560e01c806355f804b311610144578063a5ce1b4d116100b6578063d7224ba01161007a578063d7224ba0146108d1578063e268e4d3146108fc578063e985e9c514610925578063efd0cbf914610962578063f2fde38b1461097e578063f4a0a528146109a75761025b565b8063a5ce1b4d14610800578063b88d4fde1461082b578063c87b56dd14610854578063ccfdd2f814610891578063d1beca64146108ba5761025b565b806370a082311161010857806370a0823114610716578063715018a6146107535780638da5cb5b1461076a57806395d89b4114610795578063a10866ef146107c0578063a22cb465146107d75761025b565b806355f804b31461062f5780635e5f3ce4146106585780636352211e146106835780636817c76c146106c05780636c0360eb146106eb5761025b565b80633281fa3f116101dd57806344d84381116101a157806344d843811461050d578063453c2310146105365780634b980d67146105615780634d0df5fc1461058c5780634f6ccce7146105c957806350dc4656146106065761025b565b80633281fa3f146104505780633627d3a11461047b5780633ccfd60b146104a45780633f3e4c11146104bb57806342842e0e146104e45761025b565b806318160ddd1161022457806318160ddd1461035757806323b872dd1461038257806327a69949146103ab5780632ab4d052146103e85780632f745c59146104135761025b565b8062d759191461026057806301ffc9a71461028957806306fdde03146102c6578063081812fc146102f1578063095ea7b31461032e575b600080fd5b34801561026c57600080fd5b506102876004803603810190610282919061421a565b6109d0565b005b34801561029557600080fd5b506102b060048036038101906102ab9190614187565b610a56565b6040516102bd919061486f565b60405180910390f35b3480156102d257600080fd5b506102db610ba0565b6040516102e8919061488a565b60405180910390f35b3480156102fd57600080fd5b506103186004803603810190610313919061421a565b610c32565b6040516103259190614808565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906140e1565b610cb7565b005b34801561036357600080fd5b5061036c610dd0565b6040516103799190614c4c565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613fdb565b610dd9565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613f76565b610de9565b6040516103df9190614c4c565b60405180910390f35b3480156103f457600080fd5b506103fd610e01565b60405161040a9190614c4c565b60405180910390f35b34801561041f57600080fd5b5061043a600480360381019061043591906140e1565b610e07565b6040516104479190614c4c565b60405180910390f35b34801561045c57600080fd5b50610465611005565b604051610472919061486f565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906140e1565b611018565b005b3480156104b057600080fd5b506104b96110f9565b005b3480156104c757600080fd5b506104e260048036038101906104dd919061421a565b61171e565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613fdb565b6117a4565b005b34801561051957600080fd5b50610534600480360381019061052f919061411d565b6117c4565b005b34801561054257600080fd5b5061054b611a24565b6040516105589190614c4c565b60405180910390f35b34801561056d57600080fd5b50610576611a2a565b6040516105839190614c4c565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190613f76565b611a30565b6040516105c09190614c4c565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb919061421a565b611a48565b6040516105fd9190614c4c565b60405180910390f35b34801561061257600080fd5b5061062d6004803603810190610628919061415e565b611a9b565b005b34801561063b57600080fd5b50610656600480360381019061065191906141d9565b611b21565b005b34801561066457600080fd5b5061066d611bb7565b60405161067a919061486f565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a5919061421a565b611bca565b6040516106b79190614808565b60405180910390f35b3480156106cc57600080fd5b506106d5611be0565b6040516106e29190614c4c565b60405180910390f35b3480156106f757600080fd5b50610700611be6565b60405161070d919061488a565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613f76565b611c74565b60405161074a9190614c4c565b60405180910390f35b34801561075f57600080fd5b50610768611d5d565b005b34801561077657600080fd5b5061077f611de5565b60405161078c9190614808565b60405180910390f35b3480156107a157600080fd5b506107aa611e0f565b6040516107b7919061488a565b60405180910390f35b3480156107cc57600080fd5b506107d5611ea1565b005b3480156107e357600080fd5b506107fe60048036038101906107f991906140a5565b611f49565b005b34801561080c57600080fd5b506108156120ca565b6040516108229190614c4c565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061402a565b6120d0565b005b34801561086057600080fd5b5061087b6004803603810190610876919061421a565b61212c565b604051610888919061488a565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b3919061421a565b6121d3565b005b3480156108c657600080fd5b506108cf612259565b005b3480156108dd57600080fd5b506108e6612301565b6040516108f39190614c4c565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e919061421a565b612307565b005b34801561093157600080fd5b5061094c60048036038101906109479190613f9f565b61238d565b604051610959919061486f565b60405180910390f35b61097c6004803603810190610977919061421a565b612421565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613f76565b612745565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061421a565b61283d565b005b6109d86128c3565b73ffffffffffffffffffffffffffffffffffffffff166109f6611de5565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a4c565b60405180910390fd5b80600f8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b8957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b995750610b98826128cb565b5b9050919050565b606060018054610baf90614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb90614ff2565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b6000610c3d82612935565b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390614c0c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc282611bca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614aec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d526128c3565b73ffffffffffffffffffffffffffffffffffffffff161480610d815750610d8081610d7b6128c3565b61238d565b5b610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db7906149cc565b60405180910390fd5b610dcb838383612942565b505050565b60008054905090565b610de48383836129f4565b505050565b60126020528060005260406000206000915090505481565b600e5481565b6000610e1283611c74565b8210610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a906148ac565b60405180910390fd5b6000610e5d610dd0565b905060008060005b83811015610fc3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f5757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610faf5786841415610fa0578195505050505050610fff565b8380610fab90615055565b9450505b508080610fbb90615055565b915050610e65565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614bac565b60405180910390fd5b92915050565b601060019054906101000a900460ff1681565b6110206128c3565b73ffffffffffffffffffffffffffffffffffffffff1661103e611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614a4c565b60405180910390fd5b600e54816110a0610dd0565b6110aa9190614da3565b11156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061494c565b60405180910390fd5b6110f58282612fad565b5050565b6111016128c3565b73ffffffffffffffffffffffffffffffffffffffff1661111f611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90614a4c565b60405180910390fd5b6000479050600061271060fa8361118c9190614e2a565b6111969190614df9565b9050600061271060fa846111aa9190614e2a565b6111b49190614df9565b90506000612710610226856111c99190614e2a565b6111d39190614df9565b90506000612710610226866111e89190614e2a565b6111f29190614df9565b9050600061271061076c876112079190614e2a565b6112119190614df9565b9050600061271061076c886112269190614e2a565b6112309190614df9565b905060006127106105aa896112459190614e2a565b61124f9190614df9565b905060006127106103e88a6112649190614e2a565b61126e9190614df9565b9050600061271061076c8b6112839190614e2a565b61128d9190614df9565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112f7573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611360573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156113c9573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611432573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561149b573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611504573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f1935050505015801561156d573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f193505050501580156115d6573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8a9081150290604051600060405180830381858888f1935050505015801561163f573d6000803e3d6000fd5b5060008989898989898989896116559190614da3565b61165f9190614da3565b6116699190614da3565b6116739190614da3565b61167d9190614da3565b6116879190614da3565b6116919190614da3565b61169b9190614da3565b8b6116a69190614eb8565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611710573d6000803e3d6000fd5b505050505050505050505050565b6117266128c3565b73ffffffffffffffffffffffffffffffffffffffff16611744611de5565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614a4c565b60405180910390fd5b80600e8190555050565b6117bf838383604051806020016040528060008152506120d0565b505050565b6002600954141561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190614bcc565b60405180910390fd5b6002600981905550601060019054906101000a900460ff16611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906149ac565b60405180910390fd5b611152600161186e610dd0565b6118789190614da3565b11156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b09061494c565b60405180910390fd5b6001601260006118c76128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119399061496c565b60405180910390fd5b61197c816011546119516128c3565b604051602001611961919061474f565b60405160208183030381529060405280519060200120612fcb565b6119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290614b8c565b60405180910390fd5b6001601260006119c96128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a19611a126128c3565b6001612fad565b600160098190555050565b600d5481565b600c5481565b60136020528060005260406000206000915090505481565b6000611a52610dd0565b8210611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a9061490c565b60405180910390fd5b819050919050565b611aa36128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ac1611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90614a4c565b60405180910390fd5b8060118190555050565b611b296128c3565b73ffffffffffffffffffffffffffffffffffffffff16611b47611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490614a4c565b60405180910390fd5b80600a9080519060200190611bb3929190613cb5565b5050565b601060009054906101000a900460ff1681565b6000611bd582612fe2565b600001519050919050565b600b5481565b600a8054611bf390614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614ff2565b8015611c6c5780601f10611c4157610100808354040283529160200191611c6c565b820191906000526020600020905b815481529060010190602001808311611c4f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc906149ec565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611d656128c3565b73ffffffffffffffffffffffffffffffffffffffff16611d83611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090614a4c565b60405180910390fd5b611de360006131e5565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611e1e90614ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4a90614ff2565b8015611e975780601f10611e6c57610100808354040283529160200191611e97565b820191906000526020600020905b815481529060010190602001808311611e7a57829003601f168201915b5050505050905090565b611ea96128c3565b73ffffffffffffffffffffffffffffffffffffffff16611ec7611de5565b73ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490614a4c565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b611f516128c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614a8c565b60405180910390fd5b8060066000611fcc6128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120796128c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120be919061486f565b60405180910390a35050565b600f5481565b6120db8484846129f4565b6120e7848484846132ab565b612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d90614b2c565b60405180910390fd5b50505050565b606061213782612935565b612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614a6c565b60405180910390fd5b6000612180613442565b905060008151116121a057604051806020016040528060008152506121cb565b806121aa846134d4565b6040516020016121bb9291906147e4565b6040516020818303038152906040525b915050919050565b6121db6128c3565b73ffffffffffffffffffffffffffffffffffffffff166121f9611de5565b73ffffffffffffffffffffffffffffffffffffffff161461224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614a4c565b60405180910390fd5b80600c8190555050565b6122616128c3565b73ffffffffffffffffffffffffffffffffffffffff1661227f611de5565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614a4c565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b60075481565b61230f6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661232d611de5565b73ffffffffffffffffffffffffffffffffffffffff1614612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a4c565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60026009541415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614bcc565b60405180910390fd5b6002600981905550601060009054906101000a900460ff166124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b590614a0c565b60405180910390fd5b60008111612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f89061498c565b60405180910390fd5b6111528161250d610dd0565b6125179190614da3565b1115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061494c565b60405180910390fd5b600c5481111561259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259490614b0c565b60405180910390fd5b3481600b546125ac9190614e2a565b11156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e490614acc565b60405180910390fd5b600080600f541180156126045750612603613681565b5b61260f57600061261e565b600b548261261d9190614e2a565b5b9050600081111561268c5781600f546126379190614eb8565b600f819055506126456128c3565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561268a573d6000803e3d6000fd5b505b81601360006126996128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de9190614da3565b601360006126ea6128c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127396127336128c3565b83612fad565b50600160098190555050565b61274d6128c3565b73ffffffffffffffffffffffffffffffffffffffff1661276b611de5565b73ffffffffffffffffffffffffffffffffffffffff16146127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890614a4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612828906148cc565b60405180910390fd5b61283a816131e5565b50565b6128456128c3565b73ffffffffffffffffffffffffffffffffffffffff16612863611de5565b73ffffffffffffffffffffffffffffffffffffffff16146128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614a4c565b60405180910390fd5b80600b8190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006129ff82612fe2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612a266128c3565b73ffffffffffffffffffffffffffffffffffffffff161480612a825750612a4b6128c3565b73ffffffffffffffffffffffffffffffffffffffff16612a6a84610c32565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a9e5750612a9d8260000151612a986128c3565b61238d565b5b905080612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad790614aac565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990614a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb99061492c565b60405180910390fd5b612bcf85858560016136de565b612bdf6000848460000151612942565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612c4d9190614e84565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612cf19190614d5d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612df79190614da3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f3d57612e6d81612935565b15612f3c576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fa586868660016136e4565b505050505050565b612fc78282604051806020016040528060008152506136ea565b5050565b600082612fd88584613bc9565b1490509392505050565b612fea613d3b565b612ff382612935565b613032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613029906148ec565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000006483106130965760017f0000000000000000000000000000000000000000000000000000000000000064846130899190614eb8565b6130939190614da3565b90505b60008390505b8181106131a4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613190578093505050506131e0565b50808061319c90614fc8565b91505061309c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790614bec565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006132cc8473ffffffffffffffffffffffffffffffffffffffff16613ca2565b15613435578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f56128c3565b8786866040518563ffffffff1660e01b81526004016133179493929190614823565b602060405180830381600087803b15801561333157600080fd5b505af192505050801561336257506040513d601f19601f8201168201806040525081019061335f91906141b0565b60015b6133e5573d8060008114613392576040519150601f19603f3d011682016040523d82523d6000602084013e613397565b606091505b506000815114156133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d490614b2c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061343a565b600190505b949350505050565b6060600a805461345190614ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461347d90614ff2565b80156134ca5780601f1061349f576101008083540402835291602001916134ca565b820191906000526020600020905b8154815290600101906020018083116134ad57829003601f168201915b5050505050905090565b6060600082141561351c576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061367c565b600082905060005b6000821461354e57808061353790615055565b915050600a826135479190614df9565b9150613524565b60008167ffffffffffffffff811115613590577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135c25781602001600182028036833780820191505090505b5090505b60008514613675576001826135db9190614eb8565b9150600a856135ea91906150d6565b60306135f69190614da3565b60f81b818381518110613632577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561366e9190614df9565b94506135c6565b8093505050505b919050565b600080600261ffff326001436136979190614eb8565b40426136a16128c3565b6040516020016136b4949392919061476a565b6040516020818303038152906040528051906020012060001c166136d891906150d6565b14905090565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375790614b6c565b60405180910390fd5b61376981612935565b156137a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a090614b4c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000006483111561380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390614c2c565b60405180910390fd5b61381960008583866136de565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516139169190614d5d565b6fffffffffffffffffffffffffffffffff16815260200185836020015161393d9190614d5d565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613bac57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b4c60008884886132ab565b613b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8290614b2c565b60405180910390fd5b8180613b9690615055565b9250508080613ba490615055565b915050613adb565b5080600081905550613bc160008785886136e4565b505050505050565b60008082905060005b8451811015613c97576000858281518110613c16577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311613c57578281604051602001613c3a9291906147b8565b604051602081830303815290604052805190602001209250613c83565b8083604051602001613c6a9291906147b8565b6040516020818303038152906040528051906020012092505b508080613c8f90615055565b915050613bd2565b508091505092915050565b600080823b905060008111915050919050565b828054613cc190614ff2565b90600052602060002090601f016020900481019282613ce35760008555613d2a565b82601f10613cfc57805160ff1916838001178555613d2a565b82800160010185558215613d2a579182015b82811115613d29578251825591602001919060010190613d0e565b5b509050613d379190613d75565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d8e576000816000905550600101613d76565b5090565b6000613da5613da084614c8c565b614c67565b90508083825260208201905082856020860282011115613dc457600080fd5b60005b85811015613df45781613dda8882613ece565b845260208401935060208301925050600181019050613dc7565b5050509392505050565b6000613e11613e0c84614cb8565b614c67565b905082815260208101848484011115613e2957600080fd5b613e34848285614f86565b509392505050565b6000613e4f613e4a84614ce9565b614c67565b905082815260208101848484011115613e6757600080fd5b613e72848285614f86565b509392505050565b600081359050613e8981615958565b92915050565b600082601f830112613ea057600080fd5b8135613eb0848260208601613d92565b91505092915050565b600081359050613ec88161596f565b92915050565b600081359050613edd81615986565b92915050565b600081359050613ef28161599d565b92915050565b600081519050613f078161599d565b92915050565b600082601f830112613f1e57600080fd5b8135613f2e848260208601613dfe565b91505092915050565b600082601f830112613f4857600080fd5b8135613f58848260208601613e3c565b91505092915050565b600081359050613f70816159b4565b92915050565b600060208284031215613f8857600080fd5b6000613f9684828501613e7a565b91505092915050565b60008060408385031215613fb257600080fd5b6000613fc085828601613e7a565b9250506020613fd185828601613e7a565b9150509250929050565b600080600060608486031215613ff057600080fd5b6000613ffe86828701613e7a565b935050602061400f86828701613e7a565b925050604061402086828701613f61565b9150509250925092565b6000806000806080858703121561404057600080fd5b600061404e87828801613e7a565b945050602061405f87828801613e7a565b935050604061407087828801613f61565b925050606085013567ffffffffffffffff81111561408d57600080fd5b61409987828801613f0d565b91505092959194509250565b600080604083850312156140b857600080fd5b60006140c685828601613e7a565b92505060206140d785828601613eb9565b9150509250929050565b600080604083850312156140f457600080fd5b600061410285828601613e7a565b925050602061411385828601613f61565b9150509250929050565b60006020828403121561412f57600080fd5b600082013567ffffffffffffffff81111561414957600080fd5b61415584828501613e8f565b91505092915050565b60006020828403121561417057600080fd5b600061417e84828501613ece565b91505092915050565b60006020828403121561419957600080fd5b60006141a784828501613ee3565b91505092915050565b6000602082840312156141c257600080fd5b60006141d084828501613ef8565b91505092915050565b6000602082840312156141eb57600080fd5b600082013567ffffffffffffffff81111561420557600080fd5b61421184828501613f37565b91505092915050565b60006020828403121561422c57600080fd5b600061423a84828501613f61565b91505092915050565b61424c81614eec565b82525050565b61426361425e82614eec565b61509e565b82525050565b61427281614efe565b82525050565b61428961428482614f0a565b6150b0565b82525050565b600061429a82614d1a565b6142a48185614d30565b93506142b4818560208601614f95565b6142bd816151c3565b840191505092915050565b60006142d382614d25565b6142dd8185614d41565b93506142ed818560208601614f95565b6142f6816151c3565b840191505092915050565b600061430c82614d25565b6143168185614d52565b9350614326818560208601614f95565b80840191505092915050565b600061433f602283614d41565b915061434a826151e1565b604082019050919050565b6000614362602683614d41565b915061436d82615230565b604082019050919050565b6000614385602a83614d41565b91506143908261527f565b604082019050919050565b60006143a8602383614d41565b91506143b3826152ce565b604082019050919050565b60006143cb602583614d41565b91506143d68261531d565b604082019050919050565b60006143ee601483614d41565b91506143f98261536c565b602082019050919050565b6000614411602683614d41565b915061441c82615395565b604082019050919050565b6000614434601a83614d41565b915061443f826153e4565b602082019050919050565b6000614457601783614d41565b91506144628261540d565b602082019050919050565b600061447a603983614d41565b915061448582615436565b604082019050919050565b600061449d602b83614d41565b91506144a882615485565b604082019050919050565b60006144c0600d83614d41565b91506144cb826154d4565b602082019050919050565b60006144e3602683614d41565b91506144ee826154fd565b604082019050919050565b6000614506602083614d41565b91506145118261554c565b602082019050919050565b6000614529602f83614d41565b915061453482615575565b604082019050919050565b600061454c601a83614d41565b9150614557826155c4565b602082019050919050565b600061456f603283614d41565b915061457a826155ed565b604082019050919050565b6000614592602783614d41565b915061459d8261563c565b604082019050919050565b60006145b5602283614d41565b91506145c08261568b565b604082019050919050565b60006145d8601b83614d41565b91506145e3826156da565b602082019050919050565b60006145fb603383614d41565b915061460682615703565b604082019050919050565b600061461e601d83614d41565b915061462982615752565b602082019050919050565b6000614641602183614d41565b915061464c8261577b565b604082019050919050565b6000614664600d83614d41565b915061466f826157ca565b602082019050919050565b6000614687602e83614d41565b9150614692826157f3565b604082019050919050565b60006146aa601f83614d41565b91506146b582615842565b602082019050919050565b60006146cd602f83614d41565b91506146d88261586b565b604082019050919050565b60006146f0602d83614d41565b91506146fb826158ba565b604082019050919050565b6000614713602283614d41565b915061471e82615909565b604082019050919050565b61473281614f7c565b82525050565b61474961474482614f7c565b6150cc565b82525050565b600061475b8284614252565b60148201915081905092915050565b60006147768287614252565b6014820191506147868286614278565b6020820191506147968285614738565b6020820191506147a68284614252565b60148201915081905095945050505050565b60006147c48285614278565b6020820191506147d48284614278565b6020820191508190509392505050565b60006147f08285614301565b91506147fc8284614301565b91508190509392505050565b600060208201905061481d6000830184614243565b92915050565b60006080820190506148386000830187614243565b6148456020830186614243565b6148526040830185614729565b8181036060830152614864818461428f565b905095945050505050565b60006020820190506148846000830184614269565b92915050565b600060208201905081810360008301526148a481846142c8565b905092915050565b600060208201905081810360008301526148c581614332565b9050919050565b600060208201905081810360008301526148e581614355565b9050919050565b6000602082019050818103600083015261490581614378565b9050919050565b600060208201905081810360008301526149258161439b565b9050919050565b60006020820190508181036000830152614945816143be565b9050919050565b60006020820190508181036000830152614965816143e1565b9050919050565b6000602082019050818103600083015261498581614404565b9050919050565b600060208201905081810360008301526149a581614427565b9050919050565b600060208201905081810360008301526149c58161444a565b9050919050565b600060208201905081810360008301526149e58161446d565b9050919050565b60006020820190508181036000830152614a0581614490565b9050919050565b60006020820190508181036000830152614a25816144b3565b9050919050565b60006020820190508181036000830152614a45816144d6565b9050919050565b60006020820190508181036000830152614a65816144f9565b9050919050565b60006020820190508181036000830152614a858161451c565b9050919050565b60006020820190508181036000830152614aa58161453f565b9050919050565b60006020820190508181036000830152614ac581614562565b9050919050565b60006020820190508181036000830152614ae581614585565b9050919050565b60006020820190508181036000830152614b05816145a8565b9050919050565b60006020820190508181036000830152614b25816145cb565b9050919050565b60006020820190508181036000830152614b45816145ee565b9050919050565b60006020820190508181036000830152614b6581614611565b9050919050565b60006020820190508181036000830152614b8581614634565b9050919050565b60006020820190508181036000830152614ba581614657565b9050919050565b60006020820190508181036000830152614bc58161467a565b9050919050565b60006020820190508181036000830152614be58161469d565b9050919050565b60006020820190508181036000830152614c05816146c0565b9050919050565b60006020820190508181036000830152614c25816146e3565b9050919050565b60006020820190508181036000830152614c4581614706565b9050919050565b6000602082019050614c616000830184614729565b92915050565b6000614c71614c82565b9050614c7d8282615024565b919050565b6000604051905090565b600067ffffffffffffffff821115614ca757614ca6615194565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cd357614cd2615194565b5b614cdc826151c3565b9050602081019050919050565b600067ffffffffffffffff821115614d0457614d03615194565b5b614d0d826151c3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d6882614f40565b9150614d7383614f40565b9250826fffffffffffffffffffffffffffffffff03821115614d9857614d97615107565b5b828201905092915050565b6000614dae82614f7c565b9150614db983614f7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dee57614ded615107565b5b828201905092915050565b6000614e0482614f7c565b9150614e0f83614f7c565b925082614e1f57614e1e615136565b5b828204905092915050565b6000614e3582614f7c565b9150614e4083614f7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7957614e78615107565b5b828202905092915050565b6000614e8f82614f40565b9150614e9a83614f40565b925082821015614ead57614eac615107565b5b828203905092915050565b6000614ec382614f7c565b9150614ece83614f7c565b925082821015614ee157614ee0615107565b5b828203905092915050565b6000614ef782614f5c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fb3578082015181840152602081019050614f98565b83811115614fc2576000848401525b50505050565b6000614fd382614f7c565b91506000821415614fe757614fe6615107565b5b600182039050919050565b6000600282049050600182168061500a57607f821691505b6020821081141561501e5761501d615165565b5b50919050565b61502d826151c3565b810181811067ffffffffffffffff8211171561504c5761504b615194565b5b80604052505050565b600061506082614f7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509357615092615107565b5b600182019050919050565b60006150a9826150ba565b9050919050565b6000819050919050565b60006150c5826151d4565b9050919050565b6000819050919050565b60006150e182614f7c565b91506150ec83614f7c565b9250826150fc576150fb615136565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320746f74616c20737570706c79000000000000000000000000600082015250565b7f45786365656473206d61782077686974656c697374206d696e7473207065722060008201527f77616c6c65740000000000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206174206c65617374206f6e65000000000000600082015250565b7f57686974656c6973742073616c65206e6f74206c697665000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7420666f722073656c656374656460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e0000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61596181614eec565b811461596c57600080fd5b50565b61597881614efe565b811461598357600080fd5b50565b61598f81614f0a565b811461599a57600080fd5b50565b6159a681614f14565b81146159b157600080fd5b50565b6159bd81614f7c565b81146159c857600080fd5b5056fea2646970667358221220cfdb9f51e36c1d34caab3b743b85c27458f2913226ff48280f1fc6a7937f499c64736f6c63430008030033
Deployed Bytecode Sourcemap
36680:5842:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40504:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22755:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24716:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26411:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25932:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21111:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27438:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37185:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36971:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21819:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37106:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39567:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41312:1207;;;;;;;;;;;;;:::i;:::-;;40674:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27671:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39032:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36931:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36886:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37254:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21288:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41182:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41068:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37067:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24525:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36842:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36814:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23241:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9348:103;;;;;;;;;;;;;:::i;:::-;;8697:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24885:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39784:97;;;;;;;;;;;;;:::i;:::-;;26775:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37014:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27919:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25060:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40804:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39889:106;;;;;;;;;;;;;:::i;:::-;;32800:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40946:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27157:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38168:856;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9606:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40394:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40504:162;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40633:25:::1;40606:24;:52;;;;40504:162:::0;:::o;22755:422::-;22902:4;22959:25;22944:40;;;:11;:40;;;;:105;;;;23016:33;23001:48;;;:11;:48;;;;22944:105;:172;;;;23081:35;23066:50;;;:11;:50;;;;22944:172;:225;;;;23133:36;23157:11;23133:23;:36::i;:::-;22944:225;22924:245;;22755:422;;;:::o;24716:100::-;24770:13;24803:5;24796:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24716:100;:::o;26411:292::-;26515:7;26562:16;26570:7;26562;:16::i;:::-;26540:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26671:15;:24;26687:7;26671:24;;;;;;;;;;;;;;;;;;;;;26664:31;;26411:292;;;:::o;25932:413::-;26005:13;26021:24;26037:7;26021:15;:24::i;:::-;26005:40;;26070:5;26064:11;;:2;:11;;;;26056:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26165:5;26149:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26174:37;26191:5;26198:12;:10;:12::i;:::-;26174:16;:37::i;:::-;26149:62;26127:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;26309:28;26318:2;26322:7;26331:5;26309:8;:28::i;:::-;25932:413;;;:::o;21111:100::-;21164:7;21191:12;;21184:19;;21111:100;:::o;27438:162::-;27564:28;27574:4;27580:2;27584:7;27564:9;:28::i;:::-;27438:162;;;:::o;37185:58::-;;;;;;;;;;;;;;;;;:::o;36971:36::-;;;;:::o;21819:864::-;21944:7;21985:16;21995:5;21985:9;:16::i;:::-;21977:5;:24;21969:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22051:22;22076:13;:11;:13::i;:::-;22051:38;;22100:19;22134:25;22188:9;22183:426;22207:14;22203:1;:18;22183:426;;;22243:31;22277:11;:14;22289:1;22277:14;;;;;;;;;;;22243:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22336:1;22310:28;;:9;:14;;;:28;;;22306:103;;22379:9;:14;;;22359:34;;22306:103;22448:5;22427:26;;:17;:26;;;22423:175;;;22493:5;22478:11;:20;22474:77;;;22530:1;22523:8;;;;;;;;;22474:77;22569:13;;;;;:::i;:::-;;;;22423:175;22183:426;22223:3;;;;;:::i;:::-;;;;22183:426;;;;22619:56;;;;;;;;;;:::i;:::-;;;;;;;;21819:864;;;;;:::o;37106:35::-;;;;;;;;;;;;;:::o;39567:209::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39689:14:::1;;39678:7;39662:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:41;;39654:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;39739:29;39749:9;39760:7;39739:9;:29::i;:::-;39567:209:::0;;:::o;41312:1207::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41360:15:::1;41378:21;41360:39;;41410:16;41447:5;41440:3;41430:7;:13;;;;:::i;:::-;41429:23;;;;:::i;:::-;41410:42;;41463:16;41500:5;41493:3;41483:7;:13;;;;:::i;:::-;41482:23;;;;:::i;:::-;41463:42;;41516:16;41553:5;41546:3;41536:7;:13;;;;:::i;:::-;41535:23;;;;:::i;:::-;41516:42;;41569:16;41606:5;41599:3;41589:7;:13;;;;:::i;:::-;41588:23;;;;:::i;:::-;41569:42;;41622:16;41660:5;41652:4;41642:7;:14;;;;:::i;:::-;41641:24;;;;:::i;:::-;41622:43;;41676:16;41714:5;41706:4;41696:7;:14;;;;:::i;:::-;41695:24;;;;:::i;:::-;41676:43;;41730:16;41768:5;41760:4;41750:7;:14;;;;:::i;:::-;41749:24;;;;:::i;:::-;41730:43;;41784:16;41822:5;41814:4;41804:7;:14;;;;:::i;:::-;41803:24;;;;:::i;:::-;41784:43;;41838:16;41876:5;41868:4;41858:7;:14;;;;:::i;:::-;41857:24;;;;:::i;:::-;41838:43;;41902:8;;;;;;;;;;;41894:26;;:36;41921:8;41894:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41951:8;;;;;;;;;;;41943:26;;:36;41970:8;41943:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42000:8;;;;;;;;;;;41992:26;;:36;42019:8;41992:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42049:8;;;;;;;;;;;42041:26;;:36;42068:8;42041:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42098:8;;;;;;;;;;;42090:26;;:36;42117:8;42090:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42147:8;;;;;;;;;;;42139:26;;:36;42166:8;42139:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42196:8;;;;;;;;;;;42188:26;;:36;42215:8;42188:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42245:8;;;;;;;;;;;42237:26;;:36;42264:8;42237:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42295:8;;;;;;;;;;;42287:26;;:36;42314:8;42287:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42334:17;42453:8;42442;42431;42420;42409;42398;42387;42376;42365;:19;;;;:::i;:::-;:30;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;:63;;;;:::i;:::-;:74;;;;:::i;:::-;:85;;;;:::i;:::-;:96;;;;:::i;:::-;42354:7;:108;;;;:::i;:::-;42334:128;;42481:9;;;;;;;;;;;42473:27;;:38;42501:9;42473:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8988:1;;;;;;;;;;;41312:1207::o:0;40674:122::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40773:15:::1;40756:14;:32;;;;40674:122:::0;:::o;27671:177::-;27801:39;27818:4;27824:2;27828:7;27801:39;;;;;;;;;;;;:16;:39::i;:::-;27671:177;;;:::o;39032:527::-;946:1;1544:7;;:19;;1536:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;946:1;1677:7;:18;;;;39121:15:::1;;;;;;;;;;;39113:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:4;39199:1;39183:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:25;;39175:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39292:1;39252:23;:37;39276:12;:10;:12::i;:::-;39252:37;;;;;;;;;;;;;;;;:41;39244:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;39355:85;39374:6;39382:14;;39425:12;:10;:12::i;:::-;39408:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;39398:41;;;;;;39355:18;:85::i;:::-;39347:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;39511:1;39471:23;:37;39495:12;:10;:12::i;:::-;39471:37;;;;;;;;;;;;;;;:41;;;;39525:26;39535:12;:10;:12::i;:::-;39549:1;39525:9;:26::i;:::-;902:1:::0;1856:7;:22;;;;39032:527;:::o;36931:33::-;;;;:::o;36886:38::-;;;;:::o;37254:49::-;;;;;;;;;;;;;;;;;:::o;21288:228::-;21391:7;21432:13;:11;:13::i;:::-;21424:5;:21;21416:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21503:5;21496:12;;21288:228;;;:::o;41182:122::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41281:15:::1;41264:14;:32;;;;41182:122:::0;:::o;41068:106::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41155:11:::1;41145:7;:21;;;;;;;;;;;;:::i;:::-;;41068:106:::0;:::o;37067:32::-;;;;;;;;;;;;;:::o;24525:124::-;24589:7;24616:20;24628:7;24616:11;:20::i;:::-;:25;;;24609:32;;24525:124;;;:::o;36842:37::-;;;;:::o;36814:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23241:258::-;23305:7;23364:1;23347:19;;:5;:19;;;;23325:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;23463:12;:19;23476:5;23463:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;23455:36;;23448:43;;23241:258;;;:::o;9348:103::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9413:30:::1;9440:1;9413:18;:30::i;:::-;9348:103::o:0;8697:87::-;8743:7;8770:6;;;;;;;;;;;8763:13;;8697:87;:::o;24885:104::-;24941:13;24974:7;24967:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24885:104;:::o;39784:97::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39861:12:::1;;;;;;;;;;;39860:13;39845:12;;:28;;;;;;;;;;;;;;;;;;39784:97::o:0;26775:311::-;26905:12;:10;:12::i;:::-;26893:24;;:8;:24;;;;26885:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27006:8;26961:18;:32;26980:12;:10;:12::i;:::-;26961:32;;;;;;;;;;;;;;;:42;26994:8;26961:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27059:8;27030:48;;27045:12;:10;:12::i;:::-;27030:48;;;27069:8;27030:48;;;;;;:::i;:::-;;;;;;;;26775:311;;:::o;37014:46::-;;;;:::o;27919:355::-;28078:28;28088:4;28094:2;28098:7;28078:9;:28::i;:::-;28139:48;28162:4;28168:2;28172:7;28181:5;28139:22;:48::i;:::-;28117:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;27919:355;;;;:::o;25060:468::-;25178:13;25231:16;25239:7;25231;:16::i;:::-;25209:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;25335:21;25359:10;:8;:10::i;:::-;25335:34;;25424:1;25406:7;25400:21;:25;:120;;;;;;;;;;;;;;;;;25469:7;25478:18;:7;:16;:18::i;:::-;25452:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25400:120;25380:140;;;25060:468;;;:::o;40804:134::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40912:18:::1;40892:17;:38;;;;40804:134:::0;:::o;39889:106::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39972:15:::1;;;;;;;;;;;39971:16;39953:15;;:34;;;;;;;;;;;;;;;;;;39889:106::o:0;32800:43::-;;;;:::o;40946:114::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41039:13:::1;41024:12;:28;;;;40946:114:::0;:::o;27157:214::-;27299:4;27328:18;:25;27347:5;27328:25;;;;;;;;;;;;;;;:35;27354:8;27328:35;;;;;;;;;;;;;;;;;;;;;;;;;27321:42;;27157:214;;;;:::o;38168:856::-;946:1;1544:7;;:19;;1536:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;946:1;1677:7;:18;;;;38254:12:::1;;;;;;;;;;;38246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38313:1;38303:7;:11;38295:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38391:4;38380:7;38364:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:31;;38356:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38450:17;;38439:7;:28;;38431:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38541:9;38530:7;38518:9;;:19;;;;:::i;:::-;:32;;38510:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;38607:14;38651:1:::0;38624:24:::1;;:28;:44;;;;;38656:12;:10;:12::i;:::-;38624:44;:96;;38719:1;38624:96;;;38694:9;;38684:7;:19;;;;:::i;:::-;38624:96;38607:113;;38746:1;38737:6;:10;38733:157;;;38818:7;38791:24;;:34;;;;:::i;:::-;38764:24;:61;;;;38848:12;:10;:12::i;:::-;38840:30;;:38;38871:6;38840:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38733:157;38964:7;38933:14;:28;38948:12;:10;:12::i;:::-;38933:28;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;38902:14;:28;38917:12;:10;:12::i;:::-;38902:28;;;;;;;;;;;;;;;:69;;;;38984:32;38994:12;:10;:12::i;:::-;39008:7;38984:9;:32::i;:::-;1708:1;902::::0;1856:7;:22;;;;38168:856;:::o;9606:201::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9715:1:::1;9695:22;;:8;:22;;;;9687:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9771:28;9790:8;9771:18;:28::i;:::-;9606:201:::0;:::o;40394:102::-;8928:12;:10;:12::i;:::-;8917:23;;:7;:5;:7::i;:::-;:23;;;8909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40478:10:::1;40466:9;:22;;;;40394:102:::0;:::o;8071:98::-;8124:7;8151:10;8144:17;;8071:98;:::o;17282:157::-;17367:4;17406:25;17391:40;;;:11;:40;;;;17384:47;;17282:157;;;:::o;28529:111::-;28586:4;28620:12;;28610:7;:22;28603:29;;28529:111;;;:::o;32596:196::-;32738:2;32711:15;:24;32727:7;32711:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32776:7;32772:2;32756:28;;32765:5;32756:28;;;;;;;;;;;;32596:196;;;:::o;30769:1709::-;30884:35;30922:20;30934:7;30922:11;:20::i;:::-;30884:58;;30955:22;30997:13;:18;;;30981:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;31056:12;:10;:12::i;:::-;31032:36;;:20;31044:7;31032:11;:20::i;:::-;:36;;;30981:87;:154;;;;31085:50;31102:13;:18;;;31122:12;:10;:12::i;:::-;31085:16;:50::i;:::-;30981:154;30955:181;;31171:17;31149:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31323:4;31301:26;;:13;:18;;;:26;;;31279:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;31426:1;31412:16;;:2;:16;;;;31404:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31483:43;31505:4;31511:2;31515:7;31524:1;31483:21;:43::i;:::-;31591:49;31608:1;31612:7;31621:13;:18;;;31591:8;:49::i;:::-;31683:1;31653:12;:18;31666:4;31653:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31723:1;31695:12;:16;31708:2;31695:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31758:43;;;;;;;;31773:2;31758:43;;;;;;31784:15;31758:43;;;;;31735:11;:20;31747:7;31735:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32041:19;32073:1;32063:7;:11;;;;:::i;:::-;32041:33;;32130:1;32089:43;;:11;:24;32101:11;32089:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;32085:288;;;32153:20;32161:11;32153:7;:20::i;:::-;32149:213;;;32221:125;;;;;;;;32258:13;:18;;;32221:125;;;;;;32299:13;:28;;;32221:125;;;;;32194:11;:24;32206:11;32194:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32149:213;32085:288;32409:7;32405:2;32390:27;;32399:4;32390:27;;;;;;;;;;;;32428:42;32449:4;32455:2;32459:7;32468:1;32428:20;:42::i;:::-;30769:1709;;;;;;:::o;28648:104::-;28717:27;28727:2;28731:8;28717:27;;;;;;;;;;;;:9;:27::i;:::-;28648:104;;:::o;17807:190::-;17932:4;17985;17956:25;17969:5;17976:4;17956:12;:25::i;:::-;:33;17949:40;;17807:190;;;;;:::o;23781:682::-;23869:21;;:::i;:::-;23916:16;23924:7;23916;:16::i;:::-;23908:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23992:26;24044:12;24033:7;:23;24029:103;;24119:1;24104:12;24094:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24073:47;;24029:103;24149:12;24164:7;24149:22;;24144:242;24181:18;24173:4;:26;24144:242;;24224:31;24258:11;:17;24270:4;24258:17;;;;;;;;;;;24224:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24320:1;24294:28;;:9;:14;;;:28;;;24290:85;;24350:9;24343:16;;;;;;;24290:85;24144:242;24201:6;;;;;:::i;:::-;;;;24144:242;;;;24398:57;;;;;;;;;;:::i;:::-;;;;;;;;23781:682;;;;:::o;9967:191::-;10041:16;10060:6;;;;;;;;;;;10041:25;;10086:8;10077:6;;:17;;;;;;;;;;;;;;;;;;10141:8;10110:40;;10131:8;10110:40;;;;;;;;;;;;9967:191;;:::o;34471:985::-;34626:4;34647:15;:2;:13;;;:15::i;:::-;34643:806;;;34716:2;34700:36;;;34759:12;:10;:12::i;:::-;34794:4;34821:7;34851:5;34700:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34679:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35079:1;35062:6;:13;:18;35058:321;;;35105:109;;;;;;;;;;:::i;:::-;;;;;;;;35058:321;35329:6;35323:13;35314:6;35310:2;35306:15;35299:38;34679:715;34949:45;;;34939:55;;;:6;:55;;;;34932:62;;;;;34643:806;35433:4;35426:11;;34471:985;;;;;;;:::o;40003:108::-;40063:13;40096:7;40089:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40003:108;:::o;2081:723::-;2137:13;2367:1;2358:5;:10;2354:53;;;2385:10;;;;;;;;;;;;;;;;;;;;;2354:53;2417:12;2432:5;2417:20;;2448:14;2473:78;2488:1;2480:4;:9;2473:78;;2506:8;;;;;:::i;:::-;;;;2537:2;2529:10;;;;;:::i;:::-;;;2473:78;;;2561:19;2593:6;2583:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2561:39;;2611:154;2627:1;2618:5;:10;2611:154;;2655:1;2645:11;;;;;:::i;:::-;;;2722:2;2714:5;:10;;;;:::i;:::-;2701:2;:24;;;;:::i;:::-;2688:39;;2671:6;2678;2671:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2751:2;2742:11;;;;;:::i;:::-;;;2611:154;;;2789:6;2775:21;;;;;2081:723;;;;:::o;40119:267::-;40164:4;40377:1;40372;40362:6;40238:9;40287:1;40272:12;:16;;;;:::i;:::-;40262:27;40304:15;40334:12;:10;:12::i;:::-;40207:150;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40197:161;;;;;;40189:170;;:179;40188:185;;;;:::i;:::-;:190;40181:197;;40119:267;:::o;35944:159::-;;;;;:::o;36515:158::-;;;;;:::o;29115:1400::-;29238:20;29261:12;;29238:35;;29306:1;29292:16;;:2;:16;;;;29284:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29491:21;29499:12;29491:7;:21::i;:::-;29490:22;29482:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29577:12;29565:8;:24;;29557:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29641:61;29671:1;29675:2;29679:12;29693:8;29641:21;:61::i;:::-;29715:30;29748:12;:16;29761:2;29748:16;;;;;;;;;;;;;;;29715:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29794:135;;;;;;;;29850:8;29820:11;:19;;;:39;;;;:::i;:::-;29794:135;;;;;;29909:8;29874:11;:24;;;:44;;;;:::i;:::-;29794:135;;;;;29775:12;:16;29788:2;29775:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29968:43;;;;;;;;29983:2;29968:43;;;;;;29994:15;29968:43;;;;;29940:11;:25;29952:12;29940:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30024:20;30047:12;30024:35;;30077:9;30072:325;30096:8;30092:1;:12;30072:325;;;30156:12;30152:2;30131:38;;30148:1;30131:38;;;;;;;;;;;;30210:59;30241:1;30245:2;30249:12;30263:5;30210:22;:59::i;:::-;30184:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;30371:14;;;;;:::i;:::-;;;;30106:3;;;;;:::i;:::-;;;;30072:325;;;;30424:12;30409;:27;;;;30447:60;30476:1;30480:2;30484:12;30498:8;30447:20;:60::i;:::-;29115:1400;;;;;;:::o;18359:813::-;18469:7;18494:20;18517:4;18494:27;;18537:9;18532:603;18556:5;:12;18552:1;:16;18532:603;;;18590:20;18613:5;18619:1;18613:8;;;;;;;;;;;;;;;;;;;;;;18590:31;;18656:12;18640;:28;18636:488;;18832:12;18846;18815:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18783:95;;;;;;18768:110;;18636:488;;;19062:12;19076;19045:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19013:95;;;;;;18998:110;;18636:488;18532:603;18570:3;;;;;:::i;:::-;;;;18532:603;;;;19152:12;19145:19;;;18359:813;;;;:::o;3895:196::-;3955:4;3972:12;4039:7;4027:20;4019:28;;4082:1;4075:4;:8;4068:15;;;3895:196;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;653:343::-;;755:65;771:48;812:6;771:48;:::i;:::-;755:65;:::i;:::-;746:74;;843:6;836:5;829:21;881:4;874:5;870:16;919:3;910:6;905:3;901:16;898:25;895:2;;;936:1;933;926:12;895:2;949:41;983:6;978:3;973;949:41;:::i;:::-;736:260;;;;;;:::o;1002:345::-;;1105:66;1121:49;1163:6;1121:49;:::i;:::-;1105:66;:::i;:::-;1096:75;;1194:6;1187:5;1180:21;1232:4;1225:5;1221:16;1270:3;1261:6;1256:3;1252:16;1249:25;1246:2;;;1287:1;1284;1277:12;1246:2;1300:41;1334:6;1329:3;1324;1300:41;:::i;:::-;1086:261;;;;;;:::o;1353:139::-;;1437:6;1424:20;1415:29;;1453:33;1480:5;1453:33;:::i;:::-;1405:87;;;;:::o;1515:303::-;;1635:3;1628:4;1620:6;1616:17;1612:27;1602:2;;1653:1;1650;1643:12;1602:2;1693:6;1680:20;1718:94;1808:3;1800:6;1793:4;1785:6;1781:17;1718:94;:::i;:::-;1709:103;;1592:226;;;;;:::o;1824:133::-;;1905:6;1892:20;1883:29;;1921:30;1945:5;1921:30;:::i;:::-;1873:84;;;;:::o;1963:139::-;;2047:6;2034:20;2025:29;;2063:33;2090:5;2063:33;:::i;:::-;2015:87;;;;:::o;2108:137::-;;2191:6;2178:20;2169:29;;2207:32;2233:5;2207:32;:::i;:::-;2159:86;;;;:::o;2251:141::-;;2338:6;2332:13;2323:22;;2354:32;2380:5;2354:32;:::i;:::-;2313:79;;;;:::o;2411:271::-;;2515:3;2508:4;2500:6;2496:17;2492:27;2482:2;;2533:1;2530;2523:12;2482:2;2573:6;2560:20;2598:78;2672:3;2664:6;2657:4;2649:6;2645:17;2598:78;:::i;:::-;2589:87;;2472:210;;;;;:::o;2702:273::-;;2807:3;2800:4;2792:6;2788:17;2784:27;2774:2;;2825:1;2822;2815:12;2774:2;2865:6;2852:20;2890:79;2965:3;2957:6;2950:4;2942:6;2938:17;2890:79;:::i;:::-;2881:88;;2764:211;;;;;:::o;2981:139::-;;3065:6;3052:20;3043:29;;3081:33;3108:5;3081:33;:::i;:::-;3033:87;;;;:::o;3126:262::-;;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3250:1;3247;3240:12;3202:2;3293:1;3318:53;3363:7;3354:6;3343:9;3339:22;3318:53;:::i;:::-;3308:63;;3264:117;3192:196;;;;:::o;3394:407::-;;;3519:2;3507:9;3498:7;3494:23;3490:32;3487:2;;;3535:1;3532;3525:12;3487:2;3578:1;3603:53;3648:7;3639:6;3628:9;3624:22;3603:53;:::i;:::-;3593:63;;3549:117;3705:2;3731:53;3776:7;3767:6;3756:9;3752:22;3731:53;:::i;:::-;3721:63;;3676:118;3477:324;;;;;:::o;3807:552::-;;;;3949:2;3937:9;3928:7;3924:23;3920:32;3917:2;;;3965:1;3962;3955:12;3917:2;4008:1;4033:53;4078:7;4069:6;4058:9;4054:22;4033:53;:::i;:::-;4023:63;;3979:117;4135:2;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4106:118;4263:2;4289:53;4334:7;4325:6;4314:9;4310:22;4289:53;:::i;:::-;4279:63;;4234:118;3907:452;;;;;:::o;4365:809::-;;;;;4533:3;4521:9;4512:7;4508:23;4504:33;4501:2;;;4550:1;4547;4540:12;4501:2;4593:1;4618:53;4663:7;4654:6;4643:9;4639:22;4618:53;:::i;:::-;4608:63;;4564:117;4720:2;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4691:118;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;5004:2;4993:9;4989:18;4976:32;5035:18;5027:6;5024:30;5021:2;;;5067:1;5064;5057:12;5021:2;5095:62;5149:7;5140:6;5129:9;5125:22;5095:62;:::i;:::-;5085:72;;4947:220;4491:683;;;;;;;:::o;5180:401::-;;;5302:2;5290:9;5281:7;5277:23;5273:32;5270:2;;;5318:1;5315;5308:12;5270:2;5361:1;5386:53;5431:7;5422:6;5411:9;5407:22;5386:53;:::i;:::-;5376:63;;5332:117;5488:2;5514:50;5556:7;5547:6;5536:9;5532:22;5514:50;:::i;:::-;5504:60;;5459:115;5260:321;;;;;:::o;5587:407::-;;;5712:2;5700:9;5691:7;5687:23;5683:32;5680:2;;;5728:1;5725;5718:12;5680:2;5771:1;5796:53;5841:7;5832:6;5821:9;5817:22;5796:53;:::i;:::-;5786:63;;5742:117;5898:2;5924:53;5969:7;5960:6;5949:9;5945:22;5924:53;:::i;:::-;5914:63;;5869:118;5670:324;;;;;:::o;6000:405::-;;6133:2;6121:9;6112:7;6108:23;6104:32;6101:2;;;6149:1;6146;6139:12;6101:2;6220:1;6209:9;6205:17;6192:31;6250:18;6242:6;6239:30;6236:2;;;6282:1;6279;6272:12;6236:2;6310:78;6380:7;6371:6;6360:9;6356:22;6310:78;:::i;:::-;6300:88;;6163:235;6091:314;;;;:::o;6411:262::-;;6519:2;6507:9;6498:7;6494:23;6490:32;6487:2;;;6535:1;6532;6525:12;6487:2;6578:1;6603:53;6648:7;6639:6;6628:9;6624:22;6603:53;:::i;:::-;6593:63;;6549:117;6477:196;;;;:::o;6679:260::-;;6786:2;6774:9;6765:7;6761:23;6757:32;6754:2;;;6802:1;6799;6792:12;6754:2;6845:1;6870:52;6914:7;6905:6;6894:9;6890:22;6870:52;:::i;:::-;6860:62;;6816:116;6744:195;;;;:::o;6945:282::-;;7063:2;7051:9;7042:7;7038:23;7034:32;7031:2;;;7079:1;7076;7069:12;7031:2;7122:1;7147:63;7202:7;7193:6;7182:9;7178:22;7147:63;:::i;:::-;7137:73;;7093:127;7021:206;;;;:::o;7233:375::-;;7351:2;7339:9;7330:7;7326:23;7322:32;7319:2;;;7367:1;7364;7357:12;7319:2;7438:1;7427:9;7423:17;7410:31;7468:18;7460:6;7457:30;7454:2;;;7500:1;7497;7490:12;7454:2;7528:63;7583:7;7574:6;7563:9;7559:22;7528:63;:::i;:::-;7518:73;;7381:220;7309:299;;;;:::o;7614:262::-;;7722:2;7710:9;7701:7;7697:23;7693:32;7690:2;;;7738:1;7735;7728:12;7690:2;7781:1;7806:53;7851:7;7842:6;7831:9;7827:22;7806:53;:::i;:::-;7796:63;;7752:117;7680:196;;;;:::o;7882:118::-;7969:24;7987:5;7969:24;:::i;:::-;7964:3;7957:37;7947:53;;:::o;8006:157::-;8111:45;8131:24;8149:5;8131:24;:::i;:::-;8111:45;:::i;:::-;8106:3;8099:58;8089:74;;:::o;8169:109::-;8250:21;8265:5;8250:21;:::i;:::-;8245:3;8238:34;8228:50;;:::o;8284:157::-;8389:45;8409:24;8427:5;8409:24;:::i;:::-;8389:45;:::i;:::-;8384:3;8377:58;8367:74;;:::o;8447:360::-;;8561:38;8593:5;8561:38;:::i;:::-;8615:70;8678:6;8673:3;8615:70;:::i;:::-;8608:77;;8694:52;8739:6;8734:3;8727:4;8720:5;8716:16;8694:52;:::i;:::-;8771:29;8793:6;8771:29;:::i;:::-;8766:3;8762:39;8755:46;;8537:270;;;;;:::o;8813:364::-;;8929:39;8962:5;8929:39;:::i;:::-;8984:71;9048:6;9043:3;8984:71;:::i;:::-;8977:78;;9064:52;9109:6;9104:3;9097:4;9090:5;9086:16;9064:52;:::i;:::-;9141:29;9163:6;9141:29;:::i;:::-;9136:3;9132:39;9125:46;;8905:272;;;;;:::o;9183:377::-;;9317:39;9350:5;9317:39;:::i;:::-;9372:89;9454:6;9449:3;9372:89;:::i;:::-;9365:96;;9470:52;9515:6;9510:3;9503:4;9496:5;9492:16;9470:52;:::i;:::-;9547:6;9542:3;9538:16;9531:23;;9293:267;;;;;:::o;9566:366::-;;9729:67;9793:2;9788:3;9729:67;:::i;:::-;9722:74;;9805:93;9894:3;9805:93;:::i;:::-;9923:2;9918:3;9914:12;9907:19;;9712:220;;;:::o;9938:366::-;;10101:67;10165:2;10160:3;10101:67;:::i;:::-;10094:74;;10177:93;10266:3;10177:93;:::i;:::-;10295:2;10290:3;10286:12;10279:19;;10084:220;;;:::o;10310:366::-;;10473:67;10537:2;10532:3;10473:67;:::i;:::-;10466:74;;10549:93;10638:3;10549:93;:::i;:::-;10667:2;10662:3;10658:12;10651:19;;10456:220;;;:::o;10682:366::-;;10845:67;10909:2;10904:3;10845:67;:::i;:::-;10838:74;;10921:93;11010:3;10921:93;:::i;:::-;11039:2;11034:3;11030:12;11023:19;;10828:220;;;:::o;11054:366::-;;11217:67;11281:2;11276:3;11217:67;:::i;:::-;11210:74;;11293:93;11382:3;11293:93;:::i;:::-;11411:2;11406:3;11402:12;11395:19;;11200:220;;;:::o;11426:366::-;;11589:67;11653:2;11648:3;11589:67;:::i;:::-;11582:74;;11665:93;11754:3;11665:93;:::i;:::-;11783:2;11778:3;11774:12;11767:19;;11572:220;;;:::o;11798:366::-;;11961:67;12025:2;12020:3;11961:67;:::i;:::-;11954:74;;12037:93;12126:3;12037:93;:::i;:::-;12155:2;12150:3;12146:12;12139:19;;11944:220;;;:::o;12170:366::-;;12333:67;12397:2;12392:3;12333:67;:::i;:::-;12326:74;;12409:93;12498:3;12409:93;:::i;:::-;12527:2;12522:3;12518:12;12511:19;;12316:220;;;:::o;12542:366::-;;12705:67;12769:2;12764:3;12705:67;:::i;:::-;12698:74;;12781:93;12870:3;12781:93;:::i;:::-;12899:2;12894:3;12890:12;12883:19;;12688:220;;;:::o;12914:366::-;;13077:67;13141:2;13136:3;13077:67;:::i;:::-;13070:74;;13153:93;13242:3;13153:93;:::i;:::-;13271:2;13266:3;13262:12;13255:19;;13060:220;;;:::o;13286:366::-;;13449:67;13513:2;13508:3;13449:67;:::i;:::-;13442:74;;13525:93;13614:3;13525:93;:::i;:::-;13643:2;13638:3;13634:12;13627:19;;13432:220;;;:::o;13658:366::-;;13821:67;13885:2;13880:3;13821:67;:::i;:::-;13814:74;;13897:93;13986:3;13897:93;:::i;:::-;14015:2;14010:3;14006:12;13999:19;;13804:220;;;:::o;14030:366::-;;14193:67;14257:2;14252:3;14193:67;:::i;:::-;14186:74;;14269:93;14358:3;14269:93;:::i;:::-;14387:2;14382:3;14378:12;14371:19;;14176:220;;;:::o;14402:366::-;;14565:67;14629:2;14624:3;14565:67;:::i;:::-;14558:74;;14641:93;14730:3;14641:93;:::i;:::-;14759:2;14754:3;14750:12;14743:19;;14548:220;;;:::o;14774:366::-;;14937:67;15001:2;14996:3;14937:67;:::i;:::-;14930:74;;15013:93;15102:3;15013:93;:::i;:::-;15131:2;15126:3;15122:12;15115:19;;14920:220;;;:::o;15146:366::-;;15309:67;15373:2;15368:3;15309:67;:::i;:::-;15302:74;;15385:93;15474:3;15385:93;:::i;:::-;15503:2;15498:3;15494:12;15487:19;;15292:220;;;:::o;15518:366::-;;15681:67;15745:2;15740:3;15681:67;:::i;:::-;15674:74;;15757:93;15846:3;15757:93;:::i;:::-;15875:2;15870:3;15866:12;15859:19;;15664:220;;;:::o;15890:366::-;;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;16036:220;;;:::o;16262:366::-;;16425:67;16489:2;16484:3;16425:67;:::i;:::-;16418:74;;16501:93;16590:3;16501:93;:::i;:::-;16619:2;16614:3;16610:12;16603:19;;16408:220;;;:::o;16634:366::-;;16797:67;16861:2;16856:3;16797:67;:::i;:::-;16790:74;;16873:93;16962:3;16873:93;:::i;:::-;16991:2;16986:3;16982:12;16975:19;;16780:220;;;:::o;17006:366::-;;17169:67;17233:2;17228:3;17169:67;:::i;:::-;17162:74;;17245:93;17334:3;17245:93;:::i;:::-;17363:2;17358:3;17354:12;17347:19;;17152:220;;;:::o;17378:366::-;;17541:67;17605:2;17600:3;17541:67;:::i;:::-;17534:74;;17617:93;17706:3;17617:93;:::i;:::-;17735:2;17730:3;17726:12;17719:19;;17524:220;;;:::o;17750:366::-;;17913:67;17977:2;17972:3;17913:67;:::i;:::-;17906:74;;17989:93;18078:3;17989:93;:::i;:::-;18107:2;18102:3;18098:12;18091:19;;17896:220;;;:::o;18122:366::-;;18285:67;18349:2;18344:3;18285:67;:::i;:::-;18278:74;;18361:93;18450:3;18361:93;:::i;:::-;18479:2;18474:3;18470:12;18463:19;;18268:220;;;:::o;18494:366::-;;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18640:220;;;:::o;18866:366::-;;19029:67;19093:2;19088:3;19029:67;:::i;:::-;19022:74;;19105:93;19194:3;19105:93;:::i;:::-;19223:2;19218:3;19214:12;19207:19;;19012:220;;;:::o;19238:366::-;;19401:67;19465:2;19460:3;19401:67;:::i;:::-;19394:74;;19477:93;19566:3;19477:93;:::i;:::-;19595:2;19590:3;19586:12;19579:19;;19384:220;;;:::o;19610:366::-;;19773:67;19837:2;19832:3;19773:67;:::i;:::-;19766:74;;19849:93;19938:3;19849:93;:::i;:::-;19967:2;19962:3;19958:12;19951:19;;19756:220;;;:::o;19982:366::-;;20145:67;20209:2;20204:3;20145:67;:::i;:::-;20138:74;;20221:93;20310:3;20221:93;:::i;:::-;20339:2;20334:3;20330:12;20323:19;;20128:220;;;:::o;20354:118::-;20441:24;20459:5;20441:24;:::i;:::-;20436:3;20429:37;20419:53;;:::o;20478:157::-;20583:45;20603:24;20621:5;20603:24;:::i;:::-;20583:45;:::i;:::-;20578:3;20571:58;20561:74;;:::o;20641:256::-;;20768:75;20839:3;20830:6;20768:75;:::i;:::-;20868:2;20863:3;20859:12;20852:19;;20888:3;20881:10;;20757:140;;;;:::o;20903:679::-;;21114:75;21185:3;21176:6;21114:75;:::i;:::-;21214:2;21209:3;21205:12;21198:19;;21227:75;21298:3;21289:6;21227:75;:::i;:::-;21327:2;21322:3;21318:12;21311:19;;21340:75;21411:3;21402:6;21340:75;:::i;:::-;21440:2;21435:3;21431:12;21424:19;;21453:75;21524:3;21515:6;21453:75;:::i;:::-;21553:2;21548:3;21544:12;21537:19;;21573:3;21566:10;;21103:479;;;;;;;:::o;21588:397::-;;21743:75;21814:3;21805:6;21743:75;:::i;:::-;21843:2;21838:3;21834:12;21827:19;;21856:75;21927:3;21918:6;21856:75;:::i;:::-;21956:2;21951:3;21947:12;21940:19;;21976:3;21969:10;;21732:253;;;;;:::o;21991:435::-;;22193:95;22284:3;22275:6;22193:95;:::i;:::-;22186:102;;22305:95;22396:3;22387:6;22305:95;:::i;:::-;22298:102;;22417:3;22410:10;;22175:251;;;;;:::o;22432:222::-;;22563:2;22552:9;22548:18;22540:26;;22576:71;22644:1;22633:9;22629:17;22620:6;22576:71;:::i;:::-;22530:124;;;;:::o;22660:640::-;;22893:3;22882:9;22878:19;22870:27;;22907:71;22975:1;22964:9;22960:17;22951:6;22907:71;:::i;:::-;22988:72;23056:2;23045:9;23041:18;23032:6;22988:72;:::i;:::-;23070;23138:2;23127:9;23123:18;23114:6;23070:72;:::i;:::-;23189:9;23183:4;23179:20;23174:2;23163:9;23159:18;23152:48;23217:76;23288:4;23279:6;23217:76;:::i;:::-;23209:84;;22860:440;;;;;;;:::o;23306:210::-;;23431:2;23420:9;23416:18;23408:26;;23444:65;23506:1;23495:9;23491:17;23482:6;23444:65;:::i;:::-;23398:118;;;;:::o;23522:313::-;;23673:2;23662:9;23658:18;23650:26;;23722:9;23716:4;23712:20;23708:1;23697:9;23693:17;23686:47;23750:78;23823:4;23814:6;23750:78;:::i;:::-;23742:86;;23640:195;;;;:::o;23841:419::-;;24045:2;24034:9;24030:18;24022:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24122:131;24248:4;24122:131;:::i;:::-;24114:139;;24012:248;;;:::o;24266:419::-;;24470:2;24459:9;24455:18;24447:26;;24519:9;24513:4;24509:20;24505:1;24494:9;24490:17;24483:47;24547:131;24673:4;24547:131;:::i;:::-;24539:139;;24437:248;;;:::o;24691:419::-;;24895:2;24884:9;24880:18;24872:26;;24944:9;24938:4;24934:20;24930:1;24919:9;24915:17;24908:47;24972:131;25098:4;24972:131;:::i;:::-;24964:139;;24862:248;;;:::o;25116:419::-;;25320:2;25309:9;25305:18;25297:26;;25369:9;25363:4;25359:20;25355:1;25344:9;25340:17;25333:47;25397:131;25523:4;25397:131;:::i;:::-;25389:139;;25287:248;;;:::o;25541:419::-;;25745:2;25734:9;25730:18;25722:26;;25794:9;25788:4;25784:20;25780:1;25769:9;25765:17;25758:47;25822:131;25948:4;25822:131;:::i;:::-;25814:139;;25712:248;;;:::o;25966:419::-;;26170:2;26159:9;26155:18;26147:26;;26219:9;26213:4;26209:20;26205:1;26194:9;26190:17;26183:47;26247:131;26373:4;26247:131;:::i;:::-;26239:139;;26137:248;;;:::o;26391:419::-;;26595:2;26584:9;26580:18;26572:26;;26644:9;26638:4;26634:20;26630:1;26619:9;26615:17;26608:47;26672:131;26798:4;26672:131;:::i;:::-;26664:139;;26562:248;;;:::o;26816:419::-;;27020:2;27009:9;27005:18;26997:26;;27069:9;27063:4;27059:20;27055:1;27044:9;27040:17;27033:47;27097:131;27223:4;27097:131;:::i;:::-;27089:139;;26987:248;;;:::o;27241:419::-;;27445:2;27434:9;27430:18;27422:26;;27494:9;27488:4;27484:20;27480:1;27469:9;27465:17;27458:47;27522:131;27648:4;27522:131;:::i;:::-;27514:139;;27412:248;;;:::o;27666:419::-;;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27837:248;;;:::o;28091:419::-;;28295:2;28284:9;28280:18;28272:26;;28344:9;28338:4;28334:20;28330:1;28319:9;28315:17;28308:47;28372:131;28498:4;28372:131;:::i;:::-;28364:139;;28262:248;;;:::o;28516:419::-;;28720:2;28709:9;28705:18;28697:26;;28769:9;28763:4;28759:20;28755:1;28744:9;28740:17;28733:47;28797:131;28923:4;28797:131;:::i;:::-;28789:139;;28687:248;;;:::o;28941:419::-;;29145:2;29134:9;29130:18;29122:26;;29194:9;29188:4;29184:20;29180:1;29169:9;29165:17;29158:47;29222:131;29348:4;29222:131;:::i;:::-;29214:139;;29112:248;;;:::o;29366:419::-;;29570:2;29559:9;29555:18;29547:26;;29619:9;29613:4;29609:20;29605:1;29594:9;29590:17;29583:47;29647:131;29773:4;29647:131;:::i;:::-;29639:139;;29537:248;;;:::o;29791:419::-;;29995:2;29984:9;29980:18;29972:26;;30044:9;30038:4;30034:20;30030:1;30019:9;30015:17;30008:47;30072:131;30198:4;30072:131;:::i;:::-;30064:139;;29962:248;;;:::o;30216:419::-;;30420:2;30409:9;30405:18;30397:26;;30469:9;30463:4;30459:20;30455:1;30444:9;30440:17;30433:47;30497:131;30623:4;30497:131;:::i;:::-;30489:139;;30387:248;;;:::o;30641:419::-;;30845:2;30834:9;30830:18;30822:26;;30894:9;30888:4;30884:20;30880:1;30869:9;30865:17;30858:47;30922:131;31048:4;30922:131;:::i;:::-;30914:139;;30812:248;;;:::o;31066:419::-;;31270:2;31259:9;31255:18;31247:26;;31319:9;31313:4;31309:20;31305:1;31294:9;31290:17;31283:47;31347:131;31473:4;31347:131;:::i;:::-;31339:139;;31237:248;;;:::o;31491:419::-;;31695:2;31684:9;31680:18;31672:26;;31744:9;31738:4;31734:20;31730:1;31719:9;31715:17;31708:47;31772:131;31898:4;31772:131;:::i;:::-;31764:139;;31662:248;;;:::o;31916:419::-;;32120:2;32109:9;32105:18;32097:26;;32169:9;32163:4;32159:20;32155:1;32144:9;32140:17;32133:47;32197:131;32323:4;32197:131;:::i;:::-;32189:139;;32087:248;;;:::o;32341:419::-;;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32512:248;;;:::o;32766:419::-;;32970:2;32959:9;32955:18;32947:26;;33019:9;33013:4;33009:20;33005:1;32994:9;32990:17;32983:47;33047:131;33173:4;33047:131;:::i;:::-;33039:139;;32937:248;;;:::o;33191:419::-;;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33362:248;;;:::o;33616:419::-;;33820:2;33809:9;33805:18;33797:26;;33869:9;33863:4;33859:20;33855:1;33844:9;33840:17;33833:47;33897:131;34023:4;33897:131;:::i;:::-;33889:139;;33787:248;;;:::o;34041:419::-;;34245:2;34234:9;34230:18;34222:26;;34294:9;34288:4;34284:20;34280:1;34269:9;34265:17;34258:47;34322:131;34448:4;34322:131;:::i;:::-;34314:139;;34212:248;;;:::o;34466:419::-;;34670:2;34659:9;34655:18;34647:26;;34719:9;34713:4;34709:20;34705:1;34694:9;34690:17;34683:47;34747:131;34873:4;34747:131;:::i;:::-;34739:139;;34637:248;;;:::o;34891:419::-;;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;35062:248;;;:::o;35316:419::-;;35520:2;35509:9;35505:18;35497:26;;35569:9;35563:4;35559:20;35555:1;35544:9;35540:17;35533:47;35597:131;35723:4;35597:131;:::i;:::-;35589:139;;35487:248;;;:::o;35741:419::-;;35945:2;35934:9;35930:18;35922:26;;35994:9;35988:4;35984:20;35980:1;35969:9;35965:17;35958:47;36022:131;36148:4;36022:131;:::i;:::-;36014:139;;35912:248;;;:::o;36166:222::-;;36297:2;36286:9;36282:18;36274:26;;36310:71;36378:1;36367:9;36363:17;36354:6;36310:71;:::i;:::-;36264:124;;;;:::o;36394:129::-;;36455:20;;:::i;:::-;36445:30;;36484:33;36512:4;36504:6;36484:33;:::i;:::-;36435:88;;;:::o;36529:75::-;;36595:2;36589:9;36579:19;;36569:35;:::o;36610:311::-;;36777:18;36769:6;36766:30;36763:2;;;36799:18;;:::i;:::-;36763:2;36849:4;36841:6;36837:17;36829:25;;36909:4;36903;36899:15;36891:23;;36692:229;;;:::o;36927:307::-;;37078:18;37070:6;37067:30;37064:2;;;37100:18;;:::i;:::-;37064:2;37138:29;37160:6;37138:29;:::i;:::-;37130:37;;37222:4;37216;37212:15;37204:23;;36993:241;;;:::o;37240:308::-;;37392:18;37384:6;37381:30;37378:2;;;37414:18;;:::i;:::-;37378:2;37452:29;37474:6;37452:29;:::i;:::-;37444:37;;37536:4;37530;37526:15;37518:23;;37307:241;;;:::o;37554:98::-;;37639:5;37633:12;37623:22;;37612:40;;;:::o;37658:99::-;;37744:5;37738:12;37728:22;;37717:40;;;:::o;37763:168::-;;37880:6;37875:3;37868:19;37920:4;37915:3;37911:14;37896:29;;37858:73;;;;:::o;37937:169::-;;38055:6;38050:3;38043:19;38095:4;38090:3;38086:14;38071:29;;38033:73;;;;:::o;38112:148::-;;38251:3;38236:18;;38226:34;;;;:::o;38266:273::-;;38325:20;38343:1;38325:20;:::i;:::-;38320:25;;38359:20;38377:1;38359:20;:::i;:::-;38354:25;;38481:1;38445:34;38441:42;38438:1;38435:49;38432:2;;;38487:18;;:::i;:::-;38432:2;38531:1;38528;38524:9;38517:16;;38310:229;;;;:::o;38545:305::-;;38604:20;38622:1;38604:20;:::i;:::-;38599:25;;38638:20;38656:1;38638:20;:::i;:::-;38633:25;;38792:1;38724:66;38720:74;38717:1;38714:81;38711:2;;;38798:18;;:::i;:::-;38711:2;38842:1;38839;38835:9;38828:16;;38589:261;;;;:::o;38856:185::-;;38913:20;38931:1;38913:20;:::i;:::-;38908:25;;38947:20;38965:1;38947:20;:::i;:::-;38942:25;;38986:1;38976:2;;38991:18;;:::i;:::-;38976:2;39033:1;39030;39026:9;39021:14;;38898:143;;;;:::o;39047:348::-;;39110:20;39128:1;39110:20;:::i;:::-;39105:25;;39144:20;39162:1;39144:20;:::i;:::-;39139:25;;39332:1;39264:66;39260:74;39257:1;39254:81;39249:1;39242:9;39235:17;39231:105;39228:2;;;39339:18;;:::i;:::-;39228:2;39387:1;39384;39380:9;39369:20;;39095:300;;;;:::o;39401:191::-;;39461:20;39479:1;39461:20;:::i;:::-;39456:25;;39495:20;39513:1;39495:20;:::i;:::-;39490:25;;39534:1;39531;39528:8;39525:2;;;39539:18;;:::i;:::-;39525:2;39584:1;39581;39577:9;39569:17;;39446:146;;;;:::o;39598:191::-;;39658:20;39676:1;39658:20;:::i;:::-;39653:25;;39692:20;39710:1;39692:20;:::i;:::-;39687:25;;39731:1;39728;39725:8;39722:2;;;39736:18;;:::i;:::-;39722:2;39781:1;39778;39774:9;39766:17;;39643:146;;;;:::o;39795:96::-;;39861:24;39879:5;39861:24;:::i;:::-;39850:35;;39840:51;;;:::o;39897:90::-;;39974:5;39967:13;39960:21;39949:32;;39939:48;;;:::o;39993:77::-;;40059:5;40048:16;;40038:32;;;:::o;40076:149::-;;40152:66;40145:5;40141:78;40130:89;;40120:105;;;:::o;40231:118::-;;40308:34;40301:5;40297:46;40286:57;;40276:73;;;:::o;40355:126::-;;40432:42;40425:5;40421:54;40410:65;;40400:81;;;:::o;40487:77::-;;40553:5;40542:16;;40532:32;;;:::o;40570:154::-;40654:6;40649:3;40644;40631:30;40716:1;40707:6;40702:3;40698:16;40691:27;40621:103;;;:::o;40730:307::-;40798:1;40808:113;40822:6;40819:1;40816:13;40808:113;;;40907:1;40902:3;40898:11;40892:18;40888:1;40883:3;40879:11;40872:39;40844:2;40841:1;40837:10;40832:15;;40808:113;;;40939:6;40936:1;40933:13;40930:2;;;41019:1;41010:6;41005:3;41001:16;40994:27;40930:2;40779:258;;;;:::o;41043:171::-;;41105:24;41123:5;41105:24;:::i;:::-;41096:33;;41151:4;41144:5;41141:15;41138:2;;;41159:18;;:::i;:::-;41138:2;41206:1;41199:5;41195:13;41188:20;;41086:128;;;:::o;41220:320::-;;41301:1;41295:4;41291:12;41281:22;;41348:1;41342:4;41338:12;41369:18;41359:2;;41425:4;41417:6;41413:17;41403:27;;41359:2;41487;41479:6;41476:14;41456:18;41453:38;41450:2;;;41506:18;;:::i;:::-;41450:2;41271:269;;;;:::o;41546:281::-;41629:27;41651:4;41629:27;:::i;:::-;41621:6;41617:40;41759:6;41747:10;41744:22;41723:18;41711:10;41708:34;41705:62;41702:2;;;41770:18;;:::i;:::-;41702:2;41810:10;41806:2;41799:22;41589:238;;;:::o;41833:233::-;;41895:24;41913:5;41895:24;:::i;:::-;41886:33;;41941:66;41934:5;41931:77;41928:2;;;42011:18;;:::i;:::-;41928:2;42058:1;42051:5;42047:13;42040:20;;41876:190;;;:::o;42072:100::-;;42140:26;42160:5;42140:26;:::i;:::-;42129:37;;42119:53;;;:::o;42178:79::-;;42246:5;42235:16;;42225:32;;;:::o;42263:94::-;;42331:20;42345:5;42331:20;:::i;:::-;42320:31;;42310:47;;;:::o;42363:79::-;;42431:5;42420:16;;42410:32;;;:::o;42448:176::-;;42497:20;42515:1;42497:20;:::i;:::-;42492:25;;42531:20;42549:1;42531:20;:::i;:::-;42526:25;;42570:1;42560:2;;42575:18;;:::i;:::-;42560:2;42616:1;42613;42609:9;42604:14;;42482:142;;;;:::o;42630:180::-;42678:77;42675:1;42668:88;42775:4;42772:1;42765:15;42799:4;42796:1;42789:15;42816:180;42864:77;42861:1;42854:88;42961:4;42958:1;42951:15;42985:4;42982:1;42975:15;43002:180;43050:77;43047:1;43040:88;43147:4;43144:1;43137:15;43171:4;43168:1;43161:15;43188:180;43236:77;43233:1;43226:88;43333:4;43330:1;43323:15;43357:4;43354:1;43347:15;43374:102;;43466:2;43462:7;43457:2;43450:5;43446:14;43442:28;43432:38;;43422:54;;;:::o;43482:94::-;;43563:5;43559:2;43555:14;43534:35;;43524:52;;;:::o;43582:221::-;43722:34;43718:1;43710:6;43706:14;43699:58;43791:4;43786:2;43778:6;43774:15;43767:29;43688:115;:::o;43809:225::-;43949:34;43945:1;43937:6;43933:14;43926:58;44018:8;44013:2;44005:6;44001:15;43994:33;43915:119;:::o;44040:229::-;44180:34;44176:1;44168:6;44164:14;44157:58;44249:12;44244:2;44236:6;44232:15;44225:37;44146:123;:::o;44275:222::-;44415:34;44411:1;44403:6;44399:14;44392:58;44484:5;44479:2;44471:6;44467:15;44460:30;44381:116;:::o;44503:224::-;44643:34;44639:1;44631:6;44627:14;44620:58;44712:7;44707:2;44699:6;44695:15;44688:32;44609:118;:::o;44733:170::-;44873:22;44869:1;44861:6;44857:14;44850:46;44839:64;:::o;44909:225::-;45049:34;45045:1;45037:6;45033:14;45026:58;45118:8;45113:2;45105:6;45101:15;45094:33;45015:119;:::o;45140:176::-;45280:28;45276:1;45268:6;45264:14;45257:52;45246:70;:::o;45322:173::-;45462:25;45458:1;45450:6;45446:14;45439:49;45428:67;:::o;45501:244::-;45641:34;45637:1;45629:6;45625:14;45618:58;45710:27;45705:2;45697:6;45693:15;45686:52;45607:138;:::o;45751:230::-;45891:34;45887:1;45879:6;45875:14;45868:58;45960:13;45955:2;45947:6;45943:15;45936:38;45857:124;:::o;45987:163::-;46127:15;46123:1;46115:6;46111:14;46104:39;46093:57;:::o;46156:225::-;46296:34;46292:1;46284:6;46280:14;46273:58;46365:8;46360:2;46352:6;46348:15;46341:33;46262:119;:::o;46387:182::-;46527:34;46523:1;46515:6;46511:14;46504:58;46493:76;:::o;46575:234::-;46715:34;46711:1;46703:6;46699:14;46692:58;46784:17;46779:2;46771:6;46767:15;46760:42;46681:128;:::o;46815:176::-;46955:28;46951:1;46943:6;46939:14;46932:52;46921:70;:::o;46997:237::-;47137:34;47133:1;47125:6;47121:14;47114:58;47206:20;47201:2;47193:6;47189:15;47182:45;47103:131;:::o;47240:226::-;47380:34;47376:1;47368:6;47364:14;47357:58;47449:9;47444:2;47436:6;47432:15;47425:34;47346:120;:::o;47472:221::-;47612:34;47608:1;47600:6;47596:14;47589:58;47681:4;47676:2;47668:6;47664:15;47657:29;47578:115;:::o;47699:177::-;47839:29;47835:1;47827:6;47823:14;47816:53;47805:71;:::o;47882:238::-;48022:34;48018:1;48010:6;48006:14;47999:58;48091:21;48086:2;48078:6;48074:15;48067:46;47988:132;:::o;48126:179::-;48266:31;48262:1;48254:6;48250:14;48243:55;48232:73;:::o;48311:220::-;48451:34;48447:1;48439:6;48435:14;48428:58;48520:3;48515:2;48507:6;48503:15;48496:28;48417:114;:::o;48537:163::-;48677:15;48673:1;48665:6;48661:14;48654:39;48643:57;:::o;48706:233::-;48846:34;48842:1;48834:6;48830:14;48823:58;48915:16;48910:2;48902:6;48898:15;48891:41;48812:127;:::o;48945:181::-;49085:33;49081:1;49073:6;49069:14;49062:57;49051:75;:::o;49132:234::-;49272:34;49268:1;49260:6;49256:14;49249:58;49341:17;49336:2;49328:6;49324:15;49317:42;49238:128;:::o;49372:232::-;49512:34;49508:1;49500:6;49496:14;49489:58;49581:15;49576:2;49568:6;49564:15;49557:40;49478:126;:::o;49610:221::-;49750:34;49746:1;49738:6;49734:14;49727:58;49819:4;49814:2;49806:6;49802:15;49795:29;49716:115;:::o;49837:122::-;49910:24;49928:5;49910:24;:::i;:::-;49903:5;49900:35;49890:2;;49949:1;49946;49939:12;49890:2;49880:79;:::o;49965:116::-;50035:21;50050:5;50035:21;:::i;:::-;50028:5;50025:32;50015:2;;50071:1;50068;50061:12;50015:2;50005:76;:::o;50087:122::-;50160:24;50178:5;50160:24;:::i;:::-;50153:5;50150:35;50140:2;;50199:1;50196;50189:12;50140:2;50130:79;:::o;50215:120::-;50287:23;50304:5;50287:23;:::i;:::-;50280:5;50277:34;50267:2;;50325:1;50322;50315:12;50267:2;50257:78;:::o;50341:122::-;50414:24;50432:5;50414:24;:::i;:::-;50407:5;50404:35;50394:2;;50453:1;50450;50443:12;50394:2;50384:79;:::o
Swarm Source
ipfs://cfdb9f51e36c1d34caab3b743b85c27458f2913226ff48280f1fc6a7937f499c
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.