Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Supported... | 18547901 | 455 days ago | IN | 0 ETH | 0.00066497 | ||||
Set Subscription... | 18547894 | 455 days ago | IN | 0 ETH | 0.00074493 | ||||
Add Supported To... | 18547855 | 455 days ago | IN | 0 ETH | 0.00118946 | ||||
Add Supported To... | 18547852 | 455 days ago | IN | 0 ETH | 0.00122356 | ||||
Add Supported To... | 18547849 | 455 days ago | IN | 0 ETH | 0.00125591 | ||||
Add Supported To... | 18547847 | 455 days ago | IN | 0 ETH | 0.00117215 | ||||
Add Supported To... | 18547844 | 455 days ago | IN | 0 ETH | 0.00119216 | ||||
Add Supported To... | 18547841 | 455 days ago | IN | 0 ETH | 0.00102372 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Subscription
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-11 */ /** *Submitted for verification at Etherscan.io on 2022-12-11 */ /** *Submitted for verification at Etherscan.io on 2021-05-10 */ // SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.11; /** * @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; } } /** * @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); } } } } /** * @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"); } } } /** * @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); } interface IUniswapV2Router { function WETH() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Subscription is Ownable, ReentrancyGuard { using SafeMath for uint; using SafeERC20 for IERC20; using Address for address; modifier noContractsAllowed() { require(!(address(msg.sender).isContract()) && tx.origin == msg.sender, "No Contracts Allowed!"); _; } // ====================== Contract Variables ======================== // Must be updated before live deployment uint public subscriptionFeeInDai = 75e18; uint public constant SLIPPAGE_TOLERANCE_X_100 = 3e2; uint public constant ONE_HUNDRED_X_100 = 100e2; address public constant TRUSTED_PLATFORM_TOKEN_ADDRESS = 0x39b46B212bDF15b42B166779b9d1787A68b9D0c3; address public constant TRUSTED_DAI_ADDRESS = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // ==================== End Contract Variables ====================== event SupportedTokenAdded(address tokenAddress); event SupportedTokenRemoved(address tokenAddress); event SubscriptionFeeSet(uint amountDai); event Subscribe(address indexed account, uint platformTokenAmount); event UnsubscribeAddress(address accountAddress); mapping (address => bool) public isTokenSupported; mapping (address => uint) public subscriptionPlatformTokenAmount; IUniswapV2Router public immutable uniswapRouterV2; constructor () public { uniswapRouterV2 = IUniswapV2Router(0x7c81087310A228470Db28C1068F0663d6bF88679); } function addSupportedToken(address tokenAddress) external noContractsAllowed onlyOwner { isTokenSupported[tokenAddress] = true; emit SupportedTokenAdded(tokenAddress); } function removeSupportedToken(address tokenAddress) external noContractsAllowed onlyOwner { isTokenSupported[tokenAddress] = false; emit SupportedTokenRemoved(tokenAddress); } function setSubscriptionFee(uint newSubscriptionFeeInDai) external noContractsAllowed onlyOwner { subscriptionFeeInDai = newSubscriptionFeeInDai; emit SubscriptionFeeSet(newSubscriptionFeeInDai); } function subscribe(address tokenAddress, uint amount) external noContractsAllowed nonReentrant { require(isTokenSupported[tokenAddress], "Token not supported!"); require(subscriptionPlatformTokenAmount[msg.sender] == 0, "Already subscribed!"); uint minTokenAmount = getEstimatedTokenSubscriptionAmount(tokenAddress); require(amount >= minTokenAmount, "Amount less than fee!"); IERC20(tokenAddress).safeTransferFrom(msg.sender, address(this), amount); IERC20(tokenAddress).safeApprove(address(uniswapRouterV2), 0); IERC20(tokenAddress).safeApprove(address(uniswapRouterV2), amount); uint oldPlatformTokenBalance = IERC20(TRUSTED_PLATFORM_TOKEN_ADDRESS).balanceOf(address(this)); address[] memory path; if (tokenAddress == uniswapRouterV2.WETH()) { path = new address[](2); path[0] = tokenAddress; path[1] = TRUSTED_PLATFORM_TOKEN_ADDRESS; } else { path = new address[](3); path[0] = tokenAddress; path[1] = uniswapRouterV2.WETH(); path[2] = TRUSTED_PLATFORM_TOKEN_ADDRESS; } uint estimatedAmountOut = uniswapRouterV2.getAmountsOut(amount, path)[path.length - 1]; uint minAmountOut = estimatedAmountOut.mul(ONE_HUNDRED_X_100.sub(SLIPPAGE_TOLERANCE_X_100)).div(ONE_HUNDRED_X_100); uniswapRouterV2.swapExactTokensForTokens(amount, minAmountOut, path, address(this), block.timestamp); uint newPlatformTokenBalance = IERC20(TRUSTED_PLATFORM_TOKEN_ADDRESS).balanceOf(address(this)); uint platformTokensReceived = newPlatformTokenBalance.sub(oldPlatformTokenBalance); subscriptionPlatformTokenAmount[msg.sender] = platformTokensReceived; emit Subscribe(msg.sender, platformTokensReceived); } function unsubscribeAddress(address accountAddress) external onlyOwner noContractsAllowed nonReentrant { // uint subscribedPlatformTokenAmount = subscriptionPlatformTokenAmount[msg.sender]; // require(subscribedPlatformTokenAmount > 0, "Not subscribed yet!"); subscriptionPlatformTokenAmount[accountAddress] = 0; // IERC20(TRUSTED_PLATFORM_TOKEN_ADDRESS).safeTransfer(msg.sender, subscribedPlatformTokenAmount); emit UnsubscribeAddress(accountAddress); } // function to allow admin to claim *other* ERC20 tokens function transferAnyERC20Token(address token, address recipient, uint amount) external onlyOwner { require(recipient != address(0), "Invalid Recipient"); if (token == address(0)) { address payable _recipient = payable(recipient); _recipient.transfer(amount); return; } IERC20(token).safeTransfer(recipient, amount); } function getEstimatedTokenSubscriptionAmount(address tokenAddress) public view returns (uint) { if (tokenAddress == TRUSTED_DAI_ADDRESS) return subscriptionFeeInDai; address[] memory path; if (tokenAddress == uniswapRouterV2.WETH()) { path = new address[](2); path[0] = TRUSTED_DAI_ADDRESS; path[1] = tokenAddress; } else { path = new address[](3); path[0] = TRUSTED_DAI_ADDRESS; path[1] = uniswapRouterV2.WETH(); path[2] = tokenAddress; } return uniswapRouterV2.getAmountsOut(subscriptionFeeInDai, path)[path.length - 1]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"platformTokenAmount","type":"uint256"}],"name":"Subscribe","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountDai","type":"uint256"}],"name":"SubscriptionFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"SupportedTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"SupportedTokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"accountAddress","type":"address"}],"name":"UnsubscribeAddress","type":"event"},{"inputs":[],"name":"ONE_HUNDRED_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLIPPAGE_TOLERANCE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_DAI_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_PLATFORM_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getEstimatedTokenSubscriptionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTokenSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSubscriptionFeeInDai","type":"uint256"}],"name":"setSubscriptionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"subscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscriptionFeeInDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subscriptionPlatformTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountAddress","type":"address"}],"name":"unsubscribeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052680410d586a20a4c000060025534801561001d57600080fd5b506000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060018081905550737c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060805160601c6132e361015b600039806108735280611448528061149452806115ae5280611807528061194e5280611b375280611f06528061217352806122a452506132e36000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c9c3376111610071578063c9c3376114610467578063d493b9ac14610485578063f2fde38b146104f3578063f6f2fa6114610537578063f9fa08c11461055557610116565b80638da5cb5b1461032d5780638de6928414610377578063baa6a99c146103c5578063bf57a1d31461040f57610116565b80636d69fcaf116100e95780636d69fcaf146101f5578063715018a61461023957806375151b6314610243578063763191901461029f5780638724234e146102e357610116565b806342c77a8d1461011b578063566d09a81461015f578063596fa9e31461017d5780636ac84956146101c7575b600080fd5b61015d6004803603602081101561013157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105ad565b005b61016761086b565b6040518082815260200191505060405180910390f35b610185610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f3600480360360208110156101dd57600080fd5b8101908080359060200190929190505050610895565b005b6102376004803603602081101561020b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a61565b005b610241610caa565b005b6102856004803603602081101561025957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e2b565b604051808215151515815260200191505060405180910390f35b6102e1600480360360208110156102b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4b565b005b6102eb611094565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103356110ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c36004803603604081101561038d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d5565b005b6103cd611e96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eae565b6040518082815260200191505060405180910390f35b61046f612453565b6040518082815260200191505060405180910390f35b6104f16004803603606081101561049b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612459565b005b6105356004803603602081101561050957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612676565b005b61053f61287c565b6040518082815260200191505060405180910390f35b6105976004803603602081101561056b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612882565b6040518082815260200191505060405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61068e3373ffffffffffffffffffffffffffffffffffffffff1661289a565b1580156106c657503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600260015414156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f65cc96d31a88934ae8ff102c6f3d8dbe8aae8b859cab5ee258a9ef13cab1028f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001808190555050565b61012c81565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108b43373ffffffffffffffffffffffffffffffffffffffff1661289a565b1580156108ec57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61095e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806002819055507f942ed89d179ae31ec8a1c1bfd96dbd2cac87dd72712bfb0cc3f3dc426e87fc81816040518082815260200191505060405180910390a150565b610a803373ffffffffffffffffffffffffffffffffffffffff1661289a565b158015610ab857503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610b2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b610e6a3373ffffffffffffffffffffffffffffffffffffffff1661289a565b158015610ea257503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610f14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a30681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7339b46b212bdf15b42b166779b9d1787a68b9d0c381565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f43373ffffffffffffffffffffffffffffffffffffffff1661289a565b15801561112c57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61119e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b60026001541415611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206e6f7420737570706f727465642100000000000000000000000081525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c72656164792073756273637269626564210000000000000000000000000081525060200191505060405180910390fd5b600061139e83611eae565b905080821015611416576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f416d6f756e74206c657373207468616e2066656521000000000000000000000081525060200191505060405180910390fd5b6114433330848673ffffffffffffffffffffffffffffffffffffffff166128ad909392919063ffffffff16565b61148f7f000000000000000000000000000000000000000000000000000000000000000060008573ffffffffffffffffffffffffffffffffffffffff1661299a9092919063ffffffff16565b6114da7f0000000000000000000000000000000000000000000000000000000000000000838573ffffffffffffffffffffffffffffffffffffffff1661299a9092919063ffffffff16565b60007339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561156d57600080fd5b505afa158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b8101908080519060200190929190505050905060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561177357600267ffffffffffffffff8111801561169857600080fd5b506040519080825280602002602001820160405280156116c75781602001602082028036833780820191505090505b50905084816000815181106116d857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507339b46b212bdf15b42b166779b9d1787a68b9d0c38160018151811061173457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061194a565b600367ffffffffffffffff8111801561178b57600080fd5b506040519080825280602002602001820160405280156117ba5781602001602082028036833780820191505090505b50905084816000815181106117cb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561186b57600080fd5b505afa15801561187f573d6000803e3d6000fd5b505050506040513d602081101561189557600080fd5b8101908080519060200190929190505050816001815181106118b357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507339b46b212bdf15b42b166779b9d1787a68b9d0c38160028151811061190f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f86846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156119e25780820151818401526020810190506119c7565b50505050905001935050505060006040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611a4457600080fd5b8101908080516040519392919084640100000000821115611a6457600080fd5b83820191506020820185811115611a7a57600080fd5b8251866020820283011164010000000082111715611a9757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611ace578082015181840152602081019050611ab3565b50505050905001604052505050600183510381518110611aea57fe5b602002602001015190506000611b33612710611b25611b1661012c612710612ba190919063ffffffff16565b85612beb90919063ffffffff16565b612c7190919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338ed173987838630426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611c0c578082015181840152602081019050611bf1565b505050509050019650505050505050600060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611c7357600080fd5b8101908080516040519392919084640100000000821115611c9357600080fd5b83820191506020820185811115611ca957600080fd5b8251866020820283011164010000000082111715611cc657600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611cfd578082015181840152602081019050611ce2565b505050509050016040525050505060007339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b810190808051906020019092919050505090506000611df08683612ba190919063ffffffff16565b905080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f6d9501d4c8596b2602660e3aa7db27655be4177db6b3d3eddaefedd8c631fa71826040518082815260200191505060405180910390a250505050505050600180819055505050565b736b175474e89094c44da98b954eedeac495271d0f81565b6000736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f0257600254905061244e565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6a57600080fd5b505afa158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120cb57600267ffffffffffffffff81118015611ff057600080fd5b5060405190808252806020026020018201604052801561201f5781602001602082028036833780820191505090505b509050736b175474e89094c44da98b954eedeac495271d0f8160008151811061204457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061208c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122a2565b600367ffffffffffffffff811180156120e357600080fd5b506040519080825280602002602001820160405280156121125781602001602082028036833780820191505090505b509050736b175474e89094c44da98b954eedeac495271d0f8160008151811061213757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b81019080805190602001909291905050508160018151811061221f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160028151811061226757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600254836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561233a57808201518184015260208101905061231f565b50505050905001935050505060006040518083038186803b15801561235e57600080fd5b505afa158015612372573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561239c57600080fd5b81019080805160405193929190846401000000008211156123bc57600080fd5b838201915060208201858111156123d257600080fd5b82518660208202830111640100000000821117156123ef57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561242657808201518184015260208101905061240b565b5050505090500160405250505060018251038151811061244257fe5b60200260200101519150505b919050565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420526563697069656e7400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126455760008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561263e573d6000803e3d6000fd5b5050612671565b61267082828573ffffffffffffffffffffffffffffffffffffffff16612cbb9092919063ffffffff16565b5b505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61271081565b60046020528060005260406000206000915090505481565b600080823b905060008111915050919050565b612994846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b50505050565b6000811480612a94575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612a5757600080fd5b505afa158015612a6b573d6000803e3d6000fd5b505050506040513d6020811015612a8157600080fd5b8101908080519060200190929190505050145b612ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806132786036913960400191505060405180910390fd5b612b9c8363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b505050565b6000612be383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e62565b905092915050565b600080831415612bfe5760009050612c6b565b6000828402905082848281612c0f57fe5b0414612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061322d6021913960400191505060405180910390fd5b809150505b92915050565b6000612cb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f22565b905092915050565b612d6e8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b505050565b6060612dd5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fe89092919063ffffffff16565b9050600081511115612e5d57808060200190516020811015612df657600080fd5b8101908080519060200190929190505050612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061324e602a913960400191505060405180910390fd5b5b505050565b6000838311158290612f0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ed4578082015181840152602081019050612eb9565b50505050905090810190601f168015612f015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f93578082015181840152602081019050612f78565b50505050905090810190601f168015612fc05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612fda57fe5b049050809150509392505050565b6060612ff78484600085613000565b90509392505050565b606061300b8561289a565b61307d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106130cd57805182526020820191506020810190506020830392506130aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461312f576040519150601f19603f3d011682016040523d82523d6000602084013e613134565b606091505b509150915081156131495780925050506131fe565b60008151111561315c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131c35780820151818401526020810190506131a8565b50505050905090810190601f1680156131f05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220ee3f53497d6f30b00a5a7469eb4227cea0386403ce51e80fbaca5371beb16db864736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c9c3376111610071578063c9c3376114610467578063d493b9ac14610485578063f2fde38b146104f3578063f6f2fa6114610537578063f9fa08c11461055557610116565b80638da5cb5b1461032d5780638de6928414610377578063baa6a99c146103c5578063bf57a1d31461040f57610116565b80636d69fcaf116100e95780636d69fcaf146101f5578063715018a61461023957806375151b6314610243578063763191901461029f5780638724234e146102e357610116565b806342c77a8d1461011b578063566d09a81461015f578063596fa9e31461017d5780636ac84956146101c7575b600080fd5b61015d6004803603602081101561013157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105ad565b005b61016761086b565b6040518082815260200191505060405180910390f35b610185610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f3600480360360208110156101dd57600080fd5b8101908080359060200190929190505050610895565b005b6102376004803603602081101561020b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a61565b005b610241610caa565b005b6102856004803603602081101561025957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e2b565b604051808215151515815260200191505060405180910390f35b6102e1600480360360208110156102b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4b565b005b6102eb611094565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103356110ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c36004803603604081101561038d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d5565b005b6103cd611e96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eae565b6040518082815260200191505060405180910390f35b61046f612453565b6040518082815260200191505060405180910390f35b6104f16004803603606081101561049b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612459565b005b6105356004803603602081101561050957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612676565b005b61053f61287c565b6040518082815260200191505060405180910390f35b6105976004803603602081101561056b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612882565b6040518082815260200191505060405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61068e3373ffffffffffffffffffffffffffffffffffffffff1661289a565b1580156106c657503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b600260015414156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f65cc96d31a88934ae8ff102c6f3d8dbe8aae8b859cab5ee258a9ef13cab1028f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001808190555050565b61012c81565b7f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867981565b6108b43373ffffffffffffffffffffffffffffffffffffffff1661289a565b1580156108ec57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61095e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806002819055507f942ed89d179ae31ec8a1c1bfd96dbd2cac87dd72712bfb0cc3f3dc426e87fc81816040518082815260200191505060405180910390a150565b610a803373ffffffffffffffffffffffffffffffffffffffff1661289a565b158015610ab857503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610b2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b610e6a3373ffffffffffffffffffffffffffffffffffffffff1661289a565b158015610ea257503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b610f14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a30681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7339b46b212bdf15b42b166779b9d1787a68b9d0c381565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f43373ffffffffffffffffffffffffffffffffffffffff1661289a565b15801561112c57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b61119e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20436f6e74726163747320416c6c6f77656421000000000000000000000081525060200191505060405180910390fd5b60026001541415611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f6b656e206e6f7420737570706f727465642100000000000000000000000081525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c72656164792073756273637269626564210000000000000000000000000081525060200191505060405180910390fd5b600061139e83611eae565b905080821015611416576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f416d6f756e74206c657373207468616e2066656521000000000000000000000081525060200191505060405180910390fd5b6114433330848673ffffffffffffffffffffffffffffffffffffffff166128ad909392919063ffffffff16565b61148f7f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867960008573ffffffffffffffffffffffffffffffffffffffff1661299a9092919063ffffffff16565b6114da7f0000000000000000000000007c81087310a228470db28c1068f0663d6bf88679838573ffffffffffffffffffffffffffffffffffffffff1661299a9092919063ffffffff16565b60007339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561156d57600080fd5b505afa158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b8101908080519060200190929190505050905060607f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561177357600267ffffffffffffffff8111801561169857600080fd5b506040519080825280602002602001820160405280156116c75781602001602082028036833780820191505090505b50905084816000815181106116d857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507339b46b212bdf15b42b166779b9d1787a68b9d0c38160018151811061173457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061194a565b600367ffffffffffffffff8111801561178b57600080fd5b506040519080825280602002602001820160405280156117ba5781602001602082028036833780820191505090505b50905084816000815181106117cb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561186b57600080fd5b505afa15801561187f573d6000803e3d6000fd5b505050506040513d602081101561189557600080fd5b8101908080519060200190929190505050816001815181106118b357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507339b46b212bdf15b42b166779b9d1787a68b9d0c38160028151811061190f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60007f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663d06ca61f86846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156119e25780820151818401526020810190506119c7565b50505050905001935050505060006040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611a4457600080fd5b8101908080516040519392919084640100000000821115611a6457600080fd5b83820191506020820185811115611a7a57600080fd5b8251866020820283011164010000000082111715611a9757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611ace578082015181840152602081019050611ab3565b50505050905001604052505050600183510381518110611aea57fe5b602002602001015190506000611b33612710611b25611b1661012c612710612ba190919063ffffffff16565b85612beb90919063ffffffff16565b612c7190919063ffffffff16565b90507f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff166338ed173987838630426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611c0c578082015181840152602081019050611bf1565b505050509050019650505050505050600060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611c7357600080fd5b8101908080516040519392919084640100000000821115611c9357600080fd5b83820191506020820185811115611ca957600080fd5b8251866020820283011164010000000082111715611cc657600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611cfd578082015181840152602081019050611ce2565b505050509050016040525050505060007339b46b212bdf15b42b166779b9d1787a68b9d0c373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b810190808051906020019092919050505090506000611df08683612ba190919063ffffffff16565b905080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f6d9501d4c8596b2602660e3aa7db27655be4177db6b3d3eddaefedd8c631fa71826040518082815260200191505060405180910390a250505050505050600180819055505050565b736b175474e89094c44da98b954eedeac495271d0f81565b6000736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f0257600254905061244e565b60607f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6a57600080fd5b505afa158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120cb57600267ffffffffffffffff81118015611ff057600080fd5b5060405190808252806020026020018201604052801561201f5781602001602082028036833780820191505090505b509050736b175474e89094c44da98b954eedeac495271d0f8160008151811061204457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061208c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122a2565b600367ffffffffffffffff811180156120e357600080fd5b506040519080825280602002602001820160405280156121125781602001602082028036833780820191505090505b509050736b175474e89094c44da98b954eedeac495271d0f8160008151811061213757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b81019080805190602001909291905050508160018151811061221f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160028151811061226757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b7f0000000000000000000000007c81087310a228470db28c1068f0663d6bf8867973ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600254836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561233a57808201518184015260208101905061231f565b50505050905001935050505060006040518083038186803b15801561235e57600080fd5b505afa158015612372573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561239c57600080fd5b81019080805160405193929190846401000000008211156123bc57600080fd5b838201915060208201858111156123d257600080fd5b82518660208202830111640100000000821117156123ef57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561242657808201518184015260208101905061240b565b5050505090500160405250505060018251038151811061244257fe5b60200260200101519150505b919050565b60025481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420526563697069656e7400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126455760008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561263e573d6000803e3d6000fd5b5050612671565b61267082828573ffffffffffffffffffffffffffffffffffffffff16612cbb9092919063ffffffff16565b5b505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132076026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61271081565b60046020528060005260406000206000915090505481565b600080823b905060008111915050919050565b612994846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b50505050565b6000811480612a94575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612a5757600080fd5b505afa158015612a6b573d6000803e3d6000fd5b505050506040513d6020811015612a8157600080fd5b8101908080519060200190929190505050145b612ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806132786036913960400191505060405180910390fd5b612b9c8363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b505050565b6000612be383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e62565b905092915050565b600080831415612bfe5760009050612c6b565b6000828402905082848281612c0f57fe5b0414612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061322d6021913960400191505060405180910390fd5b809150505b92915050565b6000612cb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f22565b905092915050565b612d6e8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d73565b505050565b6060612dd5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fe89092919063ffffffff16565b9050600081511115612e5d57808060200190516020811015612df657600080fd5b8101908080519060200190929190505050612e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061324e602a913960400191505060405180910390fd5b5b505050565b6000838311158290612f0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ed4578082015181840152602081019050612eb9565b50505050905090810190601f168015612f015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f93578082015181840152602081019050612f78565b50505050905090810190601f168015612fc05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612fda57fe5b049050809150509392505050565b6060612ff78484600085613000565b90509392505050565b606061300b8561289a565b61307d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106130cd57805182526020820191506020810190506020830392506130aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461312f576040519150601f19603f3d011682016040523d82523d6000602084013e613134565b606091505b509150915081156131495780925050506131fe565b60008151111561315c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131c35780820151818401526020810190506131a8565b50505050905090810190601f1680156131f05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220ee3f53497d6f30b00a5a7469eb4227cea0386403ce51e80fbaca5371beb16db864736f6c634300060b0033
Deployed Bytecode Sourcemap
23227:5811:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27338:524;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23735:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24582:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25178:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24776:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22673:148;;;:::i;:::-;;24449:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24974:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23852:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22033:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25410:1920;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23958:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28341:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23682:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27932:397;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22976:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23793:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24505:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27338:524;22255:10;22245:20;;:6;;;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23436:32:::1;23444:10;23436:30;;;:32::i;:::-;23434:35;:62;;;;;23486:10;23473:23;;:9;:23;;;23434:62;23426:96;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20083:1:::2;20689:7;;:19;;20681:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;20083:1;20822:7;:18;;;;27685:1:::3;27635:31;:47;27667:14;27635:47;;;;;;;;;;;;;;;:51;;;;27820:34;27839:14;27820:34;;;;;;;;;;;;;;;;;;;;;;20039:1:::2;21001:7:::0;:22:::2;;;;27338:524:::0;:::o;23735:51::-;23783:3;23735:51;:::o;24582:49::-;;;:::o;25178:220::-;23436:32;23444:10;23436:30;;;:32::i;:::-;23434:35;:62;;;;;23486:10;23473:23;;:9;:23;;;23434:62;23426:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:10:::1;22245:20;;:6;::::0;::::1;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25308:23:::2;25285:20;:46;;;;25347:43;25366:23;25347:43;;;;;;;;;;;;;;;;;;25178:220:::0;:::o;24776:192::-;23436:32;23444:10;23436:30;;;:32::i;:::-;23434:35;:62;;;;;23486:10;23473:23;;:9;:23;;;23434:62;23426:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:10:::1;22245:20;;:6;::::0;::::1;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24907:4:::2;24874:16;:30;24891:12;24874:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;24927:33;24947:12;24927:33;;;;;;;;;;;;;;;;;;;;;;24776:192:::0;:::o;22673:148::-;22255:10;22245:20;;:6;;;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22780:1:::1;22743:40;;22764:6;::::0;::::1;;;;;;;;;22743:40;;;;;;;;;;;;22811:1;22794:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;22673:148::o:0;24449:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;24974:198::-;23436:32;23444:10;23436:30;;;:32::i;:::-;23434:35;:62;;;;;23486:10;23473:23;;:9;:23;;;23434:62;23426:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:10:::1;22245:20;;:6;::::0;::::1;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25108:5:::2;25075:16;:30;25092:12;25075:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;25129:35;25151:12;25129:35;;;;;;;;;;;;;;;;;;;;;;24974:198:::0;:::o;23852:99::-;23909:42;23852:99;:::o;22033:79::-;22071:7;22098:6;;;;;;;;;;;22091:13;;22033:79;:::o;25410:1920::-;23436:32;23444:10;23436:30;;;:32::i;:::-;23434:35;:62;;;;;23486:10;23473:23;;:9;:23;;;23434:62;23426:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20083:1:::1;20689:7;;:19;;20681:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20083:1;20822:7;:18;;;;25524:16:::2;:30;25541:12;25524:30;;;;;;;;;;;;;;;;;;;;;;;;;25516:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25645:1;25598:31;:43;25630:10;25598:43;;;;;;;;;;;;;;;;:48;25590:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25691:19;25713:49;25749:12;25713:35;:49::i;:::-;25691:71;;25791:14;25781:6;:24;;25773:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25852:72;25890:10;25910:4;25917:6;25859:12;25852:37;;;;:72;;;;;;:::i;:::-;25935:61;25976:15;25994:1;25942:12;25935:32;;;;:61;;;;;:::i;:::-;26007:66;26048:15;26066:6;26014:12;26007:32;;;;:66;;;;;:::i;:::-;26094:28;23909:42;26125:48;;;26182:4;26125:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;26094:94;;26209:21;26271:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;26255:38;;:12;:38;;;26251:381;;;26331:1;26317:16;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26310:23;;26358:12;26348:4;26353:1;26348:7;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::2;23909:42;26385:4;26390:1;26385:7;;;;;;;;;;;;;:40;;;;;;;;;::::0;::::2;26251:381;;;26479:1;26465:16;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26458:23;;26506:12;26496:4;26501:1;26496:7;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::2;26543:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;26533:4;26538:1;26533:7;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::2;23909:42;26580:4;26585:1;26580:7;;;;;;;;;;;;;:40;;;;;;;;;::::0;::::2;26251:381;26642:23;26668:15;:29;;;26698:6;26706:4;26668:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;26726:1;26712:4;:11;:15;26668:60;;;;;;;;;;;;;;26642:86;;26739:17;26759:94;23834:5;26759:71;26782:47;23783:3;23834:5;26782:21;;:47;;;;:::i;:::-;26759:18;:22;;:71;;;;:::i;:::-;:75;;:94;;;;:::i;:::-;26739:114;;26864:15;:40;;;26905:6;26913:12;26927:4;26941;26948:15;26864:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;26975:28;23909:42;27006:48;;;27063:4;27006:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;26975:94;;27080:27;27110:52;27138:23;27110;:27;;:52;;;;:::i;:::-;27080:82;;27229:22;27183:31;:43;27215:10;27183:43;;;;;;;;;;;;;;;:68;;;;27287:10;27277:45;;;27299:22;27277:45;;;;;;;;;;;;;;;;;;20853:1;;;;;;;20039::::1;21001:7:::0;:22:::1;;;;25410:1920:::0;;:::o;23958:88::-;24004:42;23958:88;:::o;28341:694::-;28429:4;24004:42;28450:35;;:12;:35;;;28446:68;;;28494:20;;28487:27;;;;28446:68;28525:21;28587:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28571:38;;:12;:38;;;28567:359;;;28647:1;28633:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28626:23;;24004:42;28664:4;28669:1;28664:7;;;;;;;;;;;;;:29;;;;;;;;;;;28718:12;28708:4;28713:1;28708:7;;;;;;;;;;;;;:22;;;;;;;;;;;28567:359;;;28784:1;28770:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28763:23;;24004:42;28801:4;28806:1;28801:7;;;;;;;;;;;;;:29;;;;;;;;;;;28855:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28845:4;28850:1;28845:7;;;;;;;;;;;;;:32;;;;;;;;;;;28902:12;28892:4;28897:1;28892:7;;;;;;;;;;;;;:22;;;;;;;;;;;28567:359;28953:15;:29;;;28983:20;;29005:4;28953:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29025:1;29011:4;:11;:15;28953:74;;;;;;;;;;;;;;28946:81;;;28341:694;;;;:::o;23682:40::-;;;;:::o;27932:397::-;22255:10;22245:20;;:6;;;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28069:1:::1;28048:23;;:9;:23;;;;28040:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28125:1;28108:19;;:5;:19;;;28104:162;;;28144:26;28181:9;28144:47;;28206:10;:19;;:27;28226:6;28206:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28248:7;;;28104:162;28276:45;28303:9;28314:6;28283:5;28276:26;;;;:45;;;;;:::i;:::-;22313:1;27932:397:::0;;;:::o;22976:244::-;22255:10;22245:20;;:6;;;;;;;;;;;:20;;;22237:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23085:1:::1;23065:22;;:8;:22;;;;23057:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23175:8;23146:38;;23167:6;::::0;::::1;;;;;;;;;23146:38;;;;;;;;;;;;23204:8;23195:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;22976:244:::0;:::o;23793:46::-;23834:5;23793:46;:::o;24505:64::-;;;;;;;;;;;;;;;;;:::o;6194:422::-;6254:4;6462:12;6573:7;6561:20;6553:28;;6607:1;6600:4;:8;6593:15;;;6194:422;;;:::o;12219:205::-;12320:96;12340:5;12370:27;;;12399:4;12405:2;12409:5;12347:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12320:19;:96::i;:::-;12219:205;;;;:::o;12693:622::-;13072:1;13063:5;:10;13062:62;;;;13122:1;13079:5;:15;;;13103:4;13110:7;13079:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;13062:62;13054:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13217:90;13237:5;13267:22;;;13291:7;13300:5;13244:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13217:19;:90::i;:::-;12693:622;;;:::o;1517:136::-;1575:7;1602:43;1606:1;1609;1602:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1595:50;;1517:136;;;;:::o;2407:471::-;2465:7;2715:1;2710;:6;2706:47;;;2740:1;2733:8;;;;2706:47;2765:9;2781:1;2777;:5;2765:17;;2810:1;2805;2801;:5;;;;;;:10;2793:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2869:1;2862:8;;;2407:471;;;;;:::o;3354:132::-;3412:7;3439:39;3443:1;3446;3439:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3432:46;;3354:132;;;;:::o;12034:177::-;12117:86;12137:5;12167:23;;;12192:2;12196:5;12144:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12117:19;:86::i;:::-;12034:177;;;:::o;14339:761::-;14763:23;14789:69;14817:4;14789:69;;;;;;;;;;;;;;;;;14797:5;14789:27;;;;:69;;;;;:::i;:::-;14763:95;;14893:1;14873:10;:17;:21;14869:224;;;15015:10;15004:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14996:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14869:224;14339:761;;;:::o;1956:192::-;2042:7;2075:1;2070;:6;;2078:12;2062:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2102:9;2118:1;2114;:5;2102:17;;2139:1;2132:8;;;1956:192;;;;;:::o;3982:278::-;4068:7;4100:1;4096;:5;4103:12;4088:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4127:9;4143:1;4139;:5;;;;;;4127:17;;4251:1;4244:8;;;3982:278;;;;;:::o;9112:196::-;9215:12;9247:53;9270:6;9278:4;9284:1;9287:12;9247:22;:53::i;:::-;9240:60;;9112:196;;;;;:::o;10489:979::-;10619:12;10652:18;10663:6;10652:10;:18::i;:::-;10644:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10778:12;10792:23;10819:6;:11;;10839:8;10850:4;10819:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10777:78;;;;10870:7;10866:595;;;10901:10;10894:17;;;;;;10866:595;11035:1;11015:10;:17;:21;11011:439;;;11278:10;11272:17;11339:15;11326:10;11322:2;11318:19;11311:44;11226:148;11421:12;11414:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10489:979;;;;;;;:::o
Swarm Source
ipfs://ee3f53497d6f30b00a5a7469eb4227cea0386403ce51e80fbaca5371beb16db8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.