More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Finalize Token | 18836232 | 190 days ago | IN | 0.06713899 ETH | 0.2360463 | ||||
Addmore Whitelis... | 18836212 | 190 days ago | IN | 0 ETH | 0.10485148 | ||||
Create Token | 18836166 | 190 days ago | IN | 1 ETH | 0.29215101 | ||||
Set Whitelist | 18777078 | 198 days ago | IN | 0 ETH | 0.00203746 | ||||
Finalize Token | 18771786 | 199 days ago | IN | 0.06897941 ETH | 0.28894877 | ||||
Addmore Whitelis... | 18771750 | 199 days ago | IN | 0 ETH | 0.05017728 | ||||
Create Token | 18753411 | 201 days ago | IN | 1 ETH | 0.13482604 | ||||
Set Whitelist | 18751330 | 202 days ago | IN | 0 ETH | 0.00137619 | ||||
Set Whitelist | 18737541 | 204 days ago | IN | 0 ETH | 0.00259414 | ||||
Set Whitelist | 18737534 | 204 days ago | IN | 0 ETH | 0.00251716 | ||||
Finalize Token | 18679187 | 212 days ago | IN | 0.07373717 ETH | 0.21733305 | ||||
Addmore Whitelis... | 18679151 | 212 days ago | IN | 0 ETH | 0.06735115 | ||||
Create Token | 18679147 | 212 days ago | IN | 2 ETH | 0.23150022 | ||||
Finalize Token | 18627866 | 219 days ago | IN | 0.07382777 ETH | 0.36909472 | ||||
Addmore Whitelis... | 18626985 | 219 days ago | IN | 0 ETH | 0.03097104 | ||||
Create Token | 18626971 | 219 days ago | IN | 2 ETH | 0.18710703 | ||||
Set Whitelist | 18617316 | 220 days ago | IN | 0 ETH | 0.00164519 | ||||
Set Whitelist | 18609832 | 222 days ago | IN | 0 ETH | 0.00100054 | ||||
Finalize Token | 18585521 | 225 days ago | IN | 0.07513562 ETH | 0.33199179 | ||||
Addmore Whitelis... | 18583752 | 225 days ago | IN | 0 ETH | 0.05745491 | ||||
Create Token | 18583686 | 225 days ago | IN | 2 ETH | 0.16592067 | ||||
Set Whitelist | 18580234 | 226 days ago | IN | 0 ETH | 0.00174562 | ||||
Transfer Ownersh... | 18580057 | 226 days ago | IN | 0 ETH | 0.0010529 | ||||
Set Proof Admin | 18580052 | 226 days ago | IN | 0 ETH | 0.00102028 | ||||
Initialize Min L... | 18579973 | 226 days ago | IN | 0 ETH | 0.00172236 |
Latest 17 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18836232 | 190 days ago | 0.06713899 ETH | ||||
18836166 | 190 days ago | 1 ETH | ||||
18836166 | 190 days ago | Contract Creation | 0 ETH | |||
18771786 | 199 days ago | 0.00000362 ETH | ||||
18771786 | 199 days ago | 0.06897941 ETH | ||||
18753411 | 201 days ago | 1 ETH | ||||
18753411 | 201 days ago | Contract Creation | 0 ETH | |||
18679187 | 212 days ago | 0.07373717 ETH | ||||
18679147 | 212 days ago | 2 ETH | ||||
18679147 | 212 days ago | Contract Creation | 0 ETH | |||
18627866 | 219 days ago | 0.07382777 ETH | ||||
18626971 | 219 days ago | 2 ETH | ||||
18626971 | 219 days ago | Contract Creation | 0 ETH | |||
18585521 | 225 days ago | 0.07513562 ETH | ||||
18583686 | 225 days ago | 2 ETH | ||||
18583686 | 225 days ago | Contract Creation | 0 ETH | |||
18579955 | 226 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ProofNonReflectionTokenFactory
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "./libraries/Ownable.sol"; import "./libraries/ProofNonReflectionTokenFees.sol"; import "./libraries/Context.sol"; import "./interfaces/ITeamFinanceLocker.sol"; import "./interfaces/ITokenCutter.sol"; import "./interfaces/IUniswapV2Router02.sol"; import "./interfaces/IUniswapV2Factory.sol"; import "./interfaces/IFACTORY.sol"; import "./interfaces/IProofNonReflectionTokenCutter.sol"; import "./tokenCutters/ProofNonReflectionTokenCutter.sol"; contract ProofNonReflectionTokenFactory is Ownable { struct ProofToken { bool status; address pair; address owner; uint256 unlockTime; uint256 lockId; } struct TokenParam { string tokenName; string tokenSymbol; uint256 initialSupply; uint256 percentToLP; uint256 initialMainFee; uint256 initialMainFeeOnSell; uint256 initialLpFee; uint256 initialLpFeeOnSell; uint256 initialDevFee; uint256 initialDevFeeOnSell; uint256 unlockTime; uint256 whitelistPeriod; address operationsWallet; address mainWallet; address[] whitelists; } struct WhitelistAdd_ { address [] whitelists; } mapping(address => ProofToken) public validatedPairs; mapping(address => bool) private whitelisted; address public proofAdmin; address public routerAddress; address public lockerAddress; address payable public revenueAddress; address payable public rewardPoolAddress; address public nftWhitelist; uint256 private minLiq = 0; event TokenCreated(address _address); constructor( address initialRouterAddress, address initialLockerAddress, address initialRewardPoolAddress, address initialRevenueAddress, address _nftWhitelist ) { routerAddress = initialRouterAddress; lockerAddress = initialLockerAddress; revenueAddress = payable(initialRevenueAddress); rewardPoolAddress = payable(initialRewardPoolAddress); proofAdmin = msg.sender; nftWhitelist = _nftWhitelist; } function createToken(TokenParam memory tokenParam_) external payable { require( tokenParam_.unlockTime >= block.timestamp + 30 days, "unlock under 30 days" ); require(msg.value >= minLiq, "not enough liquidity"); // require( // tokenParam_.whitelistPeiod > block.timestamp, // "invalid whitelistPeriod" // ); //create token ProofNonReflectionTokenFees.allFees memory fees = ProofNonReflectionTokenFees.allFees( tokenParam_.initialMainFee, tokenParam_.initialMainFeeOnSell, tokenParam_.initialLpFee, tokenParam_.initialLpFeeOnSell, tokenParam_.initialDevFee, tokenParam_.initialDevFeeOnSell ); ProofNonReflectionTokenCutter newToken = new ProofNonReflectionTokenCutter(); IProofNonReflectionTokenCutter(address(newToken)).setBasicData( IProofNonReflectionTokenCutter.BaseData( tokenParam_.tokenName, tokenParam_.tokenSymbol, tokenParam_.initialSupply, tokenParam_.percentToLP, tokenParam_.whitelistPeriod, msg.sender, tokenParam_.operationsWallet, tokenParam_.mainWallet, routerAddress, proofAdmin, tokenParam_.whitelists, nftWhitelist ), fees ); emit TokenCreated(address(newToken)); //add liquidity if (msg.value != 0) { newToken.approve(routerAddress, type(uint256).max); IUniswapV2Router02 router = IUniswapV2Router02(routerAddress); router.addLiquidityETH{value: msg.value}( address(newToken), newToken.balanceOf(address(this)), 0, 0, address(this), block.timestamp ); } // disable trading newToken.swapTradingStatus(); validatedPairs[address(newToken)] = ProofToken( false, newToken.pair(), msg.sender, tokenParam_.unlockTime, 0 ); } function finalizeToken(address tokenAddress) external payable { _checkTokenStatus(tokenAddress); address _pair = validatedPairs[tokenAddress].pair; uint256 _unlockTime = validatedPairs[tokenAddress].unlockTime; IERC20(_pair).approve(lockerAddress, type(uint256).max); uint256 lpBalance = IERC20(_pair).balanceOf(address(this)); IProofNonReflectionTokenCutter(tokenAddress).addNFTSnapshot(); uint256 _lockId = ITeamFinanceLocker(lockerAddress).lockToken{ value: msg.value }(_pair, msg.sender, lpBalance, _unlockTime, false, 0x0000000000000000000000000000000000000000); validatedPairs[tokenAddress].lockId = _lockId; //enable trading ITokenCutter(tokenAddress).swapTradingStatus(); ITokenCutter(tokenAddress).setLaunchedAt(); validatedPairs[tokenAddress].status = true; } function cancelToken(address tokenAddress) external { _checkTokenStatus(tokenAddress); address _pair = validatedPairs[tokenAddress].pair; address _owner = validatedPairs[tokenAddress].owner; IUniswapV2Router02 router = IUniswapV2Router02(routerAddress); IERC20(_pair).approve(routerAddress, type(uint256).max); uint256 _lpBalance = IERC20(_pair).balanceOf(address(this)); // enable transfer and allow router to exceed tx limit to remove liquidity ITokenCutter(tokenAddress).cancelToken(); router.removeLiquidityETH( address(tokenAddress), _lpBalance, 0, 0, _owner, block.timestamp ); // disable transfer of token ITokenCutter(tokenAddress).swapTradingStatus(); delete validatedPairs[tokenAddress]; } function initializeMinLiq() external onlyOwner { require(minLiq == 0, "already executed"); minLiq = 1 ether; } function setWhitelist(address[] memory users, bool[] memory statuses) external onlyOwner { uint256 len = users.length; require(len == statuses.length, "list mismatch"); for (uint256 i; i < len; i++) { whitelisted[users[i]] = statuses[i]; } } function setLockerAddress(address newlockerAddress) external onlyOwner { lockerAddress = newlockerAddress; } function setRouterAddress(address newRouterAddress) external onlyOwner { routerAddress = payable(newRouterAddress); } function setNFTWhitelist(address newNFTWhitelist) external onlyOwner { nftWhitelist = newNFTWhitelist; } function proofRevenueAddress() external view returns (address) { return revenueAddress; } function proofRewardPoolAddress() external view returns (address) { return rewardPoolAddress; } function distributeExcessFunds() external onlyOwner { (bool sent, ) = revenueAddress.call{value: address(this).balance / 2}(""); require(sent, ""); (bool sent1, ) = rewardPoolAddress.call{value: address(this).balance}(""); require(sent1, ""); } function setProofAdmin(address newProofAdmin) external onlyOwner { proofAdmin = newProofAdmin; } function setRevenueAddress(address newRevenueAddress) external onlyOwner { revenueAddress = payable(newRevenueAddress); } function setRewardPoolAddress( address newRewardPoolAddress ) external onlyOwner { rewardPoolAddress = payable(newRewardPoolAddress); } function addmoreWhitelist(address tokenAddress, WhitelistAdd_ memory _WhitelistAdd) external { _checkTokenStatus(tokenAddress); IProofNonReflectionTokenCutter(tokenAddress).addMoreToWhitelist(IProofNonReflectionTokenCutter.WhitelistAdd_(_WhitelistAdd.whitelists)); } function _checkTokenStatus(address tokenAddress) internal view { require(validatedPairs[tokenAddress].owner == msg.sender, "!owner"); require(validatedPairs[tokenAddress].status == false, "validated"); } function isWhitelisted(address user) external view returns(bool) { return whitelisted[user]; } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IDividendDistributor { function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function setMinPeriod(uint256 _minPeriod) external; function setMinDistribution(uint256 _minDistribution) external; function rewardTokenAddress() external view returns(address); }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables * (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, * checking first that contract recipients are aware of the ERC721 protocol * to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move * this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} * whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token * by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external payable; /** * @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 payable; /** * @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); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IFACTORY { function proofRevenueAddress() external view returns (address); function proofRewardPoolAddress() external view returns (address); function isWhitelisted(address user) external view returns(bool); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../libraries/ProofNonReflectionTokenFees.sol"; interface IProofNonReflectionTokenCutter is IERC20, IERC20Metadata { struct BaseData { string tokenName; string tokenSymbol; uint256 initialSupply; uint256 percentToLP; uint256 whitelistPeriod; address owner; address dev; address main; address routerAddress; address initialProofAdmin; address[] whitelists; address nftWhitelist; } struct WhitelistAdd_ { address [] whitelists; } function setBasicData( BaseData memory _baseData, ProofNonReflectionTokenFees.allFees memory fees ) external; function addMoreToWhitelist( WhitelistAdd_ memory _WhitelistAdd ) external; function updateWhitelistPeriod( uint256 _whitelistPeriod ) external; function addNFTSnapshot() external; function changeFees( uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell ) external; }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface ITeamFinanceLocker { function lockToken( address _tokenAddress, address _withdrawalAddress, uint256 _amount, uint256 _unlockTime, bool _mintNFT, address referrer ) external payable returns (uint256 _id); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface ITokenCutter { function swapTradingStatus() external; function setLaunchedAt() external; function cancelToken() external; }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "./Context.sol"; 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(), "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), "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); } }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; library ProofNonReflectionTokenFees { struct allFees { uint256 mainFee; uint256 mainFeeOnSell; uint256 lpFee; uint256 lpFeeOnSell; uint256 devFee; uint256 devFeeOnSell; } }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "../interfaces/IERC721A.sol"; import "../libraries/Ownable.sol"; import "../libraries/Context.sol"; import "../libraries/ProofNonReflectionTokenFees.sol"; import "../interfaces/IFACTORY.sol"; import "../interfaces/IDividendDistributor.sol"; import "../interfaces/IUniswapV2Router02.sol"; import "../interfaces/IUniswapV2Factory.sol"; import "../interfaces/IProofNonReflectionTokenCutter.sol"; contract ProofNonReflectionTokenCutter is Context, IProofNonReflectionTokenCutter { //This token was created with PROOF, and audited by Solidity Finance — https://proofplatform.io/projects mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; address payable public proofBurnerAddress; address public proofAdmin; uint256 public whitelistEndTime; uint256 public whitelistPeriod; bool public restrictWhales = true; mapping(address => bool) public userWhitelist; IERC721A public nftWhitelist; bool public whitelistMode = true; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isTxLimitExempt; mapping(address => bool) public isDividendExempt; uint256 public launchedAt; uint256 public proofFee = 2; uint256 public mainFee; uint256 public lpFee; uint256 public devFee; uint256 public mainFeeOnSell; uint256 public lpFeeOnSell; uint256 public devFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address public factory; address public tokenOwner; address payable public devWallet; address payable public mainWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = true; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; constructor() { factory = msg.sender; } modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyProofAdmin() { require( proofAdmin == _msgSender(), "Ownable: caller is not the proofAdmin" ); _; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFactory() { require(factory == _msgSender(), "Ownable: caller is not the factory"); _; } function setBasicData( BaseData memory _baseData, ProofNonReflectionTokenFees.allFees memory fees ) external onlyFactory { _name = _baseData.tokenName; _symbol = _baseData.tokenSymbol; _totalSupply = _baseData.initialSupply; //Tx & Wallet Limits require(_baseData.percentToLP >= 70, "Too low"); _maxTxAmount = (_baseData.initialSupply * 5) / 1000; _walletMax = (_baseData.initialSupply * 1) / 100; swapThreshold = (_baseData.initialSupply * 5) / 4000; router = IUniswapV2Router02(_baseData.routerAddress); pair = IUniswapV2Factory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = type(uint256).max; userWhitelist[address(this)] = true; userWhitelist[factory] = true; userWhitelist[pair] = true; userWhitelist[_baseData.owner] = true; userWhitelist[_baseData.initialProofAdmin] = true; userWhitelist[_baseData.routerAddress] = true; _addWhitelist(_baseData.whitelists); nftWhitelist = IERC721A(_baseData.nftWhitelist); isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isFeeExempt[_baseData.owner] = true; isTxLimitExempt[_baseData.owner] = true; isTxLimitExempt[pair] = true; isTxLimitExempt[factory] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[ZERO] = true; whitelistPeriod = _baseData.whitelistPeriod; //Fees lpFee = fees.lpFee; lpFeeOnSell = fees.lpFeeOnSell; devFee = fees.devFee; devFeeOnSell = fees.devFeeOnSell; mainFee = fees.mainFee; mainFeeOnSell = fees.mainFeeOnSell; totalFee = devFee + lpFee + mainFee + proofFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFee; if (IFACTORY(factory).isWhitelisted(_baseData.owner)) { require(totalFee <= 12, "high KYC fee"); require(totalFeeIfSelling <= 17, "high KYC fee"); } else { require(totalFee <= 7, "high fee"); require(totalFeeIfSelling <= 7, "high fee"); } tokenOwner = _baseData.owner; devWallet = payable(_baseData.dev); mainWallet = payable(_baseData.main); proofAdmin = _baseData.initialProofAdmin; //Initial supply uint256 forLP = (_baseData.initialSupply * _baseData.percentToLP) / 100; //95% uint256 forOwner = _baseData.initialSupply - forLP; //5% _balances[msg.sender] += forLP; _balances[_baseData.owner] += forOwner; emit Transfer(address(0), msg.sender, forLP); emit Transfer(address(0), _baseData.owner, forOwner); } //proofAdmin functions function updateWhitelistPeriod( uint256 _whitelistPeriod ) external onlyProofAdmin { whitelistPeriod = _whitelistPeriod; whitelistEndTime = launchedAt + (60 * _whitelistPeriod); whitelistMode = true; } function updateProofAdmin( address newAdmin ) external virtual onlyProofAdmin { proofAdmin = newAdmin; userWhitelist[newAdmin] = true; } function updateProofBurnerAddress( address newproofBurnerAddress ) external onlyProofAdmin { proofBurnerAddress = payable(newproofBurnerAddress); } //Factory functions function swapTradingStatus() external onlyFactory { tradingStatus = !tradingStatus; } function setLaunchedAt() external onlyFactory { require(launchedAt == 0, "already launched"); launchedAt = block.timestamp; whitelistEndTime = block.timestamp + (60 * whitelistPeriod); whitelistMode = true; } function cancelToken() external onlyFactory { isFeeExempt[address(router)] = true; isTxLimitExempt[address(router)] = true; isTxLimitExempt[tokenOwner] = true; tradingStatus = true; restrictWhales = false; swapAndLiquifyEnabled = false; } //Owner functions function changeFees( uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell ) external onlyOwner { mainFee = initialMainFee; lpFee = initialLpFee; devFee = initialDevFee; mainFeeOnSell = initialMainFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; if (IFACTORY(factory).isWhitelisted(tokenOwner)) { require(totalFee <= 12, "high fee"); require(totalFeeIfSelling <= 17, "high fee"); } else { require(totalFee <= 7, "high fee"); require(totalFeeIfSelling <= 7, "high fee"); } } function changeTxLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%"); require(newLimit <= (_totalSupply * 3) / 100, "Max 3%"); _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%"); require(newLimit <= (_totalSupply * 3) / 100, "Max 3%"); _walletMax = newLimit; } function changeRestrictWhales(bool newValue) external onlyOwner { require(launchedAt != 0, "!launched"); restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt( address holder, bool exempt ) external onlyOwner { isTxLimitExempt[holder] = exempt; } function reduceProofFee() external onlyOwner { require(proofFee == 2, "!already reduced"); require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 72 hours, "too soon"); proofFee = 1; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } function adjustProofFee(uint256 _proofFee) external onlyProofAdmin { require(launchedAt != 0, "!launched"); if (block.timestamp >= launchedAt + 72 hours) { require(_proofFee <= 1); proofFee = _proofFee; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } else { require(_proofFee <= 2); proofFee = _proofFee; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setMainWallet(address payable newMainWallet) external onlyOwner { mainWallet = newMainWallet; } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings( bool enableSwapBack, uint256 newSwapBackLimit ) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function isWhitelisted(address user) public view returns (bool) { return userWhitelist[user]; } function getCirculatingSupply() external view returns (uint256) { return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO); } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(tradingStatus, "Trading Closed"); if(whitelistMode) { if (block.timestamp >= whitelistEndTime ) { whitelistMode = false; } else { if (sender == pair) { //buy require(isWhitelisted(recipient), "Not whitelisted"); } else if (recipient == pair) { //sell require(isWhitelisted(sender), "Not whitelisted"); } else { //transfer require(isWhitelisted(sender) && isWhitelisted(recipient), "Not Whitelisted"); } } } if (inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } if (recipient == pair && restrictWhales) { require( amount <= _maxTxAmount || (isTxLimitExempt[sender] && isTxLimitExempt[recipient]), "Max TX" ); } if (!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient] + amount <= _walletMax, "Max Wallet"); } if ( sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold ) { swapBack(); } _balances[sender] = _balances[sender] - amount; uint256 finalAmount = amount; if (sender == pair || recipient == pair) { finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; } _balances[recipient] = _balances[recipient] + finalAmount; emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { _balances[sender] = _balances[sender] - amount; _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = (amount * feeApplicable) / 100; _balances[address(this)] = _balances[address(this)] + feeAmount; emit Transfer(sender, address(this), feeAmount); return amount - feeAmount; } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify; uint256 devBalance; uint256 proofBalance; uint256 amountEthLiquidity; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountToLiquify = (tokensToLiquify * lpFeeOnSell) / totalFeeIfSelling / 2; } else { amountToLiquify = (tokensToLiquify * lpFee) / totalFee / 2; } uint256 amountToSwap = tokensToLiquify - amountToLiquify; if (amountToSwap == 0) return; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountEthLiquidity = (amountETH * lpFeeOnSell) / totalFeeIfSelling / 2; } else { amountEthLiquidity = (amountETH * lpFee) / totalFee / 2; } if (amountToLiquify > 0) { router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } uint256 amountETHafterLP = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { devBalance = (amountETHafterLP * devFeeOnSell) / totalFeeIfSelling; proofBalance = (amountETHafterLP * proofFee) / totalFeeIfSelling; } else { devBalance = (amountETHafterLP * devFee) / totalFee; proofBalance = (amountETHafterLP * proofFee) / totalFee; } uint256 amountEthMain = amountETHafterLP - devBalance - proofBalance; if (amountETH > 0) { if (proofBalance > 0) { uint256 revenueSplit = proofBalance / 2; (bool sent, ) = payable(IFACTORY(factory).proofRevenueAddress()).call{value: revenueSplit}(""); require(sent); (bool sent1, ) = payable(IFACTORY(factory).proofRewardPoolAddress()).call{value: revenueSplit}(""); require(sent1); } if (devBalance > 0) { (bool sent, ) = devWallet.call{value: devBalance}(""); require(sent); } if (amountEthMain > 0) { (bool sent1, ) = mainWallet.call{value: amountEthMain}(""); require(sent1); } } } function _addWhitelist(address[] memory _whitelists) internal { uint256 length = _whitelists.length; for (uint256 i = 0; i < length; i++) { userWhitelist[_whitelists[i]] = true; } } function addMoreToWhitelist(WhitelistAdd_ memory _WhitelistAdd) external onlyFactory { _addWhitelist(_WhitelistAdd.whitelists); } function addNFTSnapshot() external onlyFactory { uint256 len = nftWhitelist.totalSupply() + 1; for (uint256 i = 1; i < len; ) { userWhitelist[nftWhitelist.ownerOf(i)] = true; unchecked { ++i; } } } receive() external payable {} }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialRouterAddress","type":"address"},{"internalType":"address","name":"initialLockerAddress","type":"address"},{"internalType":"address","name":"initialRewardPoolAddress","type":"address"},{"internalType":"address","name":"initialRevenueAddress","type":"address"},{"internalType":"address","name":"_nftWhitelist","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"components":[{"internalType":"address[]","name":"whitelists","type":"address[]"}],"internalType":"struct ProofNonReflectionTokenFactory.WhitelistAdd_","name":"_WhitelistAdd","type":"tuple"}],"name":"addmoreWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"percentToLP","type":"uint256"},{"internalType":"uint256","name":"initialMainFee","type":"uint256"},{"internalType":"uint256","name":"initialMainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"},{"internalType":"address","name":"operationsWallet","type":"address"},{"internalType":"address","name":"mainWallet","type":"address"},{"internalType":"address[]","name":"whitelists","type":"address[]"}],"internalType":"struct ProofNonReflectionTokenFactory.TokenParam","name":"tokenParam_","type":"tuple"}],"name":"createToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"distributeExcessFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"finalizeToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"initializeMinLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofRevenueAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofRewardPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPoolAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlockerAddress","type":"address"}],"name":"setLockerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNFTWhitelist","type":"address"}],"name":"setNFTWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProofAdmin","type":"address"}],"name":"setProofAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRevenueAddress","type":"address"}],"name":"setRevenueAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardPoolAddress","type":"address"}],"name":"setRewardPoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool[]","name":"statuses","type":"bool[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validatedPairs","outputs":[{"internalType":"bool","name":"status","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"lockId","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006009553480156200001657600080fd5b506040516200591a3803806200591a833981016040819052620000399162000120565b6200004433620000b3565b600480546001600160a01b039687166001600160a01b031991821617909155600580549587169582169590951790945560068054928616928516929092179091556007805492851692841692909217909155600380548316331790556008805491909316911617905562000190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011b57600080fd5b919050565b600080600080600060a086880312156200013957600080fd5b620001448662000103565b9450620001546020870162000103565b9350620001646040870162000103565b9250620001746060870162000103565b9150620001846080870162000103565b90509295509295909350565b61577a80620001a06000396000f3fe6080604052600436106101855760003560e01c8063715018a6116100d1578063b24cf5d71161008a578063d7e7a9e711610064578063d7e7a9e7146104d7578063e6a053d0146104f5578063f2fde38b14610515578063f4f1af3a1461053557600080fd5b8063b24cf5d714610477578063b410908d14610497578063c5aa0062146104b757600080fd5b8063715018a6146103dc57806373caf536146103f1578063845a51ec146104115780638da5cb5b146104315780639a97b0781461044f578063ae084ec21461046457600080fd5b80633af32abf1161013e57806345338d631161011857806345338d631461035c57806359a51c341461037c578063653ed5d41461039c57806370a78991146103bc57600080fd5b80633af32abf146102d35780633b99adf71461031c57806341cb87fc1461033c57600080fd5b80630ab16c19146101915780630bc337d8146101ce5780632dcacf44146101e55780633268cc56146102755780633675f29b146102955780633690e287146102b557600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506008546101b1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101da57600080fd5b506101e3610548565b005b3480156101f157600080fd5b5061023f61020036600461157a565b6001602081905260009182526040909120805491810154600282015460039092015460ff8416936001600160a01b036101009091048116939216919085565b6040805195151586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a0016101c5565b34801561028157600080fd5b506004546101b1906001600160a01b031681565b3480156102a157600080fd5b506005546101b1906001600160a01b031681565b3480156102c157600080fd5b506006546001600160a01b03166101b1565b3480156102df57600080fd5b5061030c6102ee36600461157a565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020016101c5565b34801561032857600080fd5b506101e36103373660046116b5565b6105a6565b34801561034857600080fd5b506101e361035736600461157a565b610675565b34801561036857600080fd5b506101e361037736600461157a565b61069f565b34801561038857600080fd5b506003546101b1906001600160a01b031681565b3480156103a857600080fd5b506101e36103b736600461157a565b6106c9565b3480156103c857600080fd5b506101e36103d736600461157a565b610947565b3480156103e857600080fd5b506101e3610971565b3480156103fd57600080fd5b506101e361040c366004611779565b610985565b34801561041d57600080fd5b506007546101b1906001600160a01b031681565b34801561043d57600080fd5b506000546001600160a01b03166101b1565b34801561045b57600080fd5b506101e36109fc565b6101e3610472366004611881565b610b0b565b34801561048357600080fd5b506101e361049236600461157a565b611022565b3480156104a357600080fd5b506006546101b1906001600160a01b031681565b3480156104c357600080fd5b506101e36104d236600461157a565b61104c565b3480156104e357600080fd5b506007546001600160a01b03166101b1565b34801561050157600080fd5b506101e361051036600461157a565b611076565b34801561052157600080fd5b506101e361053036600461157a565b6110a0565b6101e361054336600461157a565b61110a565b6105506113f3565b600954156105985760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e1958dd5d195960821b60448201526064015b60405180910390fd5b670de0b6b3a7640000600955565b6105ae6113f3565b8151815181146105f05760405162461bcd60e51b815260206004820152600d60248201526c0d8d2e6e840dad2e6dac2e8c6d609b1b604482015260640161058f565b60005b8181101561066f5782818151811061060d5761060d6119cb565b60200260200101516002600086848151811061062b5761062b6119cb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610667816119f7565b9150506105f3565b50505050565b61067d6113f3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106a76113f3565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106d28161144d565b6001600160a01b03818116600090815260016020819052604091829020805491015460048054935163095ea7b360e01b815293851690840181905260001960248501526101009092048416931691839063095ea7b3906044016020604051808303816000875af115801561074a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076e9190611a10565b506040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156107b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da9190611a2d565b9050846001600160a01b031663546a88116040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561081757600080fd5b505af115801561082b573d6000803e3d6000fd5b5050604051629d473b60e21b81526001600160a01b03851692506302751cec9150610865908890859060009081908a904290600401611a46565b60408051808303816000875af1158015610883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a79190611a81565b5050846001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108e457600080fd5b505af11580156108f8573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040822080546001600160a81b031916815590810180546001600160a01b031916905560028101829055600301555050505050565b61094f6113f3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6109796113f3565b61098360006114f8565b565b61098e8261144d565b6040805160208101825282518152905163e572967b60e01b81526001600160a01b0384169163e572967b916109c69190600401611ae9565b600060405180830381600087803b1580156109e057600080fd5b505af11580156109f4573d6000803e3d6000fd5b505050505050565b610a046113f3565b6006546000906001600160a01b0316610a1e600247611b0c565b604051600081818185875af1925050503d8060008114610a5a576040519150601f19603f3d011682016040523d82523d6000602084013e610a5f565b606091505b5050905080610a8a5760405162461bcd60e51b8152602060048201526000602482015260440161058f565b6007546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ad7576040519150601f19603f3d011682016040523d82523d6000602084013e610adc565b606091505b5050905080610b075760405162461bcd60e51b8152602060048201526000602482015260440161058f565b5050565b610b184262278d00611b2e565b8161014001511015610b635760405162461bcd60e51b8152602060048201526014602482015273756e6c6f636b20756e646572203330206461797360601b604482015260640161058f565b600954341015610bac5760405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206c697175696469747960601b604482015260640161058f565b60006040518060c00160405280836080015181526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610120015181525090506000604051610c0590611548565b604051809103906000f080158015610c21573d6000803e3d6000fd5b5060408051610180808201835286518252602080880151908301528683015182840152606080880151908301526101608088015160808401523360a0840152908701516001600160a01b0390811660c08401526101a0880151811660e084015260048054821661010085015260035482166101208501526101c0890151610140850152600854821692840192909252925163329acc4960e11b815293945091841692636535989292610cd69291879101611b8d565b600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506040516001600160a01b03841681527f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e9250602001905060405180910390a13415610eb3576004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252600019602483015282169063095ea7b3906044016020604051808303816000875af1158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611a10565b50600480546040516370a0823160e01b815230928101929092526001600160a01b0390811691829163f305d7199134918691908216906370a0823190602401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611a2d565b60008030426040518863ffffffff1660e01b8152600401610e6b96959493929190611a46565b60606040518083038185885af1158015610e89573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eae9190611cd4565b505050505b806001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506040518060a00160405280600015158152602001826001600160a01b031663a8aa1b316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611d02565b6001600160a01b03908116825233602080840191909152610140969096015160408084019190915260006060938401819052948216855260018088529481902084518154988601516001600160a81b0319909916901515610100600160a81b031916179783166101000297909717875583015193860180546001600160a01b03191694909116939093179092559081015160028401556080015160039092019190915550565b61102a6113f3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6110546113f3565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61107e6113f3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6110a86113f3565b6001600160a01b0381166110fe5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161058f565b611107816114f8565b50565b6111138161144d565b6001600160a01b03818116600090815260016020526040908190208054600290910154600554925163095ea7b360e01b8152928416600484015260001960248401526101009091049092169190829063095ea7b3906044016020604051808303816000875af115801561118a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ae9190611a10565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190611a2d565b9050836001600160a01b031663f576f5396040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561125757600080fd5b505af115801561126b573d6000803e3d6000fd5b5050600554604051635af06fed60e01b81526001600160a01b038781166004830152336024830152604482018690526064820187905260006084830181905260a4830181905294509091169150635af06fed90349060c40160206040518083038185885af11580156112e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113069190611a2d565b6001600160a01b038616600081815260016020526040808220600301849055805163fbd7575360e01b81529051939450919263fbd7575392600480820193929182900301818387803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b50505050846001600160a01b03166327193bc46040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040909120805460ff191690911790555050505050565b6000546001600160a01b031633146109835760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015260640161058f565b6001600160a01b03818116600090815260016020819052604090912001541633146114a35760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015260640161058f565b6001600160a01b03811660009081526001602052604090205460ff16156111075760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b604482015260640161058f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613a2580611d2083390190565b6001600160a01b038116811461110757600080fd5b803561157581611555565b919050565b60006020828403121561158c57600080fd5b813561159781611555565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156115d8576115d861159e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116075761160761159e565b604052919050565b600067ffffffffffffffff8211156116295761162961159e565b5060051b60200190565b600082601f83011261164457600080fd5b813560206116596116548361160f565b6115de565b82815260059290921b8401810191818101908684111561167857600080fd5b8286015b8481101561169c57803561168f81611555565b835291830191830161167c565b509695505050505050565b801515811461110757600080fd5b600080604083850312156116c857600080fd5b823567ffffffffffffffff808211156116e057600080fd5b6116ec86838701611633565b935060209150818501358181111561170357600080fd5b85019050601f8101861361171657600080fd5b80356117246116548261160f565b81815260059190911b8201830190838101908883111561174357600080fd5b928401925b8284101561176a57833561175b816116a7565b82529284019290840190611748565b80955050505050509250929050565b6000806040838503121561178c57600080fd5b823561179781611555565b9150602083013567ffffffffffffffff808211156117b457600080fd5b90840190602082870312156117c857600080fd5b6040516020810181811083821117156117e3576117e361159e565b6040528235828111156117f557600080fd5b61180188828601611633565b8252508093505050509250929050565b600082601f83011261182257600080fd5b813567ffffffffffffffff81111561183c5761183c61159e565b61184f601f8201601f19166020016115de565b81815284602083860101111561186457600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561189357600080fd5b813567ffffffffffffffff808211156118ab57600080fd5b908301906101e082860312156118c057600080fd5b6118c86115b4565b8235828111156118d757600080fd5b6118e387828601611811565b8252506020830135828111156118f857600080fd5b61190487828601611811565b60208301525060408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e082015261010080840135818301525061012080840135818301525061014080840135818301525061016080840135818301525061018061198481850161156a565b908201526101a061199684820161156a565b908201526101c083810135838111156119ae57600080fd5b6119ba88828701611633565b918301919091525095945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611a0957611a096119e1565b5060010190565b600060208284031215611a2257600080fd5b8151611597816116a7565b600060208284031215611a3f57600080fd5b5051919050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215611a9457600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b83811015611ade5781516001600160a01b031687529582019590820190600101611ab9565b509495945050505050565b6020815260008251602080840152611b046040840182611aa5565b949350505050565b600082611b2957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611b4157611b416119e1565b92915050565b6000815180845260005b81811015611b6d57602081850181015186830182015201611b51565b506000602082860101526020601f19601f83011685010191505092915050565b60e08152600083516101808060e0850152611bac610260850183611b47565b9150602086015160df19610100818786030181880152611bcc8584611b47565b945060408901519250610120838189015260608a0151935061014084818a015260808b0151945061016085818b015260a08c01519550611c16878b01876001600160a01b03169052565b60c08c01516001600160a01b039081166101a08c015260e08d015181166101c08c0152848d015181166101e08c0152838d0151166102008b0152818c01518a890386016102208c01529650611c6b8888611aa5565b9750808c01519650505050505050611c8f6102408501826001600160a01b03169052565b5090506115976020830184805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600080600060608486031215611ce957600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611d1457600080fd5b81516115978161155556fe60806040526009805460ff19166001179055600b805460ff60a01b1916600160a01b1790556002601055601e805461010160a81b61ffff60a81b1990911617905534801561004c57600080fd5b50601b80546001600160a01b031916331790556139b78061006e6000396000f3fe6080604052600436106103dd5760003560e01c8063807c2d9c116101fd578063ca987b0e11610118578063e572967b116100ab578063f16fd78d1161007a578063f16fd78d14610b65578063f576f53914610b85578063f887ea4014610b9a578063fabe628314610bba578063fbd7575314610bda57600080fd5b8063e572967b14610afa578063e66b1d1e14610b1a578063ebdfd72214610b3a578063ef92e22214610b5057600080fd5b8063d4fb9a01116100e7578063d4fb9a0114610a43578063d741b9c314610a64578063d920334e14610a94578063dd62ed3e14610ab457600080fd5b8063ca987b0e146109d7578063cb29813c146109ed578063cd1e330a14610a0d578063d0a5eb4e14610a2357600080fd5b8063a457c2d711610190578063b72344a21161015f578063b72344a214610961578063bb542ef014610981578063bf56b371146109a1578063c45a0155146109b757600080fd5b8063a457c2d7146108eb578063a8aa1b311461090b578063a9059cbb1461092b578063b48e665e1461094b57600080fd5b806395d89b41116101cc57806395d89b4114610880578063985b9db014610895578063a3a2e89e146108ab578063a3e67610146108cb57600080fd5b8063807c2d9c146108045780638b42507f1461081a5780638ea5220f1461084a5780639502c4261461086a57600080fd5b80633c822812116102f857806359a51c341161028b57806370a082311161025a57806370a082311461076157806370c757ec146107975780637c0ff205146107b85780637d1db4a5146107ce5780637db1342c146107e457600080fd5b806359a51c34146106f557806365359892146107155780636827e76414610735578063704ce43e1461074b57600080fd5b806344de2e4c116102c757806344de2e4c14610685578063497a000a1461069f5780634a74bb02146106bf578063546a8811146106e057600080fd5b80633c822812146105e55780633dab5269146106055780633f4218e0146106255780634355855a1461065557600080fd5b806323b62b75116103705780632b112e491161033f5780632b112e4914610574578063313ce5671461058957806339509351146105a55780633af32abf146105c557600080fd5b806323b62b75146104ff57806323b872dd1461051f57806327193bc41461053f578063283744251461055457600080fd5b80630ab16c19116103ac5780630ab16c191461047a57806318160ddd146104b25780631df4ccfc146104c75780631f53ac02146104dd57600080fd5b80630445b667146103e957806306fdde0314610412578063095ea7b3146104345780630963da6c1461046457600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff60215481565b6040519081526020015b60405180910390f35b34801561041e57600080fd5b50610427610bef565b6040516104099190612fc5565b34801561044057600080fd5b5061045461044f366004613038565b610c81565b6040519015158152602001610409565b34801561047057600080fd5b506103ff60115481565b34801561048657600080fd5b50600b5461049a906001600160a01b031681565b6040516001600160a01b039091168152602001610409565b3480156104be57600080fd5b506002546103ff565b3480156104d357600080fd5b506103ff60175481565b3480156104e957600080fd5b506104fd6104f8366004613064565b610c9b565b005b34801561050b57600080fd5b50601e5461049a906001600160a01b031681565b34801561052b57600080fd5b5061045461053a366004613081565b610cf0565b34801561054b57600080fd5b506104fd610d17565b34801561056057600080fd5b5060055461049a906001600160a01b031681565b34801561058057600080fd5b506103ff610db8565b34801561059557600080fd5b5060405160098152602001610409565b3480156105b157600080fd5b506104546105c0366004613038565b610e24565b3480156105d157600080fd5b506104546105e0366004613064565b610e63565b3480156105f157600080fd5b506104fd6106003660046130c2565b610e81565b34801561061157600080fd5b506104fd6106203660046130e9565b610f62565b34801561063157600080fd5b50610454610640366004613064565b600c6020526000908152604090205460ff1681565b34801561066157600080fd5b50610454610670366004613064565b600e6020526000908152604090205460ff1681565b34801561069157600080fd5b506009546104549060ff1681565b3480156106ab57600080fd5b506104fd6106ba3660046130c2565b610fae565b3480156106cb57600080fd5b50601e5461045490600160a81b900460ff1681565b3480156106ec57600080fd5b506104fd61100e565b34801561070157600080fd5b5060065461049a906001600160a01b031681565b34801561072157600080fd5b506104fd6107303660046132eb565b6110b4565b34801561074157600080fd5b506103ff60135481565b34801561075757600080fd5b506103ff60125481565b34801561076d57600080fd5b506103ff61077c366004613064565b6001600160a01b031660009081526020819052604090205490565b3480156107a357600080fd5b50600b5461045490600160a01b900460ff1681565b3480156107c457600080fd5b506103ff60155481565b3480156107da57600080fd5b506103ff601f5481565b3480156107f057600080fd5b506104fd6107ff3660046130c2565b611814565b34801561081057600080fd5b506103ff60205481565b34801561082657600080fd5b50610454610835366004613064565b600d6020526000908152604090205460ff1681565b34801561085657600080fd5b50601d5461049a906001600160a01b031681565b34801561087657600080fd5b506103ff60165481565b34801561088c57600080fd5b5061042761190e565b3480156108a157600080fd5b506103ff60145481565b3480156108b757600080fd5b506104fd6108c6366004613440565b61191d565b3480156108d757600080fd5b50601c5461049a906001600160a01b031681565b3480156108f757600080fd5b50610454610906366004613038565b611972565b34801561091757600080fd5b50601a5461049a906001600160a01b031681565b34801561093757600080fd5b50610454610946366004613038565b611a0f565b34801561095757600080fd5b506103ff60085481565b34801561096d57600080fd5b506104fd61097c366004613064565b611a1d565b34801561098d57600080fd5b506104fd61099c366004613064565b611a69565b3480156109ad57600080fd5b506103ff600f5481565b3480156109c357600080fd5b50601b5461049a906001600160a01b031681565b3480156109e357600080fd5b506103ff60185481565b3480156109f957600080fd5b506104fd610a08366004613479565b611ab5565b348015610a1957600080fd5b506103ff60105481565b348015610a2f57600080fd5b506104fd610a3e366004613064565b611c5e565b348015610a4f57600080fd5b50601e5461045490600160b01b900460ff1681565b348015610a7057600080fd5b50610454610a7f366004613064565b600a6020526000908152604090205460ff1681565b348015610aa057600080fd5b506104fd610aaf3660046130c2565b611caa565b348015610ac057600080fd5b506103ff610acf3660046134bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0657600080fd5b506104fd610b153660046134ea565b611da4565b348015610b2657600080fd5b506104fd610b3536600461356d565b611dd9565b348015610b4657600080fd5b506103ff60075481565b348015610b5c57600080fd5b506104fd611e38565b348015610b7157600080fd5b506104fd610b80366004613064565b611f77565b348015610b9157600080fd5b506104fd611fdb565b348015610ba657600080fd5b5060195461049a906001600160a01b031681565b348015610bc657600080fd5b506104fd610bd5366004613440565b612133565b348015610be657600080fd5b506104fd612188565b606060038054610bfe9061358a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2a9061358a565b8015610c775780601f10610c4c57610100808354040283529160200191610c77565b820191906000526020600020905b815481529060010190602001808311610c5a57829003601f168201915b5050505050905090565b600033610c8f8185856121d3565b60019150505b92915050565b601c546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610cc5906135c4565b60405180910390fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610cfe8582856122f7565b610d09858585612389565b5060019150505b9392505050565b601b546001600160a01b03163314610d415760405162461bcd60e51b8152600401610cc5906135f9565b600f5415610d845760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610cc5565b42600f55600854610d9690603c613651565b610da09042613668565b600755600b805460ff60a01b1916600160a01b179055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610e15919061367b565b610e1f919061367b565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c8f9082908690610e5e908790613668565b6121d3565b6001600160a01b03166000908152600a602052604090205460ff1690565b6006546001600160a01b03163314610eab5760405162461bcd60e51b8152600401610cc59061368e565b600f54600003610ecd5760405162461bcd60e51b8152600401610cc5906136d3565b600f54610edd906203f480613668565b4210610f51576001811115610ef157600080fd5b60108190556011546012546013548391610f0a91613668565b610f149190613668565b610f1e9190613668565b601755601454601054601554601654610f379190613668565b610f419190613668565b610f4b9190613668565b60185550565b6002811115610ef157600080fd5b50565b601c546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610cc5906135c4565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602155565b6006546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610cc59061368e565b6008819055610fe881603c613651565b600f54610ff59190613668565b60075550600b805460ff60a01b1916600160a01b179055565b601b546001600160a01b031633146110385760405162461bcd60e51b8152600401610cc5906135f9565b601980546001600160a01b039081166000908152600c60209081526040808320805460ff199081166001908117909255955485168452600d9092528083208054861683179055601c549093168252919020805483169091179055601e80546009805490931690925561ffff60a81b19909116600160b01b179055565b601b546001600160a01b031633146110de5760405162461bcd60e51b8152600401610cc5906135f9565b81516003906110ed908261373c565b506020820151600490611100908261373c565b5060408201516002556060820151604611156111485760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610cc5565b6103e88260400151600561115c9190613651565b61116691906137fc565b601f55604082015160649061117c906001613651565b61118691906137fc565b6020556040820151610fa09061119d906005613651565b6111a791906137fc565b602155610100820151601980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d919061381e565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b2919061381e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611322919061381e565b601a80546001600160a01b0319166001600160a01b039283161781553060008181526001602081815260408084206019548816855282528084206000199055938352600a9052828220805460ff199081168317909155601b54861683528383208054821683179055935485168252828220805485168217905560a0870151851682528282208054851682179055610120870151851682528282208054851682179055610100870151909416815220805490911690911790556101408201516113e9906127cf565b610160820151600b80546001600160a01b0319166001600160a01b03928316179055306000908152600c60209081526040808320805460ff199081166001908117909255601b805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600d86528487208054841685179055601a548816875284872080548416851790559054909616855282852080548216831790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80548216831790559380527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee805490941617909255608080860151600855918401516012819055606085015160155591840151601381905592840151601655835160118190559084015160145560105492909161152b91613668565b6115359190613668565b61153f9190613668565b6017556010546014546015546016546115589190613668565b6115629190613668565b61156c9190613668565b601855601b5460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e1919061383b565b1561166f57600c60175411156116285760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610cc5565b6011601854111561166a5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610cc5565b6116b5565b600760175411156116925760405162461bcd60e51b8152600401610cc590613858565b600760185411156116b55760405162461bcd60e51b8152600401610cc590613858565b60a0820151601c80546001600160a01b039283166001600160a01b03199182161790915560c0840151601d805491841691831691909117905560e0840151601e805491841691831691909117905561012084015160068054919093169116179055606082015160408301516000916064916117309190613651565b61173a91906137fc565b9050600081846040015161174e919061367b565b33600090815260208190526040812080549293508492909190611772908490613668565b909155505060a08401516001600160a01b0316600090815260208190526040812080548392906117a3908490613668565b909155505060405182815233906000906000805160206139628339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b03166000805160206139628339815191528360405161180691815260200190565b60405180910390a350505050565b601c546001600160a01b0316331461183e5760405162461bcd60e51b8152600401610cc5906135c4565b600f546000036118605760405162461bcd60e51b8152600401610cc5906136d3565b6103e860025460056118729190613651565b61187c91906137fc565b8110156118b65760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610cc5565b606460025460036118c79190613651565b6118d191906137fc565b8111156119095760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610cc5565b602055565b606060048054610bfe9061358a565b601c546001600160a01b031633146119475760405162461bcd60e51b8152600401610cc5906135c4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156119f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc5565b611a0482868684036121d3565b506001949350505050565b600033611a04818585612389565b6006546001600160a01b03163314611a475760405162461bcd60e51b8152600401610cc59061368e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611a935760405162461bcd60e51b8152600401610cc5906135c4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610cc5906135c4565b6011869055601284905560138290556014859055601583905560168190556010548690611b0c8685613668565b611b169190613668565b611b209190613668565b601755601454601054601554601654611b399190613668565b611b439190613668565b611b4d9190613668565b601855601b54601c54604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa158015611b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc0919061383b565b15611c1057600c6017541115611be85760405162461bcd60e51b8152600401610cc590613858565b60116018541115611c0b5760405162461bcd60e51b8152600401610cc590613858565b611c56565b60076017541115611c335760405162461bcd60e51b8152600401610cc590613858565b60076018541115611c565760405162461bcd60e51b8152600401610cc590613858565b505050505050565b601c546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cc5906135c4565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611cd45760405162461bcd60e51b8152600401610cc5906135c4565b600f54600003611cf65760405162461bcd60e51b8152600401610cc5906136d3565b6103e86002546005611d089190613651565b611d1291906137fc565b811015611d4c5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610cc5565b60646002546003611d5d9190613651565b611d6791906137fc565b811115611d9f5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610cc5565b601f55565b601b546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610cc5906135f9565b8051610f5f906127cf565b601c546001600160a01b03163314611e035760405162461bcd60e51b8152600401610cc5906135c4565b600f54600003611e255760405162461bcd60e51b8152600401610cc5906136d3565b6009805460ff1916911515919091179055565b601c546001600160a01b03163314611e625760405162461bcd60e51b8152600401610cc5906135c4565b601054600214611ea75760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610cc5565b600f54600003611ec95760405162461bcd60e51b8152600401610cc5906136d3565b600f54611ed9906203f480613668565b421015611f135760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610cc5565b6001601081905550601154601054601254601354611f319190613668565b611f3b9190613668565b611f459190613668565b601755601454601054601554601654611f5e9190613668565b611f689190613668565b611f729190613668565b601855565b6006546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610cc59061368e565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b601b546001600160a01b031633146120055760405162461bcd60e51b8152600401610cc5906135f9565b600b54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612073919061387a565b61207e906001613668565b905060015b8181101561212f57600b546040516331a9108f60e11b815260048101839052600191600a916000916001600160a01b031690636352211e90602401602060405180830381865afa1580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061381e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101612083565b5050565b601c546001600160a01b0316331461215d5760405162461bcd60e51b8152600401610cc5906135c4565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146121b25760405162461bcd60e51b8152600401610cc5906135f9565b601e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166122355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc5565b6001600160a01b0382166122965760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461238357818110156123765760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cc5565b61238384848484036121d3565b50505050565b601e54600090600160b01b900460ff166123d65760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610cc5565b600b54600160a01b900460ff16156124db57600754421061240357600b805460ff60a01b191690556124db565b601a546001600160a01b03908116908516036124655761242283610e63565b6124605760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610cc5565b6124db565b601a546001600160a01b03908116908416036124845761242284610e63565b61248d84610e63565b801561249d575061249d83610e63565b6124db5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610cc5565b601e54600160a01b900460ff16156124ff576124f884848461283d565b9050610d10565b601a546001600160a01b03848116911614801561251e575060095460ff165b156125a457601f548211158061256f57506001600160a01b0384166000908152600d602052604090205460ff16801561256f57506001600160a01b0383166000908152600d602052604090205460ff165b6125a45760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610cc5565b6001600160a01b0383166000908152600d602052604090205460ff161580156125cf575060095460ff165b1561263757602080546001600160a01b0385166000908152918290526040909120546125fc908490613668565b11156126375760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610cc5565b601a546001600160a01b0385811691161480159061265f5750601e54600160a01b900460ff16155b80156126745750601e54600160a81b900460ff165b801561269157506021543060009081526020819052604090205410155b1561269e5761269e6128dd565b6001600160a01b0384166000908152602081905260409020546126c290839061367b565b6001600160a01b03808616600081815260208190526040902092909255601a548492911614806126ff5750601a546001600160a01b038581169116145b1561275e576001600160a01b0385166000908152600c602052604090205460ff1615801561274657506001600160a01b0384166000908152600c602052604090205460ff16155b612750578261275b565b61275b858585612f14565b90505b6001600160a01b038416600090815260208190526040902054612782908290613668565b6001600160a01b03858116600081815260208181526040918290209490945551848152909291881691600080516020613962833981519152910160405180910390a3506001949350505050565b805160005b81811015612838576001600a60008584815181106127f4576127f4613893565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612830816138a9565b9150506127d4565b505050565b6001600160a01b03831660009081526020819052604081205461286190839061367b565b6001600160a01b038086166000908152602081905260408082209390935590851681522054612891908390613668565b6001600160a01b03848116600081815260208181526040918290209490945551858152909291871691600080516020613962833981519152910160405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b17905530600090815260208190526040812054601754909190819081908190600210612941576002601854601554876129269190613651565b61293091906137fc565b61293a91906137fc565b935061296b565b6002601754601254876129549190613651565b61295e91906137fc565b61296891906137fc565b93505b6000612977858761367b565b90508060000361298c57505050505050612f05565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129c1576129c1613893565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e919061381e565b81600181518110612a5157612a51613893565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612a979085906000908690309042906004016138c2565b600060405180830381600087803b158015612ab157600080fd5b505af1158015612ac5573d6000803e3d6000fd5b505050506000479050600260175411612b0657600260185460155483612aeb9190613651565b612af591906137fc565b612aff91906137fc565b9350612b30565b600260175460125483612b199190613651565b612b2391906137fc565b612b2d91906137fc565b93505b8615612bcd5760195460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612ba4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc99190613933565b5050505b6017544790600210612c1757601854601654612be99083613651565b612bf391906137fc565b965060185460105482612c069190613651565b612c1091906137fc565b9550612c51565b601754601354612c279083613651565b612c3191906137fc565b965060175460105482612c449190613651565b612c4e91906137fc565b95505b600086612c5e898461367b565b612c68919061367b565b90508215612efa578615612e2a576000612c836002896137fc565b90506000601b60009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe919061381e565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b5050905080612d5b57600080fd5b601b546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc9919061381e565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612e13576040519150601f19603f3d011682016040523d82523d6000602084013e612e18565b606091505b5050905080612e2657600080fd5b5050505b8715612e9257601d546040516000916001600160a01b0316908a908381818185875af1925050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080612e9057600080fd5b505b8015612efa57601e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612ee5576040519150601f19603f3d011682016040523d82523d6000602084013e612eea565b606091505b5050905080612ef857600080fd5b505b505050505050505050505b601e805460ff60a01b19169055565b601a5460009081906001600160a01b03858116911614612f3657601754612f3a565b6018545b905060006064612f4a8386613651565b612f5491906137fc565b30600090815260208190526040902054909150612f72908290613668565b3060008181526020818152604091829020939093555183815290916001600160a01b03891691600080516020613962833981519152910160405180910390a3612fbb818561367b565b9695505050505050565b600060208083528351808285015260005b81811015612ff257858101830151858201604001528201612fd6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f5f57600080fd5b803561303381613013565b919050565b6000806040838503121561304b57600080fd5b823561305681613013565b946020939093013593505050565b60006020828403121561307657600080fd5b8135610d1081613013565b60008060006060848603121561309657600080fd5b83356130a181613013565b925060208401356130b181613013565b929592945050506040919091013590565b6000602082840312156130d457600080fd5b5035919050565b8015158114610f5f57600080fd5b600080604083850312156130fc57600080fd5b8235613056816130db565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561314157613141613107565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561317057613170613107565b604052919050565b600082601f83011261318957600080fd5b813567ffffffffffffffff8111156131a3576131a3613107565b6131b6601f8201601f1916602001613147565b8181528460208386010111156131cb57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126131f957600080fd5b8135602067ffffffffffffffff82111561321557613215613107565b8160051b613224828201613147565b928352848101820192828101908785111561323e57600080fd5b83870192505b8483101561326657823561325781613013565b82529183019190830190613244565b979650505050505050565b600060c0828403121561328357600080fd5b60405160c0810181811067ffffffffffffffff821117156132a6576132a6613107565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156132fe57600080fd5b823567ffffffffffffffff8082111561331657600080fd5b90840190610180828703121561332b57600080fd5b61333361311d565b82358281111561334257600080fd5b61334e88828601613178565b82525060208301358281111561336357600080fd5b61336f88828601613178565b60208301525060408301356040820152606083013560608201526080830135608082015261339f60a08401613028565b60a08201526133b060c08401613028565b60c08201526133c160e08401613028565b60e08201526101006133d4818501613028565b908201526101206133e6848201613028565b9082015261014083810135838111156133fe57600080fd5b61340a898287016131e8565b8284015250506101609150613420828401613028565b828201528094505050506134378460208501613271565b90509250929050565b6000806040838503121561345357600080fd5b823561345e81613013565b9150602083013561346e816130db565b809150509250929050565b60008060008060008060c0878903121561349257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156134cf57600080fd5b82356134da81613013565b9150602083013561346e81613013565b6000602082840312156134fc57600080fd5b813567ffffffffffffffff8082111561351457600080fd5b908301906020828603121561352857600080fd5b60405160208101818110838211171561354357613543613107565b60405282358281111561355557600080fd5b613561878286016131e8565b82525095945050505050565b60006020828403121561357f57600080fd5b8135610d10816130db565b600181811c9082168061359e57607f821691505b6020821081036135be57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9557610c9561363b565b80820180821115610c9557610c9561363b565b81810381811115610c9557610c9561363b565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b601f82111561283857600081815260208120601f850160051c8101602086101561371d5750805b601f850160051c820191505b81811015611c5657828155600101613729565b815167ffffffffffffffff81111561375657613756613107565b61376a81613764845461358a565b846136f6565b602080601f83116001811461379f57600084156137875750858301515b600019600386901b1c1916600185901b178555611c56565b600085815260208120601f198616915b828110156137ce578886015182559484019460019091019084016137af565b50858210156137ec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261381957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561383057600080fd5b8151610d1081613013565b60006020828403121561384d57600080fd5b8151610d10816130db565b602080825260089082015267686967682066656560c01b604082015260600190565b60006020828403121561388c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016138bb576138bb61363b565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139125784516001600160a01b0316835293830193918301916001016138ed565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561394857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220da64079f7e6ca30ac4b74a7631e057f44480277eb98ae882efbd12ba85c9c97464736f6c63430008110033a26469706673582212207c6388d6c14bb880989a42df2169d1f473a1a02209be83aae11d80c7bbcada5464736f6c634300081100330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb000000000000000000000000377e168af6a06075423aede50856de177efaac3e000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000002ced5bc349d9241a314d3739f12f5f6f2bda6a68
Deployed Bytecode
0x6080604052600436106101855760003560e01c8063715018a6116100d1578063b24cf5d71161008a578063d7e7a9e711610064578063d7e7a9e7146104d7578063e6a053d0146104f5578063f2fde38b14610515578063f4f1af3a1461053557600080fd5b8063b24cf5d714610477578063b410908d14610497578063c5aa0062146104b757600080fd5b8063715018a6146103dc57806373caf536146103f1578063845a51ec146104115780638da5cb5b146104315780639a97b0781461044f578063ae084ec21461046457600080fd5b80633af32abf1161013e57806345338d631161011857806345338d631461035c57806359a51c341461037c578063653ed5d41461039c57806370a78991146103bc57600080fd5b80633af32abf146102d35780633b99adf71461031c57806341cb87fc1461033c57600080fd5b80630ab16c19146101915780630bc337d8146101ce5780632dcacf44146101e55780633268cc56146102755780633675f29b146102955780633690e287146102b557600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506008546101b1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101da57600080fd5b506101e3610548565b005b3480156101f157600080fd5b5061023f61020036600461157a565b6001602081905260009182526040909120805491810154600282015460039092015460ff8416936001600160a01b036101009091048116939216919085565b6040805195151586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a0016101c5565b34801561028157600080fd5b506004546101b1906001600160a01b031681565b3480156102a157600080fd5b506005546101b1906001600160a01b031681565b3480156102c157600080fd5b506006546001600160a01b03166101b1565b3480156102df57600080fd5b5061030c6102ee36600461157a565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020016101c5565b34801561032857600080fd5b506101e36103373660046116b5565b6105a6565b34801561034857600080fd5b506101e361035736600461157a565b610675565b34801561036857600080fd5b506101e361037736600461157a565b61069f565b34801561038857600080fd5b506003546101b1906001600160a01b031681565b3480156103a857600080fd5b506101e36103b736600461157a565b6106c9565b3480156103c857600080fd5b506101e36103d736600461157a565b610947565b3480156103e857600080fd5b506101e3610971565b3480156103fd57600080fd5b506101e361040c366004611779565b610985565b34801561041d57600080fd5b506007546101b1906001600160a01b031681565b34801561043d57600080fd5b506000546001600160a01b03166101b1565b34801561045b57600080fd5b506101e36109fc565b6101e3610472366004611881565b610b0b565b34801561048357600080fd5b506101e361049236600461157a565b611022565b3480156104a357600080fd5b506006546101b1906001600160a01b031681565b3480156104c357600080fd5b506101e36104d236600461157a565b61104c565b3480156104e357600080fd5b506007546001600160a01b03166101b1565b34801561050157600080fd5b506101e361051036600461157a565b611076565b34801561052157600080fd5b506101e361053036600461157a565b6110a0565b6101e361054336600461157a565b61110a565b6105506113f3565b600954156105985760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e1958dd5d195960821b60448201526064015b60405180910390fd5b670de0b6b3a7640000600955565b6105ae6113f3565b8151815181146105f05760405162461bcd60e51b815260206004820152600d60248201526c0d8d2e6e840dad2e6dac2e8c6d609b1b604482015260640161058f565b60005b8181101561066f5782818151811061060d5761060d6119cb565b60200260200101516002600086848151811061062b5761062b6119cb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610667816119f7565b9150506105f3565b50505050565b61067d6113f3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106a76113f3565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106d28161144d565b6001600160a01b03818116600090815260016020819052604091829020805491015460048054935163095ea7b360e01b815293851690840181905260001960248501526101009092048416931691839063095ea7b3906044016020604051808303816000875af115801561074a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076e9190611a10565b506040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156107b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107da9190611a2d565b9050846001600160a01b031663546a88116040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561081757600080fd5b505af115801561082b573d6000803e3d6000fd5b5050604051629d473b60e21b81526001600160a01b03851692506302751cec9150610865908890859060009081908a904290600401611a46565b60408051808303816000875af1158015610883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a79190611a81565b5050846001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108e457600080fd5b505af11580156108f8573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040822080546001600160a81b031916815590810180546001600160a01b031916905560028101829055600301555050505050565b61094f6113f3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6109796113f3565b61098360006114f8565b565b61098e8261144d565b6040805160208101825282518152905163e572967b60e01b81526001600160a01b0384169163e572967b916109c69190600401611ae9565b600060405180830381600087803b1580156109e057600080fd5b505af11580156109f4573d6000803e3d6000fd5b505050505050565b610a046113f3565b6006546000906001600160a01b0316610a1e600247611b0c565b604051600081818185875af1925050503d8060008114610a5a576040519150601f19603f3d011682016040523d82523d6000602084013e610a5f565b606091505b5050905080610a8a5760405162461bcd60e51b8152602060048201526000602482015260440161058f565b6007546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610ad7576040519150601f19603f3d011682016040523d82523d6000602084013e610adc565b606091505b5050905080610b075760405162461bcd60e51b8152602060048201526000602482015260440161058f565b5050565b610b184262278d00611b2e565b8161014001511015610b635760405162461bcd60e51b8152602060048201526014602482015273756e6c6f636b20756e646572203330206461797360601b604482015260640161058f565b600954341015610bac5760405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206c697175696469747960601b604482015260640161058f565b60006040518060c00160405280836080015181526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610120015181525090506000604051610c0590611548565b604051809103906000f080158015610c21573d6000803e3d6000fd5b5060408051610180808201835286518252602080880151908301528683015182840152606080880151908301526101608088015160808401523360a0840152908701516001600160a01b0390811660c08401526101a0880151811660e084015260048054821661010085015260035482166101208501526101c0890151610140850152600854821692840192909252925163329acc4960e11b815293945091841692636535989292610cd69291879101611b8d565b600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506040516001600160a01b03841681527f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e9250602001905060405180910390a13415610eb3576004805460405163095ea7b360e01b81526001600160a01b0391821692810192909252600019602483015282169063095ea7b3906044016020604051808303816000875af1158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611a10565b50600480546040516370a0823160e01b815230928101929092526001600160a01b0390811691829163f305d7199134918691908216906370a0823190602401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611a2d565b60008030426040518863ffffffff1660e01b8152600401610e6b96959493929190611a46565b60606040518083038185885af1158015610e89573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eae9190611cd4565b505050505b806001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506040518060a00160405280600015158152602001826001600160a01b031663a8aa1b316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611d02565b6001600160a01b03908116825233602080840191909152610140969096015160408084019190915260006060938401819052948216855260018088529481902084518154988601516001600160a81b0319909916901515610100600160a81b031916179783166101000297909717875583015193860180546001600160a01b03191694909116939093179092559081015160028401556080015160039092019190915550565b61102a6113f3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6110546113f3565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61107e6113f3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6110a86113f3565b6001600160a01b0381166110fe5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161058f565b611107816114f8565b50565b6111138161144d565b6001600160a01b03818116600090815260016020526040908190208054600290910154600554925163095ea7b360e01b8152928416600484015260001960248401526101009091049092169190829063095ea7b3906044016020604051808303816000875af115801561118a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ae9190611a10565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190611a2d565b9050836001600160a01b031663f576f5396040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561125757600080fd5b505af115801561126b573d6000803e3d6000fd5b5050600554604051635af06fed60e01b81526001600160a01b038781166004830152336024830152604482018690526064820187905260006084830181905260a4830181905294509091169150635af06fed90349060c40160206040518083038185885af11580156112e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113069190611a2d565b6001600160a01b038616600081815260016020526040808220600301849055805163fbd7575360e01b81529051939450919263fbd7575392600480820193929182900301818387803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b50505050846001600160a01b03166327193bc46040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040909120805460ff191690911790555050505050565b6000546001600160a01b031633146109835760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604482015260640161058f565b6001600160a01b03818116600090815260016020819052604090912001541633146114a35760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015260640161058f565b6001600160a01b03811660009081526001602052604090205460ff16156111075760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b604482015260640161058f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613a2580611d2083390190565b6001600160a01b038116811461110757600080fd5b803561157581611555565b919050565b60006020828403121561158c57600080fd5b813561159781611555565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156115d8576115d861159e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116075761160761159e565b604052919050565b600067ffffffffffffffff8211156116295761162961159e565b5060051b60200190565b600082601f83011261164457600080fd5b813560206116596116548361160f565b6115de565b82815260059290921b8401810191818101908684111561167857600080fd5b8286015b8481101561169c57803561168f81611555565b835291830191830161167c565b509695505050505050565b801515811461110757600080fd5b600080604083850312156116c857600080fd5b823567ffffffffffffffff808211156116e057600080fd5b6116ec86838701611633565b935060209150818501358181111561170357600080fd5b85019050601f8101861361171657600080fd5b80356117246116548261160f565b81815260059190911b8201830190838101908883111561174357600080fd5b928401925b8284101561176a57833561175b816116a7565b82529284019290840190611748565b80955050505050509250929050565b6000806040838503121561178c57600080fd5b823561179781611555565b9150602083013567ffffffffffffffff808211156117b457600080fd5b90840190602082870312156117c857600080fd5b6040516020810181811083821117156117e3576117e361159e565b6040528235828111156117f557600080fd5b61180188828601611633565b8252508093505050509250929050565b600082601f83011261182257600080fd5b813567ffffffffffffffff81111561183c5761183c61159e565b61184f601f8201601f19166020016115de565b81815284602083860101111561186457600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561189357600080fd5b813567ffffffffffffffff808211156118ab57600080fd5b908301906101e082860312156118c057600080fd5b6118c86115b4565b8235828111156118d757600080fd5b6118e387828601611811565b8252506020830135828111156118f857600080fd5b61190487828601611811565b60208301525060408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e082015261010080840135818301525061012080840135818301525061014080840135818301525061016080840135818301525061018061198481850161156a565b908201526101a061199684820161156a565b908201526101c083810135838111156119ae57600080fd5b6119ba88828701611633565b918301919091525095945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611a0957611a096119e1565b5060010190565b600060208284031215611a2257600080fd5b8151611597816116a7565b600060208284031215611a3f57600080fd5b5051919050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215611a9457600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b83811015611ade5781516001600160a01b031687529582019590820190600101611ab9565b509495945050505050565b6020815260008251602080840152611b046040840182611aa5565b949350505050565b600082611b2957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611b4157611b416119e1565b92915050565b6000815180845260005b81811015611b6d57602081850181015186830182015201611b51565b506000602082860101526020601f19601f83011685010191505092915050565b60e08152600083516101808060e0850152611bac610260850183611b47565b9150602086015160df19610100818786030181880152611bcc8584611b47565b945060408901519250610120838189015260608a0151935061014084818a015260808b0151945061016085818b015260a08c01519550611c16878b01876001600160a01b03169052565b60c08c01516001600160a01b039081166101a08c015260e08d015181166101c08c0152848d015181166101e08c0152838d0151166102008b0152818c01518a890386016102208c01529650611c6b8888611aa5565b9750808c01519650505050505050611c8f6102408501826001600160a01b03169052565b5090506115976020830184805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600080600060608486031215611ce957600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611d1457600080fd5b81516115978161155556fe60806040526009805460ff19166001179055600b805460ff60a01b1916600160a01b1790556002601055601e805461010160a81b61ffff60a81b1990911617905534801561004c57600080fd5b50601b80546001600160a01b031916331790556139b78061006e6000396000f3fe6080604052600436106103dd5760003560e01c8063807c2d9c116101fd578063ca987b0e11610118578063e572967b116100ab578063f16fd78d1161007a578063f16fd78d14610b65578063f576f53914610b85578063f887ea4014610b9a578063fabe628314610bba578063fbd7575314610bda57600080fd5b8063e572967b14610afa578063e66b1d1e14610b1a578063ebdfd72214610b3a578063ef92e22214610b5057600080fd5b8063d4fb9a01116100e7578063d4fb9a0114610a43578063d741b9c314610a64578063d920334e14610a94578063dd62ed3e14610ab457600080fd5b8063ca987b0e146109d7578063cb29813c146109ed578063cd1e330a14610a0d578063d0a5eb4e14610a2357600080fd5b8063a457c2d711610190578063b72344a21161015f578063b72344a214610961578063bb542ef014610981578063bf56b371146109a1578063c45a0155146109b757600080fd5b8063a457c2d7146108eb578063a8aa1b311461090b578063a9059cbb1461092b578063b48e665e1461094b57600080fd5b806395d89b41116101cc57806395d89b4114610880578063985b9db014610895578063a3a2e89e146108ab578063a3e67610146108cb57600080fd5b8063807c2d9c146108045780638b42507f1461081a5780638ea5220f1461084a5780639502c4261461086a57600080fd5b80633c822812116102f857806359a51c341161028b57806370a082311161025a57806370a082311461076157806370c757ec146107975780637c0ff205146107b85780637d1db4a5146107ce5780637db1342c146107e457600080fd5b806359a51c34146106f557806365359892146107155780636827e76414610735578063704ce43e1461074b57600080fd5b806344de2e4c116102c757806344de2e4c14610685578063497a000a1461069f5780634a74bb02146106bf578063546a8811146106e057600080fd5b80633c822812146105e55780633dab5269146106055780633f4218e0146106255780634355855a1461065557600080fd5b806323b62b75116103705780632b112e491161033f5780632b112e4914610574578063313ce5671461058957806339509351146105a55780633af32abf146105c557600080fd5b806323b62b75146104ff57806323b872dd1461051f57806327193bc41461053f578063283744251461055457600080fd5b80630ab16c19116103ac5780630ab16c191461047a57806318160ddd146104b25780631df4ccfc146104c75780631f53ac02146104dd57600080fd5b80630445b667146103e957806306fdde0314610412578063095ea7b3146104345780630963da6c1461046457600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff60215481565b6040519081526020015b60405180910390f35b34801561041e57600080fd5b50610427610bef565b6040516104099190612fc5565b34801561044057600080fd5b5061045461044f366004613038565b610c81565b6040519015158152602001610409565b34801561047057600080fd5b506103ff60115481565b34801561048657600080fd5b50600b5461049a906001600160a01b031681565b6040516001600160a01b039091168152602001610409565b3480156104be57600080fd5b506002546103ff565b3480156104d357600080fd5b506103ff60175481565b3480156104e957600080fd5b506104fd6104f8366004613064565b610c9b565b005b34801561050b57600080fd5b50601e5461049a906001600160a01b031681565b34801561052b57600080fd5b5061045461053a366004613081565b610cf0565b34801561054b57600080fd5b506104fd610d17565b34801561056057600080fd5b5060055461049a906001600160a01b031681565b34801561058057600080fd5b506103ff610db8565b34801561059557600080fd5b5060405160098152602001610409565b3480156105b157600080fd5b506104546105c0366004613038565b610e24565b3480156105d157600080fd5b506104546105e0366004613064565b610e63565b3480156105f157600080fd5b506104fd6106003660046130c2565b610e81565b34801561061157600080fd5b506104fd6106203660046130e9565b610f62565b34801561063157600080fd5b50610454610640366004613064565b600c6020526000908152604090205460ff1681565b34801561066157600080fd5b50610454610670366004613064565b600e6020526000908152604090205460ff1681565b34801561069157600080fd5b506009546104549060ff1681565b3480156106ab57600080fd5b506104fd6106ba3660046130c2565b610fae565b3480156106cb57600080fd5b50601e5461045490600160a81b900460ff1681565b3480156106ec57600080fd5b506104fd61100e565b34801561070157600080fd5b5060065461049a906001600160a01b031681565b34801561072157600080fd5b506104fd6107303660046132eb565b6110b4565b34801561074157600080fd5b506103ff60135481565b34801561075757600080fd5b506103ff60125481565b34801561076d57600080fd5b506103ff61077c366004613064565b6001600160a01b031660009081526020819052604090205490565b3480156107a357600080fd5b50600b5461045490600160a01b900460ff1681565b3480156107c457600080fd5b506103ff60155481565b3480156107da57600080fd5b506103ff601f5481565b3480156107f057600080fd5b506104fd6107ff3660046130c2565b611814565b34801561081057600080fd5b506103ff60205481565b34801561082657600080fd5b50610454610835366004613064565b600d6020526000908152604090205460ff1681565b34801561085657600080fd5b50601d5461049a906001600160a01b031681565b34801561087657600080fd5b506103ff60165481565b34801561088c57600080fd5b5061042761190e565b3480156108a157600080fd5b506103ff60145481565b3480156108b757600080fd5b506104fd6108c6366004613440565b61191d565b3480156108d757600080fd5b50601c5461049a906001600160a01b031681565b3480156108f757600080fd5b50610454610906366004613038565b611972565b34801561091757600080fd5b50601a5461049a906001600160a01b031681565b34801561093757600080fd5b50610454610946366004613038565b611a0f565b34801561095757600080fd5b506103ff60085481565b34801561096d57600080fd5b506104fd61097c366004613064565b611a1d565b34801561098d57600080fd5b506104fd61099c366004613064565b611a69565b3480156109ad57600080fd5b506103ff600f5481565b3480156109c357600080fd5b50601b5461049a906001600160a01b031681565b3480156109e357600080fd5b506103ff60185481565b3480156109f957600080fd5b506104fd610a08366004613479565b611ab5565b348015610a1957600080fd5b506103ff60105481565b348015610a2f57600080fd5b506104fd610a3e366004613064565b611c5e565b348015610a4f57600080fd5b50601e5461045490600160b01b900460ff1681565b348015610a7057600080fd5b50610454610a7f366004613064565b600a6020526000908152604090205460ff1681565b348015610aa057600080fd5b506104fd610aaf3660046130c2565b611caa565b348015610ac057600080fd5b506103ff610acf3660046134bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b0657600080fd5b506104fd610b153660046134ea565b611da4565b348015610b2657600080fd5b506104fd610b3536600461356d565b611dd9565b348015610b4657600080fd5b506103ff60075481565b348015610b5c57600080fd5b506104fd611e38565b348015610b7157600080fd5b506104fd610b80366004613064565b611f77565b348015610b9157600080fd5b506104fd611fdb565b348015610ba657600080fd5b5060195461049a906001600160a01b031681565b348015610bc657600080fd5b506104fd610bd5366004613440565b612133565b348015610be657600080fd5b506104fd612188565b606060038054610bfe9061358a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2a9061358a565b8015610c775780601f10610c4c57610100808354040283529160200191610c77565b820191906000526020600020905b815481529060010190602001808311610c5a57829003601f168201915b5050505050905090565b600033610c8f8185856121d3565b60019150505b92915050565b601c546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610cc5906135c4565b60405180910390fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610cfe8582856122f7565b610d09858585612389565b5060019150505b9392505050565b601b546001600160a01b03163314610d415760405162461bcd60e51b8152600401610cc5906135f9565b600f5415610d845760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610cc5565b42600f55600854610d9690603c613651565b610da09042613668565b600755600b805460ff60a01b1916600160a01b179055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610e15919061367b565b610e1f919061367b565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c8f9082908690610e5e908790613668565b6121d3565b6001600160a01b03166000908152600a602052604090205460ff1690565b6006546001600160a01b03163314610eab5760405162461bcd60e51b8152600401610cc59061368e565b600f54600003610ecd5760405162461bcd60e51b8152600401610cc5906136d3565b600f54610edd906203f480613668565b4210610f51576001811115610ef157600080fd5b60108190556011546012546013548391610f0a91613668565b610f149190613668565b610f1e9190613668565b601755601454601054601554601654610f379190613668565b610f419190613668565b610f4b9190613668565b60185550565b6002811115610ef157600080fd5b50565b601c546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610cc5906135c4565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602155565b6006546001600160a01b03163314610fd85760405162461bcd60e51b8152600401610cc59061368e565b6008819055610fe881603c613651565b600f54610ff59190613668565b60075550600b805460ff60a01b1916600160a01b179055565b601b546001600160a01b031633146110385760405162461bcd60e51b8152600401610cc5906135f9565b601980546001600160a01b039081166000908152600c60209081526040808320805460ff199081166001908117909255955485168452600d9092528083208054861683179055601c549093168252919020805483169091179055601e80546009805490931690925561ffff60a81b19909116600160b01b179055565b601b546001600160a01b031633146110de5760405162461bcd60e51b8152600401610cc5906135f9565b81516003906110ed908261373c565b506020820151600490611100908261373c565b5060408201516002556060820151604611156111485760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610cc5565b6103e88260400151600561115c9190613651565b61116691906137fc565b601f55604082015160649061117c906001613651565b61118691906137fc565b6020556040820151610fa09061119d906005613651565b6111a791906137fc565b602155610100820151601980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d919061381e565b6001600160a01b031663c9c65396601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b2919061381e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611322919061381e565b601a80546001600160a01b0319166001600160a01b039283161781553060008181526001602081815260408084206019548816855282528084206000199055938352600a9052828220805460ff199081168317909155601b54861683528383208054821683179055935485168252828220805485168217905560a0870151851682528282208054851682179055610120870151851682528282208054851682179055610100870151909416815220805490911690911790556101408201516113e9906127cf565b610160820151600b80546001600160a01b0319166001600160a01b03928316179055306000908152600c60209081526040808320805460ff199081166001908117909255601b805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600d86528487208054841685179055601a548816875284872080548416851790559054909616855282852080548216831790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80548216831790559380527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee805490941617909255608080860151600855918401516012819055606085015160155591840151601381905592840151601655835160118190559084015160145560105492909161152b91613668565b6115359190613668565b61153f9190613668565b6017556010546014546015546016546115589190613668565b6115629190613668565b61156c9190613668565b601855601b5460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e1919061383b565b1561166f57600c60175411156116285760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610cc5565b6011601854111561166a5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610cc5565b6116b5565b600760175411156116925760405162461bcd60e51b8152600401610cc590613858565b600760185411156116b55760405162461bcd60e51b8152600401610cc590613858565b60a0820151601c80546001600160a01b039283166001600160a01b03199182161790915560c0840151601d805491841691831691909117905560e0840151601e805491841691831691909117905561012084015160068054919093169116179055606082015160408301516000916064916117309190613651565b61173a91906137fc565b9050600081846040015161174e919061367b565b33600090815260208190526040812080549293508492909190611772908490613668565b909155505060a08401516001600160a01b0316600090815260208190526040812080548392906117a3908490613668565b909155505060405182815233906000906000805160206139628339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b03166000805160206139628339815191528360405161180691815260200190565b60405180910390a350505050565b601c546001600160a01b0316331461183e5760405162461bcd60e51b8152600401610cc5906135c4565b600f546000036118605760405162461bcd60e51b8152600401610cc5906136d3565b6103e860025460056118729190613651565b61187c91906137fc565b8110156118b65760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610cc5565b606460025460036118c79190613651565b6118d191906137fc565b8111156119095760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610cc5565b602055565b606060048054610bfe9061358a565b601c546001600160a01b031633146119475760405162461bcd60e51b8152600401610cc5906135c4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156119f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cc5565b611a0482868684036121d3565b506001949350505050565b600033611a04818585612389565b6006546001600160a01b03163314611a475760405162461bcd60e51b8152600401610cc59061368e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611a935760405162461bcd60e51b8152600401610cc5906135c4565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611adf5760405162461bcd60e51b8152600401610cc5906135c4565b6011869055601284905560138290556014859055601583905560168190556010548690611b0c8685613668565b611b169190613668565b611b209190613668565b601755601454601054601554601654611b399190613668565b611b439190613668565b611b4d9190613668565b601855601b54601c54604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa158015611b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc0919061383b565b15611c1057600c6017541115611be85760405162461bcd60e51b8152600401610cc590613858565b60116018541115611c0b5760405162461bcd60e51b8152600401610cc590613858565b611c56565b60076017541115611c335760405162461bcd60e51b8152600401610cc590613858565b60076018541115611c565760405162461bcd60e51b8152600401610cc590613858565b505050505050565b601c546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cc5906135c4565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b03163314611cd45760405162461bcd60e51b8152600401610cc5906135c4565b600f54600003611cf65760405162461bcd60e51b8152600401610cc5906136d3565b6103e86002546005611d089190613651565b611d1291906137fc565b811015611d4c5760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610cc5565b60646002546003611d5d9190613651565b611d6791906137fc565b811115611d9f5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610cc5565b601f55565b601b546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610cc5906135f9565b8051610f5f906127cf565b601c546001600160a01b03163314611e035760405162461bcd60e51b8152600401610cc5906135c4565b600f54600003611e255760405162461bcd60e51b8152600401610cc5906136d3565b6009805460ff1916911515919091179055565b601c546001600160a01b03163314611e625760405162461bcd60e51b8152600401610cc5906135c4565b601054600214611ea75760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610cc5565b600f54600003611ec95760405162461bcd60e51b8152600401610cc5906136d3565b600f54611ed9906203f480613668565b421015611f135760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606401610cc5565b6001601081905550601154601054601254601354611f319190613668565b611f3b9190613668565b611f459190613668565b601755601454601054601554601654611f5e9190613668565b611f689190613668565b611f729190613668565b601855565b6006546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610cc59061368e565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b601b546001600160a01b031633146120055760405162461bcd60e51b8152600401610cc5906135f9565b600b54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612073919061387a565b61207e906001613668565b905060015b8181101561212f57600b546040516331a9108f60e11b815260048101839052600191600a916000916001600160a01b031690636352211e90602401602060405180830381865afa1580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061381e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101612083565b5050565b601c546001600160a01b0316331461215d5760405162461bcd60e51b8152600401610cc5906135c4565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146121b25760405162461bcd60e51b8152600401610cc5906135f9565b601e805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166122355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc5565b6001600160a01b0382166122965760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461238357818110156123765760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cc5565b61238384848484036121d3565b50505050565b601e54600090600160b01b900460ff166123d65760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610cc5565b600b54600160a01b900460ff16156124db57600754421061240357600b805460ff60a01b191690556124db565b601a546001600160a01b03908116908516036124655761242283610e63565b6124605760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610cc5565b6124db565b601a546001600160a01b03908116908416036124845761242284610e63565b61248d84610e63565b801561249d575061249d83610e63565b6124db5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610cc5565b601e54600160a01b900460ff16156124ff576124f884848461283d565b9050610d10565b601a546001600160a01b03848116911614801561251e575060095460ff165b156125a457601f548211158061256f57506001600160a01b0384166000908152600d602052604090205460ff16801561256f57506001600160a01b0383166000908152600d602052604090205460ff165b6125a45760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610cc5565b6001600160a01b0383166000908152600d602052604090205460ff161580156125cf575060095460ff165b1561263757602080546001600160a01b0385166000908152918290526040909120546125fc908490613668565b11156126375760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610cc5565b601a546001600160a01b0385811691161480159061265f5750601e54600160a01b900460ff16155b80156126745750601e54600160a81b900460ff165b801561269157506021543060009081526020819052604090205410155b1561269e5761269e6128dd565b6001600160a01b0384166000908152602081905260409020546126c290839061367b565b6001600160a01b03808616600081815260208190526040902092909255601a548492911614806126ff5750601a546001600160a01b038581169116145b1561275e576001600160a01b0385166000908152600c602052604090205460ff1615801561274657506001600160a01b0384166000908152600c602052604090205460ff16155b612750578261275b565b61275b858585612f14565b90505b6001600160a01b038416600090815260208190526040902054612782908290613668565b6001600160a01b03858116600081815260208181526040918290209490945551848152909291881691600080516020613962833981519152910160405180910390a3506001949350505050565b805160005b81811015612838576001600a60008584815181106127f4576127f4613893565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612830816138a9565b9150506127d4565b505050565b6001600160a01b03831660009081526020819052604081205461286190839061367b565b6001600160a01b038086166000908152602081905260408082209390935590851681522054612891908390613668565b6001600160a01b03848116600081815260208181526040918290209490945551858152909291871691600080516020613962833981519152910160405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b17905530600090815260208190526040812054601754909190819081908190600210612941576002601854601554876129269190613651565b61293091906137fc565b61293a91906137fc565b935061296b565b6002601754601254876129549190613651565b61295e91906137fc565b61296891906137fc565b93505b6000612977858761367b565b90508060000361298c57505050505050612f05565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129c1576129c1613893565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e919061381e565b81600181518110612a5157612a51613893565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac94790612a979085906000908690309042906004016138c2565b600060405180830381600087803b158015612ab157600080fd5b505af1158015612ac5573d6000803e3d6000fd5b505050506000479050600260175411612b0657600260185460155483612aeb9190613651565b612af591906137fc565b612aff91906137fc565b9350612b30565b600260175460125483612b199190613651565b612b2391906137fc565b612b2d91906137fc565b93505b8615612bcd5760195460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990869060c40160606040518083038185885af1158015612ba4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc99190613933565b5050505b6017544790600210612c1757601854601654612be99083613651565b612bf391906137fc565b965060185460105482612c069190613651565b612c1091906137fc565b9550612c51565b601754601354612c279083613651565b612c3191906137fc565b965060175460105482612c449190613651565b612c4e91906137fc565b95505b600086612c5e898461367b565b612c68919061367b565b90508215612efa578615612e2a576000612c836002896137fc565b90506000601b60009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe919061381e565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b5050905080612d5b57600080fd5b601b546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc9919061381e565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612e13576040519150601f19603f3d011682016040523d82523d6000602084013e612e18565b606091505b5050905080612e2657600080fd5b5050505b8715612e9257601d546040516000916001600160a01b0316908a908381818185875af1925050503d8060008114612e7d576040519150601f19603f3d011682016040523d82523d6000602084013e612e82565b606091505b5050905080612e9057600080fd5b505b8015612efa57601e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612ee5576040519150601f19603f3d011682016040523d82523d6000602084013e612eea565b606091505b5050905080612ef857600080fd5b505b505050505050505050505b601e805460ff60a01b19169055565b601a5460009081906001600160a01b03858116911614612f3657601754612f3a565b6018545b905060006064612f4a8386613651565b612f5491906137fc565b30600090815260208190526040902054909150612f72908290613668565b3060008181526020818152604091829020939093555183815290916001600160a01b03891691600080516020613962833981519152910160405180910390a3612fbb818561367b565b9695505050505050565b600060208083528351808285015260005b81811015612ff257858101830151858201604001528201612fd6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f5f57600080fd5b803561303381613013565b919050565b6000806040838503121561304b57600080fd5b823561305681613013565b946020939093013593505050565b60006020828403121561307657600080fd5b8135610d1081613013565b60008060006060848603121561309657600080fd5b83356130a181613013565b925060208401356130b181613013565b929592945050506040919091013590565b6000602082840312156130d457600080fd5b5035919050565b8015158114610f5f57600080fd5b600080604083850312156130fc57600080fd5b8235613056816130db565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561314157613141613107565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561317057613170613107565b604052919050565b600082601f83011261318957600080fd5b813567ffffffffffffffff8111156131a3576131a3613107565b6131b6601f8201601f1916602001613147565b8181528460208386010111156131cb57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126131f957600080fd5b8135602067ffffffffffffffff82111561321557613215613107565b8160051b613224828201613147565b928352848101820192828101908785111561323e57600080fd5b83870192505b8483101561326657823561325781613013565b82529183019190830190613244565b979650505050505050565b600060c0828403121561328357600080fd5b60405160c0810181811067ffffffffffffffff821117156132a6576132a6613107565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156132fe57600080fd5b823567ffffffffffffffff8082111561331657600080fd5b90840190610180828703121561332b57600080fd5b61333361311d565b82358281111561334257600080fd5b61334e88828601613178565b82525060208301358281111561336357600080fd5b61336f88828601613178565b60208301525060408301356040820152606083013560608201526080830135608082015261339f60a08401613028565b60a08201526133b060c08401613028565b60c08201526133c160e08401613028565b60e08201526101006133d4818501613028565b908201526101206133e6848201613028565b9082015261014083810135838111156133fe57600080fd5b61340a898287016131e8565b8284015250506101609150613420828401613028565b828201528094505050506134378460208501613271565b90509250929050565b6000806040838503121561345357600080fd5b823561345e81613013565b9150602083013561346e816130db565b809150509250929050565b60008060008060008060c0878903121561349257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156134cf57600080fd5b82356134da81613013565b9150602083013561346e81613013565b6000602082840312156134fc57600080fd5b813567ffffffffffffffff8082111561351457600080fd5b908301906020828603121561352857600080fd5b60405160208101818110838211171561354357613543613107565b60405282358281111561355557600080fd5b613561878286016131e8565b82525095945050505050565b60006020828403121561357f57600080fd5b8135610d10816130db565b600181811c9082168061359e57607f821691505b6020821081036135be57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9557610c9561363b565b80820180821115610c9557610c9561363b565b81810381811115610c9557610c9561363b565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b601f82111561283857600081815260208120601f850160051c8101602086101561371d5750805b601f850160051c820191505b81811015611c5657828155600101613729565b815167ffffffffffffffff81111561375657613756613107565b61376a81613764845461358a565b846136f6565b602080601f83116001811461379f57600084156137875750858301515b600019600386901b1c1916600185901b178555611c56565b600085815260208120601f198616915b828110156137ce578886015182559484019460019091019084016137af565b50858210156137ec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261381957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561383057600080fd5b8151610d1081613013565b60006020828403121561384d57600080fd5b8151610d10816130db565b602080825260089082015267686967682066656560c01b604082015260600190565b60006020828403121561388c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016138bb576138bb61363b565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139125784516001600160a01b0316835293830193918301916001016138ed565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561394857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220da64079f7e6ca30ac4b74a7631e057f44480277eb98ae882efbd12ba85c9c97464736f6c63430008110033a26469706673582212207c6388d6c14bb880989a42df2169d1f473a1a02209be83aae11d80c7bbcada5464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb000000000000000000000000377e168af6a06075423aede50856de177efaac3e000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000002ced5bc349d9241a314d3739f12f5f6f2bda6a68
-----Decoded View---------------
Arg [0] : initialRouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initialLockerAddress (address): 0xE2fE530C047f2d85298b07D9333C05737f1435fB
Arg [2] : initialRewardPoolAddress (address): 0x377E168aF6A06075423AEDe50856dE177EfaAc3E
Arg [3] : initialRevenueAddress (address): 0xe9b4d32f829951a3Ce145D2CaA84Cf66af56CA5e
Arg [4] : _nftWhitelist (address): 0x2cED5bc349D9241a314d3739f12f5f6f2BDA6A68
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb
Arg [2] : 000000000000000000000000377e168af6a06075423aede50856de177efaac3e
Arg [3] : 000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e
Arg [4] : 0000000000000000000000002ced5bc349d9241a314d3739f12f5f6f2bda6a68
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,385.23 | 0.00000363 | $0.012276 |
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.