More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,978 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Market It... | 21552113 | 22 days ago | IN | 0 ETH | 0.00327344 | ||||
Create Market It... | 21505017 | 28 days ago | IN | 0 ETH | 0.00118767 | ||||
Create Market It... | 21481231 | 32 days ago | IN | 0 ETH | 0.00111624 | ||||
Cancel Market It... | 21481218 | 32 days ago | IN | 0 ETH | 0.00046717 | ||||
Cancel Market It... | 21476997 | 32 days ago | IN | 0 ETH | 0.00035393 | ||||
Create Market It... | 21474557 | 32 days ago | IN | 0 ETH | 0.0011344 | ||||
Create Market It... | 21469002 | 33 days ago | IN | 0 ETH | 0.00162425 | ||||
Cancel Market It... | 21468995 | 33 days ago | IN | 0 ETH | 0.00071428 | ||||
Create Market It... | 21468979 | 33 days ago | IN | 0 ETH | 0.00158347 | ||||
Create Market It... | 21461410 | 34 days ago | IN | 0 ETH | 0.00052668 | ||||
Create Market It... | 21429542 | 39 days ago | IN | 0 ETH | 0.00324287 | ||||
Cancel Market It... | 21429530 | 39 days ago | IN | 0 ETH | 0.0013554 | ||||
Create Market It... | 21428646 | 39 days ago | IN | 0 ETH | 0.00265018 | ||||
Create Market It... | 21428624 | 39 days ago | IN | 0 ETH | 0.0023082 | ||||
Create Market It... | 21419055 | 40 days ago | IN | 0 ETH | 0.00157536 | ||||
Create Market It... | 21305938 | 56 days ago | IN | 0 ETH | 0.00221042 | ||||
Create Market It... | 21305934 | 56 days ago | IN | 0 ETH | 0.00208931 | ||||
Create Market It... | 21305933 | 56 days ago | IN | 0 ETH | 0.00208635 | ||||
Create Market It... | 21305932 | 56 days ago | IN | 0 ETH | 0.00212639 | ||||
Create Market It... | 21305928 | 56 days ago | IN | 0 ETH | 0.00207498 | ||||
Create Market It... | 21305926 | 56 days ago | IN | 0 ETH | 0.00206097 | ||||
Create Market It... | 21305924 | 56 days ago | IN | 0 ETH | 0.0020744 | ||||
Create Market It... | 21305920 | 56 days ago | IN | 0 ETH | 0.00210919 | ||||
Create Market It... | 21305916 | 56 days ago | IN | 0 ETH | 0.00217092 | ||||
Create Market It... | 21305826 | 56 days ago | IN | 0 ETH | 0.00235551 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20936528 | 108 days ago | 0.1736 ETH | ||||
20936528 | 108 days ago | 0.6944 ETH | ||||
18865503 | 397 days ago | 0.057 ETH | ||||
18865493 | 397 days ago | 0.057 ETH | ||||
17226954 | 627 days ago | 0.04275 ETH | ||||
16916699 | 671 days ago | 0.057 ETH | ||||
16916043 | 671 days ago | 0.04275 ETH | ||||
16806916 | 686 days ago | 0.2375 ETH | ||||
16604095 | 715 days ago | 0.0475 ETH | ||||
16455620 | 736 days ago | 0.00475 ETH | ||||
16455616 | 736 days ago | 0.00095 ETH | ||||
16350979 | 750 days ago | 0.057 ETH | ||||
16336383 | 752 days ago | 0.04085 ETH | ||||
16301658 | 757 days ago | 0.0475 ETH | ||||
16077603 | 789 days ago | 0.095 ETH | ||||
15863663 | 818 days ago | 0.076 ETH | ||||
15857519 | 819 days ago | 0.06175 ETH | ||||
15857516 | 819 days ago | 0.06175 ETH | ||||
15857500 | 819 days ago | 0.06175 ETH | ||||
15857496 | 819 days ago | 0.06175 ETH | ||||
15857492 | 819 days ago | 0.06175 ETH | ||||
15856075 | 819 days ago | 0.06175 ETH | ||||
15856070 | 819 days ago | 0.095 ETH | ||||
15856066 | 819 days ago | 0.095 ETH | ||||
15821987 | 824 days ago | 0.05 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ShiryoMarket
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ 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); } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll( address indexed account, address indexed operator, bool approved ); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Required interface of an ERC721 compliant contract. */ 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; } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ 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 make 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; } } // For future use to allow buyers to receive a discount depending on staking or other rules. interface IDiscountManager { function getDiscount(address buyer) external view returns (uint256 discount); } contract ShiryoMarket is IERC1155Receiver, ReentrancyGuard { using SafeMath for uint256; modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyClevel() { require(msg.sender == walletA || msg.sender == walletB || msg.sender == owner); _; } address walletA; address walletB; uint256 walletBPercentage = 20; using Counters for Counters.Counter; Counters.Counter public _itemIds; // Id for each individual item Counters.Counter private _itemsSold; // Number of items sold Counters.Counter private _itemsCancelled; // Number of items sold Counters.Counter private _offerIds; // Tracking offers address payable public owner; // The owner of the market contract address public discountManager = address(0x0); // a contract that can be callled to discover if there is a discount on the transaction fee. uint256 public saleFeePercentage = 5; // Percentage fee paid to team for each sale uint256 public accumulatedFee = 0; uint256 public volumeTraded = 0; // Total amount traded enum TokenType { ERC721, //0 ERC1155, //1 ERC20 //2 } constructor() { owner = payable(msg.sender); } struct MarketOffer { uint256 offerId; uint256 itemId; address payable bidder; uint256 offerAmount; uint256 offerTime; bool cancelled; bool accepted; } struct MarketItem { uint256 itemId; address tokenContract; TokenType tokenType; uint256 tokenId; // 0 If token is ERC20 uint256 amount; // 1 unless QTY of ERC20 address payable seller; address payable buyer; string category; uint256 price; bool isSold; bool cancelled; } mapping(uint256 => MarketItem) public idToMarketItem; mapping(uint256 => uint256[]) public itemIdToMarketOfferIds; mapping(uint256 => MarketOffer) public offerIdToMarketOffer; mapping(address => uint256[]) public bidderToMarketOfferIds; mapping(address => bool) public approvedSourceContracts; event MarketItemCreated( uint256 indexed itemId, address indexed tokenContract, uint256 indexed tokenId, uint256 amount, address seller, address owner, string category, uint256 price ); event MarketSaleCreated( uint256 indexed itemId, address indexed tokenContract, uint256 indexed tokenId, address seller, address buyer, string category, uint256 price ); event ItemOfferCreated( uint256 indexed itemId, address indexed tokenContract, address owner, address bidder, uint256 bidAmount ); // transfers one of the token types to/from the contracts function transferAnyToken( TokenType _tokenType, address _tokenContract, address _from, address _to, uint256 _tokenId, uint256 _amount ) internal { // type = 0 if (_tokenType == TokenType.ERC721) { //IERC721(_tokenContract).approve(address(this), _tokenId); IERC721(_tokenContract).transferFrom(_from, _to, _tokenId); return; } // type = 1 if (_tokenType == TokenType.ERC1155) { IERC1155(_tokenContract).safeTransferFrom( _from, _to, _tokenId, 1, "" ); // amount - only 1 of an ERC1155 per item return; } // type = 2 if (_tokenType == TokenType.ERC20) { if (_from==address(this)){ IERC20(_tokenContract).approve(address(this), _amount); } IERC20(_tokenContract).transferFrom(_from, _to, _amount); // amount - ERC20 can be multiple tokens per item (bundle) return; } } // market item functions // creates a market item by transferring it from the originating contract // the amount will be 1 for ERC721 or ERC1155 // amount could be more for ERC20 function createMarketItem( address _tokenContract, TokenType _tokenType, uint256 _tokenId, uint256 _amount, uint256 _price, string calldata _category ) public nonReentrant { require(_price > 0, "No item for free here"); require(_amount > 0, "At least one token"); require(approvedSourceContracts[_tokenContract]==true,"Token contract not approved"); _itemIds.increment(); uint256 itemId = _itemIds.current(); idToMarketItem[itemId] = MarketItem( itemId, _tokenContract, _tokenType, _tokenId, _amount, payable(msg.sender), payable(address(0)), // No owner for the item _category, _price, false, false ); transferAnyToken( _tokenType, _tokenContract, msg.sender, address(this), _tokenId, _amount ); emit MarketItemCreated( itemId, _tokenContract, _tokenId, _amount, msg.sender, address(0), _category, _price ); } // cancels a market item that's for sale function cancelMarketItem(uint256 itemId) public { require(itemId <= _itemIds.current()); require(idToMarketItem[itemId].seller == msg.sender); require( idToMarketItem[itemId].cancelled == false && idToMarketItem[itemId].isSold == false ); idToMarketItem[itemId].cancelled = true; _itemsCancelled.increment(); transferAnyToken( idToMarketItem[itemId].tokenType, idToMarketItem[itemId].tokenContract, address(this), msg.sender, idToMarketItem[itemId].tokenId, idToMarketItem[itemId].amount ); } // buys an item at it's current sale value function createMarketSale(uint256 itemId) public payable nonReentrant { uint256 price = idToMarketItem[itemId].price; uint256 tokenId = idToMarketItem[itemId].tokenId; require( msg.value == price, "Not the correct message value" ); require( idToMarketItem[itemId].isSold == false, "This item is already sold." ); require( idToMarketItem[itemId].cancelled == false, "This item is not for sale." ); require( idToMarketItem[itemId].seller != msg.sender, "Cannot buy your own item." ); // take fees and transfer the balance to the seller (TODO) uint256 fees = SafeMath.div(price, 100).mul(saleFeePercentage); if (discountManager != address(0x0)) { // how much discount does this user get? uint256 feeDiscountPercent = IDiscountManager(discountManager) .getDiscount(msg.sender); fees = fees.div(100).mul(feeDiscountPercent); } uint256 saleAmount = price.sub(fees); idToMarketItem[itemId].seller.transfer(saleAmount); accumulatedFee+=fees; transferAnyToken( idToMarketItem[itemId].tokenType, idToMarketItem[itemId].tokenContract, address(this), msg.sender, tokenId, idToMarketItem[itemId].amount ); idToMarketItem[itemId].isSold = true; idToMarketItem[itemId].buyer = payable(msg.sender); _itemsSold.increment(); volumeTraded = volumeTraded.add(price); emit MarketSaleCreated( itemId, idToMarketItem[itemId].tokenContract, tokenId, idToMarketItem[itemId].seller, msg.sender, idToMarketItem[itemId].category, price ); } function getMarketItemsByPage(uint256 _from, uint256 _to) external view returns (MarketItem[] memory) { require(_from < _itemIds.current() && _to <= _itemIds.current(), "Page out of range."); uint256 itemCount; for (uint256 i = _from; i <= _to; i++) { if ( idToMarketItem[i].buyer == address(0) && idToMarketItem[i].cancelled == false && idToMarketItem[i].isSold == false ){ itemCount++; } } uint256 currentIndex = 0; MarketItem[] memory marketItems = new MarketItem[](itemCount); for (uint256 i = _from; i <= _to; i++) { if ( idToMarketItem[i].buyer == address(0) && idToMarketItem[i].cancelled == false && idToMarketItem[i].isSold == false ){ uint256 currentId = idToMarketItem[i].itemId; MarketItem storage currentItem = idToMarketItem[currentId]; marketItems[currentIndex] = currentItem; currentIndex += 1; } } return marketItems; } // returns all of the current items for sale function getMarketItems() external view returns (MarketItem[] memory) { uint256 itemCount = _itemIds.current(); uint256 unsoldItemCount = _itemIds.current() - (_itemsSold.current() + _itemsCancelled.current()); uint256 currentIndex = 0; MarketItem[] memory marketItems = new MarketItem[](unsoldItemCount); for (uint256 i = 0; i < itemCount; i++) { if ( idToMarketItem[i + 1].buyer == address(0) && idToMarketItem[i + 1].cancelled == false && idToMarketItem[i + 1].isSold == false ) { uint256 currentId = idToMarketItem[i + 1].itemId; MarketItem storage currentItem = idToMarketItem[currentId]; marketItems[currentIndex] = currentItem; currentIndex += 1; } } return marketItems; } // returns all itemsby seller and function getMarketItemsBySeller(address _seller) external view returns (MarketItem[] memory) { uint256 totalItemCount = _itemIds.current(); uint256 itemCount = 0; uint256 currentIndex = 0; for (uint256 i = 0; i < totalItemCount; i++) { if ( idToMarketItem[i + 1].seller == _seller && idToMarketItem[i + 1].cancelled == false && idToMarketItem[i + 1].isSold == false //&& //idToMarketItem[i + 1].tokenContract == _tokenContract ) { itemCount += 1; // No dynamic length. Predefined length has to be made } } MarketItem[] memory marketItems = new MarketItem[](itemCount); for (uint256 i = 0; i < totalItemCount; i++) { if ( idToMarketItem[i + 1].seller == _seller && idToMarketItem[i + 1].cancelled == false && idToMarketItem[i + 1].isSold == false //&& //idToMarketItem[i + 1].tokenContract == _tokenContract ) { uint256 currentId = idToMarketItem[i + 1].itemId; MarketItem storage currentItem = idToMarketItem[currentId]; marketItems[currentIndex] = currentItem; currentIndex += 1; } } return marketItems; } // returns all itemsby seller and function getMarketItemsBySellerByPage(address _seller, uint256 _from , uint256 _to) external view returns (MarketItem[] memory) { require(_from < _itemIds.current() && _to <= _itemIds.current(), "Page out of range."); uint256 itemCount = 0; uint256 currentIndex = 0; for (uint256 i = _from; i <= _to; i++) { if ( idToMarketItem[i].seller == _seller && idToMarketItem[i].cancelled == false && idToMarketItem[i].isSold == false //&& ) { itemCount += 1; // No dynamic length. Predefined length has to be made } } MarketItem[] memory marketItems = new MarketItem[](itemCount); for (uint256 i = _from; i <= _to; i++) { if ( idToMarketItem[i].seller == _seller && idToMarketItem[i].cancelled == false && idToMarketItem[i].isSold == false //&& ) { uint256 currentId = idToMarketItem[i].itemId; MarketItem storage currentItem = idToMarketItem[currentId]; marketItems[currentIndex] = currentItem; currentIndex += 1; } } return marketItems; } // Get items by category // This could be used with different collections function getItemsByCategory(string calldata category) external view returns (MarketItem[] memory) { uint256 totalItemCount = _itemIds.current(); uint256 itemCount = 0; uint256 currentIndex = 0; for (uint256 i = 0; i < totalItemCount; i++) { if ( keccak256(abi.encodePacked(idToMarketItem[i + 1].category)) == keccak256(abi.encodePacked(category)) && idToMarketItem[i + 1].buyer == address(0) && idToMarketItem[i + 1].cancelled == false && idToMarketItem[i + 1].isSold == false ) { itemCount += 1; } } MarketItem[] memory marketItems = new MarketItem[](itemCount); for (uint256 i = 0; i < totalItemCount; i++) { if ( keccak256(abi.encodePacked(idToMarketItem[i + 1].category)) == keccak256(abi.encodePacked(category)) && idToMarketItem[i + 1].buyer == address(0) && idToMarketItem[i + 1].cancelled == false && idToMarketItem[i + 1].isSold == false ) { uint256 currentId = idToMarketItem[i + 1].itemId; MarketItem storage currentItem = idToMarketItem[currentId]; marketItems[currentIndex] = currentItem; currentIndex += 1; } } return marketItems; } // returns the total number of items sold function getItemsSold() external view returns (uint256) { return _itemsSold.current(); } // returns the current number of listed items function numberOfItemsListed() external view returns (uint256) { uint256 unsoldItemCount = _itemIds.current() - (_itemsSold.current() + _itemsCancelled.current()); return unsoldItemCount; } // Offers functions // make offer // cancel offer // accept offer // offersByItem // offersByBidder function makeItemOffer(uint256 _itemId) public payable nonReentrant { require( idToMarketItem[_itemId].tokenContract != address(0x0) && idToMarketItem[_itemId].isSold == false && idToMarketItem[_itemId].cancelled == false, "Invalid item id." ); require(msg.value > 0, "Can't offer nothing."); _offerIds.increment(); uint256 offerId = _offerIds.current(); MarketOffer memory offer = MarketOffer( offerId, _itemId, payable(msg.sender), msg.value, block.timestamp, false, false ); offerIdToMarketOffer[offerId] = offer; itemIdToMarketOfferIds[_itemId].push(offerId); bidderToMarketOfferIds[msg.sender].push(offerId); emit ItemOfferCreated( _itemId, idToMarketItem[_itemId].tokenContract, idToMarketItem[_itemId].seller, msg.sender, msg.value ); } function acceptItemOffer(uint256 _offerId) public nonReentrant { uint256 itemId = offerIdToMarketOffer[_offerId].itemId; require(idToMarketItem[itemId].seller == msg.sender, "Not item seller"); require( offerIdToMarketOffer[_offerId].accepted == false && offerIdToMarketOffer[_offerId].cancelled == false, "Already accepted or cancelled." ); uint256 price = offerIdToMarketOffer[_offerId].offerAmount; address bidder = payable(offerIdToMarketOffer[_offerId].bidder); uint256 fees = SafeMath.div(price, 100).mul(saleFeePercentage); // fees and payment if (discountManager != address(0x0)) { // how much discount does this user get? uint256 feeDiscountPercent = IDiscountManager(discountManager) .getDiscount(msg.sender); fees = fees.div(100).mul(feeDiscountPercent); } uint256 saleAmount = price.sub(fees); payable(msg.sender).transfer(saleAmount); if (fees > 0) { accumulatedFee+=fees; } transferAnyToken( idToMarketItem[itemId].tokenType, idToMarketItem[itemId].tokenContract, address(this), offerIdToMarketOffer[_offerId].bidder, idToMarketItem[itemId].tokenId, idToMarketItem[itemId].amount ); offerIdToMarketOffer[_offerId].accepted = true; idToMarketItem[itemId].isSold = true; idToMarketItem[itemId].buyer = offerIdToMarketOffer[_offerId].bidder; _itemsSold.increment(); emit MarketSaleCreated( itemId, idToMarketItem[itemId].tokenContract, idToMarketItem[itemId].tokenId, msg.sender, bidder, idToMarketItem[itemId].category, price ); volumeTraded = volumeTraded.add(price); } function canceItemOffer(uint256 _offerId) public nonReentrant { require( offerIdToMarketOffer[_offerId].bidder == msg.sender && offerIdToMarketOffer[_offerId].cancelled == false, "Wrong bidder or offer is already cancelled" ); require( offerIdToMarketOffer[_offerId].accepted == false, "Already accepted." ); address bidder = offerIdToMarketOffer[_offerId].bidder; offerIdToMarketOffer[_offerId].cancelled = true; payable(bidder).transfer(offerIdToMarketOffer[_offerId].offerAmount); //TODO emit } function getOffersByBidder(address _bidder) external view returns (MarketOffer[] memory) { uint256 openOfferCount = 0; uint256[] memory itemOfferIds = bidderToMarketOfferIds[_bidder]; for (uint256 i = 0; i < itemOfferIds.length; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { openOfferCount++; } } MarketOffer[] memory openOffers = new MarketOffer[](openOfferCount); uint256 currentIndex = 0; for (uint256 i = 0; i < itemOfferIds.length; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { MarketOffer memory currentItem = offerIdToMarketOffer[ itemOfferIds[i] ]; openOffers[currentIndex] = currentItem; currentIndex += 1; } } return openOffers; } function getTotalOffersMadeByBidder(address _bidder) external view returns (uint256){ return bidderToMarketOfferIds[_bidder].length; } function getOpenOffersByBidderByPage(address _bidder, uint256 _from , uint256 _to) external view returns (MarketOffer[] memory) { uint256 openOfferCount = 0; uint256[] memory itemOfferIds = bidderToMarketOfferIds[_bidder]; for (uint256 i = _from; i <= _to; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { openOfferCount++; } } MarketOffer[] memory openOffers = new MarketOffer[](openOfferCount); uint256 currentIndex = 0; for (uint256 i = _from; i <= _to; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { MarketOffer memory currentItem = offerIdToMarketOffer[ itemOfferIds[i] ]; openOffers[currentIndex] = currentItem; currentIndex += 1; } } return openOffers; } function getItemOffers(uint256 _itemId) external view returns (MarketOffer[] memory) { uint256 openOfferCount = 0; uint256[] memory itemOfferIds = itemIdToMarketOfferIds[_itemId]; for (uint256 i = 0; i < itemOfferIds.length; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { openOfferCount++; } } MarketOffer[] memory openOffers = new MarketOffer[](openOfferCount); uint256 currentIndex = 0; for (uint256 i = 0; i < itemOfferIds.length; i++) { if ( offerIdToMarketOffer[itemOfferIds[i]].accepted == false && offerIdToMarketOffer[itemOfferIds[i]].cancelled == false ) { MarketOffer memory currentItem = offerIdToMarketOffer[ itemOfferIds[i] ]; openOffers[currentIndex] = currentItem; currentIndex += 1; } } return openOffers; } // administration functions function setSalePercentageFee(uint256 _amount) public onlyOwner { require(_amount <= 5, "5% maximum fee allowed."); saleFeePercentage = _amount; } function setOwner(address _owner) public onlyOwner { require(_owner != address(0x0), "0x0 address not permitted"); owner = payable(_owner); } function setDiscountManager(address _discountManager) public onlyOwner { require(_discountManager != address(0x0), "0x0 address not permitted"); discountManager = _discountManager; } function setSourceContractApproved(address _tokenContract, bool _approved) external onlyOwner { approvedSourceContracts[_tokenContract]=_approved; } // IERC1155Receiver implementations function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } function supportsInterface(bytes4 interfaceId) override external pure returns (bool){ return interfaceId == type(IERC1155Receiver).interfaceId || true; } function withdraw_all() external onlyClevel { require (accumulatedFee > 0); uint256 amountB = SafeMath.div(accumulatedFee,100).mul(walletBPercentage); uint256 amountA = accumulatedFee.sub(amountB); accumulatedFee = 0; payable(walletA).transfer(amountA); payable(walletB).transfer(amountB); } function setWalletA(address _walletA) external onlyOwner { require (_walletA != address(0x0), "Invalid wallet"); walletA = _walletA; } function setWalletB(address _walletB) external onlyOwner { require (_walletB != address(0x0), "Invalid wallet."); walletB = _walletB; } function setWalletBPercentage(uint256 _percentage) external onlyOwner { require (_percentage>walletBPercentage && _percentage<=100, "Invalid new slice."); walletBPercentage = _percentage; } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bidAmount","type":"uint256"}],"name":"ItemOfferCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"category","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"MarketItemCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"string","name":"category","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"MarketSaleCreated","type":"event"},{"inputs":[],"name":"_itemIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"name":"acceptItemOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accumulatedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedSourceContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bidderToMarketOfferIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offerId","type":"uint256"}],"name":"canceItemOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"cancelMarketItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"_tokenType","type":"uint8"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_category","type":"string"}],"name":"createMarketItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"createMarketSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"discountManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"}],"name":"getItemOffers","outputs":[{"components":[{"internalType":"uint256","name":"offerId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"uint256","name":"offerTime","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"accepted","type":"bool"}],"internalType":"struct ShiryoMarket.MarketOffer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"category","type":"string"}],"name":"getItemsByCategory","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct ShiryoMarket.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getItemsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketItems","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct ShiryoMarket.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMarketItemsByPage","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct ShiryoMarket.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_seller","type":"address"}],"name":"getMarketItemsBySeller","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct ShiryoMarket.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_seller","type":"address"},{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMarketItemsBySellerByPage","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct ShiryoMarket.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bidder","type":"address"}],"name":"getOffersByBidder","outputs":[{"components":[{"internalType":"uint256","name":"offerId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"uint256","name":"offerTime","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"accepted","type":"bool"}],"internalType":"struct ShiryoMarket.MarketOffer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bidder","type":"address"},{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getOpenOffersByBidderByPage","outputs":[{"components":[{"internalType":"uint256","name":"offerId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"uint256","name":"offerTime","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"accepted","type":"bool"}],"internalType":"struct ShiryoMarket.MarketOffer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bidder","type":"address"}],"name":"getTotalOffersMadeByBidder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToMarketItem","outputs":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"enum ShiryoMarket.TokenType","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"isSold","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemIdToMarketOfferIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"}],"name":"makeItemOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"numberOfItemsListed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"offerIdToMarketOffer","outputs":[{"internalType":"uint256","name":"offerId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"uint256","name":"offerTime","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"accepted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_discountManager","type":"address"}],"name":"setDiscountManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSalePercentageFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setSourceContractApproved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletA","type":"address"}],"name":"setWalletA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletB","type":"address"}],"name":"setWalletB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setWalletBPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"volumeTraded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw_all","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526014600355600980546001600160a01b03191690556005600a556000600b819055600c5534801561003457600080fd5b506001600055600880546001600160a01b0319163317905561467c8061005b6000396000f3fe6080604052600436106102305760003560e01c80636a6e4c381161012e578063aad48c17116100ab578063c4b151411161006f578063c4b1514114610755578063dd473d2b1461076a578063e61a70c01461077f578063f23a6e61146107b6578063f8ce3164146107e257600080fd5b8063aad48c17146106b2578063b027a725146106d2578063b1433f7f146106e7578063bc197c81146106fd578063be9af5361461074257600080fd5b806395478fbf116100f257806395478fbf1461058757806396cbf2e9146105a7578063a28ad112146105c7578063a6e22b0214610672578063a7fa49c51461069257600080fd5b80636a6e4c38146104b357806371029ffd146104e35780637be3f006146105195780637ee87a271461052f5780638da5cb5b1461056757600080fd5b80632211fec4116101bc57806343b555dd1161018057806343b555dd14610413578063450defaa1461043357806346c4a388146104535780634a63421c146104735780634c89b86c1461049357600080fd5b80632211fec41461038757806329aa3a42146103a75780632a983a04146103bc5780632aa74ce4146103dc57806334a7f193146103fc57600080fd5b8063111992851161020357806311199285146102e757806313af403514610314578063166117e81461033457806317ce4f1e146103475780631e7c9e181461036757600080fd5b806301839ee31461023557806301ffc9a714610257578063023d20b01461028c5780630761b9bd146102b9575b600080fd5b34801561024157600080fd5b5061025561025036600461402c565b6107f8565b005b34801561026357600080fd5b50610277610272366004613fc1565b61086a565b60405190151581526020015b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004613d61565b61088f565b6040516102839190614225565b3480156102c557600080fd5b506102d96102d436600461405e565b610c3a565b604051908152602001610283565b3480156102f357600080fd5b50610307610302366004613d61565b610c6b565b6040516102839190614335565b34801561032057600080fd5b5061025561032f366004613d61565b610f4e565b61025561034236600461402c565b610fd9565b34801561035357600080fd5b50610255610362366004613d61565b61124f565b34801561037357600080fd5b5061025561038236600461402c565b6112da565b34801561039357600080fd5b506102556103a2366004613e89565b61166a565b3480156103b357600080fd5b506102ac6116ac565b3480156103c857600080fd5b506102556103d736600461402c565b6119a7565b3480156103e857600080fd5b506102ac6103f736600461405e565b611a16565b34801561040857600080fd5b506004546102d99081565b34801561041f57600080fd5b5061030761042e36600461402c565b611d6c565b34801561043f57600080fd5b506102ac61044e366004613f71565b61203a565b34801561045f57600080fd5b5061025561046e366004613ec0565b6123a3565b34801561047f57600080fd5b5061025561048e36600461402c565b612704565b34801561049f57600080fd5b506102556104ae366004613d61565b612888565b3480156104bf57600080fd5b506102776104ce366004613d61565b60116020526000908152604090205460ff1681565b3480156104ef57600080fd5b506102d96104fe366004613d61565b6001600160a01b031660009081526010602052604090205490565b34801561052557600080fd5b506102d9600a5481565b34801561053b57600080fd5b5060095461054f906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561057357600080fd5b5060085461054f906001600160a01b031681565b34801561059357600080fd5b506102ac6105a2366004613feb565b612908565b3480156105b357600080fd5b506102556105c2366004613d61565b612d8b565b3480156105d357600080fd5b5061062d6105e236600461402c565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492936001600160a01b0390921692909160ff8082169161010090041687565b6040805197885260208801969096526001600160a01b03909416948601949094526060850191909152608084015290151560a0830152151560c082015260e001610283565b34801561067e57600080fd5b5061025561068d36600461402c565b612e0c565b34801561069e57600080fd5b506102d96106ad366004613f47565b612ef2565b3480156106be57600080fd5b506103076106cd366004613f71565b612f0e565b3480156106de57600080fd5b506102d96131f0565b3480156106f357600080fd5b506102d9600c5481565b34801561070957600080fd5b50610729610718366004613d7c565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610283565b61025561075036600461402c565b613216565b34801561076157600080fd5b506102d9613602565b34801561077657600080fd5b50610255613612565b34801561078b57600080fd5b5061079f61079a36600461402c565b613711565b6040516102839b9a99989796959493929190614455565b3480156107c257600080fd5b506107296107d1366004613e25565b63f23a6e6160e01b95945050505050565b3480156107ee57600080fd5b506102d9600b5481565b6008546001600160a01b0316331461080f57600080fd5b60058111156108655760405162461bcd60e51b815260206004820152601760248201527f3525206d6178696d756d2066656520616c6c6f7765642e00000000000000000060448201526064015b60405180910390fd5b600a55565b60006001600160e01b03198216630271189760e51b1480610889575060015b92915050565b6060600061089c60045490565b905060008060005b8381101561096b576001600160a01b038616600d60006108c5846001614504565b81526020810191909152604001600020600401546001600160a01b03161480156109175750600d60006108f9836001614504565b8152602081019190915260400160002060080154610100900460ff16155b80156109465750600d600061092d836001614504565b815260208101919091526040016000206008015460ff16155b1561095957610956600184614504565b92505b80610963816145af565b9150506108a4565b506000826001600160401b0381111561098657610986614622565b6040519080825280602002602001820160405280156109bf57816020015b6109ac613acc565b8152602001906001900390816109a45790505b50905060005b84811015610c30576001600160a01b038716600d60006109e6846001614504565b81526020810191909152604001600020600401546001600160a01b0316148015610a385750600d6000610a1a836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015610a675750600d6000610a4e836001614504565b815260208101919091526040016000206008015460ff16155b15610c1e576000600d81610a7c846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115610ae757610ae76145f6565b6002811115610af857610af86145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191610b4390614574565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f90614574565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110610c0357610c0361460c565b6020908102919091010152610c19600186614504565b945050505b80610c28816145af565b9150506109c5565b5095945050505050565b600e6020528160005260406000208181548110610c5657600080fd5b90600052602060002001600091509150505481565b6001600160a01b03811660009081526010602090815260408083208054825181850281018501909352808352606094938493929190830182828015610ccf57602002820191906000526020600020905b815481526020019060010190808311610cbb575b5050505050905060005b8151811015610d8457600f6000838381518110610cf857610cf861460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015610d5f5750600f6000838381518110610d3c57610d3c61460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15610d725782610d6e816145af565b9350505b80610d7c816145af565b915050610cd9565b506000826001600160401b03811115610d9f57610d9f614622565b604051908082528060200260200182016040528015610dd857816020015b610dc5613b26565b815260200190600190039081610dbd5790505b5090506000805b8351811015610f4357600f6000858381518110610dfe57610dfe61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015610e655750600f6000858381518110610e4257610e4261460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15610f31576000600f6000868481518110610e8257610e8261460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c082015284519091508190859085908110610f1757610f1761460c565b6020908102919091010152610f2d600184614504565b9250505b80610f3b816145af565b915050610ddf565b509095945050505050565b6008546001600160a01b03163314610f6557600080fd5b6001600160a01b038116610fb75760405162461bcd60e51b81526020600482015260196024820152780c1e0c081859191c995cdcc81b9bdd081c195c9b5a5d1d1959603a1b604482015260640161085c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415610ffc5760405162461bcd60e51b815260040161085c906143c4565b60026000908155818152600d60205260409020600101546001600160a01b03161580159061103c57506000818152600d602052604090206008015460ff16155b801561105f57506000818152600d6020526040902060080154610100900460ff16155b61109e5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21034ba32b69034b21760811b604482015260640161085c565b600034116110e55760405162461bcd60e51b815260206004820152601460248201527321b0b713ba1037b33332b9103737ba3434b7339760611b604482015260640161085c565b6110f3600780546001019055565b60006110fe60075490565b6040805160e0810182528281526020808201868152338385018181523460608087018281524260808901908152600060a08a0181815260c08b018281528d8352600f8b528c83208c51815599516001808c0191909155975160028b0180546001600160a01b039283166001600160a01b0319909116179055945160038b015592516004808b0191909155905160059099018054935115156101000261ff00199a15159a909a1661ffff1990941693909317989098179091558c8152600e885289812080548087018255908252888220018b90558581526010885289812080548087018255908252888220018b90558c8152600d88528990209384015493909501548851908616815295860193909352848701529451959650929493169286927f9078ebced75ce8ca9324d2ab0c437296b64a0eff2a049ae70dde1790b443ede1928290030190a35050600160005550565b6008546001600160a01b0316331461126657600080fd5b6001600160a01b0381166112b85760405162461bcd60e51b81526020600482015260196024820152780c1e0c081859191c995cdcc81b9bdd081c195c9b5a5d1d1959603a1b604482015260640161085c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156112fd5760405162461bcd60e51b815260040161085c906143c4565b60026000908155818152600f6020908152604080832060010154808452600d909252909120600401546001600160a01b0316331461136f5760405162461bcd60e51b815260206004820152600f60248201526e2737ba1034ba32b69039b2b63632b960891b604482015260640161085c565b6000828152600f6020526040902060050154610100900460ff161580156113a857506000828152600f602052604090206005015460ff16155b6113f45760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206163636570746564206f722063616e63656c6c65642e0000604482015260640161085c565b6000828152600f602052604081206003810154600290910154600a5491926001600160a01b03909116916114339061142d856064613809565b9061381e565b6009549091506001600160a01b0316156114d8576009546040516303793c8d60e11b81523360048201526000916001600160a01b0316906306f2791a9060240160206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c39190614045565b90506114d48161142d846064613809565b9150505b60006114e4848361385a565b604051909150339082156108fc029083906000818181858888f19350505050158015611514573d6000803e3d6000fd5b5081156115335781600b600082825461152d9190614504565b90915550505b6000858152600d6020818152604080842060018101548b8652600f8452918520600290810154958b905293909252918101546003909101546115929360ff600160a01b850416936001600160a01b039081169330939290911691613876565b6000868152600f602090815260408083206005808201805461ff001916610100179055898552600d9093529281902060088101805460ff1916600190811790915560029485015482850180546001600160a01b0319166001600160a01b039283161790558454820190945593810154938101549151919092169188917f1f4ecd8562ffa9ee0b2ae53cd3747ab603ad7fd1a39605f4a9cb2fc083cd7b6a916116459133918a916006909101908c906141e8565b60405180910390a4600c5461165a9085613aad565b600c555050600160005550505050565b6008546001600160a01b0316331461168157600080fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b606060006116b960045490565b905060006116c660065490565b6005546116d39190614504565b6004546116e0919061455d565b9050600080826001600160401b038111156116fd576116fd614622565b60405190808252806020026020018201604052801561173657816020015b611723613acc565b81526020019060019003908161171b5790505b50905060005b8481101561199e576000600d81611754846001614504565b81526020810191909152604001600020600501546001600160a01b03161480156117a65750600d6000611788836001614504565b8152602081019190915260400160002060080154610100900460ff16155b80156117d55750600d60006117bc836001614504565b815260208101919091526040016000206008015460ff16155b1561198c576000600d816117ea846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115611855576118556145f6565b6002811115611866576118666145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a0909201916118b190614574565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90614574565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b50505091835250506007820154602082015260089091015460ff8082161515604084015261010090910416151560609091015284518590879081106119715761197161460c565b6020908102919091010152611987600186614504565b945050505b80611996816145af565b91505061173c565b50949350505050565b6008546001600160a01b031633146119be57600080fd5b600354811180156119d0575060648111155b611a115760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103732bb9039b634b1b29760711b604482015260640161085c565b600355565b6060611a2160045490565b83108015611a3157506004548211155b611a725760405162461bcd60e51b81526020600482015260126024820152712830b3b29037baba1037b3103930b733b29760711b604482015260640161085c565b6000835b838111611aff576000818152600d60205260409020600501546001600160a01b0316158015611abc57506000818152600d6020526040902060080154610100900460ff16155b8015611ada57506000818152600d602052604090206008015460ff16155b15611aed5781611ae9816145af565b9250505b80611af7816145af565b915050611a76565b50600080826001600160401b03811115611b1b57611b1b614622565b604051908082528060200260200182016040528015611b5457816020015b611b41613acc565b815260200190600190039081611b395790505b509050855b858111610c30576000818152600d60205260409020600501546001600160a01b0316158015611b9f57506000818152600d6020526040902060080154610100900460ff16155b8015611bbd57506000818152600d602052604090206008015460ff16155b15611d5a576000818152600d6020908152604080832054808452928190208151610160810183528154815260018201546001600160a01b0381169482019490945290929091839190830190600160a01b900460ff166002811115611c2357611c236145f6565b6002811115611c3457611c346145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191611c7f90614574565b80601f0160208091040260200160405190810160405280929190818152602001828054611cab90614574565b8015611cf85780601f10611ccd57610100808354040283529160200191611cf8565b820191906000526020600020905b815481529060010190602001808311611cdb57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110611d3f57611d3f61460c565b6020908102919091010152611d55600186614504565b945050505b80611d64816145af565b915050611b59565b6000818152600e602090815260408083208054825181850281018501909352808352606094938493929190830182828015611dc657602002820191906000526020600020905b815481526020019060010190808311611db2575b5050505050905060005b8151811015611e7b57600f6000838381518110611def57611def61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015611e565750600f6000838381518110611e3357611e3361460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15611e695782611e65816145af565b9350505b80611e73816145af565b915050611dd0565b506000826001600160401b03811115611e9657611e96614622565b604051908082528060200260200182016040528015611ecf57816020015b611ebc613b26565b815260200190600190039081611eb45790505b5090506000805b8351811015610f4357600f6000858381518110611ef557611ef561460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015611f5c5750600f6000858381518110611f3957611f3961460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15612028576000600f6000868481518110611f7957611f7961460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c08201528451909150819085908590811061200e5761200e61460c565b6020908102919091010152612024600184614504565b9250505b80612032816145af565b915050611ed6565b606061204560045490565b8310801561205557506004548211155b6120965760405162461bcd60e51b81526020600482015260126024820152712830b3b29037baba1037b3103930b733b29760711b604482015260640161085c565b600080845b848111612128576000818152600d60205260409020600401546001600160a01b0388811691161480156120e557506000818152600d6020526040902060080154610100900460ff16155b801561210357506000818152600d602052604090206008015460ff16155b1561211657612113600184614504565b92505b80612120816145af565b91505061209b565b506000826001600160401b0381111561214357612143614622565b60405190808252806020026020018201604052801561217c57816020015b612169613acc565b8152602001906001900390816121615790505b509050855b858111612398576000818152600d60205260409020600401546001600160a01b0389811691161480156121cb57506000818152600d6020526040902060080154610100900460ff16155b80156121e957506000818152600d602052604090206008015460ff16155b15612386576000818152600d6020908152604080832054808452928190208151610160810183528154815260018201546001600160a01b0381169482019490945290929091839190830190600160a01b900460ff16600281111561224f5761224f6145f6565b6002811115612260576122606145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a0909201916122ab90614574565b80601f01602080910402602001604051908101604052809291908181526020018280546122d790614574565b80156123245780601f106122f957610100808354040283529160200191612324565b820191906000526020600020905b81548152906001019060200180831161230757829003601f168201915b50505091835250506007820154602082015260089091015460ff80821615156040840152610100909104161515606090910152845185908790811061236b5761236b61460c565b6020908102919091010152612381600186614504565b945050505b80612390816145af565b915050612181565b509695505050505050565b600260005414156123c65760405162461bcd60e51b815260040161085c906143c4565b6002600055826124105760405162461bcd60e51b81526020600482015260156024820152744e6f206974656d20666f722066726565206865726560581b604482015260640161085c565b600084116124555760405162461bcd60e51b815260206004820152601260248201527120ba103632b0b9ba1037b732903a37b5b2b760711b604482015260640161085c565b6001600160a01b03871660009081526011602052604090205460ff1615156001146124c25760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20636f6e7472616374206e6f7420617070726f7665640000000000604482015260640161085c565b6124d0600480546001019055565b60006124db60045490565b9050604051806101600160405280828152602001896001600160a01b03168152602001886002811115612510576125106145f6565b8152602001878152602001868152602001336001600160a01b0316815260200160006001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830188905260408084018390526060909301829052848252600d81529082902083518155908301516001820180546001600160a01b039092166001600160a01b031983168117825593850151929390916001600160a81b03191617600160a01b8360028111156125ed576125ed6145f6565b0217905550606082015160028201556080820151600382015560a08201516004820180546001600160a01b039283166001600160a01b03199182161790915560c084015160058401805491909316911617905560e0820151805161265b916006840191602090910190613b70565b50610100828101516007830155610120830151600890920180546101409094015161ffff1990941692151561ff00191692909217921515029190911790556126a7878933308a8a613876565b85886001600160a01b0316827fb14a35721f094e1cc300be4448eaca7bfd8ea84ec6ce595ef237cfdd3220d0e38833600089898c6040516126ed969594939291906143fb565b60405180910390a450506001600055505050505050565b600260005414156127275760405162461bcd60e51b815260040161085c906143c4565b60026000818155828152600f6020526040902001546001600160a01b03163314801561276557506000818152600f602052604090206005015460ff16155b6127c45760405162461bcd60e51b815260206004820152602a60248201527f57726f6e6720626964646572206f72206f6666657220697320616c72656164796044820152690818d85b98d95b1b195960b21b606482015260840161085c565b6000818152600f6020526040902060050154610100900460ff161561281f5760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c9030b1b1b2b83a32b21760791b604482015260640161085c565b6000818152600f6020526040808220600281015460058201805460ff1916600117905560039091015491516001600160a01b0390911692839280156108fc02929091818181858888f1935050505015801561287e573d6000803e3d6000fd5b5050600160005550565b6008546001600160a01b0316331461289f57600080fd5b6001600160a01b0381166128e65760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081dd85b1b195d60921b604482015260640161085c565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600061291560045490565b905060008060005b83811015612a55578686604051602001612938929190614166565b60405160208183030381529060405280519060200120600d600083600161295f9190614504565b81526020019081526020016000206006016040516020016129809190614176565b604051602081830303815290604052805190602001201480156129cd57506000600d816129ae846001614504565b81526020810191909152604001600020600501546001600160a01b0316145b8015612a015750600d60006129e3836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015612a305750600d6000612a17836001614504565b815260208101919091526040016000206008015460ff16155b15612a4357612a40600184614504565b92505b80612a4d816145af565b91505061291d565b506000826001600160401b03811115612a7057612a70614622565b604051908082528060200260200182016040528015612aa957816020015b612a96613acc565b815260200190600190039081612a8e5790505b50905060005b84811015612398578787604051602001612aca929190614166565b60405160208183030381529060405280519060200120600d6000836001612af19190614504565b8152602001908152602001600020600601604051602001612b129190614176565b60405160208183030381529060405280519060200120148015612b5f57506000600d81612b40846001614504565b81526020810191909152604001600020600501546001600160a01b0316145b8015612b935750600d6000612b75836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015612bc25750600d6000612ba9836001614504565b815260208101919091526040016000206008015460ff16155b15612d79576000600d81612bd7846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115612c4257612c426145f6565b6002811115612c5357612c536145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191612c9e90614574565b80601f0160208091040260200160405190810160405280929190818152602001828054612cca90614574565b8015612d175780601f10612cec57610100808354040283529160200191612d17565b820191906000526020600020905b815481529060010190602001808311612cfa57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110612d5e57612d5e61460c565b6020908102919091010152612d74600186614504565b945050505b80612d83816145af565b915050612aaf565b6008546001600160a01b03163314612da257600080fd5b6001600160a01b038116612dea5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b2103bb0b63632ba1760891b604482015260640161085c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600454811115612e1b57600080fd5b6000818152600d60205260409020600401546001600160a01b03163314612e4157600080fd5b6000818152600d6020526040902060080154610100900460ff16158015612e7a57506000818152600d602052604090206008015460ff16155b612e8357600080fd5b6000818152600d60205260409020600801805461ff001916610100179055612eaf600680546001019055565b6000818152600d6020526040902060018101546002820154600390920154612eef9260ff600160a01b840416926001600160a01b03169130913391613876565b50565b60106020528160005260406000208181548110610c5657600080fd5b6001600160a01b03831660009081526010602090815260408083208054825181850281018501909352808352606094938493929190830182828015612f7257602002820191906000526020600020905b815481526020019060010190808311612f5e575b509394508893505050505b84811161302657600f6000838381518110612f9a57612f9a61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff161580156130015750600f6000838381518110612fde57612fde61460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b156130145782613010816145af565b9350505b8061301e816145af565b915050612f7d565b506000826001600160401b0381111561304157613041614622565b60405190808252806020026020018201604052801561307a57816020015b613067613b26565b81526020019060019003908161305f5790505b5090506000865b8681116131e357600f600085838151811061309e5761309e61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff161580156131055750600f60008583815181106130e2576130e261460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b156131d1576000600f60008684815181106131225761312261460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c0820152845190915081908590859081106131b7576131b761460c565b60209081029190910101526131cd600184614504565b9250505b806131db816145af565b915050613081565b5090979650505050505050565b6000806131fc60065490565b6005546132099190614504565b600454610889919061455d565b600260005414156132395760405162461bcd60e51b815260040161085c906143c4565b60026000818155828152600d6020526040902060078101549101543482146132a35760405162461bcd60e51b815260206004820152601d60248201527f4e6f742074686520636f7272656374206d6573736167652076616c7565000000604482015260640161085c565b6000838152600d602052604090206008015460ff16156133055760405162461bcd60e51b815260206004820152601a60248201527f54686973206974656d20697320616c726561647920736f6c642e000000000000604482015260640161085c565b6000838152600d6020526040902060080154610100900460ff161561336c5760405162461bcd60e51b815260206004820152601a60248201527f54686973206974656d206973206e6f7420666f722073616c652e000000000000604482015260640161085c565b6000838152600d60205260409020600401546001600160a01b03163314156133d65760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742062757920796f7572206f776e206974656d2e00000000000000604482015260640161085c565b60006133e9600a5461142d856064613809565b6009549091506001600160a01b03161561348e576009546040516303793c8d60e11b81523360048201526000916001600160a01b0316906306f2791a9060240160206040518083038186803b15801561344157600080fd5b505afa158015613455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134799190614045565b905061348a8161142d846064613809565b9150505b600061349a848361385a565b6000868152600d60205260408082206004015490519293506001600160a01b03169183156108fc0291849190818181858888f193505050501580156134e3573d6000803e3d6000fd5b5081600b60008282546134f69190614504565b90915550506000858152600d60205260409020600181015460039091015461353a9160ff600160a01b820416916001600160a01b0390911690309033908890613876565b6000858152600d6020526040902060088101805460ff19166001179055600590810180546001600160a01b031916331790556135799080546001019055565b600c546135869085613aad565b600c556000858152600d60205260409081902060018101546004820154925186936001600160a01b03928316938a937f1f4ecd8562ffa9ee0b2ae53cd3747ab603ad7fd1a39605f4a9cb2fc083cd7b6a936135ee939091169133916006909101908c906141e8565b60405180910390a450506001600055505050565b600061360d60055490565b905090565b6001546001600160a01b031633148061363557506002546001600160a01b031633145b8061364a57506008546001600160a01b031633145b61365357600080fd5b6000600b541161366257600080fd5b600061367760035461142d600b546064613809565b9050600061369082600b5461385a90919063ffffffff16565b6000600b8190556001546040519293506001600160a01b03169183156108fc0291849190818181858888f193505050501580156136d1573d6000803e3d6000fd5b506002546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561370c573d6000803e3d6000fd5b505050565b600d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701805496976001600160a01b0380881698600160a01b90980460ff16979481169493169290919061376d90614574565b80601f016020809104026020016040519081016040528092919081815260200182805461379990614574565b80156137e65780601f106137bb576101008083540402835291602001916137e6565b820191906000526020600020905b8154815290600101906020018083116137c957829003601f168201915b50505050600783015460089093015491929160ff8082169250610100909104168b565b600080613816838561451c565b949350505050565b60008261382d57506000610889565b6000613839838561453e565b905082613846858361451c565b14613853576138536145ca565b9392505050565b60008282111561386c5761386c6145ca565b613853828461455d565b600086600281111561388a5761388a6145f6565b1415613900576040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018490528616906323b872dd906064015b600060405180830381600087803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50505050613aa5565b6001866002811115613914576139146145f6565b141561396c57604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526001606483015260a06084830152600060a483015286169063f242432a9060c4016138c9565b6002866002811115613980576139806145f6565b1415613aa5576001600160a01b038416301415613a195760405163095ea7b360e01b8152306004820152602481018290526001600160a01b0386169063095ea7b390604401602060405180830381600087803b1580156139df57600080fd5b505af11580156139f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a179190613fa4565b505b6040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018390528616906323b872dd90606401602060405180830381600087803b158015613a6b57600080fd5b505af1158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190613fa4565b505b505050505050565b600080613aba8385614504565b905083811015613853576138536145ca565b6040805161016081018252600080825260208201819052909182019081526000602082018190526040820181905260608083018290526080830182905260a083015260c0820181905260e082018190526101009091015290565b6040518060e00160405280600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000151581526020016000151581525090565b828054613b7c90614574565b90600052602060002090601f016020900481019282613b9e5760008555613be4565b82601f10613bb757805160ff1916838001178555613be4565b82800160010185558215613be4579182015b82811115613be4578251825591602001919060010190613bc9565b50613bf0929150613bf4565b5090565b5b80821115613bf05760008155600101613bf5565b80356001600160a01b0381168114613c2057600080fd5b919050565b600082601f830112613c3657600080fd5b813560206001600160401b03821115613c5157613c51614622565b8160051b613c608282016144d4565b838152828101908684018388018501891015613c7b57600080fd5b600093505b85841015613c9e578035835260019390930192918401918401613c80565b50979650505050505050565b600082601f830112613cbb57600080fd5b81356001600160401b03811115613cd457613cd4614622565b613ce7601f8201601f19166020016144d4565b818152846020838601011115613cfc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112613d2b57600080fd5b5081356001600160401b03811115613d4257600080fd5b602083019150836020828501011115613d5a57600080fd5b9250929050565b600060208284031215613d7357600080fd5b61385382613c09565b600080600080600060a08688031215613d9457600080fd5b613d9d86613c09565b9450613dab60208701613c09565b935060408601356001600160401b0380821115613dc757600080fd5b613dd389838a01613c25565b94506060880135915080821115613de957600080fd5b613df589838a01613c25565b93506080880135915080821115613e0b57600080fd5b50613e1888828901613caa565b9150509295509295909350565b600080600080600060a08688031215613e3d57600080fd5b613e4686613c09565b9450613e5460208701613c09565b9350604086013592506060860135915060808601356001600160401b03811115613e7d57600080fd5b613e1888828901613caa565b60008060408385031215613e9c57600080fd5b613ea583613c09565b91506020830135613eb581614638565b809150509250929050565b600080600080600080600060c0888a031215613edb57600080fd5b613ee488613c09565b9650602088013560038110613ef857600080fd5b955060408801359450606088013593506080880135925060a08801356001600160401b03811115613f2857600080fd5b613f348a828b01613d19565b989b979a50959850939692959293505050565b60008060408385031215613f5a57600080fd5b613f6383613c09565b946020939093013593505050565b600080600060608486031215613f8657600080fd5b613f8f84613c09565b95602085013595506040909401359392505050565b600060208284031215613fb657600080fd5b815161385381614638565b600060208284031215613fd357600080fd5b81356001600160e01b03198116811461385357600080fd5b60008060208385031215613ffe57600080fd5b82356001600160401b0381111561401457600080fd5b61402085828601613d19565b90969095509350505050565b60006020828403121561403e57600080fd5b5035919050565b60006020828403121561405757600080fd5b5051919050565b6000806040838503121561407157600080fd5b50508035926020909101359150565b6003811061409e57634e487b7160e01b600052602160045260246000fd5b9052565b6000815180845260005b818110156140c8576020818501810151868301820152016140ac565b818111156140da576000602083870101525b50601f01601f19169290920160200192915050565b600081546140fc81614574565b808552602060018381168015614119576001811461412d5761415b565b60ff1985168884015260408801955061415b565b866000528260002060005b858110156141535781548a8201860152908301908401614138565b890184019650505b505050505092915050565b8183823760009101908152919050565b600080835461418481614574565b6001828116801561419c57600181146141ad576141dc565b60ff198416875282870194506141dc565b8760005260208060002060005b858110156141d35781548a8201529084019082016141ba565b50505082870194505b50929695505050505050565b6001600160a01b03858116825284166020820152608060408201819052600090614214908301856140ef565b905082606083015295945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561432757603f19898403018552815180518452878101516001600160a01b031688850152868101516101609061428889870182614080565b50606082810151908601526080808301519086015260a0808301516001600160a01b03811682880152505060c0828101516001600160a01b03811687830152505060e08083015182828801526142e0838801826140a2565b92505050610100808301518187015250610120808301516143048288018215159052565b50506101409182015115159490910193909352938601939086019060010161424c565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156143b7578151805185528681015187860152858101516001600160a01b031686860152606080820151908601526080808201519086015260a08082015115159086015260c09081015115159085015260e09093019290850190600101614352565b5091979650505050505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8681526001600160a01b0386811660208301528516604082015260a06060820181905281018390526000838560c0840137600060c0858401015260c0601f19601f8601168301019050826080830152979650505050505050565b8b81526001600160a01b038b811660208301526000906101609061447c604085018e614080565b8b60608501528a6080850152808a1660a085015280891660c0850152508060e08401526144ab818401886140a2565b610100840196909652505091151561012083015215156101409091015298975050505050505050565b604051601f8201601f191681016001600160401b03811182821017156144fc576144fc614622565b604052919050565b60008219821115614517576145176145e0565b500190565b60008261453957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614558576145586145e0565b500290565b60008282101561456f5761456f6145e0565b500390565b600181811c9082168061458857607f821691505b602082108114156145a957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145c3576145c36145e0565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114612eef57600080fdfea2646970667358221220c41f50b588772cd0977122454e7feaa244a2bc55778e8b7188e1e7e73bd6f4f964736f6c63430008060033
Deployed Bytecode
0x6080604052600436106102305760003560e01c80636a6e4c381161012e578063aad48c17116100ab578063c4b151411161006f578063c4b1514114610755578063dd473d2b1461076a578063e61a70c01461077f578063f23a6e61146107b6578063f8ce3164146107e257600080fd5b8063aad48c17146106b2578063b027a725146106d2578063b1433f7f146106e7578063bc197c81146106fd578063be9af5361461074257600080fd5b806395478fbf116100f257806395478fbf1461058757806396cbf2e9146105a7578063a28ad112146105c7578063a6e22b0214610672578063a7fa49c51461069257600080fd5b80636a6e4c38146104b357806371029ffd146104e35780637be3f006146105195780637ee87a271461052f5780638da5cb5b1461056757600080fd5b80632211fec4116101bc57806343b555dd1161018057806343b555dd14610413578063450defaa1461043357806346c4a388146104535780634a63421c146104735780634c89b86c1461049357600080fd5b80632211fec41461038757806329aa3a42146103a75780632a983a04146103bc5780632aa74ce4146103dc57806334a7f193146103fc57600080fd5b8063111992851161020357806311199285146102e757806313af403514610314578063166117e81461033457806317ce4f1e146103475780631e7c9e181461036757600080fd5b806301839ee31461023557806301ffc9a714610257578063023d20b01461028c5780630761b9bd146102b9575b600080fd5b34801561024157600080fd5b5061025561025036600461402c565b6107f8565b005b34801561026357600080fd5b50610277610272366004613fc1565b61086a565b60405190151581526020015b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004613d61565b61088f565b6040516102839190614225565b3480156102c557600080fd5b506102d96102d436600461405e565b610c3a565b604051908152602001610283565b3480156102f357600080fd5b50610307610302366004613d61565b610c6b565b6040516102839190614335565b34801561032057600080fd5b5061025561032f366004613d61565b610f4e565b61025561034236600461402c565b610fd9565b34801561035357600080fd5b50610255610362366004613d61565b61124f565b34801561037357600080fd5b5061025561038236600461402c565b6112da565b34801561039357600080fd5b506102556103a2366004613e89565b61166a565b3480156103b357600080fd5b506102ac6116ac565b3480156103c857600080fd5b506102556103d736600461402c565b6119a7565b3480156103e857600080fd5b506102ac6103f736600461405e565b611a16565b34801561040857600080fd5b506004546102d99081565b34801561041f57600080fd5b5061030761042e36600461402c565b611d6c565b34801561043f57600080fd5b506102ac61044e366004613f71565b61203a565b34801561045f57600080fd5b5061025561046e366004613ec0565b6123a3565b34801561047f57600080fd5b5061025561048e36600461402c565b612704565b34801561049f57600080fd5b506102556104ae366004613d61565b612888565b3480156104bf57600080fd5b506102776104ce366004613d61565b60116020526000908152604090205460ff1681565b3480156104ef57600080fd5b506102d96104fe366004613d61565b6001600160a01b031660009081526010602052604090205490565b34801561052557600080fd5b506102d9600a5481565b34801561053b57600080fd5b5060095461054f906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561057357600080fd5b5060085461054f906001600160a01b031681565b34801561059357600080fd5b506102ac6105a2366004613feb565b612908565b3480156105b357600080fd5b506102556105c2366004613d61565b612d8b565b3480156105d357600080fd5b5061062d6105e236600461402c565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492936001600160a01b0390921692909160ff8082169161010090041687565b6040805197885260208801969096526001600160a01b03909416948601949094526060850191909152608084015290151560a0830152151560c082015260e001610283565b34801561067e57600080fd5b5061025561068d36600461402c565b612e0c565b34801561069e57600080fd5b506102d96106ad366004613f47565b612ef2565b3480156106be57600080fd5b506103076106cd366004613f71565b612f0e565b3480156106de57600080fd5b506102d96131f0565b3480156106f357600080fd5b506102d9600c5481565b34801561070957600080fd5b50610729610718366004613d7c565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610283565b61025561075036600461402c565b613216565b34801561076157600080fd5b506102d9613602565b34801561077657600080fd5b50610255613612565b34801561078b57600080fd5b5061079f61079a36600461402c565b613711565b6040516102839b9a99989796959493929190614455565b3480156107c257600080fd5b506107296107d1366004613e25565b63f23a6e6160e01b95945050505050565b3480156107ee57600080fd5b506102d9600b5481565b6008546001600160a01b0316331461080f57600080fd5b60058111156108655760405162461bcd60e51b815260206004820152601760248201527f3525206d6178696d756d2066656520616c6c6f7765642e00000000000000000060448201526064015b60405180910390fd5b600a55565b60006001600160e01b03198216630271189760e51b1480610889575060015b92915050565b6060600061089c60045490565b905060008060005b8381101561096b576001600160a01b038616600d60006108c5846001614504565b81526020810191909152604001600020600401546001600160a01b03161480156109175750600d60006108f9836001614504565b8152602081019190915260400160002060080154610100900460ff16155b80156109465750600d600061092d836001614504565b815260208101919091526040016000206008015460ff16155b1561095957610956600184614504565b92505b80610963816145af565b9150506108a4565b506000826001600160401b0381111561098657610986614622565b6040519080825280602002602001820160405280156109bf57816020015b6109ac613acc565b8152602001906001900390816109a45790505b50905060005b84811015610c30576001600160a01b038716600d60006109e6846001614504565b81526020810191909152604001600020600401546001600160a01b0316148015610a385750600d6000610a1a836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015610a675750600d6000610a4e836001614504565b815260208101919091526040016000206008015460ff16155b15610c1e576000600d81610a7c846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115610ae757610ae76145f6565b6002811115610af857610af86145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191610b4390614574565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f90614574565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110610c0357610c0361460c565b6020908102919091010152610c19600186614504565b945050505b80610c28816145af565b9150506109c5565b5095945050505050565b600e6020528160005260406000208181548110610c5657600080fd5b90600052602060002001600091509150505481565b6001600160a01b03811660009081526010602090815260408083208054825181850281018501909352808352606094938493929190830182828015610ccf57602002820191906000526020600020905b815481526020019060010190808311610cbb575b5050505050905060005b8151811015610d8457600f6000838381518110610cf857610cf861460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015610d5f5750600f6000838381518110610d3c57610d3c61460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15610d725782610d6e816145af565b9350505b80610d7c816145af565b915050610cd9565b506000826001600160401b03811115610d9f57610d9f614622565b604051908082528060200260200182016040528015610dd857816020015b610dc5613b26565b815260200190600190039081610dbd5790505b5090506000805b8351811015610f4357600f6000858381518110610dfe57610dfe61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015610e655750600f6000858381518110610e4257610e4261460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15610f31576000600f6000868481518110610e8257610e8261460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c082015284519091508190859085908110610f1757610f1761460c565b6020908102919091010152610f2d600184614504565b9250505b80610f3b816145af565b915050610ddf565b509095945050505050565b6008546001600160a01b03163314610f6557600080fd5b6001600160a01b038116610fb75760405162461bcd60e51b81526020600482015260196024820152780c1e0c081859191c995cdcc81b9bdd081c195c9b5a5d1d1959603a1b604482015260640161085c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415610ffc5760405162461bcd60e51b815260040161085c906143c4565b60026000908155818152600d60205260409020600101546001600160a01b03161580159061103c57506000818152600d602052604090206008015460ff16155b801561105f57506000818152600d6020526040902060080154610100900460ff16155b61109e5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21034ba32b69034b21760811b604482015260640161085c565b600034116110e55760405162461bcd60e51b815260206004820152601460248201527321b0b713ba1037b33332b9103737ba3434b7339760611b604482015260640161085c565b6110f3600780546001019055565b60006110fe60075490565b6040805160e0810182528281526020808201868152338385018181523460608087018281524260808901908152600060a08a0181815260c08b018281528d8352600f8b528c83208c51815599516001808c0191909155975160028b0180546001600160a01b039283166001600160a01b0319909116179055945160038b015592516004808b0191909155905160059099018054935115156101000261ff00199a15159a909a1661ffff1990941693909317989098179091558c8152600e885289812080548087018255908252888220018b90558581526010885289812080548087018255908252888220018b90558c8152600d88528990209384015493909501548851908616815295860193909352848701529451959650929493169286927f9078ebced75ce8ca9324d2ab0c437296b64a0eff2a049ae70dde1790b443ede1928290030190a35050600160005550565b6008546001600160a01b0316331461126657600080fd5b6001600160a01b0381166112b85760405162461bcd60e51b81526020600482015260196024820152780c1e0c081859191c995cdcc81b9bdd081c195c9b5a5d1d1959603a1b604482015260640161085c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156112fd5760405162461bcd60e51b815260040161085c906143c4565b60026000908155818152600f6020908152604080832060010154808452600d909252909120600401546001600160a01b0316331461136f5760405162461bcd60e51b815260206004820152600f60248201526e2737ba1034ba32b69039b2b63632b960891b604482015260640161085c565b6000828152600f6020526040902060050154610100900460ff161580156113a857506000828152600f602052604090206005015460ff16155b6113f45760405162461bcd60e51b815260206004820152601e60248201527f416c7265616479206163636570746564206f722063616e63656c6c65642e0000604482015260640161085c565b6000828152600f602052604081206003810154600290910154600a5491926001600160a01b03909116916114339061142d856064613809565b9061381e565b6009549091506001600160a01b0316156114d8576009546040516303793c8d60e11b81523360048201526000916001600160a01b0316906306f2791a9060240160206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c39190614045565b90506114d48161142d846064613809565b9150505b60006114e4848361385a565b604051909150339082156108fc029083906000818181858888f19350505050158015611514573d6000803e3d6000fd5b5081156115335781600b600082825461152d9190614504565b90915550505b6000858152600d6020818152604080842060018101548b8652600f8452918520600290810154958b905293909252918101546003909101546115929360ff600160a01b850416936001600160a01b039081169330939290911691613876565b6000868152600f602090815260408083206005808201805461ff001916610100179055898552600d9093529281902060088101805460ff1916600190811790915560029485015482850180546001600160a01b0319166001600160a01b039283161790558454820190945593810154938101549151919092169188917f1f4ecd8562ffa9ee0b2ae53cd3747ab603ad7fd1a39605f4a9cb2fc083cd7b6a916116459133918a916006909101908c906141e8565b60405180910390a4600c5461165a9085613aad565b600c555050600160005550505050565b6008546001600160a01b0316331461168157600080fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b606060006116b960045490565b905060006116c660065490565b6005546116d39190614504565b6004546116e0919061455d565b9050600080826001600160401b038111156116fd576116fd614622565b60405190808252806020026020018201604052801561173657816020015b611723613acc565b81526020019060019003908161171b5790505b50905060005b8481101561199e576000600d81611754846001614504565b81526020810191909152604001600020600501546001600160a01b03161480156117a65750600d6000611788836001614504565b8152602081019190915260400160002060080154610100900460ff16155b80156117d55750600d60006117bc836001614504565b815260208101919091526040016000206008015460ff16155b1561198c576000600d816117ea846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115611855576118556145f6565b6002811115611866576118666145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a0909201916118b190614574565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90614574565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b50505091835250506007820154602082015260089091015460ff8082161515604084015261010090910416151560609091015284518590879081106119715761197161460c565b6020908102919091010152611987600186614504565b945050505b80611996816145af565b91505061173c565b50949350505050565b6008546001600160a01b031633146119be57600080fd5b600354811180156119d0575060648111155b611a115760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103732bb9039b634b1b29760711b604482015260640161085c565b600355565b6060611a2160045490565b83108015611a3157506004548211155b611a725760405162461bcd60e51b81526020600482015260126024820152712830b3b29037baba1037b3103930b733b29760711b604482015260640161085c565b6000835b838111611aff576000818152600d60205260409020600501546001600160a01b0316158015611abc57506000818152600d6020526040902060080154610100900460ff16155b8015611ada57506000818152600d602052604090206008015460ff16155b15611aed5781611ae9816145af565b9250505b80611af7816145af565b915050611a76565b50600080826001600160401b03811115611b1b57611b1b614622565b604051908082528060200260200182016040528015611b5457816020015b611b41613acc565b815260200190600190039081611b395790505b509050855b858111610c30576000818152600d60205260409020600501546001600160a01b0316158015611b9f57506000818152600d6020526040902060080154610100900460ff16155b8015611bbd57506000818152600d602052604090206008015460ff16155b15611d5a576000818152600d6020908152604080832054808452928190208151610160810183528154815260018201546001600160a01b0381169482019490945290929091839190830190600160a01b900460ff166002811115611c2357611c236145f6565b6002811115611c3457611c346145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191611c7f90614574565b80601f0160208091040260200160405190810160405280929190818152602001828054611cab90614574565b8015611cf85780601f10611ccd57610100808354040283529160200191611cf8565b820191906000526020600020905b815481529060010190602001808311611cdb57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110611d3f57611d3f61460c565b6020908102919091010152611d55600186614504565b945050505b80611d64816145af565b915050611b59565b6000818152600e602090815260408083208054825181850281018501909352808352606094938493929190830182828015611dc657602002820191906000526020600020905b815481526020019060010190808311611db2575b5050505050905060005b8151811015611e7b57600f6000838381518110611def57611def61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015611e565750600f6000838381518110611e3357611e3361460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15611e695782611e65816145af565b9350505b80611e73816145af565b915050611dd0565b506000826001600160401b03811115611e9657611e96614622565b604051908082528060200260200182016040528015611ecf57816020015b611ebc613b26565b815260200190600190039081611eb45790505b5090506000805b8351811015610f4357600f6000858381518110611ef557611ef561460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff16158015611f5c5750600f6000858381518110611f3957611f3961460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b15612028576000600f6000868481518110611f7957611f7961460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c08201528451909150819085908590811061200e5761200e61460c565b6020908102919091010152612024600184614504565b9250505b80612032816145af565b915050611ed6565b606061204560045490565b8310801561205557506004548211155b6120965760405162461bcd60e51b81526020600482015260126024820152712830b3b29037baba1037b3103930b733b29760711b604482015260640161085c565b600080845b848111612128576000818152600d60205260409020600401546001600160a01b0388811691161480156120e557506000818152600d6020526040902060080154610100900460ff16155b801561210357506000818152600d602052604090206008015460ff16155b1561211657612113600184614504565b92505b80612120816145af565b91505061209b565b506000826001600160401b0381111561214357612143614622565b60405190808252806020026020018201604052801561217c57816020015b612169613acc565b8152602001906001900390816121615790505b509050855b858111612398576000818152600d60205260409020600401546001600160a01b0389811691161480156121cb57506000818152600d6020526040902060080154610100900460ff16155b80156121e957506000818152600d602052604090206008015460ff16155b15612386576000818152600d6020908152604080832054808452928190208151610160810183528154815260018201546001600160a01b0381169482019490945290929091839190830190600160a01b900460ff16600281111561224f5761224f6145f6565b6002811115612260576122606145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a0909201916122ab90614574565b80601f01602080910402602001604051908101604052809291908181526020018280546122d790614574565b80156123245780601f106122f957610100808354040283529160200191612324565b820191906000526020600020905b81548152906001019060200180831161230757829003601f168201915b50505091835250506007820154602082015260089091015460ff80821615156040840152610100909104161515606090910152845185908790811061236b5761236b61460c565b6020908102919091010152612381600186614504565b945050505b80612390816145af565b915050612181565b509695505050505050565b600260005414156123c65760405162461bcd60e51b815260040161085c906143c4565b6002600055826124105760405162461bcd60e51b81526020600482015260156024820152744e6f206974656d20666f722066726565206865726560581b604482015260640161085c565b600084116124555760405162461bcd60e51b815260206004820152601260248201527120ba103632b0b9ba1037b732903a37b5b2b760711b604482015260640161085c565b6001600160a01b03871660009081526011602052604090205460ff1615156001146124c25760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20636f6e7472616374206e6f7420617070726f7665640000000000604482015260640161085c565b6124d0600480546001019055565b60006124db60045490565b9050604051806101600160405280828152602001896001600160a01b03168152602001886002811115612510576125106145f6565b8152602001878152602001868152602001336001600160a01b0316815260200160006001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830188905260408084018390526060909301829052848252600d81529082902083518155908301516001820180546001600160a01b039092166001600160a01b031983168117825593850151929390916001600160a81b03191617600160a01b8360028111156125ed576125ed6145f6565b0217905550606082015160028201556080820151600382015560a08201516004820180546001600160a01b039283166001600160a01b03199182161790915560c084015160058401805491909316911617905560e0820151805161265b916006840191602090910190613b70565b50610100828101516007830155610120830151600890920180546101409094015161ffff1990941692151561ff00191692909217921515029190911790556126a7878933308a8a613876565b85886001600160a01b0316827fb14a35721f094e1cc300be4448eaca7bfd8ea84ec6ce595ef237cfdd3220d0e38833600089898c6040516126ed969594939291906143fb565b60405180910390a450506001600055505050505050565b600260005414156127275760405162461bcd60e51b815260040161085c906143c4565b60026000818155828152600f6020526040902001546001600160a01b03163314801561276557506000818152600f602052604090206005015460ff16155b6127c45760405162461bcd60e51b815260206004820152602a60248201527f57726f6e6720626964646572206f72206f6666657220697320616c72656164796044820152690818d85b98d95b1b195960b21b606482015260840161085c565b6000818152600f6020526040902060050154610100900460ff161561281f5760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c9030b1b1b2b83a32b21760791b604482015260640161085c565b6000818152600f6020526040808220600281015460058201805460ff1916600117905560039091015491516001600160a01b0390911692839280156108fc02929091818181858888f1935050505015801561287e573d6000803e3d6000fd5b5050600160005550565b6008546001600160a01b0316331461289f57600080fd5b6001600160a01b0381166128e65760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081dd85b1b195d60921b604482015260640161085c565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600061291560045490565b905060008060005b83811015612a55578686604051602001612938929190614166565b60405160208183030381529060405280519060200120600d600083600161295f9190614504565b81526020019081526020016000206006016040516020016129809190614176565b604051602081830303815290604052805190602001201480156129cd57506000600d816129ae846001614504565b81526020810191909152604001600020600501546001600160a01b0316145b8015612a015750600d60006129e3836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015612a305750600d6000612a17836001614504565b815260208101919091526040016000206008015460ff16155b15612a4357612a40600184614504565b92505b80612a4d816145af565b91505061291d565b506000826001600160401b03811115612a7057612a70614622565b604051908082528060200260200182016040528015612aa957816020015b612a96613acc565b815260200190600190039081612a8e5790505b50905060005b84811015612398578787604051602001612aca929190614166565b60405160208183030381529060405280519060200120600d6000836001612af19190614504565b8152602001908152602001600020600601604051602001612b129190614176565b60405160208183030381529060405280519060200120148015612b5f57506000600d81612b40846001614504565b81526020810191909152604001600020600501546001600160a01b0316145b8015612b935750600d6000612b75836001614504565b8152602081019190915260400160002060080154610100900460ff16155b8015612bc25750600d6000612ba9836001614504565b815260208101919091526040016000206008015460ff16155b15612d79576000600d81612bd7846001614504565b81526020808201929092526040908101600090812054808252600d8452908290208251610160810184528154815260018201546001600160a01b03811695820195909552919450929091839190830190600160a01b900460ff166002811115612c4257612c426145f6565b6002811115612c5357612c536145f6565b8152600282015460208201526003820154604082015260048201546001600160a01b039081166060830152600583015416608082015260068201805460a090920191612c9e90614574565b80601f0160208091040260200160405190810160405280929190818152602001828054612cca90614574565b8015612d175780601f10612cec57610100808354040283529160200191612d17565b820191906000526020600020905b815481529060010190602001808311612cfa57829003601f168201915b50505091835250506007820154602082015260089091015460ff808216151560408401526101009091041615156060909101528451859087908110612d5e57612d5e61460c565b6020908102919091010152612d74600186614504565b945050505b80612d83816145af565b915050612aaf565b6008546001600160a01b03163314612da257600080fd5b6001600160a01b038116612dea5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b2103bb0b63632ba1760891b604482015260640161085c565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600454811115612e1b57600080fd5b6000818152600d60205260409020600401546001600160a01b03163314612e4157600080fd5b6000818152600d6020526040902060080154610100900460ff16158015612e7a57506000818152600d602052604090206008015460ff16155b612e8357600080fd5b6000818152600d60205260409020600801805461ff001916610100179055612eaf600680546001019055565b6000818152600d6020526040902060018101546002820154600390920154612eef9260ff600160a01b840416926001600160a01b03169130913391613876565b50565b60106020528160005260406000208181548110610c5657600080fd5b6001600160a01b03831660009081526010602090815260408083208054825181850281018501909352808352606094938493929190830182828015612f7257602002820191906000526020600020905b815481526020019060010190808311612f5e575b509394508893505050505b84811161302657600f6000838381518110612f9a57612f9a61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff161580156130015750600f6000838381518110612fde57612fde61460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b156130145782613010816145af565b9350505b8061301e816145af565b915050612f7d565b506000826001600160401b0381111561304157613041614622565b60405190808252806020026020018201604052801561307a57816020015b613067613b26565b81526020019060019003908161305f5790505b5090506000865b8681116131e357600f600085838151811061309e5761309e61460c565b602090810291909101810151825281019190915260400160002060050154610100900460ff161580156131055750600f60008583815181106130e2576130e261460c565b60209081029190910181015182528101919091526040016000206005015460ff16155b156131d1576000600f60008684815181106131225761312261460c565b6020908102919091018101518252818101929092526040908101600020815160e0810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301526005015460ff808216151560a084015261010090910416151560c0820152845190915081908590859081106131b7576131b761460c565b60209081029190910101526131cd600184614504565b9250505b806131db816145af565b915050613081565b5090979650505050505050565b6000806131fc60065490565b6005546132099190614504565b600454610889919061455d565b600260005414156132395760405162461bcd60e51b815260040161085c906143c4565b60026000818155828152600d6020526040902060078101549101543482146132a35760405162461bcd60e51b815260206004820152601d60248201527f4e6f742074686520636f7272656374206d6573736167652076616c7565000000604482015260640161085c565b6000838152600d602052604090206008015460ff16156133055760405162461bcd60e51b815260206004820152601a60248201527f54686973206974656d20697320616c726561647920736f6c642e000000000000604482015260640161085c565b6000838152600d6020526040902060080154610100900460ff161561336c5760405162461bcd60e51b815260206004820152601a60248201527f54686973206974656d206973206e6f7420666f722073616c652e000000000000604482015260640161085c565b6000838152600d60205260409020600401546001600160a01b03163314156133d65760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742062757920796f7572206f776e206974656d2e00000000000000604482015260640161085c565b60006133e9600a5461142d856064613809565b6009549091506001600160a01b03161561348e576009546040516303793c8d60e11b81523360048201526000916001600160a01b0316906306f2791a9060240160206040518083038186803b15801561344157600080fd5b505afa158015613455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134799190614045565b905061348a8161142d846064613809565b9150505b600061349a848361385a565b6000868152600d60205260408082206004015490519293506001600160a01b03169183156108fc0291849190818181858888f193505050501580156134e3573d6000803e3d6000fd5b5081600b60008282546134f69190614504565b90915550506000858152600d60205260409020600181015460039091015461353a9160ff600160a01b820416916001600160a01b0390911690309033908890613876565b6000858152600d6020526040902060088101805460ff19166001179055600590810180546001600160a01b031916331790556135799080546001019055565b600c546135869085613aad565b600c556000858152600d60205260409081902060018101546004820154925186936001600160a01b03928316938a937f1f4ecd8562ffa9ee0b2ae53cd3747ab603ad7fd1a39605f4a9cb2fc083cd7b6a936135ee939091169133916006909101908c906141e8565b60405180910390a450506001600055505050565b600061360d60055490565b905090565b6001546001600160a01b031633148061363557506002546001600160a01b031633145b8061364a57506008546001600160a01b031633145b61365357600080fd5b6000600b541161366257600080fd5b600061367760035461142d600b546064613809565b9050600061369082600b5461385a90919063ffffffff16565b6000600b8190556001546040519293506001600160a01b03169183156108fc0291849190818181858888f193505050501580156136d1573d6000803e3d6000fd5b506002546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561370c573d6000803e3d6000fd5b505050565b600d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701805496976001600160a01b0380881698600160a01b90980460ff16979481169493169290919061376d90614574565b80601f016020809104026020016040519081016040528092919081815260200182805461379990614574565b80156137e65780601f106137bb576101008083540402835291602001916137e6565b820191906000526020600020905b8154815290600101906020018083116137c957829003601f168201915b50505050600783015460089093015491929160ff8082169250610100909104168b565b600080613816838561451c565b949350505050565b60008261382d57506000610889565b6000613839838561453e565b905082613846858361451c565b14613853576138536145ca565b9392505050565b60008282111561386c5761386c6145ca565b613853828461455d565b600086600281111561388a5761388a6145f6565b1415613900576040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018490528616906323b872dd906064015b600060405180830381600087803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50505050613aa5565b6001866002811115613914576139146145f6565b141561396c57604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526001606483015260a06084830152600060a483015286169063f242432a9060c4016138c9565b6002866002811115613980576139806145f6565b1415613aa5576001600160a01b038416301415613a195760405163095ea7b360e01b8152306004820152602481018290526001600160a01b0386169063095ea7b390604401602060405180830381600087803b1580156139df57600080fd5b505af11580156139f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a179190613fa4565b505b6040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018390528616906323b872dd90606401602060405180830381600087803b158015613a6b57600080fd5b505af1158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190613fa4565b505b505050505050565b600080613aba8385614504565b905083811015613853576138536145ca565b6040805161016081018252600080825260208201819052909182019081526000602082018190526040820181905260608083018290526080830182905260a083015260c0820181905260e082018190526101009091015290565b6040518060e00160405280600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000151581526020016000151581525090565b828054613b7c90614574565b90600052602060002090601f016020900481019282613b9e5760008555613be4565b82601f10613bb757805160ff1916838001178555613be4565b82800160010185558215613be4579182015b82811115613be4578251825591602001919060010190613bc9565b50613bf0929150613bf4565b5090565b5b80821115613bf05760008155600101613bf5565b80356001600160a01b0381168114613c2057600080fd5b919050565b600082601f830112613c3657600080fd5b813560206001600160401b03821115613c5157613c51614622565b8160051b613c608282016144d4565b838152828101908684018388018501891015613c7b57600080fd5b600093505b85841015613c9e578035835260019390930192918401918401613c80565b50979650505050505050565b600082601f830112613cbb57600080fd5b81356001600160401b03811115613cd457613cd4614622565b613ce7601f8201601f19166020016144d4565b818152846020838601011115613cfc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112613d2b57600080fd5b5081356001600160401b03811115613d4257600080fd5b602083019150836020828501011115613d5a57600080fd5b9250929050565b600060208284031215613d7357600080fd5b61385382613c09565b600080600080600060a08688031215613d9457600080fd5b613d9d86613c09565b9450613dab60208701613c09565b935060408601356001600160401b0380821115613dc757600080fd5b613dd389838a01613c25565b94506060880135915080821115613de957600080fd5b613df589838a01613c25565b93506080880135915080821115613e0b57600080fd5b50613e1888828901613caa565b9150509295509295909350565b600080600080600060a08688031215613e3d57600080fd5b613e4686613c09565b9450613e5460208701613c09565b9350604086013592506060860135915060808601356001600160401b03811115613e7d57600080fd5b613e1888828901613caa565b60008060408385031215613e9c57600080fd5b613ea583613c09565b91506020830135613eb581614638565b809150509250929050565b600080600080600080600060c0888a031215613edb57600080fd5b613ee488613c09565b9650602088013560038110613ef857600080fd5b955060408801359450606088013593506080880135925060a08801356001600160401b03811115613f2857600080fd5b613f348a828b01613d19565b989b979a50959850939692959293505050565b60008060408385031215613f5a57600080fd5b613f6383613c09565b946020939093013593505050565b600080600060608486031215613f8657600080fd5b613f8f84613c09565b95602085013595506040909401359392505050565b600060208284031215613fb657600080fd5b815161385381614638565b600060208284031215613fd357600080fd5b81356001600160e01b03198116811461385357600080fd5b60008060208385031215613ffe57600080fd5b82356001600160401b0381111561401457600080fd5b61402085828601613d19565b90969095509350505050565b60006020828403121561403e57600080fd5b5035919050565b60006020828403121561405757600080fd5b5051919050565b6000806040838503121561407157600080fd5b50508035926020909101359150565b6003811061409e57634e487b7160e01b600052602160045260246000fd5b9052565b6000815180845260005b818110156140c8576020818501810151868301820152016140ac565b818111156140da576000602083870101525b50601f01601f19169290920160200192915050565b600081546140fc81614574565b808552602060018381168015614119576001811461412d5761415b565b60ff1985168884015260408801955061415b565b866000528260002060005b858110156141535781548a8201860152908301908401614138565b890184019650505b505050505092915050565b8183823760009101908152919050565b600080835461418481614574565b6001828116801561419c57600181146141ad576141dc565b60ff198416875282870194506141dc565b8760005260208060002060005b858110156141d35781548a8201529084019082016141ba565b50505082870194505b50929695505050505050565b6001600160a01b03858116825284166020820152608060408201819052600090614214908301856140ef565b905082606083015295945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561432757603f19898403018552815180518452878101516001600160a01b031688850152868101516101609061428889870182614080565b50606082810151908601526080808301519086015260a0808301516001600160a01b03811682880152505060c0828101516001600160a01b03811687830152505060e08083015182828801526142e0838801826140a2565b92505050610100808301518187015250610120808301516143048288018215159052565b50506101409182015115159490910193909352938601939086019060010161424c565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156143b7578151805185528681015187860152858101516001600160a01b031686860152606080820151908601526080808201519086015260a08082015115159086015260c09081015115159085015260e09093019290850190600101614352565b5091979650505050505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b8681526001600160a01b0386811660208301528516604082015260a06060820181905281018390526000838560c0840137600060c0858401015260c0601f19601f8601168301019050826080830152979650505050505050565b8b81526001600160a01b038b811660208301526000906101609061447c604085018e614080565b8b60608501528a6080850152808a1660a085015280891660c0850152508060e08401526144ab818401886140a2565b610100840196909652505091151561012083015215156101409091015298975050505050505050565b604051601f8201601f191681016001600160401b03811182821017156144fc576144fc614622565b604052919050565b60008219821115614517576145176145e0565b500190565b60008261453957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614558576145586145e0565b500290565b60008282101561456f5761456f6145e0565b500390565b600181811c9082168061458857607f821691505b602082108114156145a957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145c3576145c36145e0565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114612eef57600080fdfea2646970667358221220c41f50b588772cd0977122454e7feaa244a2bc55778e8b7188e1e7e73bd6f4f964736f6c63430008060033
Deployed Bytecode Sourcemap
17880:25578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41083:169;;;;;;;;;;-1:-1:-1;41083:169:0;;;;;:::i;:::-;;:::i;:::-;;42360:184;;;;;;;;;;-1:-1:-1;42360:184:0;;;;;:::i;:::-;;:::i;:::-;;;16420:14:1;;16413:22;16395:41;;16383:2;16368:18;42360:184:0;;;;;;;;28546:1427;;;;;;;;;;-1:-1:-1;28546:1427:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19840:59::-;;;;;;;;;;-1:-1:-1;19840:59:0;;;;;:::i;:::-;;:::i;:::-;;;23876:25:1;;;23864:2;23849:18;19840:59:0;23831:76:1;37289:1188:0;;;;;;;;;;-1:-1:-1;37289:1188:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41260:164::-;;;;;;;;;;-1:-1:-1;41260:164:0;;;;;:::i;:::-;;:::i;33528:1080::-;;;;;;:::i;:::-;;:::i;41432:205::-;;;;;;;;;;-1:-1:-1;41432:205:0;;;;;:::i;:::-;;:::i;34616:2007::-;;;;;;;;;;-1:-1:-1;34616:2007:0;;;;;:::i;:::-;;:::i;41645:162::-;;;;;;;;;;-1:-1:-1;41645:162:0;;;;;:::i;:::-;;:::i;27579:920::-;;;;;;;;;;;;;:::i;43241:212::-;;;;;;;;;;-1:-1:-1;43241:212:0;;;;;:::i;:::-;;:::i;26325:1196::-;;;;;;;;;;-1:-1:-1;26325:1196:0;;;;;:::i;:::-;;:::i;18330:32::-;;;;;;;;;;-1:-1:-1;18330:32:0;;;;;;39858:1184;;;;;;;;;;-1:-1:-1;39858:1184:0;;;;;:::i;:::-;;:::i;30023:1322::-;;;;;;;;;;-1:-1:-1;30023:1322:0;;;;;:::i;:::-;;:::i;22234:1304::-;;;;;;;;;;-1:-1:-1;22234:1304:0;;;;;:::i;:::-;;:::i;36631:649::-;;;;;;;;;;-1:-1:-1;36631:649:0;;;;;:::i;:::-;;:::i;42910:157::-;;;;;;;;;;-1:-1:-1;42910:157:0;;;;;:::i;:::-;;:::i;20044:55::-;;;;;;;;;;-1:-1:-1;20044:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38486:150;;;;;;;;;;-1:-1:-1;38486:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;38589:31:0;38562:7;38589:31;;;:22;:31;;;;;:38;;38486:150;18817:36;;;;;;;;;;;;;;;;18670:45;;;;;;;;;;-1:-1:-1;18670:45:0;;;;-1:-1:-1;;;;;18670:45:0;;;;;;-1:-1:-1;;;;;9834:32:1;;;9816:51;;9804:2;9789:18;18670:45:0;9771:102:1;18599:28:0;;;;;;;;;;-1:-1:-1;18599:28:0;;;;-1:-1:-1;;;;;18599:28:0;;;31437:1501;;;;;;;;;;-1:-1:-1;31437:1501:0;;;;;:::i;:::-;;:::i;43075:158::-;;;;;;;;;;-1:-1:-1;43075:158:0;;;;;:::i;:::-;;:::i;19908:59::-;;;;;;;;;;-1:-1:-1;19908:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19908:59:0;;;;;;;;;;;;;;;;;;;;;26085:25:1;;;26141:2;26126:18;;26119:34;;;;-1:-1:-1;;;;;26189:32:1;;;26169:18;;;26162:60;;;;26253:2;26238:18;;26231:34;;;;26296:3;26281:19;;26274:35;26353:14;;26346:22;26209:3;26325:19;;26318:51;26413:14;26406:22;26400:3;26385:19;;26378:51;26072:3;26057:19;19908:59:0;26039:396:1;23592:682:0;;;;;;;;;;-1:-1:-1;23592:682:0;;;;;:::i;:::-;;:::i;19976:59::-;;;;;;;;;;-1:-1:-1;19976:59:0;;;;;:::i;:::-;;:::i;38645:1205::-;;;;;;;;;;-1:-1:-1;38645:1205:0;;;;;:::i;:::-;;:::i;33157:225::-;;;;;;;;;;;;;:::i;18947:31::-;;;;;;;;;;;;;;;;42095:255;;;;;;;;;;-1:-1:-1;42095:255:0;;;;;:::i;:::-;-1:-1:-1;;;42095:255:0;;;;;;;;;;;-1:-1:-1;;;;;;16609:33:1;;;16591:52;;16579:2;16564:18;42095:255:0;16546:103:1;24332:1985:0;;;;;;:::i;:::-;;:::i;32996:102::-;;;;;;;;;;;;;:::i;42552:350::-;;;;;;;;;;;;;:::i;19779:52::-;;;;;;;;;;-1:-1:-1;19779:52:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;41860:227::-;;;;;;;;;;-1:-1:-1;41860:227:0;;;;;:::i;:::-;-1:-1:-1;;;41860:227:0;;;;;;;;18905:33;;;;;;;;;;;;;;;;41083:169;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;41177:1:::1;41166:7;:12;;41158:48;;;::::0;-1:-1:-1;;;41158:48:0;;17555:2:1;41158:48:0::1;::::0;::::1;17537:21:1::0;17594:2;17574:18;;;17567:30;17633:25;17613:18;;;17606:53;17676:18;;41158:48:0::1;;;;;;;;;41217:17;:27:::0;41083:169::o;42360:184::-;42439:4;-1:-1:-1;;;;;;42466:49:0;;-1:-1:-1;;;42466:49:0;;:70;;;42532:4;42466:70;42459:77;42360:184;-1:-1:-1;;42360:184:0:o;28546:1427::-;28645:19;28682:22;28707:18;:8;44285:14;;44193:114;28707:18;28682:43;;28736:17;28768:20;28810:9;28805:449;28829:14;28825:1;:18;28805:449;;;-1:-1:-1;;;;;28887:39:0;;:14;:21;28902:5;:1;28906;28902:5;:::i;:::-;28887:21;;;;;;;;;;;-1:-1:-1;28887:21:0;:28;;;-1:-1:-1;;;;;28887:28:0;:39;:100;;;;-1:-1:-1;28947:14:0;:21;28962:5;:1;28966;28962:5;:::i;:::-;28947:21;;;;;;;;;;;-1:-1:-1;28947:21:0;:31;;;;;;;;:40;28887:100;:158;;;;-1:-1:-1;29008:14:0;:21;29023:5;:1;29027;29023:5;:::i;:::-;29008:21;;;;;;;;;;;-1:-1:-1;29008:21:0;:28;;;;;:37;28887:158;28865:378;;;29158:14;29171:1;29158:14;;:::i;:::-;;;28865:378;28845:3;;;;:::i;:::-;;;;28805:449;;;;29266:31;29317:9;-1:-1:-1;;;;;29300:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;29266:61;;29343:9;29338:599;29362:14;29358:1;:18;29338:599;;;-1:-1:-1;;;;;29420:39:0;;:14;:21;29435:5;:1;29439;29435:5;:::i;:::-;29420:21;;;;;;;;;;;-1:-1:-1;29420:21:0;:28;;;-1:-1:-1;;;;;29420:28:0;:39;:100;;;;-1:-1:-1;29480:14:0;:21;29495:5;:1;29499;29495:5;:::i;:::-;29480:21;;;;;;;;;;;-1:-1:-1;29480:21:0;:31;;;;;;;;:40;29420:100;:158;;;;-1:-1:-1;29541:14:0;:21;29556:5;:1;29560;29556:5;:::i;:::-;29541:21;;;;;;;;;;;-1:-1:-1;29541:21:0;:28;;;;;:37;29420:158;29398:528;;;29691:17;29711:14;29691:17;29726:5;:1;29730;29726:5;:::i;:::-;29711:21;;;;;;;;;;;;;;-1:-1:-1;29711:21:0;;;:28;29791:25;;;:14;:25;;;;;;29835:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;29835:39:0;;;;;;;;;29711:28;;-1:-1:-1;29791:25:0;29835:39;;29791:25;;29835:39;;;;-1:-1:-1;;;29835:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29835:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29835:39:0;;;-1:-1:-1;;29835:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:11;;29847:12;;29835:25;;;;;;:::i;:::-;;;;;;;;;;:39;29893:17;29909:1;29893:17;;:::i;:::-;;;29672:254;;29398:528;29378:3;;;;:::i;:::-;;;;29338:599;;;-1:-1:-1;29954:11:0;28546:1427;-1:-1:-1;;;;;28546:1427:0:o;19840:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37289:1188::-;-1:-1:-1;;;;;37490:31:0;;37421:22;37490:31;;;:22;:31;;;;;;;;37458:63;;;;;;;;;;;;;;;;;37383:20;;37421:22;;;37458:63;37490:31;37458:63;;;37490:31;37458:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37539:9;37534:297;37558:12;:19;37554:1;:23;37534:297;;;37621:20;:37;37642:12;37655:1;37642:15;;;;;;;;:::i;:::-;;;;;;;;;;;;37621:37;;;;;;;;;;-1:-1:-1;37621:37:0;:46;;;;;;;;:55;;;:132;;;37697:20;:37;37718:12;37731:1;37718:15;;;;;;;;:::i;:::-;;;;;;;;;;;;37697:37;;;;;;;;;;-1:-1:-1;37697:37:0;:47;;;;;:56;37621:132;37599:221;;;37788:16;;;;:::i;:::-;;;;37599:221;37579:3;;;;:::i;:::-;;;;37534:297;;;;37843:31;37895:14;-1:-1:-1;;;;;37877:33:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;37843:67;;37921:20;37961:9;37956:484;37980:12;:19;37976:1;:23;37956:484;;;38043:20;:37;38064:12;38077:1;38064:15;;;;;;;;:::i;:::-;;;;;;;;;;;;38043:37;;;;;;;;;;-1:-1:-1;38043:37:0;:46;;;;;;;;:55;;;:132;;;38119:20;:37;38140:12;38153:1;38140:15;;;;;;;;:::i;:::-;;;;;;;;;;;;38119:37;;;;;;;;;;-1:-1:-1;38119:37:0;:47;;;;;:56;38043:132;38021:408;;;38210:30;38243:20;:77;38286:12;38299:1;38286:15;;;;;;;;:::i;:::-;;;;;;;;;;;;38243:77;;;;;;;;;;;;;-1:-1:-1;38243:77:0;38210:110;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38210:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38339:24;;38210:110;;-1:-1:-1;38210:110:0;;38339:10;;38350:12;;38339:24;;;;;;:::i;:::-;;;;;;;;;;:38;38396:17;38412:1;38396:17;;:::i;:::-;;;38191:238;38021:408;38001:3;;;;:::i;:::-;;;;37956:484;;;-1:-1:-1;38459:10:0;;37289:1188;-1:-1:-1;;;;;37289:1188:0:o;41260:164::-;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;-1:-1:-1;;;;;41330:22:0;::::1;41322:60;;;::::0;-1:-1:-1;;;41322:60:0;;21400:2:1;41322:60:0::1;::::0;::::1;21382:21:1::0;21439:2;21419:18;;;21412:30;-1:-1:-1;;;21458:18:1;;;21451:55;21523:18;;41322:60:0::1;21372:175:1::0;41322:60:0::1;41393:5;:23:::0;;-1:-1:-1;;;;;;41393:23:0::1;-1:-1:-1::0;;;;;41393:23:0;;;::::1;::::0;;;::::1;::::0;;41260:164::o;33528:1080::-;16696:1;17292:7;;:19;;17284:63;;;;-1:-1:-1;;;17284:63:0;;;;;;;:::i;:::-;16696:1;17425:7;:18;;;33629:23;;;:14:::1;:23;::::0;;;;:37:::1;;::::0;-1:-1:-1;;;;;33629:37:0::1;:53:::0;;::::1;::::0;:113:::1;;-1:-1:-1::0;33703:23:0::1;::::0;;;:14:::1;:23;::::0;;;;:30:::1;;::::0;::::1;;:39;33629:113;:176;;;;-1:-1:-1::0;33763:23:0::1;::::0;;;:14:::1;:23;::::0;;;;:33:::1;;::::0;::::1;::::0;::::1;;;:42;33629:176;33607:242;;;::::0;-1:-1:-1;;;33607:242:0;;18257:2:1;33607:242:0::1;::::0;::::1;18239:21:1::0;18296:2;18276:18;;;18269:30;-1:-1:-1;;;18315:18:1;;;18308:46;18371:18;;33607:242:0::1;18229:166:1::0;33607:242:0::1;33880:1;33868:9;:13;33860:46;;;::::0;-1:-1:-1;;;33860:46:0;;21051:2:1;33860:46:0::1;::::0;::::1;21033:21:1::0;21090:2;21070:18;;;21063:30;-1:-1:-1;;;21109:18:1;;;21102:50;21169:18;;33860:46:0::1;21023:170:1::0;33860:46:0::1;33919:21;:9;44404:19:::0;;44422:1;44404:19;;;44315:127;33919:21:::1;33951:15;33969:19;:9;44285:14:::0;;44193:114;33969:19:::1;34028:194;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;34106:10:::1;34028:194:::0;;;;;;34132:9:::1;34028:194:::0;;;;;;;34156:15:::1;34028:194:::0;;;;;;-1:-1:-1;34028:194:0;;;;;;;;;;;;34235:29;;;:20:::1;:29:::0;;;;;:37;;;;;;34028:194;34235:37;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;34235:37:0;;::::1;-1:-1:-1::0;;;;;;34235:37:0;;::::1;;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;;;;-1:-1:-1::0;;34235:37:0;::::1;;::::0;;;;-1:-1:-1;;34235:37:0;;;;;;;;;;::::1;::::0;;;34283:31;;;:22:::1;:31:::0;;;;;:45;;;;::::1;::::0;;;;;;;;::::1;::::0;;;34339:34;;;:22:::1;:34:::0;;;;;:48;;;;::::1;::::0;;;;;;;;::::1;::::0;;;34458:23;;;:14:::1;:23:::0;;;;;:37;;::::1;::::0;34510:30;;;::::1;::::0;34405:195;;34510:30;;::::1;10859:34:1::0;;10909:18;;;10902:43;;;;10961:18;;;10954:34;34405:195:0;;34028:194;;-1:-1:-1;34028:194:0;;34458:37;::::1;::::0;34028:194;;34405:195:::1;::::0;;;;;;::::1;-1:-1:-1::0;;16652:1:0;17604:7;:22;-1:-1:-1;33528:1080:0:o;41432:205::-;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;-1:-1:-1;;;;;41522:32:0;::::1;41514:70;;;::::0;-1:-1:-1;;;41514:70:0;;21400:2:1;41514:70:0::1;::::0;::::1;21382:21:1::0;21439:2;21419:18;;;21412:30;-1:-1:-1;;;21458:18:1;;;21451:55;21523:18;;41514:70:0::1;21372:175:1::0;41514:70:0::1;41595:15;:34:::0;;-1:-1:-1;;;;;;41595:34:0::1;-1:-1:-1::0;;;;;41595:34:0;;;::::1;::::0;;;::::1;::::0;;41432:205::o;34616:2007::-;16696:1;17292:7;;:19;;17284:63;;;;-1:-1:-1;;;17284:63:0;;;;;;;:::i;:::-;16696:1;17425:7;:18;;;34707:30;;;:20:::1;:30;::::0;;;;;;;:37:::1;;::::0;34765:22;;;:14:::1;:22:::0;;;;;;:29:::1;;::::0;-1:-1:-1;;;;;34765:29:0::1;34798:10;34765:43;34757:71;;;::::0;-1:-1:-1;;;34757:71:0;;17211:2:1;34757:71:0::1;::::0;::::1;17193:21:1::0;17250:2;17230:18;;;17223:30;-1:-1:-1;;;17269:18:1;;;17262:45;17324:18;;34757:71:0::1;17183:165:1::0;34757:71:0::1;34863:30;::::0;;;:20:::1;:30;::::0;;;;:39:::1;;::::0;::::1;::::0;::::1;;;:48;::::0;::::1;:118;;-1:-1:-1::0;34932:30:0::1;::::0;;;:20:::1;:30;::::0;;;;:40:::1;;::::0;::::1;;:49;34863:118;34841:198;;;::::0;-1:-1:-1;;;34841:198:0;;22101:2:1;34841:198:0::1;::::0;::::1;22083:21:1::0;22140:2;22120:18;;;22113:30;22179:32;22159:18;;;22152:60;22229:18;;34841:198:0::1;22073:180:1::0;34841:198:0::1;35052:13;35068:30:::0;;;:20:::1;:30;::::0;;;;:42:::1;::::0;::::1;::::0;35146:37:::1;::::0;;::::1;::::0;35241:17:::1;::::0;35068:42;;-1:-1:-1;;;;;35146:37:0;;::::1;::::0;35212:47:::1;::::0;:24:::1;35068:42:::0;35232:3:::1;35212:12;:24::i;:::-;:28:::0;::::1;:47::i;:::-;35305:15;::::0;35197:62;;-1:-1:-1;;;;;;35305:15:0::1;:31:::0;35301:281:::1;;35453:15;::::0;35436:75:::1;::::0;-1:-1:-1;;;35436:75:0;;35500:10:::1;35436:75;::::0;::::1;9816:51:1::0;35407:26:0::1;::::0;-1:-1:-1;;;;;35453:15:0::1;::::0;35436:63:::1;::::0;9789:18:1;;35436:75:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35407:104:::0;-1:-1:-1;35533:37:0::1;35407:104:::0;35533:13:::1;:4:::0;35542:3:::1;35533:8;:13::i;:37::-;35526:44;;35338:244;35301:281;35594:18;35615:15;:5:::0;35625:4;35615:9:::1;:15::i;:::-;35641:40;::::0;35594:36;;-1:-1:-1;35649:10:0::1;::::0;35641:40;::::1;;;::::0;35594:36;;35641:40:::1;::::0;;;35594:36;35649:10;35641:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;35696:8:0;;35692:61:::1;;35737:4;35721:14;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;35692:61:0::1;35796:22;::::0;;;:14:::1;:22;::::0;;;;;;;:32:::1;::::0;::::1;::::0;35922:30;;;:20:::1;:30:::0;;;;;:37:::1;::::0;;::::1;::::0;35974:22;;;;;;;;:30;;::::1;::::0;36019:29:::1;::::0;;::::1;::::0;35765:294:::1;::::0;35796:32:::1;-1:-1:-1::0;;;35796:32:0;::::1;;::::0;-1:-1:-1;;;;;35843:36:0;;::::1;::::0;35902:4:::1;::::0;35922:37;;;::::1;::::0;35765:16:::1;:294::i;:::-;36072:30;::::0;;;:20:::1;:30;::::0;;;;;;;:39:::1;::::0;;::::1;:46:::0;;-1:-1:-1;;36072:46:0::1;;;::::0;;36139:22;;;:14:::1;:22:::0;;;;;;;:29:::1;::::0;::::1;:36:::0;;-1:-1:-1;;36139:36:0::1;-1:-1:-1::0;36139:36:0;;::::1;::::0;;;36217:37:::1;::::0;;::::1;::::0;36186:28;;::::1;:68:::0;;-1:-1:-1;;;;;;36186:68:0::1;-1:-1:-1::0;;;;;36217:37:0;;::::1;36186:68;::::0;;44404:19;;;;;;;36411:30;;::::1;::::0;36360:36;;::::1;::::0;36307:257;;36360:36;;;::::1;::::0;36139:22;;36307:257:::1;::::0;::::1;::::0;36456:10:::1;::::0;36481:6;;36502:31:::1;::::0;;::::1;::::0;36548:5;;36307:257:::1;:::i;:::-;;;;;;;;36592:12;::::0;:23:::1;::::0;36609:5;36592:16:::1;:23::i;:::-;36577:12;:38:::0;-1:-1:-1;;16652:1:0;17604:7;:22;-1:-1:-1;;;;34616:2007:0:o;41645:162::-;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;-1:-1:-1;;;;;41750:39:0;;;::::1;;::::0;;;:23:::1;:39;::::0;;;;:49;;-1:-1:-1;;41750:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41645:162::o;27579:920::-;27628:19;27660:17;27680:18;:8;44285:14;;44193:114;27680:18;27660:38;;27709:23;27793:25;:15;44285:14;;44193:114;27793:25;27770:10;44285:14;27770:48;;;;:::i;:::-;27735:8;44285:14;27735:84;;;;:::i;:::-;27709:110;;27830:20;27867:31;27918:15;-1:-1:-1;;;;;27901:33:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;27867:67;;27950:9;27945:518;27969:9;27965:1;:13;27945:518;;;28061:1;28022:14;28061:1;28037:5;:1;28041;28037:5;:::i;:::-;28022:21;;;;;;;;;;;-1:-1:-1;28022:21:0;:27;;;-1:-1:-1;;;;;28022:27:0;:41;:102;;;;-1:-1:-1;28084:14:0;:21;28099:5;:1;28103;28099:5;:::i;:::-;28084:21;;;;;;;;;;;-1:-1:-1;28084:21:0;:31;;;;;;;;:40;28022:102;:160;;;;-1:-1:-1;28145:14:0;:21;28160:5;:1;28164;28160:5;:::i;:::-;28145:21;;;;;;;;;;;-1:-1:-1;28145:21:0;:28;;;;;:37;28022:160;28000:452;;;28217:17;28237:14;28217:17;28252:5;:1;28256;28252:5;:::i;:::-;28237:21;;;;;;;;;;;;;;-1:-1:-1;28237:21:0;;;:28;28317:25;;;:14;:25;;;;;;28361:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;28361:39:0;;;;;;;;;28237:28;;-1:-1:-1;28317:25:0;28361:39;;28317:25;;28361:39;;;;-1:-1:-1;;;28361:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28361:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28361:39:0;;;-1:-1:-1;;28361:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:11;;28373:12;;28361:25;;;;;;:::i;:::-;;;;;;;;;;:39;28419:17;28435:1;28419:17;;:::i;:::-;;;28198:254;;28000:452;27980:3;;;;:::i;:::-;;;;27945:518;;;-1:-1:-1;28480:11:0;27579:920;-1:-1:-1;;;;27579:920:0:o;43241:212::-;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;43343:17:::1;;43331:11;:29;:49;;;;;43377:3;43364:11;:16;;43331:49;43322:81;;;::::0;-1:-1:-1;;;43322:81:0;;18602:2:1;43322:81:0::1;::::0;::::1;18584:21:1::0;18641:2;18621:18;;;18614:30;-1:-1:-1;;;18660:18:1;;;18653:48;18718:18;;43322:81:0::1;18574:168:1::0;43322:81:0::1;43414:17;:31:::0;43241:212::o;26325:1196::-;26406:19;26454:18;:8;44285:14;;44193:114;26454:18;26446:5;:26;:55;;;;-1:-1:-1;26483:8:0;44285:14;26476:3;:25;;26446:55;26438:86;;;;-1:-1:-1;;;26438:86:0;;20704:2:1;26438:86:0;;;20686:21:1;20743:2;20723:18;;;20716:30;-1:-1:-1;;;20762:18:1;;;20755:48;20820:18;;26438:86:0;20676:168:1;26438:86:0;26537:17;26582:5;26565:296;26594:3;26589:1;:8;26565:296;;26676:1;26641:17;;;:14;:17;;;;;:23;;;-1:-1:-1;;;;;26641:23:0;:37;:94;;;;-1:-1:-1;26699:17:0;;;;:14;:17;;;;;:27;;;;;;;;:36;26641:94;:148;;;;-1:-1:-1;26756:17:0;;;;:14;:17;;;;;:24;;;;;:33;26641:148;26619:231;;;26823:11;;;;:::i;:::-;;;;26619:231;26599:3;;;;:::i;:::-;;;;26565:296;;;;26873:20;26908:31;26959:9;-1:-1:-1;;;;;26942:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;26908:61:0;-1:-1:-1;26997:5:0;26980:505;27009:3;27004:1;:8;26980:505;;27094:1;27059:17;;;:14;:17;;;;;:23;;;-1:-1:-1;;;;;27059:23:0;:37;:94;;;;-1:-1:-1;27117:17:0;;;;:14;:17;;;;;:27;;;;;;;;:36;27059:94;:148;;;;-1:-1:-1;27174:17:0;;;;:14;:17;;;;;:24;;;;;:33;27059:148;27037:435;;;27241:17;27261;;;:14;:17;;;;;;;;:24;27337:25;;;;;;;27381:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;27381:39:0;;;;;;;;;27337:25;;27381:39;;27337:25;;27381:39;;;;-1:-1:-1;;;27381:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27381:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27381:39:0;;;-1:-1:-1;;27381:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:11;;27393:12;;27381:25;;;;;;:::i;:::-;;;;;;;;;;:39;27439:17;27455:1;27439:17;;:::i;:::-;;;27222:250;;27037:435;27014:3;;;;:::i;:::-;;;;26980:505;;39858:1184;39986:22;40055:31;;;:22;:31;;;;;;;;40023:63;;;;;;;;;;;;;;;;;39948:20;;39986:22;;;40023:63;40055:31;40023:63;;;40055:31;40023:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40104:9;40099:297;40123:12;:19;40119:1;:23;40099:297;;;40186:20;:37;40207:12;40220:1;40207:15;;;;;;;;:::i;:::-;;;;;;;;;;;;40186:37;;;;;;;;;;-1:-1:-1;40186:37:0;:46;;;;;;;;:55;;;:132;;;40262:20;:37;40283:12;40296:1;40283:15;;;;;;;;:::i;:::-;;;;;;;;;;;;40262:37;;;;;;;;;;-1:-1:-1;40262:37:0;:47;;;;;:56;40186:132;40164:221;;;40353:16;;;;:::i;:::-;;;;40164:221;40144:3;;;;:::i;:::-;;;;40099:297;;;;40408:31;40460:14;-1:-1:-1;;;;;40442:33:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;40408:67;;40486:20;40526:9;40521:484;40545:12;:19;40541:1;:23;40521:484;;;40608:20;:37;40629:12;40642:1;40629:15;;;;;;;;:::i;:::-;;;;;;;;;;;;40608:37;;;;;;;;;;-1:-1:-1;40608:37:0;:46;;;;;;;;:55;;;:132;;;40684:20;:37;40705:12;40718:1;40705:15;;;;;;;;:::i;:::-;;;;;;;;;;;;40684:37;;;;;;;;;;-1:-1:-1;40684:37:0;:47;;;;;:56;40608:132;40586:408;;;40775:30;40808:20;:77;40851:12;40864:1;40851:15;;;;;;;;:::i;:::-;;;;;;;;;;;;40808:77;;;;;;;;;;;;;-1:-1:-1;40808:77:0;40775:110;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40775:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40904:24;;40775:110;;-1:-1:-1;40775:110:0;;40904:10;;40915:12;;40904:24;;;;;;:::i;:::-;;;;;;;;;;:38;40961:17;40977:1;40961:17;;:::i;:::-;;;40756:238;40586:408;40566:3;;;;:::i;:::-;;;;40521:484;;30023:1322;30157:19;30210:18;:8;44285:14;;44193:114;30210:18;30202:5;:26;:55;;;;-1:-1:-1;30239:8:0;44285:14;30232:3;:25;;30202:55;30194:86;;;;-1:-1:-1;;;30194:86:0;;20704:2:1;30194:86:0;;;20686:21:1;20743:2;20723:18;;;20716:30;-1:-1:-1;;;20762:18:1;;;20755:48;20820:18;;30194:86:0;20676:168:1;30194:86:0;30293:17;;30379:5;30362:358;30391:3;30386:1;:8;30362:358;;30438:17;;;;:14;:17;;;;;:24;;;-1:-1:-1;;;;;30438:35:0;;;:24;;:35;:92;;;;-1:-1:-1;30494:17:0;;;;:14;:17;;;;;:27;;;;;;;;:36;30438:92;:146;;;;-1:-1:-1;30551:17:0;;;;:14;:17;;;;;:24;;;;;:33;30438:146;30416:293;;;30624:14;30637:1;30624:14;;:::i;:::-;;;30416:293;30396:3;;;;:::i;:::-;;;;30362:358;;;;30732:31;30783:9;-1:-1:-1;;;;;30766:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;30732:61:0;-1:-1:-1;30822:5:0;30804:505;30834:3;30829:1;:8;30804:505;;30881:17;;;;:14;:17;;;;;:24;;;-1:-1:-1;;;;;30881:35:0;;;:24;;:35;:92;;;;-1:-1:-1;30937:17:0;;;;:14;:17;;;;;:27;;;;;;;;:36;30881:92;:146;;;;-1:-1:-1;30994:17:0;;;;:14;:17;;;;;:24;;;;;:33;30881:146;30859:439;;;31067:17;31087;;;:14;:17;;;;;;;;:24;31163:25;;;;;;;31207:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;31207:39:0;;;;;;;;;31163:25;;31207:39;;31163:25;;31207:39;;;;-1:-1:-1;;;31207:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31207:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31207:39:0;;;-1:-1:-1;;31207:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:11;;31219:12;;31207:25;;;;;;:::i;:::-;;;;;;;;;;:39;31265:17;31281:1;31265:17;;:::i;:::-;;;31048:250;;30859:439;30839:3;;;;:::i;:::-;;;;30804:505;;;-1:-1:-1;31326:11:0;30023:1322;-1:-1:-1;;;;;;30023:1322:0:o;22234:1304::-;16696:1;17292:7;;:19;;17284:63;;;;-1:-1:-1;;;17284:63:0;;;;;;;:::i;:::-;16696:1;17425:7;:18;22484:10;22476:44:::1;;;::::0;-1:-1:-1;;;22476:44:0;;17907:2:1;22476:44:0::1;::::0;::::1;17889:21:1::0;17946:2;17926:18;;;17919:30;-1:-1:-1;;;17965:18:1;;;17958:51;18026:18;;22476:44:0::1;17879:171:1::0;22476:44:0::1;22549:1;22539:7;:11;22531:42;;;::::0;-1:-1:-1;;;22531:42:0;;21754:2:1;22531:42:0::1;::::0;::::1;21736:21:1::0;21793:2;21773:18;;;21766:30;-1:-1:-1;;;21812:18:1;;;21805:48;21870:18;;22531:42:0::1;21726:168:1::0;22531:42:0::1;-1:-1:-1::0;;;;;22592:39:0;::::1;;::::0;;;:23:::1;:39;::::0;;;;;::::1;;:45;;:39:::0;:45:::1;22584:84;;;::::0;-1:-1:-1;;;22584:84:0;;20348:2:1;22584:84:0::1;::::0;::::1;20330:21:1::0;20387:2;20367:18;;;20360:30;20426:29;20406:18;;;20399:57;20473:18;;22584:84:0::1;20320:177:1::0;22584:84:0::1;22681:20;:8;44404:19:::0;;44422:1;44404:19;;;44315:127;22681:20:::1;22712:14;22729:18;:8;44285:14:::0;;44193:114;22729:18:::1;22712:35;;22783:319;;;;;;;;22808:6;22783:319;;;;22829:14;-1:-1:-1::0;;;;;22783:319:0::1;;;;;22858:10;22783:319;;;;;;;;:::i;:::-;;;;;22883:8;22783:319;;;;22906:7;22783:319;;;;22936:10;-1:-1:-1::0;;;;;22783:319:0::1;;;;;22978:1;-1:-1:-1::0;;;;;22783:319:0::1;;;;;23021:9;;22783:319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;22783:319:0;;;-1:-1:-1;;;22783:319:0::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;22758:22;;;:14:::1;:22:::0;;;;;;:344;;;;;;::::1;::::0;22783:319;22758:344;::::1;::::0;;-1:-1:-1;;;;;22758:344:0;;::::1;-1:-1:-1::0;;;;;;22758:344:0;::::1;::::0;::::1;::::0;;;;::::1;::::0;:22;;:344;;-1:-1:-1;;;;;;22758:344:0;;-1:-1:-1;;;22758:344:0;::::1;::::0;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;22758:344:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;22758:344:0;;::::1;-1:-1:-1::0;;;;;;22758:344:0;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;22758:344:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;22758:344:0;;;;::::1;;-1:-1:-1::0;;22758:344:0;;;;;;::::1;;;::::0;;;::::1;::::0;;23115:179:::1;23146:10:::0;23171:14;23200:10:::1;23233:4;23253:8:::0;23276:7;23115:16:::1;:179::i;:::-;23394:8;23365:14;-1:-1:-1::0;;;;;23312:218:0::1;23344:6;23312:218;23417:7;23439:10;23472:1;23489:9;;23513:6;23312:218;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;16652:1:0;17604:7;:22;-1:-1:-1;;;;;;22234:1304:0:o;36631:649::-;16696:1;17292:7;;:19;;17284:63;;;;-1:-1:-1;;;17284:63:0;;;;;;;:::i;:::-;16696:1;17425:7;:18;;;36726:30;;;:20:::1;:30;::::0;;;;:37:::1;::::0;-1:-1:-1;;;;;36726:37:0::1;36767:10;36726:51;:121:::0;::::1;;;-1:-1:-1::0;36798:30:0::1;::::0;;;:20:::1;:30;::::0;;;;:40:::1;;::::0;::::1;;:49;36726:121;36704:213;;;::::0;-1:-1:-1;;;36704:213:0;;22820:2:1;36704:213:0::1;::::0;::::1;22802:21:1::0;22859:2;22839:18;;;22832:30;22898:34;22878:18;;;22871:62;-1:-1:-1;;;22949:18:1;;;22942:40;22999:19;;36704:213:0::1;22792:232:1::0;36704:213:0::1;36950:30;::::0;;;:20:::1;:30;::::0;;;;:39:::1;;::::0;::::1;::::0;::::1;;;:48;36928:115;;;::::0;-1:-1:-1;;;36928:115:0;;20002:2:1;36928:115:0::1;::::0;::::1;19984:21:1::0;20041:2;20021:18;;;20014:30;-1:-1:-1;;;20060:18:1;;;20053:47;20117:18;;36928:115:0::1;19974:167:1::0;36928:115:0::1;37056:14;37073:30:::0;;;:20:::1;:30;::::0;;;;;:37:::1;::::0;::::1;::::0;37123:40:::1;::::0;::::1;:47:::0;;-1:-1:-1;;37123:47:0::1;37073:37:::0;37123:47:::1;::::0;;37206:42:::1;::::0;;::::1;::::0;37181:68;;-1:-1:-1;;;;;37073:37:0;;::::1;::::0;;;37181:68;::::1;;;::::0;37206:42;;37181:68;37056:14;37181:68;37206:42;37073:37;37181:68;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16652:1:0;17604:7;:22;-1:-1:-1;36631:649:0:o;42910:157::-;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;-1:-1:-1;;;;;42987:24:0;::::1;42978:52;;;::::0;-1:-1:-1;;;42978:52:0;;23589:2:1;42978:52:0::1;::::0;::::1;23571:21:1::0;23628:2;23608:18;;;23601:30;-1:-1:-1;;;23647:18:1;;;23640:44;23701:18;;42978:52:0::1;23561:164:1::0;42978:52:0::1;43041:7;:18:::0;;-1:-1:-1;;;;;;43041:18:0::1;-1:-1:-1::0;;;;;43041:18:0;;;::::1;::::0;;;::::1;::::0;;42910:157::o;31437:1501::-;31541:19;31578:22;31603:18;:8;44285:14;;44193:114;31603:18;31578:43;;31632:17;31664:20;31706:9;31701:456;31725:14;31721:1;:18;31701:456;;;31890:8;;31873:26;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31863:37;;;;;;31810:14;:21;31825:1;31829;31825:5;;;;:::i;:::-;31810:21;;;;;;;;;;;:30;;31793:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;31783:59;;;;;;:117;:179;;;;-1:-1:-1;31960:1:0;31921:14;31960:1;31936:5;:1;31940;31936:5;:::i;:::-;31921:21;;;;;;;;;;;-1:-1:-1;31921:21:0;:27;;;-1:-1:-1;;;;;31921:27:0;:41;31783:179;:240;;;;-1:-1:-1;31983:14:0;:21;31998:5;:1;32002;31998:5;:::i;:::-;31983:21;;;;;;;;;;;-1:-1:-1;31983:21:0;:31;;;;;;;;:40;31783:240;:298;;;;-1:-1:-1;32044:14:0;:21;32059:5;:1;32063;32059:5;:::i;:::-;32044:21;;;;;;;;;;;-1:-1:-1;32044:21:0;:28;;;;;:37;31783:298;31761:385;;;32116:14;32129:1;32116:14;;:::i;:::-;;;31761:385;31741:3;;;;:::i;:::-;;;;31701:456;;;;32169:31;32220:9;-1:-1:-1;;;;;32203:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;32169:61;;32246:9;32241:661;32265:14;32261:1;:18;32241:661;;;32430:8;;32413:26;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32403:37;;;;;;32350:14;:21;32365:1;32369;32365:5;;;;:::i;:::-;32350:21;;;;;;;;;;;:30;;32333:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;32323:59;;;;;;:117;:179;;;;-1:-1:-1;32500:1:0;32461:14;32500:1;32476:5;:1;32480;32476:5;:::i;:::-;32461:21;;;;;;;;;;;-1:-1:-1;32461:21:0;:27;;;-1:-1:-1;;;;;32461:27:0;:41;32323:179;:240;;;;-1:-1:-1;32523:14:0;:21;32538:5;:1;32542;32538:5;:::i;:::-;32523:21;;;;;;;;;;;-1:-1:-1;32523:21:0;:31;;;;;;;;:40;32323:240;:298;;;;-1:-1:-1;32584:14:0;:21;32599:5;:1;32603;32599:5;:::i;:::-;32584:21;;;;;;;;;;;-1:-1:-1;32584:21:0;:28;;;;;:37;32323:298;32301:590;;;32656:17;32676:14;32656:17;32691:5;:1;32695;32691:5;:::i;:::-;32676:21;;;;;;;;;;;;;;-1:-1:-1;32676:21:0;;;:28;32756:25;;;:14;:25;;;;;;32800:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;32800:39:0;;;;;;;;;32676:28;;-1:-1:-1;32756:25:0;32800:39;;32756:25;;32800:39;;;;-1:-1:-1;;;32800:39:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32800:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32800:39:0;;;-1:-1:-1;;32800:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:11;;32812:12;;32800:25;;;;;;:::i;:::-;;;;;;;;;;:39;32858:17;32874:1;32858:17;;:::i;:::-;;;32637:254;;32301:590;32281:3;;;;:::i;:::-;;;;32241:661;;43075:158;18035:5;;-1:-1:-1;;;;;18035:5:0;18021:10;:19;18013:28;;;;;;-1:-1:-1;;;;;43152:24:0;::::1;43143:53;;;::::0;-1:-1:-1;;;43143:53:0;;19658:2:1;43143:53:0::1;::::0;::::1;19640:21:1::0;19697:2;19677:18;;;19670:30;-1:-1:-1;;;19716:18:1;;;19709:45;19771:18;;43143:53:0::1;19630:165:1::0;43143:53:0::1;43207:7;:18:::0;;-1:-1:-1;;;;;;43207:18:0::1;-1:-1:-1::0;;;;;43207:18:0;;;::::1;::::0;;;::::1;::::0;;43075:158::o;23592:682::-;23670:8;44285:14;23660:6;:28;;23652:37;;;;;;23708:22;;;;:14;:22;;;;;:29;;;-1:-1:-1;;;;;23708:29:0;23741:10;23708:43;23700:52;;;;;;23785:22;;;;:14;:22;;;;;:32;;;;;;;;:41;;;:100;;-1:-1:-1;23847:22:0;;;;:14;:22;;;;;:29;;;;;:38;23785:100;23763:133;;;;;;23909:22;;;;:14;:22;;;;;:32;;:39;;-1:-1:-1;;23909:39:0;;;;;23959:27;:15;44404:19;;44422:1;44404:19;;;44315:127;23959:27;24030:22;;;;:14;:22;;;;;:32;;;;24181:30;;;;24226:29;;;;;23999:267;;24030:32;-1:-1:-1;;;24030:32:0;;;;-1:-1:-1;;;;;24077:36:0;;24136:4;;24156:10;;23999:16;:267::i;:::-;23592:682;:::o;19976:59::-;;;;;;;;;;;;;;;;;;;;38645:1205;-1:-1:-1;;;;;38885:31:0;;38816:22;38885:31;;;:22;:31;;;;;;;;38853:63;;;;;;;;;;;;;;;;;38778:20;;38816:22;;;38853:63;38885:31;38853:63;;;38885:31;38853:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38853:63:0;;-1:-1:-1;38946:5:0;;-1:-1:-1;;;;38929:286:0;38958:3;38953:1;:8;38929:286;;39005:20;:37;39026:12;39039:1;39026:15;;;;;;;;:::i;:::-;;;;;;;;;;;;39005:37;;;;;;;;;;-1:-1:-1;39005:37:0;:46;;;;;;;;:55;;;:132;;;39081:20;:37;39102:12;39115:1;39102:15;;;;;;;;:::i;:::-;;;;;;;;;;;;39081:37;;;;;;;;;;-1:-1:-1;39081:37:0;:47;;;;;:56;39005:132;38983:221;;;39172:16;;;;:::i;:::-;;;;38983:221;38963:3;;;;:::i;:::-;;;;38929:286;;;;39227:31;39279:14;-1:-1:-1;;;;;39261:33:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;39227:67:0;-1:-1:-1;39305:20:0;39357:5;39340:473;39369:3;39364:1;:8;39340:473;;39416:20;:37;39437:12;39450:1;39437:15;;;;;;;;:::i;:::-;;;;;;;;;;;;39416:37;;;;;;;;;;-1:-1:-1;39416:37:0;:46;;;;;;;;:55;;;:132;;;39492:20;:37;39513:12;39526:1;39513:15;;;;;;;;:::i;:::-;;;;;;;;;;;;39492:37;;;;;;;;;;-1:-1:-1;39492:37:0;:47;;;;;:56;39416:132;39394:408;;;39583:30;39616:20;:77;39659:12;39672:1;39659:15;;;;;;;;:::i;:::-;;;;;;;;;;;;39616:77;;;;;;;;;;;;;-1:-1:-1;39616:77:0;39583:110;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39583:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39712:24;;39583:110;;-1:-1:-1;39583:110:0;;39712:10;;39723:12;;39712:24;;;;;;:::i;:::-;;;;;;;;;;:38;39769:17;39785:1;39769:17;;:::i;:::-;;;39564:238;39394:408;39374:3;;;;:::i;:::-;;;;39340:473;;;-1:-1:-1;39832:10:0;;38645:1205;-1:-1:-1;;;;;;;38645:1205:0:o;33157:225::-;33211:7;33231:23;33315:25;:15;44285:14;;44193:114;33315:25;33292:10;44285:14;33292:48;;;;:::i;:::-;33257:8;44285:14;33257:84;;;;:::i;24332:1985::-;16696:1;17292:7;;:19;;17284:63;;;;-1:-1:-1;;;17284:63:0;;;;;;;:::i;:::-;16696:1;17425:7;:18;;;24429:22;;;:14:::1;:22;::::0;;;;:28:::1;::::0;::::1;::::0;24486:30;::::1;::::0;24549:9:::1;:18:::0;::::1;24527:97;;;::::0;-1:-1:-1;;;24527:97:0;;23231:2:1;24527:97:0::1;::::0;::::1;23213:21:1::0;23270:2;23250:18;;;23243:30;23309:31;23289:18;;;23282:59;23358:18;;24527:97:0::1;23203:179:1::0;24527:97:0::1;24657:22;::::0;;;:14:::1;:22;::::0;;;;:29:::1;;::::0;::::1;;:38;24635:114;;;::::0;-1:-1:-1;;;24635:114:0;;16856:2:1;24635:114:0::1;::::0;::::1;16838:21:1::0;16895:2;16875:18;;;16868:30;16934:28;16914:18;;;16907:56;16980:18;;24635:114:0::1;16828:176:1::0;24635:114:0::1;24782:22;::::0;;;:14:::1;:22;::::0;;;;:32:::1;;::::0;::::1;::::0;::::1;;;:41;24760:117;;;::::0;-1:-1:-1;;;24760:117:0;;19303:2:1;24760:117:0::1;::::0;::::1;19285:21:1::0;19342:2;19322:18;;;19315:30;19381:28;19361:18;;;19354:56;19427:18;;24760:117:0::1;19275:176:1::0;24760:117:0::1;24910:22;::::0;;;:14:::1;:22;::::0;;;;:29:::1;;::::0;-1:-1:-1;;;;;24910:29:0::1;24943:10;24910:43;;24888:118;;;::::0;-1:-1:-1;;;24888:118:0;;18949:2:1;24888:118:0::1;::::0;::::1;18931:21:1::0;18988:2;18968:18;;;18961:30;19027:27;19007:18;;;19000:55;19072:18;;24888:118:0::1;18921:175:1::0;24888:118:0::1;25087:12;25102:47;25131:17;;25102:24;25115:5;25122:3;25102:12;:24::i;:47::-;25166:15;::::0;25087:62;;-1:-1:-1;;;;;;25166:15:0::1;:31:::0;25162:281:::1;;25314:15;::::0;25297:75:::1;::::0;-1:-1:-1;;;25297:75:0;;25361:10:::1;25297:75;::::0;::::1;9816:51:1::0;25268:26:0::1;::::0;-1:-1:-1;;;;;25314:15:0::1;::::0;25297:63:::1;::::0;9789:18:1;;25297:75:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25268:104:::0;-1:-1:-1;25394:37:0::1;25268:104:::0;25394:13:::1;:4:::0;25403:3:::1;25394:8;:13::i;:37::-;25387:44;;25199:244;25162:281;25455:18;25476:15;:5:::0;25486:4;25476:9:::1;:15::i;:::-;25502:22;::::0;;;:14:::1;:22;::::0;;;;;:29:::1;;::::0;:50;;25455:36;;-1:-1:-1;;;;;;25502:29:0::1;::::0;:50;::::1;;;::::0;25455:36;;25502:50;;:22;:50;25455:36;25502:29;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25579:4;25563:14;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25627:22:0::1;::::0;;;:14:::1;:22;::::0;;;;:32:::1;::::0;::::1;::::0;25800:29:::1;::::0;;::::1;::::0;25596:244:::1;::::0;25627:32:::1;-1:-1:-1::0;;;25627:32:0;::::1;;::::0;-1:-1:-1;;;;;25674:36:0;;::::1;::::0;25733:4:::1;::::0;25753:10:::1;::::0;25778:7;;25596:16:::1;:244::i;:::-;25853:22;::::0;;;:14:::1;:22;::::0;;;;:29:::1;::::0;::::1;:36:::0;;-1:-1:-1;;25853:36:0::1;25885:4;25853:36;::::0;;25900:28:::1;::::0;;::::1;:50:::0;;-1:-1:-1;;;;;;25900:50:0::1;25939:10;25900:50;::::0;;25963:22:::1;::::0;44404:19;;44422:1;44404:19;;;44315:127;25963:22:::1;26011:12;::::0;:23:::1;::::0;26028:5;26011:16:::1;:23::i;:::-;25996:12;:38:::0;26105:22:::1;::::0;;;:14:::1;:22;::::0;;;;;;:36:::1;::::0;::::1;::::0;26178:29:::1;::::0;::::1;::::0;26052:257;;26156:7;;-1:-1:-1;;;;;26105:36:0;;::::1;::::0;26120:6;;26052:257:::1;::::0;::::1;::::0;26178:29;;::::1;::::0;26222:10:::1;::::0;26247:31:::1;::::0;;::::1;::::0;26293:5;;26052:257:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;16652:1:0;17604:7;:22;-1:-1:-1;;;24332:1985:0:o;32996:102::-;33043:7;33070:20;:10;44285:14;;44193:114;33070:20;33063:27;;32996:102;:::o;42552:350::-;18125:7;;-1:-1:-1;;;;;18125:7:0;18111:10;:21;;:46;;-1:-1:-1;18150:7:0;;-1:-1:-1;;;;;18150:7:0;18136:10;:21;18111:46;:69;;;-1:-1:-1;18175:5:0;;-1:-1:-1;;;;;18175:5:0;18161:10;:19;18111:69;18103:78;;;;;;42633:1:::1;42616:14;;:18;42607:28;;;::::0;::::1;;42646:15;42664:55;42701:17;;42664:32;42677:14;;42692:3;42664:12;:32::i;:55::-;42646:73;;42730:15;42748:27;42767:7;42748:14;;:18;;:27;;;;:::i;:::-;42803:1;42786:14;:18:::0;;;42823:7:::1;::::0;42815:34:::1;::::0;42730:45;;-1:-1:-1;;;;;;42823:7:0::1;::::0;42815:34;::::1;;;::::0;42730:45;;42815:34;;42803:1;42815:34;42730:45;42823:7;42815:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42868:7:0::1;::::0;42860:34:::1;::::0;-1:-1:-1;;;;;42868:7:0;;::::1;::::0;42860:34;::::1;;;::::0;42886:7;;42868::::1;42860:34:::0;42868:7;42860:34;42886:7;42868;42860:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42596:306;;42552:350::o:0;19779:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19779:52:0;;;;-1:-1:-1;;;19779:52:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;19779:52:0;;;;;;;;;;;;;;;;;-1:-1:-1;19779:52:0;;;;;;:::o;45190:288::-;45248:7;;45359:5;45363:1;45359;:5;:::i;:::-;45347:17;45190:288;-1:-1:-1;;;;45190:288:0:o;44885:208::-;44943:7;44967:6;44963:47;;-1:-1:-1;44997:1:0;44990:8;;44963:47;45020:9;45032:5;45036:1;45032;:5;:::i;:::-;45020:17;-1:-1:-1;45064:1:0;45055:5;45059:1;45020:17;45055:5;:::i;:::-;:10;45048:18;;;;:::i;:::-;45084:1;44885:208;-1:-1:-1;;;44885:208:0:o;45606:123::-;45664:7;45696:1;45691;:6;;45684:14;;;;:::i;:::-;45716:5;45720:1;45716;:5;:::i;20874:1148::-;21129:16;21115:10;:30;;;;;;;;:::i;:::-;;21111:215;;;21235:58;;-1:-1:-1;;;21235:58:0;;-1:-1:-1;;;;;10877:15:1;;;21235:58:0;;;10859:34:1;10929:15;;;10909:18;;;10902:43;10961:18;;;10954:34;;;21235:36:0;;;;;10794:18:1;;21235:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21308:7;;21111:215;21377:17;21363:10;:31;;;;;;;;:::i;:::-;;21359:297;;;21411:170;;-1:-1:-1;;;21411:170:0;;-1:-1:-1;;;;;12239:15:1;;;21411:170:0;;;12221:34:1;12291:15;;;12271:18;;;12264:43;12323:18;;;12316:34;;;21544:1:0;12366:18:1;;;12359:34;12201:3;12409:19;;;12402:32;-1:-1:-1;12450:19:1;;;12443:30;21411:41:0;;;;;12490:19:1;;21411:170:0;12173:342:1;21359:297:0;21707:15;21693:10;:29;;;;;;;;:::i;:::-;;21689:326;;;-1:-1:-1;;;;;21743:20:0;;21758:4;21743:20;21739:114;;;21783:54;;-1:-1:-1;;;21783:54:0;;21822:4;21783:54;;;12694:51:1;12761:18;;;12754:34;;;-1:-1:-1;;;;;21783:30:0;;;;;12667:18:1;;21783:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21739:114;21867:56;;-1:-1:-1;;;21867:56:0;;-1:-1:-1;;;;;10877:15:1;;;21867:56:0;;;10859:34:1;10929:15;;;10909:18;;;10902:43;10961:18;;;10954:34;;;21867:35:0;;;;;10794:18:1;;21867:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21689:326;20874:1148;;;;;;:::o;45806:147::-;45864:7;;45896:5;45900:1;45896;:5;:::i;:::-;45884:17;;45924:1;45919;:6;;45912:14;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:723::-;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;317:1;314;307:12;266:2;353:6;340:20;379:4;-1:-1:-1;;;;;398:2:1;395:26;392:2;;;424:18;;:::i;:::-;470:2;467:1;463:10;493:28;517:2;513;509:11;493:28;:::i;:::-;555:15;;;586:12;;;;618:15;;;652;;;648:24;;645:33;-1:-1:-1;642:2:1;;;691:1;688;681:12;642:2;713:1;704:10;;723:163;737:2;734:1;731:9;723:163;;;794:17;;782:30;;755:1;748:9;;;;;832:12;;;;864;;723:163;;;-1:-1:-1;904:5:1;256:659;-1:-1:-1;;;;;;;256:659:1:o;920:530::-;962:5;1015:3;1008:4;1000:6;996:17;992:27;982:2;;1033:1;1030;1023:12;982:2;1069:6;1056:20;-1:-1:-1;;;;;1091:2:1;1088:26;1085:2;;;1117:18;;:::i;:::-;1161:55;1204:2;1185:13;;-1:-1:-1;;1181:27:1;1210:4;1177:38;1161:55;:::i;:::-;1241:2;1232:7;1225:19;1287:3;1280:4;1275:2;1267:6;1263:15;1259:26;1256:35;1253:2;;;1304:1;1301;1294:12;1253:2;1369;1362:4;1354:6;1350:17;1343:4;1334:7;1330:18;1317:55;1417:1;1392:16;;;1410:4;1388:27;1381:38;;;;1396:7;972:478;-1:-1:-1;;;972:478:1:o;1455:348::-;1507:8;1517:6;1571:3;1564:4;1556:6;1552:17;1548:27;1538:2;;1589:1;1586;1579:12;1538:2;-1:-1:-1;1612:20:1;;-1:-1:-1;;;;;1644:30:1;;1641:2;;;1687:1;1684;1677:12;1641:2;1724:4;1716:6;1712:17;1700:29;;1776:3;1769:4;1760:6;1752;1748:19;1744:30;1741:39;1738:2;;;1793:1;1790;1783:12;1738:2;1528:275;;;;;:::o;1808:186::-;1867:6;1920:2;1908:9;1899:7;1895:23;1891:32;1888:2;;;1936:1;1933;1926:12;1888:2;1959:29;1978:9;1959:29;:::i;1999:943::-;2153:6;2161;2169;2177;2185;2238:3;2226:9;2217:7;2213:23;2209:33;2206:2;;;2255:1;2252;2245:12;2206:2;2278:29;2297:9;2278:29;:::i;:::-;2268:39;;2326:38;2360:2;2349:9;2345:18;2326:38;:::i;:::-;2316:48;;2415:2;2404:9;2400:18;2387:32;-1:-1:-1;;;;;2479:2:1;2471:6;2468:14;2465:2;;;2495:1;2492;2485:12;2465:2;2518:61;2571:7;2562:6;2551:9;2547:22;2518:61;:::i;:::-;2508:71;;2632:2;2621:9;2617:18;2604:32;2588:48;;2661:2;2651:8;2648:16;2645:2;;;2677:1;2674;2667:12;2645:2;2700:63;2755:7;2744:8;2733:9;2729:24;2700:63;:::i;:::-;2690:73;;2816:3;2805:9;2801:19;2788:33;2772:49;;2846:2;2836:8;2833:16;2830:2;;;2862:1;2859;2852:12;2830:2;;2885:51;2928:7;2917:8;2906:9;2902:24;2885:51;:::i;:::-;2875:61;;;2196:746;;;;;;;;:::o;2947:606::-;3051:6;3059;3067;3075;3083;3136:3;3124:9;3115:7;3111:23;3107:33;3104:2;;;3153:1;3150;3143:12;3104:2;3176:29;3195:9;3176:29;:::i;:::-;3166:39;;3224:38;3258:2;3247:9;3243:18;3224:38;:::i;:::-;3214:48;;3309:2;3298:9;3294:18;3281:32;3271:42;;3360:2;3349:9;3345:18;3332:32;3322:42;;3415:3;3404:9;3400:19;3387:33;-1:-1:-1;;;;;3435:6:1;3432:30;3429:2;;;3475:1;3472;3465:12;3429:2;3498:49;3539:7;3530:6;3519:9;3515:22;3498:49;:::i;3558:315::-;3623:6;3631;3684:2;3672:9;3663:7;3659:23;3655:32;3652:2;;;3700:1;3697;3690:12;3652:2;3723:29;3742:9;3723:29;:::i;:::-;3713:39;;3802:2;3791:9;3787:18;3774:32;3815:28;3837:5;3815:28;:::i;:::-;3862:5;3852:15;;;3642:231;;;;;:::o;3878:849::-;4007:6;4015;4023;4031;4039;4047;4055;4108:3;4096:9;4087:7;4083:23;4079:33;4076:2;;;4125:1;4122;4115:12;4076:2;4148:29;4167:9;4148:29;:::i;:::-;4138:39;;4227:2;4216:9;4212:18;4199:32;4260:1;4253:5;4250:12;4240:2;;4276:1;4273;4266:12;4240:2;4299:5;-1:-1:-1;4351:2:1;4336:18;;4323:32;;-1:-1:-1;4402:2:1;4387:18;;4374:32;;-1:-1:-1;4453:3:1;4438:19;;4425:33;;-1:-1:-1;4509:3:1;4494:19;;4481:33;-1:-1:-1;;;;;4526:30:1;;4523:2;;;4569:1;4566;4559:12;4523:2;4608:59;4659:7;4650:6;4639:9;4635:22;4608:59;:::i;:::-;4066:661;;;;-1:-1:-1;4066:661:1;;-1:-1:-1;4066:661:1;;;;4582:85;;-1:-1:-1;;;4066:661:1:o;4732:254::-;4800:6;4808;4861:2;4849:9;4840:7;4836:23;4832:32;4829:2;;;4877:1;4874;4867:12;4829:2;4900:29;4919:9;4900:29;:::i;:::-;4890:39;4976:2;4961:18;;;;4948:32;;-1:-1:-1;;;4819:167:1:o;4991:322::-;5068:6;5076;5084;5137:2;5125:9;5116:7;5112:23;5108:32;5105:2;;;5153:1;5150;5143:12;5105:2;5176:29;5195:9;5176:29;:::i;:::-;5166:39;5252:2;5237:18;;5224:32;;-1:-1:-1;5303:2:1;5288:18;;;5275:32;;5095:218;-1:-1:-1;;;5095:218:1:o;5318:245::-;5385:6;5438:2;5426:9;5417:7;5413:23;5409:32;5406:2;;;5454:1;5451;5444:12;5406:2;5486:9;5480:16;5505:28;5527:5;5505:28;:::i;5568:286::-;5626:6;5679:2;5667:9;5658:7;5654:23;5650:32;5647:2;;;5695:1;5692;5685:12;5647:2;5721:23;;-1:-1:-1;;;;;;5773:32:1;;5763:43;;5753:2;;5820:1;5817;5810:12;5859:411;5930:6;5938;5991:2;5979:9;5970:7;5966:23;5962:32;5959:2;;;6007:1;6004;5997:12;5959:2;6047:9;6034:23;-1:-1:-1;;;;;6072:6:1;6069:30;6066:2;;;6112:1;6109;6102:12;6066:2;6151:59;6202:7;6193:6;6182:9;6178:22;6151:59;:::i;:::-;6229:8;;6125:85;;-1:-1:-1;5949:321:1;-1:-1:-1;;;;5949:321:1:o;6275:180::-;6334:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:2;;;6403:1;6400;6393:12;6355:2;-1:-1:-1;6426:23:1;;6345:110;-1:-1:-1;6345:110:1:o;6460:184::-;6530:6;6583:2;6571:9;6562:7;6558:23;6554:32;6551:2;;;6599:1;6596;6589:12;6551:2;-1:-1:-1;6622:16:1;;6541:103;-1:-1:-1;6541:103:1:o;6649:248::-;6717:6;6725;6778:2;6766:9;6757:7;6753:23;6749:32;6746:2;;;6794:1;6791;6784:12;6746:2;-1:-1:-1;;6817:23:1;;;6887:2;6872:18;;;6859:32;;-1:-1:-1;6736:161:1:o;7115:237::-;7196:1;7189:5;7186:12;7176:2;;7241:10;7236:3;7232:20;7229:1;7222:31;7276:4;7273:1;7266:15;7304:4;7301:1;7294:15;7176:2;7328:18;;7166:186::o;7357:472::-;7399:3;7437:5;7431:12;7464:6;7459:3;7452:19;7489:1;7499:162;7513:6;7510:1;7507:13;7499:162;;;7575:4;7631:13;;;7627:22;;7621:29;7603:11;;;7599:20;;7592:59;7528:12;7499:162;;;7679:6;7676:1;7673:13;7670:2;;;7745:1;7738:4;7729:6;7724:3;7720:16;7716:27;7709:38;7670:2;-1:-1:-1;7811:2:1;7790:15;-1:-1:-1;;7786:29:1;7777:39;;;;7818:4;7773:50;;7407:422;-1:-1:-1;;7407:422:1:o;7834:735::-;7884:3;7925:5;7919:12;7954:36;7980:9;7954:36;:::i;:::-;7999:19;;;8037:4;8060:1;8077:18;;;8104:109;;;;8227:1;8222:341;;;;8070:493;;8104:109;-1:-1:-1;;8146:24:1;;8132:12;;;8125:46;8200:2;8191:12;;;-1:-1:-1;8104:109:1;;8222:341;8253:5;8250:1;8243:16;8300:2;8297:1;8287:16;8325:1;8339:174;8353:6;8350:1;8347:13;8339:174;;;8440:14;;8422:11;;;8418:20;;8411:44;8483:16;;;;8368:10;;8339:174;;;8537:11;;8533:20;;;-1:-1:-1;;8070:493:1;;;;;;7892:677;;;;:::o;8574:273::-;8759:6;8751;8746:3;8733:33;8715:3;8785:16;;8810:13;;;8785:16;8723:124;-1:-1:-1;8723:124:1:o;8852:813::-;8980:3;9009:1;9042:6;9036:13;9072:36;9098:9;9072:36;:::i;:::-;9127:1;9144:18;;;9171:104;;;;9289:1;9284:356;;;;9137:503;;9171:104;-1:-1:-1;;9204:24:1;;9192:37;;9249:16;;;;-1:-1:-1;9171:104:1;;9284:356;9315:6;9312:1;9305:17;9345:4;9390:2;9387:1;9377:16;9415:1;9429:165;9443:6;9440:1;9437:13;9429:165;;;9521:14;;9508:11;;;9501:35;9564:16;;;;9458:10;;9429:165;;;9433:3;;;9623:6;9618:3;9614:16;9607:23;;9137:503;-1:-1:-1;9656:3:1;;8988:677;-1:-1:-1;;;;;;8988:677:1:o;10102:504::-;-1:-1:-1;;;;;10378:15:1;;;10360:34;;10430:15;;10425:2;10410:18;;10403:43;10482:3;10477:2;10462:18;;10455:31;;;10303:4;;10503:54;;10537:19;;10529:6;10503:54;:::i;:::-;10495:62;;10593:6;10588:2;10577:9;10573:18;10566:34;10312:294;;;;;;;:::o;12799:2219::-;12995:4;13024:2;13064;13053:9;13049:18;13094:2;13083:9;13076:21;13117:6;13152;13146:13;13183:6;13175;13168:22;13209:2;13199:12;;13242:2;13231:9;13227:18;13220:25;;13304:2;13294:6;13291:1;13287:14;13276:9;13272:30;13268:39;13342:2;13334:6;13330:15;13363:1;13373:1616;13387:6;13384:1;13381:13;13373:1616;;;-1:-1:-1;;13452:22:1;;;13448:36;13436:49;;13508:13;;13578:9;;13563:25;;13627:11;;;13621:18;-1:-1:-1;;;;;6976:31:1;13693:15;;;6964:44;13750:11;;;13744:18;13544:6;;13775:58;13817:15;;;13744:18;13775:58;:::i;:::-;-1:-1:-1;13856:4:1;13903:11;;;13897:18;13880:15;;;13873:43;13939:4;13986:11;;;13980:18;13963:15;;;13956:43;14022:4;14067:11;;;14061:18;-1:-1:-1;;;;;6976:31:1;;14135:15;;;6964:44;-1:-1:-1;;14174:4:1;14219:11;;;14213:18;-1:-1:-1;;;;;6976:31:1;;14287:15;;;6964:44;14244:59;;14326:4;14379:2;14375;14371:11;14365:18;14420:2;14415;14407:6;14403:15;14396:27;14450:50;14496:2;14488:6;14484:15;14468:14;14450:50;:::i;:::-;14436:64;;;;14524:6;14582:3;14578:2;14574:12;14568:19;14562:3;14554:6;14550:16;14543:45;;14612:6;14667:3;14663:2;14659:12;14653:19;14685:49;14729:3;14721:6;14717:16;14701:14;7089:13;7082:21;7070:34;;7060:50;14685:49;-1:-1:-1;;14758:6:1;14805:12;;;14799:19;7089:13;7082:21;14863:16;;;;7070:34;;;;14967:12;;;;14932:15;;;;13409:1;13402:9;13373:1616;;;-1:-1:-1;15006:6:1;;13004:2014;-1:-1:-1;;;;;;;;13004:2014:1:o;15023:1227::-;15250:2;15302:21;;;15372:13;;15275:18;;;15394:22;;;15221:4;;15250:2;15435;;15453:18;;;;15494:15;;;15221:4;15537:687;15551:6;15548:1;15545:13;15537:687;;;15610:13;;15648:9;;15636:22;;15698:11;;;15692:18;15678:12;;;15671:40;15755:11;;;15749:18;-1:-1:-1;;;;;15745:44:1;15731:12;;;15724:66;15813:4;15857:11;;;15851:18;15837:12;;;15830:40;15893:4;15937:11;;;15931:18;15917:12;;;15910:40;15777:3;16031:11;;;16025:18;16018:26;16011:34;15997:12;;;15990:56;16069:4;16127:11;;;16121:18;16114:26;16107:34;16093:12;;;16086:56;16171:4;16162:14;;;;16199:15;;;;15786:1;15566:9;15537:687;;;-1:-1:-1;16241:3:1;;15230:1020;-1:-1:-1;;;;;;;15230:1020:1:o;22258:355::-;22460:2;22442:21;;;22499:2;22479:18;;;22472:30;22538:33;22533:2;22518:18;;22511:61;22604:2;22589:18;;22432:181::o;23912:736::-;24165:25;;;-1:-1:-1;;;;;24264:15:1;;;24259:2;24244:18;;24237:43;24316:15;;24311:2;24296:18;;24289:43;24217:3;24363:2;24348:18;;24341:31;;;24388:19;;24381:35;;;24146:4;24409:6;24459;24453:3;24438:19;;24425:49;24524:1;24518:3;24509:6;24498:9;24494:22;24490:32;24483:43;24594:3;24587:2;24583:7;24578:2;24570:6;24566:15;24562:29;24551:9;24547:45;24543:55;24535:63;;24635:6;24629:3;24618:9;24614:19;24607:35;24155:493;;;;;;;;;:::o;24653:1108::-;25118:25;;;-1:-1:-1;;;;;25217:15:1;;;25212:2;25197:18;;25190:43;25077:4;;25106:3;;25242:53;25291:2;25276:18;;25268:6;25242:53;:::i;:::-;25331:6;25326:2;25315:9;25311:18;25304:34;25375:6;25369:3;25358:9;25354:19;25347:35;25431:2;25423:6;25419:15;25413:3;25402:9;25398:19;25391:44;25484:2;25476:6;25472:15;25466:3;25455:9;25451:19;25444:44;;25525:2;25519:3;25508:9;25504:19;25497:31;25545:45;25586:2;25575:9;25571:18;25563:6;25545:45;:::i;:::-;25621:3;25606:19;;25599:35;;;;-1:-1:-1;;25678:14:1;;25671:22;25665:3;25650:19;;25643:51;25738:15;25731:23;25725:3;25710:19;;;25703:52;25537:53;25086:675;-1:-1:-1;;;;;;;;25086:675:1:o;26440:275::-;26511:2;26505:9;26576:2;26557:13;;-1:-1:-1;;26553:27:1;26541:40;;-1:-1:-1;;;;;26596:34:1;;26632:22;;;26593:62;26590:2;;;26658:18;;:::i;:::-;26694:2;26687:22;26485:230;;-1:-1:-1;26485:230:1:o;26720:128::-;26760:3;26791:1;26787:6;26784:1;26781:13;26778:2;;;26797:18;;:::i;:::-;-1:-1:-1;26833:9:1;;26768:80::o;26853:217::-;26893:1;26919;26909:2;;26963:10;26958:3;26954:20;26951:1;26944:31;26998:4;26995:1;26988:15;27026:4;27023:1;27016:15;26909:2;-1:-1:-1;27055:9:1;;26899:171::o;27075:168::-;27115:7;27181:1;27177;27173:6;27169:14;27166:1;27163:21;27158:1;27151:9;27144:17;27140:45;27137:2;;;27188:18;;:::i;:::-;-1:-1:-1;27228:9:1;;27127:116::o;27248:125::-;27288:4;27316:1;27313;27310:8;27307:2;;;27321:18;;:::i;:::-;-1:-1:-1;27358:9:1;;27297:76::o;27378:380::-;27457:1;27453:12;;;;27500;;;27521:2;;27575:4;27567:6;27563:17;27553:27;;27521:2;27628;27620:6;27617:14;27597:18;27594:38;27591:2;;;27674:10;27669:3;27665:20;27662:1;27655:31;27709:4;27706:1;27699:15;27737:4;27734:1;27727:15;27591:2;;27433:325;;;:::o;27763:135::-;27802:3;-1:-1:-1;;27823:17:1;;27820:2;;;27843:18;;:::i;:::-;-1:-1:-1;27890:1:1;27879:13;;27810:88::o;27903:127::-;27964:10;27959:3;27955:20;27952:1;27945:31;27995:4;27992:1;27985:15;28019:4;28016:1;28009:15;28035:127;28096:10;28091:3;28087:20;28084:1;28077:31;28127:4;28124:1;28117:15;28151:4;28148:1;28141:15;28167:127;28228:10;28223:3;28219:20;28216:1;28209:31;28259:4;28256:1;28249:15;28283:4;28280:1;28273:15;28299:127;28360:10;28355:3;28351:20;28348:1;28341:31;28391:4;28388:1;28381:15;28415:4;28412:1;28405:15;28431:127;28492:10;28487:3;28483:20;28480:1;28473:31;28523:4;28520:1;28513:15;28547:4;28544:1;28537:15;28563:118;28649:5;28642:13;28635:21;28628:5;28625:32;28615:2;;28671:1;28668;28661:12
Swarm Source
ipfs://c41f50b588772cd0977122454e7feaa244a2bc55778e8b7188e1e7e73bd6f4f9
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.