More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,744 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim All Reward... | 16486150 | 561 days ago | IN | 0 ETH | 0.00520765 | ||||
Claim All Reward... | 15567341 | 689 days ago | IN | 0 ETH | 0.00050493 | ||||
Claim All Reward... | 15566505 | 689 days ago | IN | 0 ETH | 0.00038917 | ||||
Claim All Reward... | 15502458 | 699 days ago | IN | 0 ETH | 0.00129059 | ||||
Unstake LP | 15291672 | 733 days ago | IN | 0 ETH | 0.00070339 | ||||
Claim All Reward... | 15170831 | 752 days ago | IN | 0 ETH | 0.00406893 | ||||
Claim All Reward... | 15015533 | 777 days ago | IN | 0 ETH | 0.00263906 | ||||
Claim All Reward... | 15000670 | 780 days ago | IN | 0 ETH | 0.00165888 | ||||
Unstake LP | 14953162 | 788 days ago | IN | 0 ETH | 0.00404315 | ||||
Claim All Reward... | 14953151 | 788 days ago | IN | 0 ETH | 0.00316889 | ||||
Unstake LP | 14901567 | 797 days ago | IN | 0 ETH | 0.0142347 | ||||
Claim All Reward... | 14869136 | 802 days ago | IN | 0 ETH | 0.00346487 | ||||
Claim All Reward... | 14825460 | 809 days ago | IN | 0 ETH | 0.00352199 | ||||
Claim All Reward... | 14808489 | 812 days ago | IN | 0 ETH | 0.00334592 | ||||
Unstake LP | 14745262 | 822 days ago | IN | 0 ETH | 0.00978002 | ||||
Unstake LP | 14713886 | 827 days ago | IN | 0 ETH | 0.00606133 | ||||
Claim All Reward... | 14675293 | 833 days ago | IN | 0 ETH | 0.00493263 | ||||
Claim All Reward... | 14654625 | 836 days ago | IN | 0 ETH | 0.00924044 | ||||
Claim All Reward... | 14615279 | 842 days ago | IN | 0 ETH | 0.00664931 | ||||
Claim All Reward... | 14598310 | 845 days ago | IN | 0 ETH | 0.00365649 | ||||
Claim All Reward... | 14596271 | 845 days ago | IN | 0 ETH | 0.00218947 | ||||
Claim All Reward... | 14557151 | 851 days ago | IN | 0 ETH | 0.00212676 | ||||
Unstake LP | 14554665 | 852 days ago | IN | 0 ETH | 0.00645984 | ||||
Unstake LP | 14521001 | 857 days ago | IN | 0 ETH | 0.01551002 | ||||
Claim All Reward... | 14505131 | 860 days ago | IN | 0 ETH | 0.00502618 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LPStakingV2
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-23 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/Ownable.sol pragma solidity ^0.6.10; contract Ownable is Context { address payable public owner; event TransferredOwnership(address _previous, address _next, uint256 _time); event AddedPlatformAddress(address _platformAddress, uint256 _time); event RemovedPlatformAddress(address _platformAddress, uint256 _time); modifier onlyOwner() { require(_msgSender() == owner, "Owner only"); _; } modifier onlyPlatform() { require(platformAddress[_msgSender()] == true, "Only Platform"); _; } mapping(address => bool) platformAddress; constructor() public { owner = _msgSender(); } // Function to transfer ownership function transferOwnership(address payable _owner) public onlyOwner() { address previousOwner = owner; owner = _owner; emit TransferredOwnership(previousOwner, owner, now); } // Function to add platform address function addPlatformAddress(address _platformAddress) public onlyOwner() { require(platformAddress[_platformAddress] == false, "already platform address"); platformAddress[_platformAddress] = true; emit AddedPlatformAddress(_platformAddress, now); } // Function to remove platform address function removePlatformAddress(address _platformAddress) public onlyOwner() { require(platformAddress[_platformAddress] == true, "not platform address"); platformAddress[_platformAddress] = false; emit RemovedPlatformAddress(_platformAddress, now); } } // File: contracts/LPStakingV2.sol pragma solidity ^0.6.10; interface ILPStakingNFT { function nftTokenId(address _stakeholder) external view returns(uint id); function revertNftTokenId(address _stakeholder, uint _tokenId) external; function ownerOf(uint256 tokenId) external view returns (address owner); function balanceOf(address owner) external view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } contract LPStakingV2 is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct NFT { address _addressOfMinter; uint _LPDeposited; bool _inCirculation; uint _rewardDebt; } event StakeCompleted(address _staker, uint _amount, uint _tokenId, uint _totalStaked, uint _time); event PoolUpdated(uint _blocksRewarded, uint _amountRewarded, uint _time); event RewardsClaimed(address _staker, uint _rewardsClaimed, uint _tokenId, uint _time); event MintedToken(address _staker, uint256 _tokenId, uint256 _time); event EmergencyWithdrawOn(address _caller, bool _emergencyWithdraw, uint _time); event WithdrawCompleted(address _staker, uint _amount, uint _tokenId, uint _time); IERC20 public LPToken; IERC20 public NFYToken; ILPStakingNFT public StakingNFT; address public rewardPool; address public staking; uint public dailyReward; uint public accNfyPerShare; uint public lastRewardBlock; uint public totalStaked; bool public emergencyWithdraw = false; mapping(uint => NFT) public NFTDetails; // Constructor will set the address of NFY/ETH LP token and address of NFY/ETH LP token staking NFT constructor(address _LPToken, address _NFYToken, address _StakingNFT, address _staking, address _rewardPool, uint _dailyReward) Ownable() public { LPToken = IERC20(_LPToken); NFYToken = IERC20(_NFYToken); StakingNFT = ILPStakingNFT(_StakingNFT); staking = _staking; rewardPool = _rewardPool; // 9:30 EST December 27th lastRewardBlock = 11536400; setDailyReward(_dailyReward); accNfyPerShare; } // 6500 blocks in average day --- decimals * NFY balance of rewardPool / blocks / 10000 * dailyReward (in hundredths of %) = rewardPerBlock function getRewardPerBlock() public view returns(uint) { return NFYToken.balanceOf(rewardPool).mul(dailyReward).div(6500).div(10000); } // % of reward pool to be distributed each day --- in hundredths of % 30 == 0.3% function setDailyReward(uint _dailyReward) public onlyOwner { dailyReward = _dailyReward; } // Function that will get balance of a NFY/ETH LP balance of a certain stake function getNFTBalance(uint _tokenId) public view returns(uint _amountStaked) { return NFTDetails[_tokenId]._LPDeposited; } // Function that will check if a NFY/ETH LP stake NFT is in circulation function checkIfNFTInCirculation(uint _tokenId) public view returns(bool _inCirculation) { return NFTDetails[_tokenId]._inCirculation; } // Function that returns NFT's pending rewards function pendingRewards(uint _NFT) public view returns(uint) { NFT storage nft = NFTDetails[_NFT]; uint256 _accNfyPerShare = accNfyPerShare; if (block.number > lastRewardBlock && totalStaked != 0) { uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); _accNfyPerShare = _accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); } return nft._LPDeposited.mul(_accNfyPerShare).div(1e18).sub(nft._rewardDebt); } // Get total rewards for all of user's NFY/ETH LP nfts function getTotalRewards(address _address) public view returns(uint) { uint totalRewards; for(uint i = 0; i < StakingNFT.balanceOf(_address); i++) { uint _rewardPerNFT = pendingRewards(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalRewards = totalRewards.add(_rewardPerNFT); } return totalRewards; } // Get total stake for all user's NFY/ETH LP nfts function getTotalBalance(address _address) public view returns(uint) { uint totalBalance; for(uint i = 0; i < StakingNFT.balanceOf(_address); i++) { uint _balancePerNFT = getNFTBalance(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalBalance = totalBalance.add(_balancePerNFT); } return totalBalance; } // Function that updates NFY/ETH LP pool function updatePool() public { if (block.number <= lastRewardBlock) { return; } if (totalStaked == 0) { lastRewardBlock = block.number; return; } uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); //Approve nfyReward here NFYToken.transferFrom(rewardPool, address(this), nfyReward); accNfyPerShare = accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); lastRewardBlock = block.number; emit PoolUpdated(blocksToReward, nfyReward, now); } // Function that lets user stake NFY/ETH LP function stakeLP(uint _amount) public { require(emergencyWithdraw == false, "emergency withdraw is on, cannot stake"); require(_amount > 0, "Can not stake 0 LP tokens"); require(LPToken.balanceOf(_msgSender()) >= _amount, "Do not have enough LP tokens to stake"); updatePool(); if(StakingNFT.nftTokenId(_msgSender()) == 0){ addStakeholder(_msgSender()); } NFT storage nft = NFTDetails[StakingNFT.nftTokenId(_msgSender())]; if(nft._LPDeposited > 0) { uint _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(_msgSender(), _pendingRewards); emit RewardsClaimed(_msgSender(), _pendingRewards, StakingNFT.nftTokenId(_msgSender()), now); } } LPToken.transferFrom(_msgSender(), address(this), _amount); nft._LPDeposited = nft._LPDeposited.add(_amount); totalStaked = totalStaked.add(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); emit StakeCompleted(_msgSender(), _amount, StakingNFT.nftTokenId(_msgSender()), nft._LPDeposited, now); } function addStakeholder(address _stakeholder) private { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_msgSender())]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_msgSender())]._inCirculation = true; } function addStakeholderExternal(address _stakeholder) external onlyPlatform() { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_stakeholder)]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_stakeholder)]._inCirculation = true; } // Function that will allow user to claim rewards function claimRewards(uint _tokenId) public { require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); require(_pendingRewards > 0, "No rewards to claim!"); NFYToken.transfer(_msgSender(), _pendingRewards); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that lets user claim all rewards from all their nfts function claimAllRewards() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); for(uint i = 0; i < StakingNFT.balanceOf(_msgSender()); i++) { uint _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), i); claimRewards(_currentNFT); } } // Function that lets user unstake NFY in system. 5% fee that gets redistributed back to reward pool function unstakeLP(uint _tokenId) public { require(emergencyWithdraw == true, "Can not withdraw"); // Require that user is owner of token id require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); uint amountStaked = getNFTBalance(_tokenId); uint beingWithdrawn = nft._LPDeposited; nft._LPDeposited = 0; nft._inCirculation = false; totalStaked = totalStaked.sub(beingWithdrawn); StakingNFT.revertNftTokenId(_msgSender(), _tokenId); (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("burn(uint256)", _tokenId)); require(success == true, "burn call failed"); LPToken.transfer(_msgSender(), amountStaked); NFYToken.transfer(_msgSender(), _pendingRewards); emit WithdrawCompleted(_msgSender(), amountStaked, _tokenId, now); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that will unstake every user's NFY/ETH LP stake NFT for user function unstakeAll() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); while(StakingNFT.balanceOf(_msgSender()) > 0) { uint _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), 0); unstakeLP(_currentNFT); } } // Will increment value of staking NFT when trade occurs function incrementNFTValue (uint _tokenId, uint _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._LPDeposited > 0) { uint _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._LPDeposited = NFTDetails[_tokenId]._LPDeposited.add(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); } // Will decrement value of staking NFT when trade occurs function decrementNFTValue (uint _tokenId, uint _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); require(getNFTBalance(_tokenId) >= _amount, "Not enough stake in NFT"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._LPDeposited > 0) { uint _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._LPDeposited = NFTDetails[_tokenId]._LPDeposited.sub(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); } // Function that will turn on emergency withdraws function turnEmergencyWithdrawOn() public onlyOwner() { require(emergencyWithdraw == false, "emergency withdrawing already allowed"); emergencyWithdraw = true; emit EmergencyWithdrawOn(_msgSender(), emergencyWithdraw, now); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_LPToken","type":"address"},{"internalType":"address","name":"_NFYToken","type":"address"},{"internalType":"address","name":"_StakingNFT","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_rewardPool","type":"address"},{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_platformAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"AddedPlatformAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"bool","name":"_emergencyWithdraw","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"EmergencyWithdrawOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"MintedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_blocksRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_platformAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RemovedPlatformAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_rewardsClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"StakeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_previous","type":"address"},{"indexed":false,"internalType":"address","name":"_next","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"TransferredOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"WithdrawCompleted","type":"event"},{"inputs":[],"name":"LPToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTDetails","outputs":[{"internalType":"address","name":"_addressOfMinter","type":"address"},{"internalType":"uint256","name":"_LPDeposited","type":"uint256"},{"internalType":"bool","name":"_inCirculation","type":"bool"},{"internalType":"uint256","name":"_rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFYToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingNFT","outputs":[{"internalType":"contract ILPStakingNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accNfyPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_platformAddress","type":"address"}],"name":"addPlatformAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeholder","type":"address"}],"name":"addStakeholderExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkIfNFTInCirculation","outputs":[{"internalType":"bool","name":"_inCirculation","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"decrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getNFTBalance","outputs":[{"internalType":"uint256","name":"_amountStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"incrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NFT","type":"uint256"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_platformAddress","type":"address"}],"name":"removePlatformAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"name":"setDailyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnEmergencyWithdrawOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unstakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200554738038062005547833981810160405260c08110156200005257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050620000a56200025060201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062b0081060098190555062000244816200025860201b60201c565b50505050505062000334565b600033905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620002a06200025060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b61520380620003446000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80637dcb2abf1161010f578063c964ad45116100a2578063e5da2cb211610071578063e5da2cb214610809578063f2fde38b14610837578063f7929e441461087b578063fd5e0fe214610885576101ef565b8063c964ad4514610767578063d3d3819314610785578063db2e21bc146107dd578063e3161ddd146107ff576101ef565b80639ca152f1116100de5780639ca152f114610693578063a9f8d181146106d7578063c15982df146106f5578063c477899814610739576101ef565b80637dcb2abf146105b1578063817b1cd2146105f35780638306fddb146106115780638da5cb5b14610649576101ef565b806331455f2a116101875780634cf088d9116101565780634cf088d91461044c57806366666aa9146104965780636bdb744e146104e05780636c9128e214610567576101ef565b806331455f2a146103a257806333a1cb27146103da57806335322f371461042457806349df8d331461042e576101ef565b80630aa43533116101c35780630aa43533146102f45780630b83a727146103225780631190615d1461032c5780632bcf161c1461034a576101ef565b80628e5c2a146101f4578063011cee361461023a57806302d24d94146102845780630962ef79146102c6575b600080fd5b6102206004803603602081101561020a57600080fd5b81019080803590602001909291905050506108c9565b604051808215151515815260200191505060405180910390f35b6102426108f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b06004803603602081101561029a57600080fd5b810190808035906020019092919050505061091c565b6040518082815260200191505060405180910390f35b6102f2600480360360208110156102dc57600080fd5b810190808035906020019092919050505061093c565b005b6103206004803603602081101561030a57600080fd5b8101908080359060200190929190505050610dbe565b005b61032a610e91565b005b6103346111dc565b6040518082815260200191505060405180910390f35b61038c6004803603602081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b6040518082815260200191505060405180910390f35b6103d8600480360360408110156103b857600080fd5b8101908080359060200190929190803590602001909291905050506113e7565b005b6103e2611976565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042c61199c565b005b610436611cdb565b6040518082815260200191505060405180910390f35b610454611e1a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049e611e40565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050c600480360360208110156104f657600080fd5b8101908080359060200190929190505050611e66565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b61056f611ec3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105dd600480360360208110156105c757600080fd5b8101908080359060200190929190505050611ee9565b6040518082815260200191505060405180910390f35b6105fb611fee565b6040518082815260200191505060405180910390f35b6106476004803603604081101561062757600080fd5b810190808035906020019092919080359060200190929190505050611ff4565b005b610651612505565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d5600480360360208110156106a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b005b6106df612a42565b6040518082815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a48565b005b6107656004803603602081101561074f57600080fd5b8101908080359060200190929190505050612c9d565b005b61076f61356d565b6040518082815260200191505060405180910390f35b6107c76004803603602081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613573565b6040518082815260200191505060405180910390f35b6107e5613778565b604051808215151515815260200191505060405180910390f35b61080761378b565b005b6108356004803603602081101561081f57600080fd5b81019080803590602001909291905050506139be565b005b6108796004803603602081101561084d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061438d565b005b610883614580565b005b6108c76004803603602081101561089b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061475f565b005b6000600c600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c6000838152602001908152602001600020600101549050919050565b6109446149b3565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109cd57600080fd5b505afa1580156109e1573d6000803e3d6000fd5b505050506040513d60208110156109f757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514610b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610b3661378b565b6000600c600083815260200190815260200160002090506000610b988260030154610b8a670de0b6b3a7640000610b7c60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b905060008111610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c566149b3565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505050610d2f670de0b6b3a7640000610d2160085485600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610d606149b3565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dfe6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ed96149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b810190808051906020019092919050505011610fe7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316110336149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d60208110156110bd57600080fd5b81019080805190602001909291905050508110156111d9576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961111d6149b3565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b810190808051906020019092919050505090506111cb8161093c565b508080600101915050610fed565b50565b60085481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d60208110156112b457600080fd5b81019080805190602001909291905050508110156113dd5760006113b8600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561137857600080fd5b505afa15801561138c573d6000803e3d6000fd5b505050506040513d60208110156113a257600080fd5b8101908080519060200190929190505050611ee9565b90506113cd8184614ad590919063ffffffff16565b92505080806001019150506111eb565b5080915050919050565b60011515600160006113f76149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146114b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156114c1836108c9565b151514611536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b806115408361091c565b10156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b6115bc61378b565b6000600c600084815260200190815260200160002090506000816001015411156118f357600061162b826003015461161d670de0b6b3a764000061160f60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b905060008111156118f157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116e757600080fd5b505afa1580156116fb573d6000803e3d6000fd5b505050506040513d602081101561171157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61191c82600c600086815260200190815260200160002060010154614a8b90919063ffffffff16565b600c600085815260200190815260200160002060010181905550611969670de0b6b3a764000061195b60085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b8160030181905550505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316119e46149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6020811015611a6e57600080fd5b810190808051906020019092919050505011611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611b3b6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b81019080805190602001909291905050501115611cd9576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611c246149b3565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d6020811015611cb757600080fd5b81019080805190602001909291905050509050611cd381612c9d565b50611af3565b565b6000611e15612710611e07611964611df9600754600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b81019080805190602001909291905050506149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a4190919063ffffffff16565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c600084815260200190815260200160002090506000600854905060095443118015611f1c57506000600a5414155b15611f9e576000611f3860095443614a8b90919063ffffffff16565b90506000611f56611f47611cdb565b836149bb90919063ffffffff16565b9050611f99611f8a600a54611f7c670de0b6b3a7640000856149bb90919063ffffffff16565b614a4190919063ffffffff16565b84614ad590919063ffffffff16565b925050505b611fe58260030154611fd7670de0b6b3a7640000611fc98587600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b92505050919050565b600a5481565b60011515600160006120046149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146120c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156120ce836108c9565b151514612143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b61214b61378b565b6000600c600084815260200190815260200160002090506000816001015411156124825760006121ba82600301546121ac670de0b6b3a764000061219e60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b9050600081111561248057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561227657600080fd5b505afa15801561228a573d6000803e3d6000fd5b505050506040513d60208110156122a057600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156123eb57600080fd5b505afa1580156123ff573d6000803e3d6000fd5b505050506040513d602081101561241557600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b6124ab82600c600086815260200190815260200160002060010154614ad590919063ffffffff16565b600c6000858152602001908152602001600020600101819055506124f8670de0b6b3a76400006124ea60085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600115156001600061253a6149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146125f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061272157805182526020820191506020810190506020830392506126fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612783576040519150601f19603f3d011682016040523d82523d6000602084013e612788565b606091505b50915091506001151582151514612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128ab57600080fd5b505afa1580156128bf573d6000803e3d6000fd5b505050506040513d60208110156128d557600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129da57600080fd5b505afa1580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60095481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a886149b3565b73ffffffffffffffffffffffffffffffffffffffff1614612b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f7420706c6174666f726d206164647265737300000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9eb56c0f793bb583f0e193547f543d09d5baa49db1d55f1c5169bbbd7f6e03378142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60011515600b60009054906101000a900460ff16151514612d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e206e6f742077697468647261770000000000000000000000000000000081525060200191505060405180910390fd5b612d2e6149b3565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612db757600080fd5b505afa158015612dcb573d6000803e3d6000fd5b505050506040513d6020811015612de157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514612f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612f2061378b565b6000600c600083815260200190815260200160002090506000612f828260030154612f74670de0b6b3a7640000612f6660085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b90506000612f8f8461091c565b90506000836001015490506000846001018190555060008460020160006101000a81548160ff021916908315150217905550612fd681600a54614a8b90919063ffffffff16565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c656130226149b3565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561308c57600080fd5b505af11580156130a0573d6000803e3d6000fd5b5050505060006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1687604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106131a2578051825260208201915060208101905060208303925061317f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613204576040519150601f19603f3d011682016040523d82523d6000602084013e613209565b606091505b50915091506001151582151514613288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6275726e2063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6132ce6149b3565b866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6133ba6149b3565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea6134896149b3565b858942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf61350b6149b3565b868942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050565b60075481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561361b57600080fd5b505afa15801561362f573d6000803e3d6000fd5b505050506040513d602081101561364557600080fd5b810190808051906020019092919050505081101561376e576000613749600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561370957600080fd5b505afa15801561371d573d6000803e3d6000fd5b505050506040513d602081101561373357600080fd5b810190808051906020019092919050505061091c565b905061375e8184614ad590919063ffffffff16565b925050808060010191505061357c565b5080915050919050565b600b60009054906101000a900460ff1681565b6009544311613799576139bc565b6000600a5414156137b057436009819055506139bc565b60006137c760095443614a8b90919063ffffffff16565b905060006137e56137d6611cdb565b836149bb90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156138e657600080fd5b505af11580156138fa573d6000803e3d6000fd5b505050506040513d602081101561391057600080fd5b810190808051906020019092919050505050613965613954600a54613946670de0b6b3a7640000856149bb90919063ffffffff16565b614a4190919063ffffffff16565b600854614ad590919063ffffffff16565b600881905550436009819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60001515600b60009054906101000a900460ff16151514613a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806151a86026913960400191505060405180910390fd5b60008111613aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616e206e6f74207374616b652030204c5020746f6b656e730000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613ae76149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b4757600080fd5b505afa158015613b5b573d6000803e3d6000fd5b505050506040513d6020811015613b7157600080fd5b81019080805190602001909291905050501015613bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061513d6025913960400191505060405180910390fd5b613be161378b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613c296149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c8957600080fd5b505afa158015613c9d573d6000803e3d6000fd5b505050506040513d6020811015613cb357600080fd5b81019080805190602001909291905050501415613cdb57613cda613cd56149b3565b614b5d565b5b6000600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613d276149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d8757600080fd5b505afa158015613d9b573d6000803e3d6000fd5b505050506040513d6020811015613db157600080fd5b810190808051906020019092919050505081526020019081526020016000209050600081600101541115614086576000613e2a8260030154613e1c670de0b6b3a7640000613e0e60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b9050600081111561408457600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613e7b6149b3565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b505050506040513d6020811015613f0f57600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613f4a6149b3565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613f916149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d602081101561401b57600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6140cc6149b3565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050506040513d602081101561419457600080fd5b8101908080519060200190929190505050506141bd828260010154614ad590919063ffffffff16565b81600101819055506141da82600a54614ad590919063ffffffff16565b600a81905550614213670de0b6b3a764000061420560085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc6142446149b3565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb61428b6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156142eb57600080fd5b505afa1580156142ff573d6000803e3d6000fd5b505050506040513d602081101561431557600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143cd6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166145c06149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600b60009054906101000a900460ff161515146146b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151626025913960400191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f0ddc38832c76d85de8f93d2b696c8851487fb920787fb5270a3e78a3f4d0d4236146f96149b3565b600b60009054906101000a900460ff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001935050505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661479f6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146148ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f616c726561647920706c6174666f726d2061646472657373000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b6000808314156149ce5760009050614a3b565b60008284029050828482816149df57fe5b0414614a36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151876021913960400191505060405180910390fd5b809150505b92915050565b6000614a8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614fb6565b905092915050565b6000614acd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061507c565b905092915050565b600080828401905083811015614b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614c875780518252602082019150602081019050602083039250614c64565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ce9576040519150601f19603f3d011682016040523d82523d6000602084013e614cee565b606091505b50915091506001151582151514614d6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614db86149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614e1857600080fd5b505afa158015614e2c573d6000803e3d6000fd5b505050506040513d6020811015614e4257600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614eee6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614f4e57600080fd5b505afa158015614f62573d6000803e3d6000fd5b505050506040513d6020811015614f7857600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60008083118290615062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561502757808201518184015260208101905061500c565b50505050905090810190601f1680156150545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161506e57fe5b049050809150509392505050565b6000838311158290615129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150ee5780820151818401526020810190506150d3565b50505050905090810190601f16801561511b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe446f206e6f74206861766520656e6f756768204c5020746f6b656e7320746f207374616b65656d657267656e6379207769746864726177696e6720616c726561647920616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77656d657267656e6379207769746864726177206973206f6e2c2063616e6e6f74207374616b65a2646970667358221220fb26fc5f7ddc1a4758702ef7fd4f9989a282745425d4fe755bebb44deee4a30864736f6c634300060a0033000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e20000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae7000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae70000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c80637dcb2abf1161010f578063c964ad45116100a2578063e5da2cb211610071578063e5da2cb214610809578063f2fde38b14610837578063f7929e441461087b578063fd5e0fe214610885576101ef565b8063c964ad4514610767578063d3d3819314610785578063db2e21bc146107dd578063e3161ddd146107ff576101ef565b80639ca152f1116100de5780639ca152f114610693578063a9f8d181146106d7578063c15982df146106f5578063c477899814610739576101ef565b80637dcb2abf146105b1578063817b1cd2146105f35780638306fddb146106115780638da5cb5b14610649576101ef565b806331455f2a116101875780634cf088d9116101565780634cf088d91461044c57806366666aa9146104965780636bdb744e146104e05780636c9128e214610567576101ef565b806331455f2a146103a257806333a1cb27146103da57806335322f371461042457806349df8d331461042e576101ef565b80630aa43533116101c35780630aa43533146102f45780630b83a727146103225780631190615d1461032c5780632bcf161c1461034a576101ef565b80628e5c2a146101f4578063011cee361461023a57806302d24d94146102845780630962ef79146102c6575b600080fd5b6102206004803603602081101561020a57600080fd5b81019080803590602001909291905050506108c9565b604051808215151515815260200191505060405180910390f35b6102426108f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b06004803603602081101561029a57600080fd5b810190808035906020019092919050505061091c565b6040518082815260200191505060405180910390f35b6102f2600480360360208110156102dc57600080fd5b810190808035906020019092919050505061093c565b005b6103206004803603602081101561030a57600080fd5b8101908080359060200190929190505050610dbe565b005b61032a610e91565b005b6103346111dc565b6040518082815260200191505060405180910390f35b61038c6004803603602081101561036057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e2565b6040518082815260200191505060405180910390f35b6103d8600480360360408110156103b857600080fd5b8101908080359060200190929190803590602001909291905050506113e7565b005b6103e2611976565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042c61199c565b005b610436611cdb565b6040518082815260200191505060405180910390f35b610454611e1a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049e611e40565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050c600480360360208110156104f657600080fd5b8101908080359060200190929190505050611e66565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b61056f611ec3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105dd600480360360208110156105c757600080fd5b8101908080359060200190929190505050611ee9565b6040518082815260200191505060405180910390f35b6105fb611fee565b6040518082815260200191505060405180910390f35b6106476004803603604081101561062757600080fd5b810190808035906020019092919080359060200190929190505050611ff4565b005b610651612505565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d5600480360360208110156106a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b005b6106df612a42565b6040518082815260200191505060405180910390f35b6107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a48565b005b6107656004803603602081101561074f57600080fd5b8101908080359060200190929190505050612c9d565b005b61076f61356d565b6040518082815260200191505060405180910390f35b6107c76004803603602081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613573565b6040518082815260200191505060405180910390f35b6107e5613778565b604051808215151515815260200191505060405180910390f35b61080761378b565b005b6108356004803603602081101561081f57600080fd5b81019080803590602001909291905050506139be565b005b6108796004803603602081101561084d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061438d565b005b610883614580565b005b6108c76004803603602081101561089b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061475f565b005b6000600c600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c6000838152602001908152602001600020600101549050919050565b6109446149b3565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109cd57600080fd5b505afa1580156109e1573d6000803e3d6000fd5b505050506040513d60208110156109f757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514610b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610b3661378b565b6000600c600083815260200190815260200160002090506000610b988260030154610b8a670de0b6b3a7640000610b7c60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b905060008111610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c566149b3565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505050610d2f670de0b6b3a7640000610d2160085485600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610d606149b3565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dfe6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ed96149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b810190808051906020019092919050505011610fe7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316110336149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d60208110156110bd57600080fd5b81019080805190602001909291905050508110156111d9576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5961111d6149b3565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b810190808051906020019092919050505090506111cb8161093c565b508080600101915050610fed565b50565b60085481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d60208110156112b457600080fd5b81019080805190602001909291905050508110156113dd5760006113b8600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561137857600080fd5b505afa15801561138c573d6000803e3d6000fd5b505050506040513d60208110156113a257600080fd5b8101908080519060200190929190505050611ee9565b90506113cd8184614ad590919063ffffffff16565b92505080806001019150506111eb565b5080915050919050565b60011515600160006113f76149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146114b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156114c1836108c9565b151514611536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b806115408361091c565b10156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b6115bc61378b565b6000600c600084815260200190815260200160002090506000816001015411156118f357600061162b826003015461161d670de0b6b3a764000061160f60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b905060008111156118f157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116e757600080fd5b505afa1580156116fb573d6000803e3d6000fd5b505050506040513d602081101561171157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d602081101561188657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61191c82600c600086815260200190815260200160002060010154614a8b90919063ffffffff16565b600c600085815260200190815260200160002060010181905550611969670de0b6b3a764000061195b60085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b8160030181905550505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316119e46149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d6020811015611a6e57600080fd5b810190808051906020019092919050505011611af2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611b3b6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b81019080805190602001909291905050501115611cd9576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611c246149b3565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d6020811015611cb757600080fd5b81019080805190602001909291905050509050611cd381612c9d565b50611af3565b565b6000611e15612710611e07611964611df9600754600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b81019080805190602001909291905050506149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a4190919063ffffffff16565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c600084815260200190815260200160002090506000600854905060095443118015611f1c57506000600a5414155b15611f9e576000611f3860095443614a8b90919063ffffffff16565b90506000611f56611f47611cdb565b836149bb90919063ffffffff16565b9050611f99611f8a600a54611f7c670de0b6b3a7640000856149bb90919063ffffffff16565b614a4190919063ffffffff16565b84614ad590919063ffffffff16565b925050505b611fe58260030154611fd7670de0b6b3a7640000611fc98587600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b92505050919050565b600a5481565b60011515600160006120046149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146120c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156120ce836108c9565b151514612143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b61214b61378b565b6000600c600084815260200190815260200160002090506000816001015411156124825760006121ba82600301546121ac670de0b6b3a764000061219e60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b9050600081111561248057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561227657600080fd5b505afa15801561228a573d6000803e3d6000fd5b505050506040513d60208110156122a057600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156123eb57600080fd5b505afa1580156123ff573d6000803e3d6000fd5b505050506040513d602081101561241557600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b6124ab82600c600086815260200190815260200160002060010154614ad590919063ffffffff16565b600c6000858152602001908152602001600020600101819055506124f8670de0b6b3a76400006124ea60085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600115156001600061253a6149b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146125f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061272157805182526020820191506020810190506020830392506126fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612783576040519150601f19603f3d011682016040523d82523d6000602084013e612788565b606091505b50915091506001151582151514612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128ab57600080fd5b505afa1580156128bf573d6000803e3d6000fd5b505050506040513d60208110156128d557600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129da57600080fd5b505afa1580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60095481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a886149b3565b73ffffffffffffffffffffffffffffffffffffffff1614612b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f7420706c6174666f726d206164647265737300000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9eb56c0f793bb583f0e193547f543d09d5baa49db1d55f1c5169bbbd7f6e03378142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60011515600b60009054906101000a900460ff16151514612d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e206e6f742077697468647261770000000000000000000000000000000081525060200191505060405180910390fd5b612d2e6149b3565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612db757600080fd5b505afa158015612dcb573d6000803e3d6000fd5b505050506040513d6020811015612de157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514612f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612f2061378b565b6000600c600083815260200190815260200160002090506000612f828260030154612f74670de0b6b3a7640000612f6660085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b90506000612f8f8461091c565b90506000836001015490506000846001018190555060008460020160006101000a81548160ff021916908315150217905550612fd681600a54614a8b90919063ffffffff16565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c656130226149b3565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561308c57600080fd5b505af11580156130a0573d6000803e3d6000fd5b5050505060006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1687604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106131a2578051825260208201915060208101905060208303925061317f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613204576040519150601f19603f3d011682016040523d82523d6000602084013e613209565b606091505b50915091506001151582151514613288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6275726e2063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6132ce6149b3565b866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6133ba6149b3565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea6134896149b3565b858942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf61350b6149b3565b868942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050565b60075481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561361b57600080fd5b505afa15801561362f573d6000803e3d6000fd5b505050506040513d602081101561364557600080fd5b810190808051906020019092919050505081101561376e576000613749600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561370957600080fd5b505afa15801561371d573d6000803e3d6000fd5b505050506040513d602081101561373357600080fd5b810190808051906020019092919050505061091c565b905061375e8184614ad590919063ffffffff16565b925050808060010191505061357c565b5080915050919050565b600b60009054906101000a900460ff1681565b6009544311613799576139bc565b6000600a5414156137b057436009819055506139bc565b60006137c760095443614a8b90919063ffffffff16565b905060006137e56137d6611cdb565b836149bb90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156138e657600080fd5b505af11580156138fa573d6000803e3d6000fd5b505050506040513d602081101561391057600080fd5b810190808051906020019092919050505050613965613954600a54613946670de0b6b3a7640000856149bb90919063ffffffff16565b614a4190919063ffffffff16565b600854614ad590919063ffffffff16565b600881905550436009819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60001515600b60009054906101000a900460ff16151514613a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806151a86026913960400191505060405180910390fd5b60008111613aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616e206e6f74207374616b652030204c5020746f6b656e730000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613ae76149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b4757600080fd5b505afa158015613b5b573d6000803e3d6000fd5b505050506040513d6020811015613b7157600080fd5b81019080805190602001909291905050501015613bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061513d6025913960400191505060405180910390fd5b613be161378b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613c296149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c8957600080fd5b505afa158015613c9d573d6000803e3d6000fd5b505050506040513d6020811015613cb357600080fd5b81019080805190602001909291905050501415613cdb57613cda613cd56149b3565b614b5d565b5b6000600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613d276149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d8757600080fd5b505afa158015613d9b573d6000803e3d6000fd5b505050506040513d6020811015613db157600080fd5b810190808051906020019092919050505081526020019081526020016000209050600081600101541115614086576000613e2a8260030154613e1c670de0b6b3a7640000613e0e60085487600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b614a8b90919063ffffffff16565b9050600081111561408457600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613e7b6149b3565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613ee557600080fd5b505af1158015613ef9573d6000803e3d6000fd5b505050506040513d6020811015613f0f57600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613f4a6149b3565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613f916149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d602081101561401b57600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6140cc6149b3565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050506040513d602081101561419457600080fd5b8101908080519060200190929190505050506141bd828260010154614ad590919063ffffffff16565b81600101819055506141da82600a54614ad590919063ffffffff16565b600a81905550614213670de0b6b3a764000061420560085484600101546149bb90919063ffffffff16565b614a4190919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc6142446149b3565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb61428b6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156142eb57600080fd5b505afa1580156142ff573d6000803e3d6000fd5b505050506040513d602081101561431557600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143cd6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166145c06149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600b60009054906101000a900460ff161515146146b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151626025913960400191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f0ddc38832c76d85de8f93d2b696c8851487fb920787fb5270a3e78a3f4d0d4236146f96149b3565b600b60009054906101000a900460ff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001935050505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661479f6149b3565b73ffffffffffffffffffffffffffffffffffffffff1614614828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146148ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f616c726561647920706c6174666f726d2061646472657373000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b6000808314156149ce5760009050614a3b565b60008284029050828482816149df57fe5b0414614a36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151876021913960400191505060405180910390fd5b809150505b92915050565b6000614a8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614fb6565b905092915050565b6000614acd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061507c565b905092915050565b600080828401905083811015614b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614c875780518252602082019150602081019050602083039250614c64565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ce9576040519150601f19603f3d011682016040523d82523d6000602084013e614cee565b606091505b50915091506001151582151514614d6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614db86149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614e1857600080fd5b505afa158015614e2c573d6000803e3d6000fd5b505050506040513d6020811015614e4257600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614eee6149b3565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614f4e57600080fd5b505afa158015614f62573d6000803e3d6000fd5b505050506040513d6020811015614f7857600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60008083118290615062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561502757808201518184015260208101905061500c565b50505050905090810190601f1680156150545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161506e57fe5b049050809150509392505050565b6000838311158290615129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150ee5780820151818401526020810190506150d3565b50505050905090810190601f16801561511b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe446f206e6f74206861766520656e6f756768204c5020746f6b656e7320746f207374616b65656d657267656e6379207769746864726177696e6720616c726561647920616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77656d657267656e6379207769746864726177206973206f6e2c2063616e6e6f74207374616b65a2646970667358221220fb26fc5f7ddc1a4758702ef7fd4f9989a282745425d4fe755bebb44deee4a30864736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e20000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae7000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae70000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000001e
-----Decoded View---------------
Arg [0] : _LPToken (address): 0x146D3401B6a41122Bd318ba676A01c44cB0795E2
Arg [1] : _NFYToken (address): 0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC
Arg [2] : _StakingNFT (address): 0x320f0005364E755136cB72955fdc842F18E21ae7
Arg [3] : _staking (address): 0x320f0005364E755136cB72955fdc842F18E21ae7
Arg [4] : _rewardPool (address): 0x2f822dA8016d5e8ce3c93b53eE1528392Ca3ac57
Arg [5] : _dailyReward (uint256): 30
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e2
Arg [1] : 0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc
Arg [2] : 000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae7
Arg [3] : 000000000000000000000000320f0005364e755136cb72955fdc842f18e21ae7
Arg [4] : 0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode Sourcemap
21138:12251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23698:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21919:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23476:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28315:703;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23281:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29096:325;;;:::i;:::-;;22105:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24548:374;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32163:901;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21976:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30891:312;;;:::i;:::-;;23038:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22046:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22014:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22250:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21947:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23908:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22172:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31273:820;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19078:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27826:426;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22138:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20325:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29535:1270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22075:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24985:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22204:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25414:666;;;:::i;:::-;;26137:1271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19735:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33127:257;;;:::i;:::-;;19990:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23698:150;23766:19;23805:10;:20;23816:8;23805:20;;;;;;;;;;;:35;;;;;;;;;;;;23798:42;;23698:150;;;:::o;21919:21::-;;;;;;;;;;;;;:::o;23476:137::-;23534:18;23572:10;:20;23583:8;23572:20;;;;;;;;;;;:33;;;23565:40;;23476:137;;;:::o;28315:703::-;28410:12;:10;:12::i;:::-;28378:44;;:10;;;;;;;;;;;:18;;;28397:8;28378:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;28370:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28511:4;28472:43;;:10;:20;28483:8;28472:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;28464:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28565:12;:10;:12::i;:::-;28590:15;28608:10;:20;28619:8;28608:20;;;;;;;;;;;28590:38;;28641:20;28664:67;28715:3;:15;;;28664:46;28705:4;28664:36;28685:14;;28664:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;28641:90;;28768:1;28750:15;:19;28742:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28807:8;;;;;;;;;;;:17;;;28825:12;:10;:12::i;:::-;28839:15;28807:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28886:46;28927:4;28886:36;28907:14;;28886:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;28868:3;:15;;:64;;;;28950:60;28965:12;:10;:12::i;:::-;28979:15;28996:8;29006:3;28950:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28315:703;;;:::o;23281:105::-;19405:5;;;;;;;;;;;19389:21;;:12;:10;:12::i;:::-;:21;;;19381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23366:12:::1;23352:11;:26;;;;23281:105:::0;:::o;29096:325::-;29186:1;29149:10;;;;;;;;;;;:20;;;29170:12;:10;:12::i;:::-;29149:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;29141:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29224:6;29233:1;29224:10;;29220:194;29240:10;;;;;;;;;;;:20;;;29261:12;:10;:12::i;:::-;29240:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:1;:38;29220:194;;;29296:16;29315:10;;;;;;;;;;;:30;;;29346:12;:10;:12::i;:::-;29360:1;29315:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29296:66;;29377:25;29390:11;29377:12;:25::i;:::-;29220:194;29276:3;;;;;;;29220:194;;;;29096:325::o;22105:26::-;;;;:::o;24548:374::-;24611:4;24628:17;24662:6;24671:1;24662:10;;24658:225;24678:10;;;;;;;;;;;:20;;;24699:8;24678:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24674:1;:34;24658:225;;;24730:18;24751:59;24766:10;;;;;;;;;;;:30;;;24797:8;24807:1;24766:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24751:14;:59::i;:::-;24730:80;;24840:31;24857:13;24840:12;:16;;:31;;;;:::i;:::-;24825:46;;24658:225;24710:3;;;;;;;24658:225;;;;24902:12;24895:19;;;24548:374;;;:::o;32163:901::-;19529:4;19496:37;;:15;:29;19512:12;:10;:12::i;:::-;19496:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19488:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32300:4:::1;32263:41;;:33;32287:8;32263:23;:33::i;:::-;:41;;;32255:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32379:7;32352:23;32366:8;32352:13;:23::i;:::-;:34;;32344:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32427:12;:10;:12::i;:::-;32452:15;32470:10;:20;32481:8;32470:20;;;;;;;;;;;32452:38;;32525:1;32506:3;:16;;;:20;32503:381;;;32543:20;32566:67;32617:3;:15;;;32566:46;32607:4;32566:36;32587:14;;32566:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;32543:90;;32671:1;32653:15;:19;32650:223;;;32693:8;;;;;;;;;;;:17;;;32711:10;;;;;;;;;;;:18;;;32730:8;32711:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32741:15;32693:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;32781:76;32796:10;;;;;;;;;;;:18;;;32815:8;32796:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32826:15;32843:8;32853:3;32781:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32650:223;32503:381;;32933:46;32971:7;32933:10;:20;32944:8;32933:20;;;;;;;;;;;:33;;;:37;;:46;;;;:::i;:::-;32896:10;:20;32907:8;32896:20;;;;;;;;;;;:33;;:83;;;;33010:46;33051:4;33010:36;33031:14;;33010:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;32992:3;:15;;:64;;;;19562:1;32163:901:::0;;:::o;21976:31::-;;;;;;;;;;;;;:::o;30891:312::-;30976:1;30939:10;;;;;;;;;;;:20;;;30960:12;:10;:12::i;:::-;30939:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;30931:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31020:176;31063:1;31026:10;;;;;;;;;;;:20;;;31047:12;:10;:12::i;:::-;31026:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;31020:176;;;31081:16;31100:10;;;;;;;;;;;:30;;;31131:12;:10;:12::i;:::-;31145:1;31100:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31081:66;;31162:22;31172:11;31162:9;:22::i;:::-;31020:176;;;;30891:312::o;23038:149::-;23087:4;23111:68;23173:5;23111:57;23163:4;23111:47;23146:11;;23111:8;;;;;;;;;;;:18;;;23130:10;;;;;;;;;;;23111:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:68;;;;:::i;:::-;23104:75;;23038:149;:::o;22046:22::-;;;;;;;;;;;;;:::o;22014:25::-;;;;;;;;;;;;;:::o;22250:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21947:22::-;;;;;;;;;;;;;:::o;23908:572::-;23963:4;23980:15;23998:10;:16;24009:4;23998:16;;;;;;;;;;;23980:34;;24027:23;24053:14;;24027:40;;24099:15;;24084:12;:30;:50;;;;;24133:1;24118:11;;:16;;24084:50;24080:305;;;24151:22;24176:33;24193:15;;24176:12;:16;;:33;;;;:::i;:::-;24151:58;;24224:17;24244:39;24263:19;:17;:19::i;:::-;24244:14;:18;;:39;;;;:::i;:::-;24224:59;;24316:57;24336:36;24360:11;;24336:19;24350:4;24336:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;24316:15;:19;;:57;;;;:::i;:::-;24298:75;;24080:305;;;24404:68;24456:3;:15;;;24404:47;24446:4;24404:37;24425:15;24404:3;:16;;;:20;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;24397:75;;;;23908:572;;;:::o;22172:23::-;;;;:::o;31273:820::-;19529:4;19496:37;;:15;:29;19512:12;:10;:12::i;:::-;19496:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19488:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31410:4:::1;31373:41;;:33;31397:8;31373:23;:33::i;:::-;:41;;;31365:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31454:12;:10;:12::i;:::-;31479:15;31497:10;:20;31508:8;31497:20;;;;;;;;;;;31479:38;;31552:1;31533:3;:16;;;:20;31530:381;;;31570:20;31593:67;31644:3;:15;;;31593:46;31634:4;31593:36;31614:14;;31593:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;31570:90;;31698:1;31680:15;:19;31677:223;;;31720:8;;;;;;;;;;;:17;;;31738:10;;;;;;;;;;;:18;;;31757:8;31738:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31768:15;31720:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;31808:76;31823:10;;;;;;;;;;;:18;;;31842:8;31823:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31853:15;31870:8;31880:3;31808:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31677:223;31530:381;;31960:46;31998:7;31960:10;:20;31971:8;31960:20;;;;;;;;;;;:33;;;:37;;:46;;;;:::i;:::-;31923:10;:20;31934:8;31923:20;;;;;;;;;;;:33;;:83;;;;32037:46;32078:4;32037:36;32058:14;;32037:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;32019:3;:15;;:64;;;;19562:1;31273:820:::0;;:::o;19078:28::-;;;;;;;;;;;;;:::o;27826:426::-;19529:4;19496:37;;:15;:29;19512:12;:10;:12::i;:::-;19496:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19488:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27916:12:::1;27930:17;27951:7;;;;;;;;;;;:12;;28005;27964:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27951:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27915:104;;;;28049:4;28038:15;;:7;:15;;;28030:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28152:12;28085:10;:47;28096:10;;;;;;;;;;;:21;;;28118:12;28096:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;28085:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;28240:4;28175:10;:47;28186:10;;;;;;;;;;;:21;;;28208:12;28186:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;28175:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;19562:1;;27826:426:::0;:::o;22138:27::-;;;;:::o;20325:284::-;19405:5;;;;;;;;;;;19389:21;;:12;:10;:12::i;:::-;:21;;;19381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20457:4:::1;20420:41;;:15;:33;20436:16;20420:33;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;20412:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20533:5;20497:15;:33;20513:16;20497:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20556:45;20579:16;20597:3;20556:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;20325:284:::0;:::o;29535:1270::-;29616:4;29595:25;;:17;;;;;;;;;;;:25;;;29587:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29743:12;:10;:12::i;:::-;29711:44;;:10;;;;;;;;;;;:18;;;29730:8;29711:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;29703:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29844:4;29805:43;;:10;:20;29816:8;29805:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;29797:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29898:12;:10;:12::i;:::-;29923:15;29941:10;:20;29952:8;29941:20;;;;;;;;;;;29923:38;;29974:20;29997:67;30048:3;:15;;;29997:46;30038:4;29997:36;30018:14;;29997:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;29974:90;;30077:17;30097:23;30111:8;30097:13;:23::i;:::-;30077:43;;30131:19;30153:3;:16;;;30131:38;;30201:1;30182:3;:16;;:20;;;;30234:5;30213:3;:18;;;:26;;;;;;;;;;;;;;;;;;30266:31;30282:14;30266:11;;:15;;:31;;;;:::i;:::-;30252:11;:45;;;;30308:10;;;;;;;;;;;:27;;;30336:12;:10;:12::i;:::-;30350:8;30308:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30373:12;30387:17;30408:7;;;;;;;;;;;:12;;30462:8;30421:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30408:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30372:100;;;;30502:4;30491:15;;:7;:15;;;30483:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30540:7;;;;;;;;;;;:16;;;30557:12;:10;:12::i;:::-;30571;30540:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30595:8;;;;;;;;;;;:17;;;30613:12;:10;:12::i;:::-;30627:15;30595:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30661:60;30679:12;:10;:12::i;:::-;30693;30707:8;30717:3;30661:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30737;30752:12;:10;:12::i;:::-;30766:15;30783:8;30793:3;30737:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29535:1270;;;;;;;:::o;22075:23::-;;;;:::o;24985:375::-;25048:4;25065:17;25099:6;25108:1;25099:10;;25095:226;25115:10;;;;;;;;;;;:20;;;25136:8;25115:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25111:1;:34;25095:226;;;25167:19;25189:58;25203:10;;;;;;;;;;;:30;;;25234:8;25244:1;25203:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25189:13;:58::i;:::-;25167:80;;25277:32;25294:14;25277:12;:16;;:32;;;;:::i;:::-;25262:47;;25095:226;25147:3;;;;;;;25095:226;;;;25340:12;25333:19;;;24985:375;;;:::o;22204:37::-;;;;;;;;;;;;;:::o;25414:666::-;25474:15;;25458:12;:31;25454:70;;25506:7;;25454:70;25555:1;25540:11;;:16;25536:100;;;25591:12;25573:15;:30;;;;25618:7;;25536:100;25648:22;25673:33;25690:15;;25673:12;:16;;:33;;;;:::i;:::-;25648:58;;25719:17;25739:39;25758:19;:17;:19::i;:::-;25739:14;:18;;:39;;;;:::i;:::-;25719:59;;25825:8;;;;;;;;;;;:21;;;25847:10;;;;;;;;;;;25867:4;25874:9;25825:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25914:56;25933:36;25957:11;;25933:19;25947:4;25933:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;25914:14;;:18;;:56;;;;:::i;:::-;25897:14;:73;;;;25999:12;25981:15;:30;;;;26029:43;26041:14;26057:9;26068:3;26029:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25414:666;;;:::o;26137:1271::-;26215:5;26194:26;;:17;;;;;;;;;;;:26;;;26186:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26292:1;26282:7;:11;26274:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26377:7;26342;;;;;;;;;;;:17;;;26360:12;:10;:12::i;:::-;26342:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;26334:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26439:12;:10;:12::i;:::-;26506:1;26467:10;;;;;;;;;;;:21;;;26489:12;:10;:12::i;:::-;26467:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;26464:100;;;26524:28;26539:12;:10;:12::i;:::-;26524:14;:28::i;:::-;26464:100;26576:15;26594:10;:47;26605:10;;;;;;;;;;;:21;;;26627:12;:10;:12::i;:::-;26605:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26594:47;;;;;;;;;;;26576:65;;26676:1;26657:3;:16;;;:20;26654:376;;;26694:20;26717:67;26768:3;:15;;;26717:46;26758:4;26717:36;26738:14;;26717:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;26694:90;;26822:1;26804:15;:19;26801:218;;;26844:8;;;;;;;;;;;:17;;;26862:12;:10;:12::i;:::-;26876:15;26844:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26916:87;26931:12;:10;:12::i;:::-;26945:15;26962:10;;;;;;;;;;;:21;;;26984:12;:10;:12::i;:::-;26962:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26999:3;26916:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26801:218;26654:376;;27042:7;;;;;;;;;;;:20;;;27063:12;:10;:12::i;:::-;27085:4;27092:7;27042:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27130:29;27151:7;27130:3;:16;;;:20;;:29;;;;:::i;:::-;27111:3;:16;;:48;;;;27184:24;27200:7;27184:11;;:15;;:24;;;;:::i;:::-;27170:11;:38;;;;27239:46;27280:4;27239:36;27260:14;;27239:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;27221:3;:15;;:64;;;;27303:97;27318:12;:10;:12::i;:::-;27332:7;27341:10;;;;;;;;;;;:21;;;27363:12;:10;:12::i;:::-;27341:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27378:3;:16;;;27396:3;27303:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26137:1271;;:::o;19735:206::-;19405:5;;;;;;;;;;;19389:21;;:12;:10;:12::i;:::-;:21;;;19381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19816:21:::1;19840:5:::0;::::1;;;;;;;;;;19816:29;;19864:6;19856:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;19886:47;19907:13;19922:5;::::0;::::1;;;;;;;;;19929:3;19886:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19436:1;19735:206:::0;:::o;33127:257::-;19405:5;;;;;;;;;;;19389:21;;:12;:10;:12::i;:::-;:21;;;19381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33221:5:::1;33200:26;;:17;;;;;;;;;;;:26;;;33192:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33299:4;33279:17;;:24;;;;;;;;;;;;;;;;;;33319:57;33339:12;:10;:12::i;:::-;33353:17;;;;;;;;;;;33372:3;33319:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33127:257::o:0;19990:283::-;19405:5;;;;;;;;;;;19389:21;;:12;:10;:12::i;:::-;:21;;;19381:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20119:5:::1;20082:42;;:15;:33;20098:16;20082:33;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;20074:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20200:4;20164:15:::0;:33:::1;20180:16;20164:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;20222:43;20243:16;20261:3;20222:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:283:::0;:::o;18623:106::-;18676:15;18711:10;18704:17;;18623:106;:::o;5113:471::-;5171:7;5421:1;5416;:6;5412:47;;;5446:1;5439:8;;;;5412:47;5471:9;5487:1;5483;:5;5471:17;;5516:1;5511;5507;:5;;;;;;:10;5499:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5575:1;5568:8;;;5113:471;;;;;:::o;6060:132::-;6118:7;6145:39;6149:1;6152;6145:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6138:46;;6060:132;;;;:::o;4223:136::-;4281:7;4308:43;4312:1;4315;4308:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4301:50;;4223:136;;;;:::o;3759:181::-;3817:7;3837:9;3853:1;3849;:5;3837:17;;3878:1;3873;:6;;3865:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3931:1;3924:8;;;3759:181;;;;:::o;27416:402::-;27482:12;27496:17;27517:7;;;;;;;;;;;:12;;27571;27530:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27517:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27481:104;;;;27615:4;27604:15;;:7;:15;;;27596:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27718:12;27651:10;:47;27662:10;;;;;;;;;;;:21;;;27684:12;:10;:12::i;:::-;27662:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27651:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;27806:4;27741:10;:47;27752:10;;;;;;;;;;;:21;;;27774:12;:10;:12::i;:::-;27752:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27741:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;27416:402;;;:::o;6688:278::-;6774:7;6806:1;6802;:5;6809:12;6794:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6833:9;6849:1;6845;:5;;;;;;6833:17;;6957:1;6950:8;;;6688:278;;;;;:::o;4662:192::-;4748:7;4781:1;4776;:6;;4784:12;4768:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4808:9;4824:1;4820;:5;4808:17;;4845:1;4838:8;;;4662:192;;;;;:::o
Swarm Source
ipfs://fb26fc5f7ddc1a4758702ef7fd4f9989a282745425d4fe755bebb44deee4a308
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.