Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Pool | 17656196 | 411 days ago | IN | 0 ETH | 0.04327796 | ||||
Create Pool | 17378436 | 450 days ago | IN | 0 ETH | 0.12834542 | ||||
Create Pool | 17378388 | 450 days ago | IN | 0 ETH | 0.09759396 | ||||
Create Pool | 17378330 | 450 days ago | IN | 0 ETH | 0.09694676 | ||||
Create Pool | 17378311 | 450 days ago | IN | 0 ETH | 0.10851512 | ||||
Create Pool | 17378292 | 450 days ago | IN | 0 ETH | 0.11238104 | ||||
Create Pool | 17112918 | 487 days ago | IN | 0 ETH | 0.12530309 | ||||
Create Pool | 16696867 | 546 days ago | IN | 0 ETH | 0.08417065 | ||||
Create Pool | 16553718 | 566 days ago | IN | 0 ETH | 0.06289526 | ||||
Create Pool | 16503874 | 573 days ago | IN | 0 ETH | 0.04756608 | ||||
0x60806040 | 16483693 | 576 days ago | IN | 0 ETH | 0.05567109 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17656196 | 411 days ago | Contract Creation | 0 ETH | |||
17378436 | 450 days ago | Contract Creation | 0 ETH | |||
17378388 | 450 days ago | Contract Creation | 0 ETH | |||
17378330 | 450 days ago | Contract Creation | 0 ETH | |||
17378311 | 450 days ago | Contract Creation | 0 ETH | |||
17378292 | 450 days ago | Contract Creation | 0 ETH | |||
17112918 | 487 days ago | Contract Creation | 0 ETH | |||
16696867 | 546 days ago | Contract Creation | 0 ETH | |||
16553718 | 566 days ago | Contract Creation | 0 ETH | |||
16503874 | 573 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
FactoryCustomSingleNativeNOPool
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-25 */ // File: yomiswap-v2/interfaces/IRouter.sol pragma solidity =0.8.17; interface IRouter { function getIsCollectionApprove(address collection) external returns (bool); function getIsBondingCurveApprove(address bondingCurve) external returns (bool); function getIsPaymentTokenApprove(address paymentToken) external view returns (bool); function setPool(address _pool, bool _approve) external; } // File: yomiswap-v2/lib/FixedPointMathLibFmul.sol pragma solidity =0.8.17; library FixedPointMathLibFmul { uint256 internal constant WAD = 1e18; function fmul( uint256 x, uint256 y, uint256 baseUnit ) internal pure returns (uint256 z) { assembly { // Store x * y in z for now. z := mul(x, y) // Equivalent to require(x == 0 || (x * y) / x == y) if iszero(or(iszero(x), eq(div(z, x), y))) { revert(0, 0) } // If baseUnit is zero this will return zero instead of reverting. z := div(z, baseUnit) } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @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 making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: yomiswap-v2/bonding-curves/CurveErrorCode.sol pragma solidity =0.8.17; contract CurveErrorCodes { //@notice OK: No Error //@notice INVALID_NUMITEMS: The numItem value is 0 //@notice SPOT_PRICE_OVERFLOW: The updated spot price doesn't fit into 128 bits enum Error { OK, INVALID_NUMITEMS, SPOT_PRICE_OVERFLOW } } // File: yomiswap-v2/interfaces/ICurve.sol pragma solidity =0.8.17; interface ICurve { function getBuyInfo( uint256 spotPrice, uint256 delta, uint256 divergence, uint256 numItems ) external pure returns ( CurveErrorCodes.Error error, uint256 newSpotPrice, uint256 newDelta, uint256 newDivergence, uint256 totalFee ); function getSellInfo( uint256 spotPrice, uint256 delta, uint256 divergence, uint256 numItems ) external pure returns ( CurveErrorCodes.Error error, uint256 newSpotPrice, uint256 newDelta, uint256 newDivergence, uint256 totalFee ); function getBuyFeeInfo( uint256 spotPrice, uint256 delta, uint256 spread, uint256 numItems, uint256 protocolFeeRatio ) external pure returns (uint256 lpFee, uint256 protocolFee); function getSellFeeInfo( uint256 spotPrice, uint256 delta, uint256 spread, uint256 numItems, uint256 protocolFeeRatio ) external pure returns (uint256 lpFee, uint256 protocolFee); function getFee( uint256 totalFee, uint256 spread, uint256 protocolFeeRatio ) external pure returns (uint256 lpFee, uint256 protocolFee); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @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`. * * 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; /** * @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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: yomiswap-v2/src/BasePool.sol pragma solidity =0.8.17; contract BasePool { //@param E18 uint256 E18 = 1e18; //@param bondingCurve: bondingCurve for change buyPrice and sellPrice address public bondingCurve; //@param collection: only collection address'tokenIds to this pool address public collection; //@param router: address of router address public router; //@param owner: creater of this pool address public owner; //@param paymentToken: use only this address ERC20 or Native address public paymentToken; //@param protocolFeeRatio: default under 10% uint256 public protocolFeeRatio; //@param BuyEventNum: num of buyEvent uint256 public buyEventNum; //@param SellEventNum: num of sellEvent uint256 public sellEventNum; //@param stakeNFTprice: price of spot staking NFT uint256 public stakeNFTprice; //@param stakeNFTprice: price of spot staking FT uint256 public stakeFTprice; //@param isOtherStake: flg of other staking bool public isOtherStake; //@param isPair: flg of pair bool public isPair; //@param poolInfo: information of this pool PoolInfo internal poolInfo; //@param PoolInfo: struct of Pool struct PoolInfo { uint256 spotPrice; uint256 delta; uint256 spread; uint256 buyNum; uint256 sellNum; } //@param UserInfo: struct of user struct UserInfo { uint256 initBuyNum; uint256 initSellNum; uint256 initSellAmount; uint256 totalNFTpoint; uint256 totalFTpoint; uint256 totalNFTprice; } //@notice only router address modifier onlyRouter() { require(router == msg.sender, "onlyRouter"); _; } //INTERNAL //@notice batch nft transfer function _sendNFTs( uint256[] calldata _tokenIds, uint256 _itemNum, address _from, address _to ) internal { unchecked { for (uint256 i = 0; i < _itemNum; i++) { IERC721(collection).safeTransferFrom( _from, _to, _tokenIds[i], "" ); } } } //@notice update poolInfo function _updatePoolInfo( uint256 _newSpotPrice, uint256 _newDelta, uint256 _newSpread ) internal { if (_newSpotPrice != 0 && poolInfo.spotPrice != _newSpotPrice) { poolInfo.spotPrice = _newSpotPrice; } if (_newDelta != 0 && poolInfo.delta != _newDelta) { poolInfo.delta = _newDelta; } if (_newSpread != 0 && poolInfo.spread != _newSpread) { poolInfo.spread = _newSpread; } } //GET //@notice get pool info function getPoolInfo() external view returns (PoolInfo memory) { return poolInfo; } //@notice calculation total buy price function getCalcBuyInfo(uint256 _itemNum, uint256 _spotPrice) external view returns (uint256) { (, , , , uint256 _totalFee) = ICurve(bondingCurve).getBuyInfo( _spotPrice, poolInfo.delta, poolInfo.spread, _itemNum ); return _totalFee; } //@notice calculation total sell price function getCalcSellInfo(uint256 _itemNum, uint256 _spotPrice) external view returns (uint256) { (, , , , uint256 _totalFee) = ICurve(bondingCurve).getSellInfo( _spotPrice, poolInfo.delta, poolInfo.spread, _itemNum ); return _totalFee; } //SET //@notice set of Router address function setRouter(address _newRouter) external onlyRouter { router = _newRouter; } //@notice set of protocolFee ratio function setProtocolFeeRatio(uint256 _newProtocolFeeRatio) external onlyRouter { protocolFeeRatio = _newProtocolFeeRatio; } //RECEIVED //@notice receive関数 function onERC721Received( address, address, uint256, bytes memory ) public virtual returns (bytes4) { return this.onERC721Received.selector; } //@notice receive関数 fallback() external payable{} receive() external payable {} } // File: yomiswap-v2/src/NonOtherPool.sol pragma solidity =0.8.17; contract NonOtherPool is BasePool { //@param totalFee: totalFee of userFee uint256 internal totalFee; //@param userInfo: owner's userInfo UserInfo internal userInfo; modifier onlyNotOtherStake(address _user) { require(msg.sender == router, "Not Router"); require(_user == owner, "Not Owner"); _; } //@notice calc profit function _calcBuyProfit() internal returns (uint256) { if (sellEventNum > 0 && buyEventNum >= sellEventNum) { (uint256 lpFee, uint256 protocolFee) = ICurve(bondingCurve) .getBuyFeeInfo( poolInfo.spotPrice, poolInfo.delta, poolInfo.spread, sellEventNum, protocolFeeRatio ); totalFee += lpFee; buyEventNum -= sellEventNum; sellEventNum = 0; return protocolFee; } } //GET //@notice get userInfo of userInfo function getUserInfo() external view returns (UserInfo memory) { return userInfo; } //SET //@notice withdraw FT function withdrawOtherFT(uint256 _amount, address _user) external payable onlyNotOtherStake(_user) { payable(owner).transfer(_amount); } //@notice withdraw FT function withdrawOtherNFT(address _collection, uint256 _tokenId, address _user)external onlyNotOtherStake(_user) { IERC721(_collection).safeTransferFrom(address(this),owner,_tokenId); } } // File: yomiswap-v2/src/NativeNOPool.sol pragma solidity =0.8.17; contract NativeNOPool is NonOtherPool { //@notice swap FT for NFT function swapFTforNFT(uint256[] calldata _tokenIds, address _user) external payable onlyRouter returns (uint256 _protocolFee) { uint256 _itemNum = _tokenIds.length; //calc total fee ( CurveErrorCodes.Error error, uint256 _newSpotPrice, uint256 _newDelta, uint256 _newDivergence, uint256 _totalFee ) = ICurve(bondingCurve).getBuyInfo( poolInfo.spotPrice, poolInfo.delta, poolInfo.spread, _itemNum ); require(error == CurveErrorCodes.Error.OK, "BC Error"); //check require(_itemNum <= poolInfo.buyNum, "Not enough liquidity"); require(msg.value >= _totalFee, "Not enough value"); //effect buyEventNum += _itemNum; poolInfo.buyNum -= _itemNum; poolInfo.sellNum += _itemNum; _protocolFee = 0; _updatePoolInfo(_newSpotPrice, _newDelta, _newDivergence); //intaraction payable(_user).transfer(msg.value - _totalFee); payable(router).transfer(_protocolFee); _sendNFTs(_tokenIds, _tokenIds.length, address(this), _user); } //@notice swap NFT for FT function swapNFTforFT( uint256[] calldata _tokenIds, uint256 _minExpectFee, address _user ) external payable onlyRouter returns (uint256 _protocolFee) { uint256 _itemNum = _tokenIds.length; //calc total fee ( CurveErrorCodes.Error error, uint256 _newSpotPrice, uint256 _newDelta, uint256 _newDivergence, uint256 _totalFee ) = ICurve(bondingCurve).getSellInfo( poolInfo.spotPrice, poolInfo.delta, poolInfo.spread, _itemNum ); require(error == CurveErrorCodes.Error.OK, "BC Error"); //check require(_itemNum <= poolInfo.sellNum, "Not enough liquidity"); require(_totalFee >= _minExpectFee, "Not expected value"); require(address(this).balance >= _totalFee, "Not enough balance"); //effect sellEventNum += _itemNum; poolInfo.sellNum -= _itemNum; poolInfo.buyNum += _itemNum; _protocolFee = _calcBuyProfit(); _updatePoolInfo(_newSpotPrice, _newDelta, _newDivergence); //intaraction payable(_user).transfer(_totalFee); payable(router).transfer(_protocolFee); _sendNFTs(_tokenIds, _itemNum, _user, address(this)); } } // File: yomiswap-v2/pool/CustomSingleNativeNOPool.sol pragma solidity =0.8.17; contract CustomSingleNativeNOPool is NativeNOPool { using FixedPointMathLibFmul for uint256; constructor( address _collection, address _bondingCurve, uint256 _spotPrice, uint256 _delta, uint256 _spread, uint256 _protocolFeeRatio, address _router, address _creater ) { collection = _collection; bondingCurve = _bondingCurve; poolInfo.spotPrice = _spotPrice; stakeNFTprice = _spotPrice; poolInfo.delta = _delta; poolInfo.spread = _spread; protocolFeeRatio = _protocolFeeRatio; router = _router; isOtherStake = false; isPair = false; paymentToken = address(0); owner = _creater; } //@notice Stake NFT function stakeNFT(uint256[] calldata _tokenIds, address _user) external onlyNotOtherStake(_user) { uint256 _itemNum = _tokenIds.length; require(_itemNum > 0, "Not 0"); //effect userInfo.initBuyNum += _itemNum; poolInfo.buyNum += _itemNum; //intaraction _sendNFTs(_tokenIds, _itemNum, _user, address(this)); } //@notice withdraw NFT function withdrawNFT(uint256[] calldata _tokenIds, address _user) external payable onlyNotOtherStake(_user)returns(uint256 _userFee) { uint256 _itemNum = _tokenIds.length; uint256 _userNum = userInfo.initBuyNum; _userFee = totalFee; //check require(poolInfo.buyNum >= _itemNum, "Pool not enough NFT"); require( _userNum == _itemNum || _userNum > _itemNum && poolInfo.buyNum == _itemNum, "Something is wrong." ); //effect poolInfo.buyNum -= _itemNum; userInfo.initBuyNum = 0; totalFee = 0; //if pool have not liquidity NFT if (_userNum > _itemNum) { uint256 _subItemNum = _userNum - _itemNum; //calc FT instead NFT ( CurveErrorCodes.Error errorStakeNFTprice, uint256 _newStakeNFTprice, , , uint256 _totalInsteadFee ) = ICurve(bondingCurve).getBuyInfo( stakeNFTprice, poolInfo.delta, 0, _subItemNum ); require(errorStakeNFTprice == CurveErrorCodes.Error.OK, "BC Error"); stakeNFTprice = _newStakeNFTprice; poolInfo.sellNum -= _subItemNum; buyEventNum -= _subItemNum; uint256 _protocolFee = _totalInsteadFee.fmul(poolInfo.spread,FixedPointMathLibFmul.WAD); uint256 _insteadNFT = _totalInsteadFee - _protocolFee; _userFee += _insteadNFT; payable(router).transfer(_protocolFee); } //intaraction _sendNFTs(_tokenIds, _itemNum, address(this), _user); //TODO 変更点 if(address(this).balance >= _userFee){ payable(_user).transfer(_userFee); } else { payable(_user).transfer(address(this).balance); } } //@notice withdraw part NFT function withdrawNFTpart(uint256[] calldata _tokenIds, address _user) external onlyNotOtherStake(_user) { uint256 _itemNum = _tokenIds.length; //check require(_itemNum > 0,"Not 0"); require(poolInfo.buyNum >= _itemNum, "Pool Not NFT"); //effect poolInfo.buyNum -= _itemNum; userInfo.initBuyNum -= _itemNum; //interaction _sendNFTs(_tokenIds, _itemNum, address(this), _user); } //@notice withdraw fee function withdrawFee(address _user) external payable onlyNotOtherStake(_user) { uint256 _totalFee = totalFee; //check require(_totalFee > 0,"Not Fee"); //effect totalFee = 0; //intaraction //TODO 変更点 if(address(this).balance >= _totalFee){ payable(_user).transfer(_totalFee); } else { payable(_user).transfer(address(this).balance); } } //@notice reset spotPrice delta spread function reset( address _bondingCurve, uint256 _newSpotPrice, uint256 _newDelta, uint256 _newSpread, address _user )external onlyNotOtherStake(_user) { //check require(poolInfo.sellNum == 0,"Not Change Time"); //effect _updatePoolInfo(_newSpotPrice, _newDelta, _newSpread); stakeNFTprice = _newSpotPrice; bondingCurve = _bondingCurve; } //@notice get user stake fee function getUserStakeFee() external view returns (uint256) { return totalFee; } } // File: yomiswap-v2/factory/FactoryCustomSingleNativeNOPool.sol pragma solidity =0.8.17; contract FactoryCustomSingleNativeNOPool is Ownable { address public router; uint256 public routerFeeRatio; //CONSTRCTOR constructor(address _router, uint256 _routerFeeRatio) { router = _router; routerFeeRatio = _routerFeeRatio; } //EVENT event CreatePool(address indexed pool, address indexed collection); //MAIN function createPool( address _collection, address _bondingCurve, uint256 _spotPrice, uint256 _delta, uint256 _spread ) external { require( IERC165(_collection).supportsInterface(type(IERC721).interfaceId), "OnlyERC721" ); require(IRouter(router).getIsCollectionApprove(_collection) == true); require( IRouter(router).getIsBondingCurveApprove(_bondingCurve) == true ); address _pool = address( new CustomSingleNativeNOPool( _collection, _bondingCurve, _spotPrice, _delta, _spread, routerFeeRatio, router, msg.sender ) ); IRouter(router).setPool(_pool, true); emit CreatePool(_pool, _collection); } //SET function setRouterAddress(address _newRouter) public onlyOwner { router = _newRouter; } function setRouterFeeRatio(uint256 _newRouterFeeRatio) public onlyOwner { routerFeeRatio = _newRouterFeeRatio; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256","name":"_routerFeeRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"collection","type":"address"}],"name":"CreatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_collection","type":"address"},{"internalType":"address","name":"_bondingCurve","type":"address"},{"internalType":"uint256","name":"_spotPrice","type":"uint256"},{"internalType":"uint256","name":"_delta","type":"uint256"},{"internalType":"uint256","name":"_spread","type":"uint256"}],"name":"createPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerFeeRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRouterFeeRatio","type":"uint256"}],"name":"setRouterFeeRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620049cd380380620049cd833981810160405281019062000037919062000218565b620000576200004b620000a760201b60201c565b620000af60201b60201c565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060028190555050506200025f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001a58262000178565b9050919050565b620001b78162000198565b8114620001c357600080fd5b50565b600081519050620001d781620001ac565b92915050565b6000819050919050565b620001f281620001dd565b8114620001fe57600080fd5b50565b6000815190506200021281620001e7565b92915050565b6000806040838503121562000232576200023162000173565b5b60006200024285828601620001c6565b9250506020620002558582860162000201565b9150509250929050565b61475e806200026f6000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c80638da5cb5b11620000635780638da5cb5b1462000105578063f2fde38b1462000127578063f864fa1e1462000147578063f887ea4014620001695762000094565b806341cb87fc14620000995780635f8b2f0e14620000b9578063715018a614620000d957806385ac165a14620000e5575b600080fd5b620000b76004803603810190620000b191906200085b565b6200018b565b005b620000d76004803603810190620000d19190620008c8565b620001d9565b005b620000e3620001ed565b005b620001036004803603810190620000fd9190620008fa565b62000205565b005b6200010f620005b3565b6040516200011e919062000993565b60405180910390f35b6200014560048036038101906200013f91906200085b565b620005dc565b005b6200015162000666565b604051620001609190620009c1565b60405180910390f35b620001736200066c565b60405162000182919062000993565b60405180910390f35b6200019562000692565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620001e362000692565b8060028190555050565b620001f762000692565b62000203600062000717565b565b8473ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f80ac58cd000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040162000260919062000a1b565b602060405180830381865afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a4919062000a75565b620002e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002dd9062000b08565b60405180910390fd5b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc5a0df5876040518263ffffffff1660e01b815260040162000347919062000993565b6020604051808303816000875af115801562000367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038d919062000a75565b1515146200039a57600080fd5b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65bfbf0866040518263ffffffff1660e01b8152600401620003fb919062000993565b6020604051808303816000875af11580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000441919062000a75565b1515146200044e57600080fd5b60008585858585600254600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040516200048a90620007e3565b6200049d98979695949392919062000b2a565b604051809103906000f080158015620004ba573d6000803e3d6000fd5b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320bec12c8260016040518363ffffffff1660e01b81526004016200051d92919062000bc9565b600060405180830381600087803b1580156200053857600080fd5b505af11580156200054d573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fdbd2a1ea6808362e6adbec4db4969cbc11e3b0b28fb6c74cb342defaaf1daada60405160405180910390a3505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005e662000692565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064f9062000c6c565b60405180910390fd5b620006638162000717565b50565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6200069c620007db565b73ffffffffffffffffffffffffffffffffffffffff16620006bc620005b3565b73ffffffffffffffffffffffffffffffffffffffff161462000715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070c9062000cde565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b613a288062000d0183390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082382620007f6565b9050919050565b620008358162000816565b81146200084157600080fd5b50565b60008135905062000855816200082a565b92915050565b600060208284031215620008745762000873620007f1565b5b6000620008848482850162000844565b91505092915050565b6000819050919050565b620008a2816200088d565b8114620008ae57600080fd5b50565b600081359050620008c28162000897565b92915050565b600060208284031215620008e157620008e0620007f1565b5b6000620008f184828501620008b1565b91505092915050565b600080600080600060a08688031215620009195762000918620007f1565b5b6000620009298882890162000844565b95505060206200093c8882890162000844565b94505060406200094f88828901620008b1565b93505060606200096288828901620008b1565b92505060806200097588828901620008b1565b9150509295509295909350565b6200098d8162000816565b82525050565b6000602082019050620009aa600083018462000982565b92915050565b620009bb816200088d565b82525050565b6000602082019050620009d86000830184620009b0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000a1581620009de565b82525050565b600060208201905062000a32600083018462000a0a565b92915050565b60008115159050919050565b62000a4f8162000a38565b811462000a5b57600080fd5b50565b60008151905062000a6f8162000a44565b92915050565b60006020828403121562000a8e5762000a8d620007f1565b5b600062000a9e8482850162000a5e565b91505092915050565b600082825260208201905092915050565b7f4f6e6c7945524337323100000000000000000000000000000000000000000000600082015250565b600062000af0600a8362000aa7565b915062000afd8262000ab8565b602082019050919050565b6000602082019050818103600083015262000b238162000ae1565b9050919050565b60006101008201905062000b42600083018b62000982565b62000b51602083018a62000982565b62000b606040830189620009b0565b62000b6f6060830188620009b0565b62000b7e6080830187620009b0565b62000b8d60a0830186620009b0565b62000b9c60c083018562000982565b62000bab60e083018462000982565b9998505050505050505050565b62000bc38162000a38565b82525050565b600060408201905062000be0600083018562000982565b62000bef602083018462000bb8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000c5460268362000aa7565b915062000c618262000bf6565b604082019050919050565b6000602082019050818103600083015262000c878162000c45565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cc660208362000aa7565b915062000cd38262000c8e565b602082019050919050565b6000602082019050818103600083015262000cf98162000cb7565b905091905056fe6080604052670de0b6b3a76400006000553480156200001d57600080fd5b5060405162003a2838038062003a2883398181016040528101906200004391906200029e565b87600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600c600001819055508560098190555084600c6001018190555083600c600201819055508260068190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050505062000367565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022b82620001fe565b9050919050565b6200023d816200021e565b81146200024957600080fd5b50565b6000815190506200025d8162000232565b92915050565b6000819050919050565b620002788162000263565b81146200028457600080fd5b50565b60008151905062000298816200026d565b92915050565b600080600080600080600080610100898b031215620002c257620002c1620001f9565b5b6000620002d28b828c016200024c565b9850506020620002e58b828c016200024c565b9750506040620002f88b828c0162000287565b96505060606200030b8b828c0162000287565b95505060806200031e8b828c0162000287565b94505060a0620003318b828c0162000287565b93505060c0620003448b828c016200024c565b92505060e0620003578b828c016200024c565b9150509295985092959890939650565b6136b180620003776000396000f3fe6080604052600436106101c65760003560e01c80637a27d9f6116100f7578063bbd265ab11610095578063f829e9fc11610064578063f829e9fc14610621578063f887ea401461064a578063f968f33b14610675578063fc5ad2df1461069e576101cd565b8063bbd265ab14610586578063c0d78655146105b1578063efb17659146105da578063eff1d50e146105f6576101cd565b806388e5cd1f116100d157806388e5cd1f146104ca578063895af871146105075780638da5cb5b14610532578063a09f32111461055d576101cd565b80637a27d9f6146104495780637b6880ca146104745780637de1e5361461049f576101cd565b80633013ce29116101645780634c4cbac41161013e5780634c4cbac4146103865780635d8d1585146103b657806360246c88146103e157806365b962311461040c576101cd565b80633013ce291461030757806340f607851461033257806341ede57e1461035d576101cd565b8063244117b4116101a0578063244117b4146102535780632767fa4b146102835780632c7e4915146102ae5780632f7e0b2e146102de576101cd565b806302b6b7b3146101cf578063150b7a02146101fa5780631ac3ddeb14610237576101cd565b366101cd57005b005b3480156101db57600080fd5b506101e46106c9565b6040516101f19190612584565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061278d565b6106dc565b60405161022e919061284b565b60405180910390f35b610251600480360381019061024c9190612866565b6106f0565b005b61026d600480360381019061026891906128f3565b610903565b60405161027a9190612976565b60405180910390f35b34801561028f57600080fd5b50610298610cc6565b6040516102a59190612976565b60405180910390f35b6102c860048036038101906102c39190612991565b610ccc565b6040516102d59190612976565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612991565b6111b1565b005b34801561031357600080fd5b5061031c611369565b6040516103299190612a00565b60405180910390f35b34801561033e57600080fd5b5061034761138f565b6040516103549190612976565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190612a1b565b611399565b005b6103a0600480360381019061039b9190612991565b611433565b6040516103ad9190612976565b60405180910390f35b3480156103c257600080fd5b506103cb6117ba565b6040516103d89190612ad2565b60405180910390f35b3480156103ed57600080fd5b506103f6611810565b6040516104039190612b55565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190612b70565b61185c565b6040516104409190612976565b60405180910390f35b34801561045557600080fd5b5061045e61191b565b60405161046b9190612976565b60405180910390f35b34801561048057600080fd5b50610489611921565b6040516104969190612976565b60405180910390f35b3480156104ab57600080fd5b506104b4611927565b6040516104c19190612a00565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612b70565b61194d565b6040516104fe9190612976565b60405180910390f35b34801561051357600080fd5b5061051c611a0c565b6040516105299190612976565b60405180910390f35b34801561053e57600080fd5b50610547611a12565b6040516105549190612a00565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612bb0565b611a38565b005b34801561059257600080fd5b5061059b611bf0565b6040516105a89190612584565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612866565b611c03565b005b6105f460048036038101906105ef9190612c03565b611cd7565b005b34801561060257600080fd5b5061060b611e66565b6040516106189190612a00565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190612c43565b611e8c565b005b34801561065657600080fd5b5061065f612050565b60405161066c9190612a00565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190612991565b612076565b005b3480156106aa57600080fd5b506106b3612276565b6040516106c09190612976565b60405180910390f35b600b60019054906101000a900460ff1681565b600063150b7a0260e01b9050949350505050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080890612d87565b60405180910390fd5b600060115490506000811161085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085290612df3565b60405180910390fd5b60006011819055508047106108b6578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108b0573d6000803e3d6000fd5b506108fe565b8273ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108fc573d6000803e3d6000fd5b505b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90612e5f565b60405180910390fd5b60008585905090506000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed67cc91600c60000154600c60010154600c600201548a6040518563ffffffff1660e01b8152600401610a159493929190612e7f565b60a060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190612efe565b9450945094509450945060006002811115610a7457610a73612f79565b5b856002811115610a8757610a86612f79565b5b14610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612ff4565b60405180910390fd5b600c60040154861115610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613060565b60405180910390fd5b88811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906130cc565b60405180910390fd5b80471015610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c90613138565b60405180910390fd5b8560086000828254610ba79190613187565b9250508190555085600c6004016000828254610bc391906131bb565b9250508190555085600c6003016000828254610bdf9190613187565b92505081905550610bee61227c565b9650610bfb84848461239f565b8773ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c41573d6000803e3d6000fd5b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015610caa573d6000803e3d6000fd5b50610cb88b8b888b30612416565b505050505050949350505050565b60095481565b600081600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612d87565b60405180910390fd5b600085859050905060006012600001549050601154935081600c600301541015610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061323b565b60405180910390fd5b81811480610e6b57508181118015610e6a575081600c60030154145b5b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906132a7565b60405180910390fd5b81600c6003016000828254610ebf91906131bb565b9250508190555060006012600001819055506000601181905550818111156110ff5760008282610eef91906131bb565b90506000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a600954600c600101546000886040518563ffffffff1660e01b8152600401610f5f949392919061330c565b60a060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190612efe565b945050509250925060006002811115610fbc57610fbb612f79565b5b836002811115610fcf57610fce612f79565b5b1461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690612ff4565b60405180910390fd5b8160098190555083600c600401600082825461102b91906131bb565b92505081905550836007600082825461104491906131bb565b92505081905550600061106f600c60020154670de0b6b3a7640000846124e09092919063ffffffff16565b90506000818361107f91906131bb565b9050808a61108d9190613187565b9950600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156110f7573d6000803e3d6000fd5b505050505050505b61110c8787843089612416565b83471061115f578473ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611159573d6000803e3d6000fd5b506111a7565b8473ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111a5573d6000803e3d6000fd5b505b5050509392505050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612d87565b60405180910390fd5b60008484905090506000811161131d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113149061339d565b60405180910390fd5b80601260000160008282546113329190613187565b9250508190555080600c600301600082825461134e9190613187565b925050819055506113628585838630612416565b5050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601154905090565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e5f565b60405180910390fd5b8060068190555050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90612e5f565b60405180910390fd5b60008484905090506000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a600c60000154600c60010154600c600201548a6040518563ffffffff1660e01b81526004016115459493929190612e7f565b60a060405180830381865afa158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190612efe565b94509450945094509450600060028111156115a4576115a3612f79565b5b8560028111156115b7576115b6612f79565b5b146115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90612ff4565b60405180910390fd5b600c6003015486111561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613060565b60405180910390fd5b80341015611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613409565b60405180910390fd5b85600760008282546116949190613187565b9250508190555085600c60030160008282546116b091906131bb565b9250508190555085600c60040160008282546116cc9190613187565b92505081905550600096506116e284848461239f565b8773ffffffffffffffffffffffffffffffffffffffff166108fc823461170891906131bb565b9081150290604051600060405180830381858888f19350505050158015611733573d6000803e3d6000fd5b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f1935050505015801561179c573d6000803e3d6000fd5b506117ad8a8a8c8c9050308c612416565b5050505050509392505050565b6117c2612504565b60126040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050905090565b61181861253a565b600c6040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905090565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a84600c60010154600c60020154886040518563ffffffff1660e01b81526004016118ca9493929190612e7f565b60a060405180830381865afa1580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b9190612efe565b9450505050508091505092915050565b60065481565b600a5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed67cc9184600c60010154600c60020154886040518563ffffffff1660e01b81526004016119bb9493929190612e7f565b60a060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc9190612efe565b9450505050508091505092915050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090612d87565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e30600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401611bb893929190613429565b600060405180830381600087803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b5050505050505050565b600b60009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90612e5f565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90612d87565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e60573d6000803e3d6000fd5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490612d87565b60405180910390fd5b6000600c6004015414611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906134ac565b60405180910390fd5b61200085858561239f565b8460098190555085600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e90612d87565b60405180910390fd5b6000848490509050600081116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d99061339d565b60405180910390fd5b80600c60030154101561222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190613518565b60405180910390fd5b80600c600301600082825461223f91906131bb565b92505081905550806012600001600082825461225b91906131bb565b9250508190555061226f8585833087612416565b5050505050565b60075481565b600080600854118015612293575060085460075410155b1561239b57600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea363db5600c60000154600c60010154600c600201546008546006546040518663ffffffff1660e01b8152600401612311959493929190613538565b6040805180830381865afa15801561232d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612351919061358b565b9150915081601160008282546123679190613187565b925050819055506008546007600082825461238291906131bb565b925050819055506000600881905550809250505061239c565b5b90565b600083141580156123b5575082600c6000015414155b156123c55782600c600001819055505b600082141580156123db575081600c6001015414155b156123eb5781600c600101819055505b60008114158015612401575080600c6002015414155b156124115780600c600201819055505b505050565b60005b838110156124d857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde8484898986818110612474576124736135cb565b5b905060200201356040518463ffffffff1660e01b815260040161249993929190613631565b600060405180830381600087803b1580156124b357600080fd5b505af11580156124c7573d6000803e3d6000fd5b505050508080600101915050612419565b505050505050565b6000828402905082848204148415176124f857600080fd5b81810490509392505050565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008115159050919050565b61257e81612569565b82525050565b60006020820190506125996000830184612575565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125de826125b3565b9050919050565b6125ee816125d3565b81146125f957600080fd5b50565b60008135905061260b816125e5565b92915050565b6000819050919050565b61262481612611565b811461262f57600080fd5b50565b6000813590506126418161261b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61269a82612651565b810181811067ffffffffffffffff821117156126b9576126b8612662565b5b80604052505050565b60006126cc61259f565b90506126d88282612691565b919050565b600067ffffffffffffffff8211156126f8576126f7612662565b5b61270182612651565b9050602081019050919050565b82818337600083830152505050565b600061273061272b846126dd565b6126c2565b90508281526020810184848401111561274c5761274b61264c565b5b61275784828561270e565b509392505050565b600082601f83011261277457612773612647565b5b813561278484826020860161271d565b91505092915050565b600080600080608085870312156127a7576127a66125a9565b5b60006127b5878288016125fc565b94505060206127c6878288016125fc565b93505060406127d787828801612632565b925050606085013567ffffffffffffffff8111156127f8576127f76125ae565b5b6128048782880161275f565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61284581612810565b82525050565b6000602082019050612860600083018461283c565b92915050565b60006020828403121561287c5761287b6125a9565b5b600061288a848285016125fc565b91505092915050565b600080fd5b600080fd5b60008083601f8401126128b3576128b2612647565b5b8235905067ffffffffffffffff8111156128d0576128cf612893565b5b6020830191508360208202830111156128ec576128eb612898565b5b9250929050565b6000806000806060858703121561290d5761290c6125a9565b5b600085013567ffffffffffffffff81111561292b5761292a6125ae565b5b6129378782880161289d565b9450945050602061294a87828801612632565b925050604061295b878288016125fc565b91505092959194509250565b61297081612611565b82525050565b600060208201905061298b6000830184612967565b92915050565b6000806000604084860312156129aa576129a96125a9565b5b600084013567ffffffffffffffff8111156129c8576129c76125ae565b5b6129d48682870161289d565b935093505060206129e7868287016125fc565b9150509250925092565b6129fa816125d3565b82525050565b6000602082019050612a1560008301846129f1565b92915050565b600060208284031215612a3157612a306125a9565b5b6000612a3f84828501612632565b91505092915050565b612a5181612611565b82525050565b60c082016000820151612a6d6000850182612a48565b506020820151612a806020850182612a48565b506040820151612a936040850182612a48565b506060820151612aa66060850182612a48565b506080820151612ab96080850182612a48565b5060a0820151612acc60a0850182612a48565b50505050565b600060c082019050612ae76000830184612a57565b92915050565b60a082016000820151612b036000850182612a48565b506020820151612b166020850182612a48565b506040820151612b296040850182612a48565b506060820151612b3c6060850182612a48565b506080820151612b4f6080850182612a48565b50505050565b600060a082019050612b6a6000830184612aed565b92915050565b60008060408385031215612b8757612b866125a9565b5b6000612b9585828601612632565b9250506020612ba685828601612632565b9150509250929050565b600080600060608486031215612bc957612bc86125a9565b5b6000612bd7868287016125fc565b9350506020612be886828701612632565b9250506040612bf9868287016125fc565b9150509250925092565b60008060408385031215612c1a57612c196125a9565b5b6000612c2885828601612632565b9250506020612c39858286016125fc565b9150509250929050565b600080600080600060a08688031215612c5f57612c5e6125a9565b5b6000612c6d888289016125fc565b9550506020612c7e88828901612632565b9450506040612c8f88828901612632565b9350506060612ca088828901612632565b9250506080612cb1888289016125fc565b9150509295509295909350565b600082825260208201905092915050565b7f4e6f7420526f7574657200000000000000000000000000000000000000000000600082015250565b6000612d05600a83612cbe565b9150612d1082612ccf565b602082019050919050565b60006020820190508181036000830152612d3481612cf8565b9050919050565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b6000612d71600983612cbe565b9150612d7c82612d3b565b602082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e6f742046656500000000000000000000000000000000000000000000000000600082015250565b6000612ddd600783612cbe565b9150612de882612da7565b602082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f6f6e6c79526f7574657200000000000000000000000000000000000000000000600082015250565b6000612e49600a83612cbe565b9150612e5482612e13565b602082019050919050565b60006020820190508181036000830152612e7881612e3c565b9050919050565b6000608082019050612e946000830187612967565b612ea16020830186612967565b612eae6040830185612967565b612ebb6060830184612967565b95945050505050565b60038110612ed157600080fd5b50565b600081519050612ee381612ec4565b92915050565b600081519050612ef88161261b565b92915050565b600080600080600060a08688031215612f1a57612f196125a9565b5b6000612f2888828901612ed4565b9550506020612f3988828901612ee9565b9450506040612f4a88828901612ee9565b9350506060612f5b88828901612ee9565b9250506080612f6c88828901612ee9565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4243204572726f72000000000000000000000000000000000000000000000000600082015250565b6000612fde600883612cbe565b9150612fe982612fa8565b602082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f4e6f7420656e6f756768206c6971756964697479000000000000000000000000600082015250565b600061304a601483612cbe565b915061305582613014565b602082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f4e6f742065787065637465642076616c75650000000000000000000000000000600082015250565b60006130b6601283612cbe565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000613122601283612cbe565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061319282612611565b915061319d83612611565b92508282019050808211156131b5576131b4613158565b5b92915050565b60006131c682612611565b91506131d183612611565b92508282039050818111156131e9576131e8613158565b5b92915050565b7f506f6f6c206e6f7420656e6f756768204e465400000000000000000000000000600082015250565b6000613225601383612cbe565b9150613230826131ef565b602082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f536f6d657468696e672069732077726f6e672e00000000000000000000000000600082015250565b6000613291601383612cbe565b915061329c8261325b565b602082019050919050565b600060208201905081810360008301526132c081613284565b9050919050565b6000819050919050565b6000819050919050565b60006132f66132f16132ec846132c7565b6132d1565b612611565b9050919050565b613306816132db565b82525050565b60006080820190506133216000830187612967565b61332e6020830186612967565b61333b60408301856132fd565b6133486060830184612967565b95945050505050565b7f4e6f742030000000000000000000000000000000000000000000000000000000600082015250565b6000613387600583612cbe565b915061339282613351565b602082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4e6f7420656e6f7567682076616c756500000000000000000000000000000000600082015250565b60006133f3601083612cbe565b91506133fe826133bd565b602082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b600060608201905061343e60008301866129f1565b61344b60208301856129f1565b6134586040830184612967565b949350505050565b7f4e6f74204368616e67652054696d650000000000000000000000000000000000600082015250565b6000613496600f83612cbe565b91506134a182613460565b602082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b7f506f6f6c204e6f74204e46540000000000000000000000000000000000000000600082015250565b6000613502600c83612cbe565b915061350d826134cc565b602082019050919050565b60006020820190508181036000830152613531816134f5565b9050919050565b600060a08201905061354d6000830188612967565b61355a6020830187612967565b6135676040830186612967565b6135746060830185612967565b6135816080830184612967565b9695505050505050565b600080604083850312156135a2576135a16125a9565b5b60006135b085828601612ee9565b92505060206135c185828601612ee9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b50565b600061361b6000836135fa565b91506136268261360b565b600082019050919050565b600060808201905061364660008301866129f1565b61365360208301856129f1565b6136606040830184612967565b81810360608301526136718161360e565b905094935050505056fea2646970667358221220f9c5ba4aaf56622784420d963ebb5f9f973c9ca074de7cdd18887146bcbe7fd664736f6c63430008110033a2646970667358221220de98f4ac6f3224ab84bb619a36c24453b7cb60d666e55b8a085673c88cb9286864736f6c634300081100330000000000000000000000007cd70b36ba8fcbd888e9c26840b9300ac64d29a900000000000000000000000000000000000000000000000002c68af0bb140000
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c80638da5cb5b11620000635780638da5cb5b1462000105578063f2fde38b1462000127578063f864fa1e1462000147578063f887ea4014620001695762000094565b806341cb87fc14620000995780635f8b2f0e14620000b9578063715018a614620000d957806385ac165a14620000e5575b600080fd5b620000b76004803603810190620000b191906200085b565b6200018b565b005b620000d76004803603810190620000d19190620008c8565b620001d9565b005b620000e3620001ed565b005b620001036004803603810190620000fd9190620008fa565b62000205565b005b6200010f620005b3565b6040516200011e919062000993565b60405180910390f35b6200014560048036038101906200013f91906200085b565b620005dc565b005b6200015162000666565b604051620001609190620009c1565b60405180910390f35b620001736200066c565b60405162000182919062000993565b60405180910390f35b6200019562000692565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620001e362000692565b8060028190555050565b620001f762000692565b62000203600062000717565b565b8473ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f80ac58cd000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040162000260919062000a1b565b602060405180830381865afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a4919062000a75565b620002e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002dd9062000b08565b60405180910390fd5b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc5a0df5876040518263ffffffff1660e01b815260040162000347919062000993565b6020604051808303816000875af115801562000367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038d919062000a75565b1515146200039a57600080fd5b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b65bfbf0866040518263ffffffff1660e01b8152600401620003fb919062000993565b6020604051808303816000875af11580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000441919062000a75565b1515146200044e57600080fd5b60008585858585600254600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040516200048a90620007e3565b6200049d98979695949392919062000b2a565b604051809103906000f080158015620004ba573d6000803e3d6000fd5b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320bec12c8260016040518363ffffffff1660e01b81526004016200051d92919062000bc9565b600060405180830381600087803b1580156200053857600080fd5b505af11580156200054d573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fdbd2a1ea6808362e6adbec4db4969cbc11e3b0b28fb6c74cb342defaaf1daada60405160405180910390a3505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005e662000692565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064f9062000c6c565b60405180910390fd5b620006638162000717565b50565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6200069c620007db565b73ffffffffffffffffffffffffffffffffffffffff16620006bc620005b3565b73ffffffffffffffffffffffffffffffffffffffff161462000715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070c9062000cde565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b613a288062000d0183390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082382620007f6565b9050919050565b620008358162000816565b81146200084157600080fd5b50565b60008135905062000855816200082a565b92915050565b600060208284031215620008745762000873620007f1565b5b6000620008848482850162000844565b91505092915050565b6000819050919050565b620008a2816200088d565b8114620008ae57600080fd5b50565b600081359050620008c28162000897565b92915050565b600060208284031215620008e157620008e0620007f1565b5b6000620008f184828501620008b1565b91505092915050565b600080600080600060a08688031215620009195762000918620007f1565b5b6000620009298882890162000844565b95505060206200093c8882890162000844565b94505060406200094f88828901620008b1565b93505060606200096288828901620008b1565b92505060806200097588828901620008b1565b9150509295509295909350565b6200098d8162000816565b82525050565b6000602082019050620009aa600083018462000982565b92915050565b620009bb816200088d565b82525050565b6000602082019050620009d86000830184620009b0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000a1581620009de565b82525050565b600060208201905062000a32600083018462000a0a565b92915050565b60008115159050919050565b62000a4f8162000a38565b811462000a5b57600080fd5b50565b60008151905062000a6f8162000a44565b92915050565b60006020828403121562000a8e5762000a8d620007f1565b5b600062000a9e8482850162000a5e565b91505092915050565b600082825260208201905092915050565b7f4f6e6c7945524337323100000000000000000000000000000000000000000000600082015250565b600062000af0600a8362000aa7565b915062000afd8262000ab8565b602082019050919050565b6000602082019050818103600083015262000b238162000ae1565b9050919050565b60006101008201905062000b42600083018b62000982565b62000b51602083018a62000982565b62000b606040830189620009b0565b62000b6f6060830188620009b0565b62000b7e6080830187620009b0565b62000b8d60a0830186620009b0565b62000b9c60c083018562000982565b62000bab60e083018462000982565b9998505050505050505050565b62000bc38162000a38565b82525050565b600060408201905062000be0600083018562000982565b62000bef602083018462000bb8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000c5460268362000aa7565b915062000c618262000bf6565b604082019050919050565b6000602082019050818103600083015262000c878162000c45565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cc660208362000aa7565b915062000cd38262000c8e565b602082019050919050565b6000602082019050818103600083015262000cf98162000cb7565b905091905056fe6080604052670de0b6b3a76400006000553480156200001d57600080fd5b5060405162003a2838038062003a2883398181016040528101906200004391906200029e565b87600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600c600001819055508560098190555084600c6001018190555083600c600201819055508260068190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050505062000367565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022b82620001fe565b9050919050565b6200023d816200021e565b81146200024957600080fd5b50565b6000815190506200025d8162000232565b92915050565b6000819050919050565b620002788162000263565b81146200028457600080fd5b50565b60008151905062000298816200026d565b92915050565b600080600080600080600080610100898b031215620002c257620002c1620001f9565b5b6000620002d28b828c016200024c565b9850506020620002e58b828c016200024c565b9750506040620002f88b828c0162000287565b96505060606200030b8b828c0162000287565b95505060806200031e8b828c0162000287565b94505060a0620003318b828c0162000287565b93505060c0620003448b828c016200024c565b92505060e0620003578b828c016200024c565b9150509295985092959890939650565b6136b180620003776000396000f3fe6080604052600436106101c65760003560e01c80637a27d9f6116100f7578063bbd265ab11610095578063f829e9fc11610064578063f829e9fc14610621578063f887ea401461064a578063f968f33b14610675578063fc5ad2df1461069e576101cd565b8063bbd265ab14610586578063c0d78655146105b1578063efb17659146105da578063eff1d50e146105f6576101cd565b806388e5cd1f116100d157806388e5cd1f146104ca578063895af871146105075780638da5cb5b14610532578063a09f32111461055d576101cd565b80637a27d9f6146104495780637b6880ca146104745780637de1e5361461049f576101cd565b80633013ce29116101645780634c4cbac41161013e5780634c4cbac4146103865780635d8d1585146103b657806360246c88146103e157806365b962311461040c576101cd565b80633013ce291461030757806340f607851461033257806341ede57e1461035d576101cd565b8063244117b4116101a0578063244117b4146102535780632767fa4b146102835780632c7e4915146102ae5780632f7e0b2e146102de576101cd565b806302b6b7b3146101cf578063150b7a02146101fa5780631ac3ddeb14610237576101cd565b366101cd57005b005b3480156101db57600080fd5b506101e46106c9565b6040516101f19190612584565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061278d565b6106dc565b60405161022e919061284b565b60405180910390f35b610251600480360381019061024c9190612866565b6106f0565b005b61026d600480360381019061026891906128f3565b610903565b60405161027a9190612976565b60405180910390f35b34801561028f57600080fd5b50610298610cc6565b6040516102a59190612976565b60405180910390f35b6102c860048036038101906102c39190612991565b610ccc565b6040516102d59190612976565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612991565b6111b1565b005b34801561031357600080fd5b5061031c611369565b6040516103299190612a00565b60405180910390f35b34801561033e57600080fd5b5061034761138f565b6040516103549190612976565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190612a1b565b611399565b005b6103a0600480360381019061039b9190612991565b611433565b6040516103ad9190612976565b60405180910390f35b3480156103c257600080fd5b506103cb6117ba565b6040516103d89190612ad2565b60405180910390f35b3480156103ed57600080fd5b506103f6611810565b6040516104039190612b55565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190612b70565b61185c565b6040516104409190612976565b60405180910390f35b34801561045557600080fd5b5061045e61191b565b60405161046b9190612976565b60405180910390f35b34801561048057600080fd5b50610489611921565b6040516104969190612976565b60405180910390f35b3480156104ab57600080fd5b506104b4611927565b6040516104c19190612a00565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612b70565b61194d565b6040516104fe9190612976565b60405180910390f35b34801561051357600080fd5b5061051c611a0c565b6040516105299190612976565b60405180910390f35b34801561053e57600080fd5b50610547611a12565b6040516105549190612a00565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612bb0565b611a38565b005b34801561059257600080fd5b5061059b611bf0565b6040516105a89190612584565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612866565b611c03565b005b6105f460048036038101906105ef9190612c03565b611cd7565b005b34801561060257600080fd5b5061060b611e66565b6040516106189190612a00565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190612c43565b611e8c565b005b34801561065657600080fd5b5061065f612050565b60405161066c9190612a00565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190612991565b612076565b005b3480156106aa57600080fd5b506106b3612276565b6040516106c09190612976565b60405180910390f35b600b60019054906101000a900460ff1681565b600063150b7a0260e01b9050949350505050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080890612d87565b60405180910390fd5b600060115490506000811161085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085290612df3565b60405180910390fd5b60006011819055508047106108b6578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108b0573d6000803e3d6000fd5b506108fe565b8273ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108fc573d6000803e3d6000fd5b505b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90612e5f565b60405180910390fd5b60008585905090506000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed67cc91600c60000154600c60010154600c600201548a6040518563ffffffff1660e01b8152600401610a159493929190612e7f565b60a060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190612efe565b9450945094509450945060006002811115610a7457610a73612f79565b5b856002811115610a8757610a86612f79565b5b14610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90612ff4565b60405180910390fd5b600c60040154861115610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613060565b60405180910390fd5b88811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906130cc565b60405180910390fd5b80471015610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c90613138565b60405180910390fd5b8560086000828254610ba79190613187565b9250508190555085600c6004016000828254610bc391906131bb565b9250508190555085600c6003016000828254610bdf9190613187565b92505081905550610bee61227c565b9650610bfb84848461239f565b8773ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c41573d6000803e3d6000fd5b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015610caa573d6000803e3d6000fd5b50610cb88b8b888b30612416565b505050505050949350505050565b60095481565b600081600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612d87565b60405180910390fd5b600085859050905060006012600001549050601154935081600c600301541015610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061323b565b60405180910390fd5b81811480610e6b57508181118015610e6a575081600c60030154145b5b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906132a7565b60405180910390fd5b81600c6003016000828254610ebf91906131bb565b9250508190555060006012600001819055506000601181905550818111156110ff5760008282610eef91906131bb565b90506000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a600954600c600101546000886040518563ffffffff1660e01b8152600401610f5f949392919061330c565b60a060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190612efe565b945050509250925060006002811115610fbc57610fbb612f79565b5b836002811115610fcf57610fce612f79565b5b1461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690612ff4565b60405180910390fd5b8160098190555083600c600401600082825461102b91906131bb565b92505081905550836007600082825461104491906131bb565b92505081905550600061106f600c60020154670de0b6b3a7640000846124e09092919063ffffffff16565b90506000818361107f91906131bb565b9050808a61108d9190613187565b9950600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156110f7573d6000803e3d6000fd5b505050505050505b61110c8787843089612416565b83471061115f578473ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611159573d6000803e3d6000fd5b506111a7565b8473ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111a5573d6000803e3d6000fd5b505b5050509392505050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612d87565b60405180910390fd5b60008484905090506000811161131d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113149061339d565b60405180910390fd5b80601260000160008282546113329190613187565b9250508190555080600c600301600082825461134e9190613187565b925050819055506113628585838630612416565b5050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601154905090565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e5f565b60405180910390fd5b8060068190555050565b60003373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90612e5f565b60405180910390fd5b60008484905090506000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a600c60000154600c60010154600c600201548a6040518563ffffffff1660e01b81526004016115459493929190612e7f565b60a060405180830381865afa158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190612efe565b94509450945094509450600060028111156115a4576115a3612f79565b5b8560028111156115b7576115b6612f79565b5b146115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90612ff4565b60405180910390fd5b600c6003015486111561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613060565b60405180910390fd5b80341015611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613409565b60405180910390fd5b85600760008282546116949190613187565b9250508190555085600c60030160008282546116b091906131bb565b9250508190555085600c60040160008282546116cc9190613187565b92505081905550600096506116e284848461239f565b8773ffffffffffffffffffffffffffffffffffffffff166108fc823461170891906131bb565b9081150290604051600060405180830381858888f19350505050158015611733573d6000803e3d6000fd5b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f1935050505015801561179c573d6000803e3d6000fd5b506117ad8a8a8c8c9050308c612416565b5050505050509392505050565b6117c2612504565b60126040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050905090565b61181861253a565b600c6040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905090565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630320bc4a84600c60010154600c60020154886040518563ffffffff1660e01b81526004016118ca9493929190612e7f565b60a060405180830381865afa1580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b9190612efe565b9450505050508091505092915050565b60065481565b600a5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed67cc9184600c60010154600c60020154886040518563ffffffff1660e01b81526004016119bb9493929190612e7f565b60a060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc9190612efe565b9450505050508091505092915050565b60085481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090612d87565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e30600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b8152600401611bb893929190613429565b600060405180830381600087803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b5050505050505050565b600b60009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90612e5f565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90612d87565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e60573d6000803e3d6000fd5b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490612d87565b60405180910390fd5b6000600c6004015414611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906134ac565b60405180910390fd5b61200085858561239f565b8460098190555085600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90612d1b565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e90612d87565b60405180910390fd5b6000848490509050600081116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d99061339d565b60405180910390fd5b80600c60030154101561222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190613518565b60405180910390fd5b80600c600301600082825461223f91906131bb565b92505081905550806012600001600082825461225b91906131bb565b9250508190555061226f8585833087612416565b5050505050565b60075481565b600080600854118015612293575060085460075410155b1561239b57600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea363db5600c60000154600c60010154600c600201546008546006546040518663ffffffff1660e01b8152600401612311959493929190613538565b6040805180830381865afa15801561232d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612351919061358b565b9150915081601160008282546123679190613187565b925050819055506008546007600082825461238291906131bb565b925050819055506000600881905550809250505061239c565b5b90565b600083141580156123b5575082600c6000015414155b156123c55782600c600001819055505b600082141580156123db575081600c6001015414155b156123eb5781600c600101819055505b60008114158015612401575080600c6002015414155b156124115780600c600201819055505b505050565b60005b838110156124d857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde8484898986818110612474576124736135cb565b5b905060200201356040518463ffffffff1660e01b815260040161249993929190613631565b600060405180830381600087803b1580156124b357600080fd5b505af11580156124c7573d6000803e3d6000fd5b505050508080600101915050612419565b505050505050565b6000828402905082848204148415176124f857600080fd5b81810490509392505050565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008115159050919050565b61257e81612569565b82525050565b60006020820190506125996000830184612575565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125de826125b3565b9050919050565b6125ee816125d3565b81146125f957600080fd5b50565b60008135905061260b816125e5565b92915050565b6000819050919050565b61262481612611565b811461262f57600080fd5b50565b6000813590506126418161261b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61269a82612651565b810181811067ffffffffffffffff821117156126b9576126b8612662565b5b80604052505050565b60006126cc61259f565b90506126d88282612691565b919050565b600067ffffffffffffffff8211156126f8576126f7612662565b5b61270182612651565b9050602081019050919050565b82818337600083830152505050565b600061273061272b846126dd565b6126c2565b90508281526020810184848401111561274c5761274b61264c565b5b61275784828561270e565b509392505050565b600082601f83011261277457612773612647565b5b813561278484826020860161271d565b91505092915050565b600080600080608085870312156127a7576127a66125a9565b5b60006127b5878288016125fc565b94505060206127c6878288016125fc565b93505060406127d787828801612632565b925050606085013567ffffffffffffffff8111156127f8576127f76125ae565b5b6128048782880161275f565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61284581612810565b82525050565b6000602082019050612860600083018461283c565b92915050565b60006020828403121561287c5761287b6125a9565b5b600061288a848285016125fc565b91505092915050565b600080fd5b600080fd5b60008083601f8401126128b3576128b2612647565b5b8235905067ffffffffffffffff8111156128d0576128cf612893565b5b6020830191508360208202830111156128ec576128eb612898565b5b9250929050565b6000806000806060858703121561290d5761290c6125a9565b5b600085013567ffffffffffffffff81111561292b5761292a6125ae565b5b6129378782880161289d565b9450945050602061294a87828801612632565b925050604061295b878288016125fc565b91505092959194509250565b61297081612611565b82525050565b600060208201905061298b6000830184612967565b92915050565b6000806000604084860312156129aa576129a96125a9565b5b600084013567ffffffffffffffff8111156129c8576129c76125ae565b5b6129d48682870161289d565b935093505060206129e7868287016125fc565b9150509250925092565b6129fa816125d3565b82525050565b6000602082019050612a1560008301846129f1565b92915050565b600060208284031215612a3157612a306125a9565b5b6000612a3f84828501612632565b91505092915050565b612a5181612611565b82525050565b60c082016000820151612a6d6000850182612a48565b506020820151612a806020850182612a48565b506040820151612a936040850182612a48565b506060820151612aa66060850182612a48565b506080820151612ab96080850182612a48565b5060a0820151612acc60a0850182612a48565b50505050565b600060c082019050612ae76000830184612a57565b92915050565b60a082016000820151612b036000850182612a48565b506020820151612b166020850182612a48565b506040820151612b296040850182612a48565b506060820151612b3c6060850182612a48565b506080820151612b4f6080850182612a48565b50505050565b600060a082019050612b6a6000830184612aed565b92915050565b60008060408385031215612b8757612b866125a9565b5b6000612b9585828601612632565b9250506020612ba685828601612632565b9150509250929050565b600080600060608486031215612bc957612bc86125a9565b5b6000612bd7868287016125fc565b9350506020612be886828701612632565b9250506040612bf9868287016125fc565b9150509250925092565b60008060408385031215612c1a57612c196125a9565b5b6000612c2885828601612632565b9250506020612c39858286016125fc565b9150509250929050565b600080600080600060a08688031215612c5f57612c5e6125a9565b5b6000612c6d888289016125fc565b9550506020612c7e88828901612632565b9450506040612c8f88828901612632565b9350506060612ca088828901612632565b9250506080612cb1888289016125fc565b9150509295509295909350565b600082825260208201905092915050565b7f4e6f7420526f7574657200000000000000000000000000000000000000000000600082015250565b6000612d05600a83612cbe565b9150612d1082612ccf565b602082019050919050565b60006020820190508181036000830152612d3481612cf8565b9050919050565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b6000612d71600983612cbe565b9150612d7c82612d3b565b602082019050919050565b60006020820190508181036000830152612da081612d64565b9050919050565b7f4e6f742046656500000000000000000000000000000000000000000000000000600082015250565b6000612ddd600783612cbe565b9150612de882612da7565b602082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f6f6e6c79526f7574657200000000000000000000000000000000000000000000600082015250565b6000612e49600a83612cbe565b9150612e5482612e13565b602082019050919050565b60006020820190508181036000830152612e7881612e3c565b9050919050565b6000608082019050612e946000830187612967565b612ea16020830186612967565b612eae6040830185612967565b612ebb6060830184612967565b95945050505050565b60038110612ed157600080fd5b50565b600081519050612ee381612ec4565b92915050565b600081519050612ef88161261b565b92915050565b600080600080600060a08688031215612f1a57612f196125a9565b5b6000612f2888828901612ed4565b9550506020612f3988828901612ee9565b9450506040612f4a88828901612ee9565b9350506060612f5b88828901612ee9565b9250506080612f6c88828901612ee9565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4243204572726f72000000000000000000000000000000000000000000000000600082015250565b6000612fde600883612cbe565b9150612fe982612fa8565b602082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f4e6f7420656e6f756768206c6971756964697479000000000000000000000000600082015250565b600061304a601483612cbe565b915061305582613014565b602082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f4e6f742065787065637465642076616c75650000000000000000000000000000600082015250565b60006130b6601283612cbe565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000613122601283612cbe565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061319282612611565b915061319d83612611565b92508282019050808211156131b5576131b4613158565b5b92915050565b60006131c682612611565b91506131d183612611565b92508282039050818111156131e9576131e8613158565b5b92915050565b7f506f6f6c206e6f7420656e6f756768204e465400000000000000000000000000600082015250565b6000613225601383612cbe565b9150613230826131ef565b602082019050919050565b6000602082019050818103600083015261325481613218565b9050919050565b7f536f6d657468696e672069732077726f6e672e00000000000000000000000000600082015250565b6000613291601383612cbe565b915061329c8261325b565b602082019050919050565b600060208201905081810360008301526132c081613284565b9050919050565b6000819050919050565b6000819050919050565b60006132f66132f16132ec846132c7565b6132d1565b612611565b9050919050565b613306816132db565b82525050565b60006080820190506133216000830187612967565b61332e6020830186612967565b61333b60408301856132fd565b6133486060830184612967565b95945050505050565b7f4e6f742030000000000000000000000000000000000000000000000000000000600082015250565b6000613387600583612cbe565b915061339282613351565b602082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4e6f7420656e6f7567682076616c756500000000000000000000000000000000600082015250565b60006133f3601083612cbe565b91506133fe826133bd565b602082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b600060608201905061343e60008301866129f1565b61344b60208301856129f1565b6134586040830184612967565b949350505050565b7f4e6f74204368616e67652054696d650000000000000000000000000000000000600082015250565b6000613496600f83612cbe565b91506134a182613460565b602082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b7f506f6f6c204e6f74204e46540000000000000000000000000000000000000000600082015250565b6000613502600c83612cbe565b915061350d826134cc565b602082019050919050565b60006020820190508181036000830152613531816134f5565b9050919050565b600060a08201905061354d6000830188612967565b61355a6020830187612967565b6135676040830186612967565b6135746060830185612967565b6135816080830184612967565b9695505050505050565b600080604083850312156135a2576135a16125a9565b5b60006135b085828601612ee9565b92505060206135c185828601612ee9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b50565b600061361b6000836135fa565b91506136268261360b565b600082019050919050565b600060808201905061364660008301866129f1565b61365360208301856129f1565b6136606040830184612967565b81810360608301526136718161360e565b905094935050505056fea2646970667358221220f9c5ba4aaf56622784420d963ebb5f9f973c9ca074de7cdd18887146bcbe7fd664736f6c63430008110033a2646970667358221220de98f4ac6f3224ab84bb619a36c24453b7cb60d666e55b8a085673c88cb9286864736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007cd70b36ba8fcbd888e9c26840b9300ac64d29a900000000000000000000000000000000000000000000000002c68af0bb140000
-----Decoded View---------------
Arg [0] : _router (address): 0x7cD70b36bA8fcBD888E9C26840b9300aC64D29a9
Arg [1] : _routerFeeRatio (uint256): 200000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007cd70b36ba8fcbd888e9c26840b9300ac64d29a9
Arg [1] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Deployed Bytecode Sourcemap
29637:1575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30974:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31083:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8594:103;;;:::i;:::-;;30020:935;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7946:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8852:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29724:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29696:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30974:101;7832:13;:11;:13::i;:::-;31057:10:::1;31048:6;;:19;;;;;;;;;;;;;;;;;;30974:101:::0;:::o;31083:126::-;7832:13;:11;:13::i;:::-;31183:18:::1;31166:14;:35;;;;31083:126:::0;:::o;8594:103::-;7832:13;:11;:13::i;:::-;8659:30:::1;8686:1;8659:18;:30::i;:::-;8594:103::o:0;30020:935::-;30239:11;30231:38;;;30270:25;30231:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30209:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;30408:4;30353:59;;30361:6;;;;;;;;;;;30353:38;;;30392:11;30353:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;;30345:68;;;;;;30505:4;30446:63;;30454:6;;;;;;;;;;;30446:40;;;30487:13;30446:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;;30424:96;;;;;;30533:13;30618:11;30648:13;30680:10;30709:6;30734:7;30760:14;;30793:6;;;;;;;;;;;30818:10;30571:272;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;30533:321;;30873:6;;;;;;;;;;;30865:23;;;30889:5;30896:4;30865:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30935:11;30917:30;;30928:5;30917:30;;;;;;;;;;;;30198:757;30020:935;;;;;:::o;7946:87::-;7992:7;8019:6;;;;;;;;;;;8012:13;;7946:87;:::o;8852:201::-;7832:13;:11;:13::i;:::-;8961:1:::1;8941:22;;:8;:22;;::::0;8933:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9017:28;9036:8;9017:18;:28::i;:::-;8852:201:::0;:::o;29724:29::-;;;;:::o;29696:21::-;;;;;;;;;;;;;:::o;8111:132::-;8186:12;:10;:12::i;:::-;8175:23;;:7;:5;:7::i;:::-;:23;;;8167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8111:132::o;9213:191::-;9287:16;9306:6;;;;;;;;;;;9287:25;;9332:8;9323:6;;:17;;;;;;;;;;;;;;;;;;9387:8;9356:40;;9377:8;9356:40;;;;;;;;;;;;9276:128;9213:191;:::o;6497:98::-;6550:7;6577:10;6570:17;;6497:98;:::o;-1:-1:-1:-;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:122::-;1332:24;1350:5;1332:24;:::i;:::-;1325:5;1322:35;1312:63;;1371:1;1368;1361:12;1312:63;1259:122;:::o;1387:139::-;1433:5;1471:6;1458:20;1449:29;;1487:33;1514:5;1487:33;:::i;:::-;1387:139;;;;:::o;1532:329::-;1591:6;1640:2;1628:9;1619:7;1615:23;1611:32;1608:119;;;1646:79;;:::i;:::-;1608:119;1766:1;1791:53;1836:7;1827:6;1816:9;1812:22;1791:53;:::i;:::-;1781:63;;1737:117;1532:329;;;;:::o;1867:911::-;1962:6;1970;1978;1986;1994;2043:3;2031:9;2022:7;2018:23;2014:33;2011:120;;;2050:79;;:::i;:::-;2011:120;2170:1;2195:53;2240:7;2231:6;2220:9;2216:22;2195:53;:::i;:::-;2185:63;;2141:117;2297:2;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2268:118;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2553:2;2579:53;2624:7;2615:6;2604:9;2600:22;2579:53;:::i;:::-;2569:63;;2524:118;2681:3;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2652:119;1867:911;;;;;;;;:::o;2784:118::-;2871:24;2889:5;2871:24;:::i;:::-;2866:3;2859:37;2784:118;;:::o;2908:222::-;3001:4;3039:2;3028:9;3024:18;3016:26;;3052:71;3120:1;3109:9;3105:17;3096:6;3052:71;:::i;:::-;2908:222;;;;:::o;3136:118::-;3223:24;3241:5;3223:24;:::i;:::-;3218:3;3211:37;3136:118;;:::o;3260:222::-;3353:4;3391:2;3380:9;3376:18;3368:26;;3404:71;3472:1;3461:9;3457:17;3448:6;3404:71;:::i;:::-;3260:222;;;;:::o;3488:149::-;3524:7;3564:66;3557:5;3553:78;3542:89;;3488:149;;;:::o;3643:115::-;3728:23;3745:5;3728:23;:::i;:::-;3723:3;3716:36;3643:115;;:::o;3764:218::-;3855:4;3893:2;3882:9;3878:18;3870:26;;3906:69;3972:1;3961:9;3957:17;3948:6;3906:69;:::i;:::-;3764:218;;;;:::o;3988:90::-;4022:7;4065:5;4058:13;4051:21;4040:32;;3988:90;;;:::o;4084:116::-;4154:21;4169:5;4154:21;:::i;:::-;4147:5;4144:32;4134:60;;4190:1;4187;4180:12;4134:60;4084:116;:::o;4206:137::-;4260:5;4291:6;4285:13;4276:22;;4307:30;4331:5;4307:30;:::i;:::-;4206:137;;;;:::o;4349:345::-;4416:6;4465:2;4453:9;4444:7;4440:23;4436:32;4433:119;;;4471:79;;:::i;:::-;4433:119;4591:1;4616:61;4669:7;4660:6;4649:9;4645:22;4616:61;:::i;:::-;4606:71;;4562:125;4349:345;;;;:::o;4700:169::-;4784:11;4818:6;4813:3;4806:19;4858:4;4853:3;4849:14;4834:29;;4700:169;;;;:::o;4875:160::-;5015:12;5011:1;5003:6;4999:14;4992:36;4875:160;:::o;5041:366::-;5183:3;5204:67;5268:2;5263:3;5204:67;:::i;:::-;5197:74;;5280:93;5369:3;5280:93;:::i;:::-;5398:2;5393:3;5389:12;5382:19;;5041:366;;;:::o;5413:419::-;5579:4;5617:2;5606:9;5602:18;5594:26;;5666:9;5660:4;5656:20;5652:1;5641:9;5637:17;5630:47;5694:131;5820:4;5694:131;:::i;:::-;5686:139;;5413:419;;;:::o;5838:997::-;6127:4;6165:3;6154:9;6150:19;6142:27;;6179:71;6247:1;6236:9;6232:17;6223:6;6179:71;:::i;:::-;6260:72;6328:2;6317:9;6313:18;6304:6;6260:72;:::i;:::-;6342;6410:2;6399:9;6395:18;6386:6;6342:72;:::i;:::-;6424;6492:2;6481:9;6477:18;6468:6;6424:72;:::i;:::-;6506:73;6574:3;6563:9;6559:19;6550:6;6506:73;:::i;:::-;6589;6657:3;6646:9;6642:19;6633:6;6589:73;:::i;:::-;6672;6740:3;6729:9;6725:19;6716:6;6672:73;:::i;:::-;6755;6823:3;6812:9;6808:19;6799:6;6755:73;:::i;:::-;5838:997;;;;;;;;;;;:::o;6841:109::-;6922:21;6937:5;6922:21;:::i;:::-;6917:3;6910:34;6841:109;;:::o;6956:320::-;7071:4;7109:2;7098:9;7094:18;7086:26;;7122:71;7190:1;7179:9;7175:17;7166:6;7122:71;:::i;:::-;7203:66;7265:2;7254:9;7250:18;7241:6;7203:66;:::i;:::-;6956:320;;;;;:::o;7282:225::-;7422:34;7418:1;7410:6;7406:14;7399:58;7491:8;7486:2;7478:6;7474:15;7467:33;7282:225;:::o;7513:366::-;7655:3;7676:67;7740:2;7735:3;7676:67;:::i;:::-;7669:74;;7752:93;7841:3;7752:93;:::i;:::-;7870:2;7865:3;7861:12;7854:19;;7513:366;;;:::o;7885:419::-;8051:4;8089:2;8078:9;8074:18;8066:26;;8138:9;8132:4;8128:20;8124:1;8113:9;8109:17;8102:47;8166:131;8292:4;8166:131;:::i;:::-;8158:139;;7885:419;;;:::o;8310:182::-;8450:34;8446:1;8438:6;8434:14;8427:58;8310:182;:::o;8498:366::-;8640:3;8661:67;8725:2;8720:3;8661:67;:::i;:::-;8654:74;;8737:93;8826:3;8737:93;:::i;:::-;8855:2;8850:3;8846:12;8839:19;;8498:366;;;:::o;8870:419::-;9036:4;9074:2;9063:9;9059:18;9051:26;;9123:9;9117:4;9113:20;9109:1;9098:9;9094:17;9087:47;9151:131;9277:4;9151:131;:::i;:::-;9143:139;;8870:419;;;:::o
Swarm Source
ipfs://de98f4ac6f3224ab84bb619a36c24453b7cb60d666e55b8a085673c88cb92868
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.