More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 92 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell | 4741912 | 2 days ago | IN | 0 S | 0.00895185 | ||||
Buy | 4741825 | 2 days ago | IN | 14,000 S | 0.00875088 | ||||
Buy | 4741806 | 2 days ago | IN | 10 S | 0.00599885 | ||||
Create | 4741735 | 2 days ago | IN | 10 S | 0.05387536 | ||||
Sell | 4741500 | 2 days ago | IN | 0 S | 0.009267 | ||||
Buy | 4741465 | 2 days ago | IN | 14,000 S | 0.00878493 | ||||
Sell | 4741446 | 2 days ago | IN | 0 S | 0.00930952 | ||||
Buy | 4741425 | 2 days ago | IN | 1 S | 0.00881903 | ||||
Create | 4741408 | 2 days ago | IN | 10 S | 0.053878 | ||||
Sell | 4741294 | 2 days ago | IN | 0 S | 0.00919924 | ||||
Create | 4741264 | 2 days ago | IN | 10 S | 0.053878 | ||||
Sell | 4740993 | 2 days ago | IN | 0 S | 0.0090635 | ||||
Buy | 4740969 | 2 days ago | IN | 14,000 S | 0.00881985 | ||||
Sell | 4732644 | 2 days ago | IN | 0 S | 0.00905025 | ||||
Buy | 4732599 | 2 days ago | IN | 1,000 S | 0.00885252 | ||||
Buy | 4732570 | 2 days ago | IN | 12,000 S | 0.00881402 | ||||
Sell | 4732460 | 2 days ago | IN | 0 S | 0.00898859 | ||||
Buy | 4732413 | 2 days ago | IN | 1 S | 0.00881903 | ||||
Create | 4732381 | 2 days ago | IN | 5 S | 0.05389708 | ||||
Sell | 4732232 | 2 days ago | IN | 0 S | 0.00912774 | ||||
Sell | 4732002 | 2 days ago | IN | 0 S | 0.00927536 | ||||
Buy | 4731900 | 2 days ago | IN | 1 S | 0.00888602 | ||||
Buy | 4731504 | 2 days ago | IN | 1 S | 0.00877437 | ||||
Buy | 4731455 | 2 days ago | IN | 1 S | 0.00599885 | ||||
Create | 4730865 | 2 days ago | IN | 1 S | 0.05391067 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | Age | From | To | Amount | |
---|---|---|---|---|---|---|
4741912 | 2 days ago | 13,741.00199999 S | ||||
4741912 | 2 days ago | 138.79799999 S | ||||
4741825 | 2 days ago | 140 S | ||||
4741806 | 2 days ago | 0.1 S | ||||
4741735 | 2 days ago | 0.1 S | ||||
4741735 | 2 days ago | 0 S | ||||
4741500 | 2 days ago | 13,731.79732952 S | ||||
4741500 | 2 days ago | 138.70502353 S | ||||
4741465 | 2 days ago | 140 S | ||||
4741446 | 2 days ago | 0.38377047 S | ||||
4741446 | 2 days ago | 0.00387646 S | ||||
4741425 | 2 days ago | 0.01 S | ||||
4741408 | 2 days ago | 0.1 S | ||||
4741408 | 2 days ago | 0 S | ||||
4741294 | 2 days ago | 9.80099999 S | ||||
4741294 | 2 days ago | 0.09899999 S | ||||
4741264 | 2 days ago | 0.1 S | ||||
4741264 | 2 days ago | 0 S | ||||
4740993 | 2 days ago | 13,722.38009999 S | ||||
4740993 | 2 days ago | 138.60989999 S | ||||
4740969 | 2 days ago | 140 S | ||||
4732644 | 2 days ago | 12,743.44707018 S | ||||
4732644 | 2 days ago | 128.72168757 S | ||||
4732599 | 2 days ago | 10 S | ||||
4732570 | 2 days ago | 120 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SFUN
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// ---------------------------------------------------------// Imports// ---------------------------------------------------------import {BancorBondingCurve} from "./bancor/BancorBondingCurve.sol";import {Token} from "./Token.sol";import "./utils/owner/Ownable.sol";import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";import "@uniswap/v3-periphery/interfaces/INonfungiblePositionManager.sol";import "@uniswap/v3-periphery/interfaces/IPeripheryImmutableState.sol";import {TransferHelper} from "@uniswap/v3-periphery/libraries/TransferHelper.sol";import "@uniswap/v3-core/interfaces/IUniswapV3Factory.sol";import {IWETH9} from "@uniswap/v3-periphery/interfaces/external/IWETH9.sol";contract SFUN is Ownable, ReentrancyGuard {// ---------------------------------------------------------// Structs// ---------------------------------------------------------struct TokenInfo {Token token;uint256 tokenbalance; // tokens still in manager, not sold to usersuint256 ethBalance; // ETH held by the bonding curvebool isListed; // Whether liquidity is already addedaddress deployer; // The creator of the token
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import "./BancorFormula.sol";import "../prb-math/PRBMathSD59x18.sol";import "../prb-math/PRBMathUD60x18.sol";// based on https://medium.com/relevant-community/bonding-curves-in-depth-intuition-parametrization-d3905a681e0acontract BancorBondingCurve is BancorFormula {using PRBMathSD59x18 for int256;using PRBMathUD60x18 for uint256;uint256 public immutable slope;uint32 public immutable reserveRatio;// reserveRatio = connectorWeight, but is scaled by MAX_WEIGHT (1000000)// also note that unscaled reserveRatio = 1 / (n+1), so a reserveRatio 1000000 means n=0, reserveRatio=2000000 means n=1, and so on// slope (denoted as m in the article) is only relevant when supply = 0. When supply is non-zero, the price for minting k tokens can be fullydetermined by current balance and supplyconstructor(uint256 _slope, uint32 _reserveRatio) {slope = _slope;reserveRatio = _reserveRatio;}// buy function/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "./utils/token/ERC20.sol";import "./utils/owner/Ownable.sol";import "./utils/token/extensions/ERC20Burnable.sol";contract Token is ERC20, ERC20Burnable, Ownable {uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 10 ** 18;uint256 public constant TRADING_SUPPLY = 700_000_000 * 10 ** 18;uint256 public constant LP_SUPPLY = 300_000_000 * 10 ** 18;constructor(string memory name, string memory symbol) ERC20(name, symbol) {// Mint total supply to the contract itself_mint(address(this), TOTAL_SUPPLY);}function transferTradingSupply(address manager) external onlyOwner {// Transfer trading supply to the bonding curve manager_transfer(address(this), manager, TRADING_SUPPLY);}function transferLPSupply(address manager) external onlyOwner {// Transfer LP supply to the bonding curve manager_transfer(address(this), manager, LP_SUPPLY);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../token/extensions/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)pragma solidity ^0.8.20;/*** @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 EIP-1153 (transient storage) is available on the chain you're deploying at,* consider using {ReentrancyGuardTransient} instead.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.5;pragma abicoder v2;import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol';import './IPoolInitializer.sol';import './IERC721Permit.sol';import './IPeripheryPayments.sol';import './IPeripheryImmutableState.sol';import '../libraries/PoolAddress.sol';/// @title Non-fungible token for positions/// @notice Wraps Uniswap V3 positions in a non-fungible token interface which allows for them to be transferred/// and authorized.interface INonfungiblePositionManager isIPoolInitializer,IPeripheryPayments,IPeripheryImmutableState,IERC721Metadata,IERC721Enumerable,IERC721Permit{/// @notice Emitted when liquidity is increased for a position NFT/// @dev Also emitted when a token is minted
123456789101112// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Immutable state/// @notice Functions that return immutable state of the routerinterface IPeripheryImmutableState {/// @return Returns the address of the Uniswap V3 factoryfunction factory() external view returns (address);/// @return Returns the address of WETH9function WETH9() external view returns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.6.0;import '@openzeppelin/contracts/token/ERC20/IERC20.sol';library TransferHelper {/// @notice Transfers tokens from the targeted address to the given destination/// @notice Errors with 'STF' if transfer fails/// @param token The contract address of the token to be transferred/// @param from The originating address from which the tokens will be transferred/// @param to The destination address of the transfer/// @param value The amount to be transferredfunction safeTransferFrom(address token,address from,address to,uint256 value) internal {(bool success, bytes memory data) =token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');}/// @notice Transfers tokens from msg.sender to a recipient/// @dev Errors with ST if transfer fails/// @param token The contract address of the token which will be transferred
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title The interface for the Uniswap V3 Factory/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol feesinterface IUniswapV3Factory {/// @notice Emitted when the owner of the factory is changed/// @param oldOwner The owner before the owner was changed/// @param newOwner The owner after the owner was changedevent OwnerChanged(address indexed oldOwner, address indexed newOwner);/// @notice Emitted when a pool is created/// @param token0 The first token of the pool by address sort order/// @param token1 The second token of the pool by address sort order/// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip/// @param tickSpacing The minimum number of ticks between initialized ticks/// @param pool The address of the created poolevent PoolCreated(address indexed token0,address indexed token1,uint24 indexed fee,int24 tickSpacing,address pool);/// @notice Emitted when a new fee amount is enabled for pool creation via the factory
12345678910111213// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.6;import '@openzeppelin/contracts/token/ERC20/IERC20.sol';/// @title Interface for WETH9interface IWETH9 is IERC20 {/// @notice Deposit ether to get wrapped etherfunction deposit() external payable;/// @notice Withdraw wrapped ether to get etherfunction withdraw(uint256) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import "./Power.sol";import "@openzeppelin/contracts/utils/math/Math.sol";/*** @title Bancor formula by Bancor* @dev Modified from the original by Slava Balasanov* https://github.com/bancorprotocol/contracts* Split Power.sol out from BancorFormula.sol and replace SafeMath formulas with zeppelin's SafeMath* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;* and to You under the Apache License, Version 2.0. "*/contract BancorFormula is Power {string public constant version = "0.3.1";uint32 public constant MAX_WEIGHT = 1000000;/*** @dev given a token supply, connector balance, weight and a deposit amount (in the connector token),* calculates the return for a given conversion (in the main token)** Formula:* Return = _supply * ((1 + _depositAmount / _connectorBalance) ^ (_connectorWeight / 1000000) - 1)** @param _supply token total supply
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity >=0.8.4;import "./PRBMath.sol";/// @title PRBMathSD59x18/// @author Paul Razvan Berg/// @notice Smart contract library for advanced fixed-point math that works with int256 numbers considered to have 18/// trailing decimals. We call this number representation signed 59.18-decimal fixed-point, since the numbers can have/// a sign and there can be up to 59 digits in the integer part and up to 18 decimals in the fractional part. The numbers/// are bound by the minimum and the maximum values permitted by the Solidity type int256.library PRBMathSD59x18 {/// @dev log2(e) as a signed 59.18-decimal fixed-point number.int256 internal constant LOG2_E = 1_442695040888963407;/// @dev Half the SCALE number.int256 internal constant HALF_SCALE = 5e17;/// @dev The maximum value a signed 59.18-decimal fixed-point number can have.int256 internal constant MAX_SD59x18 =57896044618658097711785492504343953926634992332820282019728_792003956564819967;/// @dev The maximum whole value a signed 59.18-decimal fixed-point number can have.int256 internal constant MAX_WHOLE_SD59x18 =57896044618658097711785492504343953926634992332820282019728_000000000000000000;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity >=0.8.4;import "./PRBMath.sol";/// @title PRBMathUD60x18/// @author Paul Razvan Berg/// @notice Smart contract library for advanced fixed-point math that works with uint256 numbers considered to have 18/// trailing decimals. We call this number representation unsigned 60.18-decimal fixed-point, since there can be up to 60/// digits in the integer part and up to 18 decimals in the fractional part. The numbers are bound by the minimum and the/// maximum values permitted by the Solidity type uint256.library PRBMathUD60x18 {/// @dev Half the SCALE number.uint256 internal constant HALF_SCALE = 5e17;/// @dev log2(e) as an unsigned 60.18-decimal fixed-point number.uint256 internal constant LOG2_E = 1_442695040888963407;/// @dev The maximum value an unsigned 60.18-decimal fixed-point number can have.uint256 internal constant MAX_UD60x18 =115792089237316195423570985008687907853269984665640564039457_584007913129639935;/// @dev The maximum whole value an unsigned 60.18-decimal fixed-point number can have.uint256 internal constant MAX_WHOLE_UD60x18 =115792089237316195423570985008687907853269984665640564039457_000000000000000000;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.0;import "./IERC20.sol";import "./extensions/IERC20Metadata.sol";import "./extensions/Context.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.* For a generic mechanism see {ERC20PresetMinterPauser}.** TIP: For a detailed writeup see our guide* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** The default value of {decimals} is 18. To change this, you should override* this function so it returns a different value.** We have followed general OpenZeppelin Contracts guidelines: functions revert* instead returning `false` on failure. This behavior is nonetheless* conventional and does not conflict with the expectations of ERC20
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)pragma solidity ^0.8.0;import "../ERC20.sol";import "./Context.sol";/*** @dev Extension of {ERC20} that allows token holders to destroy both their own* tokens and those that they have an allowance for, in a way that can be* recognized off-chain (via event analysis).*/abstract contract ERC20Burnable is Context, ERC20 {/*** @dev Destroys `amount` tokens from the caller.** See {ERC20-_burn}.*/function burn(uint256 amount) public virtual {_burn(_msgSender(), amount);}/*** @dev Destroys `amount` tokens from `account`, deducting from the caller's* allowance.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {/*** @dev Returns the token collection name.*/function name() external view returns (string memory);/*** @dev Returns the token collection symbol.*/function symbol() external view returns (string memory);/*** @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.*/function tokenURI(uint256 tokenId) external view returns (string memory);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional enumeration extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Enumerable is IERC721 {/*** @dev Returns the total amount of tokens stored by the contract.*/function totalSupply() external view returns (uint256);/*** @dev Returns a token ID owned by `owner` at a given `index` of its token list.* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.*/function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);/*** @dev Returns a token ID at a given `index` of all the tokens stored by the contract.* Use along with {totalSupply} to enumerate all tokens.
12345678910111213141516171819202122// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.5;pragma abicoder v2;/// @title Creates and initializes V3 Pools/// @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that/// require the pool to exist.interface IPoolInitializer {/// @notice Creates a new pool if it does not exist, then initializes if not initialized/// @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool/// @param token0 The contract address of token0 of the pool/// @param token1 The contract address of token1 of the pool/// @param fee The fee amount of the v3 pool for the specified token pair/// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value/// @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessaryfunction createAndInitializePoolIfNecessary(address token0,address token1,uint24 fee,uint160 sqrtPriceX96) external payable returns (address pool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.5;import '@openzeppelin/contracts/token/ERC721/IERC721.sol';/// @title ERC721 with permit/// @notice Extension to ERC721 that includes a permit function for signature based approvalsinterface IERC721Permit is IERC721 {/// @notice The permit typehash used in the permit signature/// @return The typehash for the permitfunction PERMIT_TYPEHASH() external pure returns (bytes32);/// @notice The domain separator used in the permit signature/// @return The domain seperator used in encoding of permit signaturefunction DOMAIN_SEPARATOR() external view returns (bytes32);/// @notice Approve of a specific token ID for spending by spender via signature/// @param spender The account that is being approved/// @param tokenId The ID of the token that is being approved for spending/// @param deadline The deadline timestamp by which the call must be mined for the approve to work/// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s`/// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s`/// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v`function permit(address spender,uint256 tokenId,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.5;/// @title Periphery Payments/// @notice Functions to ease deposits and withdrawals of ETHinterface IPeripheryPayments {/// @notice Unwraps the contract's WETH9 balance and sends it to recipient as ETH./// @dev The amountMinimum parameter prevents malicious contracts from stealing WETH9 from users./// @param amountMinimum The minimum amount of WETH9 to unwrap/// @param recipient The address receiving ETHfunction unwrapWETH9(uint256 amountMinimum, address recipient) external payable;/// @notice Refunds any ETH balance held by this contract to the `msg.sender`/// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps/// that use ether for the input amountfunction refundETH() external payable;/// @notice Transfers the full amount of a token held by this contract to recipient/// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users/// @param token The contract address of the token which will be transferred to `recipient`/// @param amountMinimum The minimum amount of token required for a transfer/// @param recipient The destination address of the tokenfunction sweepToken(address token,uint256 amountMinimum,address recipient
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Provides functions for deriving a pool address from the factory, tokens, and the feelibrary PoolAddress {bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;/// @notice The identifying key of the poolstruct PoolKey {address token0;address token1;uint24 fee;}/// @notice Returns PoolKey: the ordered tokens with the matched fee levels/// @param tokenA The first token of a pool, unsorted/// @param tokenB The second token of a pool, unsorted/// @param fee The fee level of the pool/// @return Poolkey The pool details with ordered token0 and token1 assignmentsfunction getPoolKey(address tokenA,address tokenB,uint24 fee) internal pure returns (PoolKey memory) {if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// TODO: make this a library after constant uint256 array is supported/*** bancor formula by bancor* https://github.com/bancorprotocol/contracts* Modified from the original by Slava Balasanov* Split Power.sol out from BancorFormula.sol* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;* and to You under the Apache License, Version 2.0. "*/contract Power {uint256 private constant ONE = 1;uint32 private constant MAX_WEIGHT = 1000000;uint8 private constant MIN_PRECISION = 32;uint8 private constant MAX_PRECISION = 127;/*** The values below depend on MAX_PRECISION. If you choose to change it:* Apply the same change in file 'PrintIntScalingFactors.py', run it and paste the results below.*/uint256 private constant FIXED_1 = 0x080000000000000000000000000000000;uint256 private constant FIXED_2 = 0x100000000000000000000000000000000;uint256 private constant MAX_NUM = 0x1ffffffffffffffffffffffffffffffff;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)pragma solidity ^0.8.20;import {Panic} from "../Panic.sol";import {SafeCast} from "./SafeCast.sol";/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Floor, // Toward negative infinityCeil, // Toward positive infinityTrunc, // Toward zeroExpand // Away from zero}/*** @dev Returns the addition of two unsigned integers, with an success flag (no overflow).*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {unchecked {uint256 c = a + b;if (c < a) return (false, 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity >=0.8.4;/// @notice Emitted when the result overflows uint256.error PRBMath__MulDivFixedPointOverflow(uint256 prod1);/// @notice Emitted when the result overflows uint256.error PRBMath__MulDivOverflow(uint256 prod1, uint256 denominator);/// @notice Emitted when one of the inputs is type(int256).min.error PRBMath__MulDivSignedInputTooSmall();/// @notice Emitted when the intermediary absolute result overflows int256.error PRBMath__MulDivSignedOverflow(uint256 rAbs);/// @notice Emitted when the input is MIN_SD59x18.error PRBMathSD59x18__AbsInputTooSmall();/// @notice Emitted when ceiling a number overflows SD59x18.error PRBMathSD59x18__CeilOverflow(int256 x);/// @notice Emitted when one of the inputs is MIN_SD59x18.error PRBMathSD59x18__DivInputTooSmall();/// @notice Emitted when one of the intermediary unsigned results overflows SD59x18.error PRBMathSD59x18__DivOverflow(uint256 rAbs);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.0;import "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC20 standard.** _Available since v4.1._*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.20;import {IERC165} from "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC-721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)pragma solidity ^0.8.20;/*** @dev Helper library for emitting standardized panic codes.** ```solidity* contract Example {* using Panic for uint256;** // Use any of the declared internal constants* function foo() { Panic.GENERIC.panic(); }** // Alternatively* function foo() { Panic.panic(Panic.GENERIC); }* }* ```** Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].** _Available since v5.1._*/// slither-disable-next-line unused-statelibrary Panic {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such 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 SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526{"remappings": ["@uniswap/v3-core/=lib/v3-core/contracts/","@uniswap/v3-periphery/=lib/v3-periphery/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","v3-core/=lib/v3-core/","v3-periphery/=lib/v3-periphery/contracts/"],"optimizer": {"enabled": true,"runs": 200},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_positionManager","type":"address"},{"internalType":"address","name":"_bancorFormula","type":"address"},{"internalType":"address payable","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedToSendEth","type":"error"},{"inputs":[],"name":"InsufficientPoolbalance","type":"error"},{"inputs":[],"name":"InvalidLpFeePercentage","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"MaxPoolBalanceReached","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"TokenAlreadyListed","type":"error"},{"inputs":[],"name":"TokenDoesNotExist","type":"error"},{"inputs":[],"name":"TokenTransferFailed","type":"error"},{"inputs":[],"name":"ZeroEthSent","type":"error"},{"inputs":[],"name":"ZeroTokenAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"TokensSold","type":"event"},{"inputs":[],"name":"POOL_FEE","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateCurvedBuyReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"calculateCurvedSellReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"create","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getCurrentTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionManager","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bancorFormula","type":"address"}],"name":"setBancorFormula","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPoolBalance","type":"uint256"}],"name":"setMaxPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPositionManager","type":"address"}],"name":"setPositionManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"contract Token","name":"token","type":"address"},{"internalType":"uint256","name":"tokenbalance","type":"uint256"},{"internalType":"uint256","name":"ethBalance","type":"uint256"},{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniFactory","outputs":[{"internalType":"contract IUniswapV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405269032d26d12e980b60000060075561dead608052348015610023575f5ffd5b50604051613b35380380613b35833981016040819052610042916101fb565b61004b33610195565b60018055600380546001600160a01b038086166001600160a01b031992831681179093556002805486831690841617905560088054918516919092161790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156100c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e79190610245565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610148573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016c9190610245565b600480546001600160a01b0319166001600160a01b039290921691909117905550610267915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101f8575f5ffd5b50565b5f5f5f6060848603121561020d575f5ffd5b8351610218816101e4565b6020850151909350610229816101e4565b604085015190925061023a816101e4565b809150509250925092565b5f60208284031215610255575f5ffd5b8151610260816101e4565b9392505050565b6080516138b961027c5f395f50506138b95ff3fe60806040526004361061011e575f3560e01c8063791b98bc1161009d578063ddf731f311610062578063ddf731f31461032f578063e48603391461034e578063e74b981b146103d9578063f088d547146103f8578063f2fde38b1461040b575f5ffd5b8063791b98bc1461028d5780638da5cb5b146102ac5780638e72b23f146102c8578063be33f6bd146102e7578063dd1b9c4a14610306575f5ffd5b80635760f2e3116100e35780635760f2e3146101fd5780636c197ff51461021c578063715018a61461023b57806376771d4b1461024f57806376f728d81461026e575f5ffd5b806309f72da314610129578063198e2b8a1461015b57806331f3efba146101705780633fc8cef31461018f57806341528e72146101c6575f5ffd5b3661012557005b5f5ffd5b348015610134575f5ffd5b506101486101433660046124e4565b61042a565b6040519081526020015b60405180910390f35b61016e610169366004612544565b6105aa565b005b34801561017b575f5ffd5b5061014861018a3660046125b0565b6107dc565b34801561019a575f5ffd5b506004546101ae906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b3480156101d1575f5ffd5b506101486101e03660046124e4565b6001600160a01b03165f9081526006602052604090206002015490565b348015610208575f5ffd5b5061016e6102173660046124e4565b610989565b348015610227575f5ffd5b5061016e6102363660046125b0565b610ab4565b348015610246575f5ffd5b5061016e610e5c565b34801561025a575f5ffd5b506005546101ae906001600160a01b031681565b348015610279575f5ffd5b5061016e6102883660046125da565b610e6f565b348015610298575f5ffd5b506003546101ae906001600160a01b031681565b3480156102b7575f5ffd5b505f546001600160a01b03166101ae565b3480156102d3575f5ffd5b5061016e6102e23660046124e4565b610e7c565b3480156102f2575f5ffd5b506101486103013660046125b0565b610ea6565b348015610311575f5ffd5b5061031b61271081565b60405162ffffff9091168152602001610152565b34801561033a575f5ffd5b5061016e6103493660046124e4565b61103d565b348015610359575f5ffd5b506103a36103683660046124e4565b60066020525f908152604090208054600182015460028301546003909301546001600160a01b0392831693919260ff82169161010090041685565b604080516001600160a01b039687168152602081019590955284019290925215156060830152909116608082015260a001610152565b3480156103e4575f5ffd5b5061016e6103f33660046124e4565b6110c3565b61016e6104063660046124e4565b611114565b348015610416575f5ffd5b5061016e6104253660046124e4565b611636565b6001600160a01b038082165f90815260066020526040812080549192909116806104675760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561048d57604051636f555ee160e11b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff91906125f1565b610509919061261c565b9050805f0361051e57505f9695505050505050565b600254604051631a8ca49b60e21b81526004810185905260248101839052670de0b6b3a764000060448201525f916001600160a01b031690636a32926c90606401602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e91906125f1565b98975050505050505050565b6105b26116b1565b5f848484846040516105c3906124c3565b6105d09493929190612657565b604051809103905ff0801580156105e9573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038381168083525f6020808501828152858701838152606087018481523360808901908152868652600690945293889020965187546001600160a01b0319169087161787559051600187015551600286015590516003909401805491516001600160a81b0319909216941515610100600160a81b03191694909417610100919093160291909117909155905163aa60b06b60e01b8152306004820152919250829163aa60b06b906024015f604051808303815f87803b1580156106bc575f5ffd5b505af11580156106ce573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f92506001600160a01b03851691506370a0823190602401602060405180830381865afa158015610716573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a91906125f1565b9050805f0361075c5760405163022e258160e11b815260040160405180910390fd5b6001600160a01b0382165f8181526006602052604090819020600101839055513391907fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4906107b2908b908b908b908b90612657565b60405180910390a334156107ca576107ca82346116db565b5050506107d660018055565b50505050565b6001600160a01b038083165f90815260066020526040812080549192909116806108195760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561083f57604051636f555ee160e11b815260040160405180910390fd5b835f0361085f576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d191906125f1565b6108db919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018a90529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610935573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095991906125f1565b90505f61096d82662386f26fc10000611ad0565b9050610979818361261c565b9750505050505050505b92915050565b610991611af5565b600380546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156109e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612688565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a919190612688565b600480546001600160a01b0319166001600160a01b039290921691909117905550565b610abc6116b1565b6001600160a01b038083165f908152600660205260409020805490911680610af75760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610b1d57604051636f555ee160e11b815260040160405180910390fd5b825f03610b3d576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf91906125f1565b610bb9919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018990529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610c13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3791906125f1565b90505f610c4b82662386f26fc10000611ad0565b90505f610c58828461261c565b905082861015610c7b5760405163f8ffc0af60e01b815260040160405180910390fd5b60028801805484900390556001880180548a0190558115610d09576008546040515f916001600160a01b03169084908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d0757604051633fa2a53d60e21b815260040160405180910390fd5b505b6040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b038816906323b872dd906064016020604051808303815f875af1158015610d59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7d91906126a3565b610d9a5760405163022e258160e11b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dd9576040519150601f19603f3d011682016040523d82523d5f602084013e610dde565b606091505b5050905080610e0057604051633fa2a53d60e21b815260040160405180910390fd5b604080518b81526020810184905233916001600160a01b038e16917f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f3290910160405180910390a3505050505050505050610e5860018055565b5050565b610e64611af5565b610e6d5f611b4e565b565b610e77611af5565b600755565b610e84611af5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083165f9081526006602052604081208054919290911680610ee35760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610f0957604051636f555ee160e11b815260040160405180910390fd5b835f03610f2957604051631412d90760e31b815260040160405180910390fd5b60028201545f610f4086662386f26fc10000611ad0565b90505f610f4d828861261c565b90505f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f95573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb991906125f1565b610fc3919061261c565b6002546040516388dc874360e01b81526004810188905260248101839052604481018690529192506001600160a01b0316906388dc874390606401602060405180830381865afa158015611019573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097991906125f1565b611045611af5565b61104d6116b1565b6001600160a01b038082165f90815260066020526040902080549091166110875760405163677510db60e11b815260040160405180910390fd5b600381015460ff16156110ad57604051636f555ee160e11b815260040160405180910390fd5b6110b682611b9d565b506110c060018055565b50565b6110cb611af5565b6001600160a01b0381166110f257604051634e46966960e11b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61111c6116b1565b6001600160a01b038082165f9081526006602052604090208054909116806111575760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561117d57604051636f555ee160e11b815260040160405180910390fd5b345f0361119d57604051631412d90760e31b815260040160405180910390fd5b60028201546007545f906064906111b59060636126c2565b6111bf91906126d9565b90505f8282116111cf575f6111d9565b6111d9838361261c565b9050805f036111fb5760405163261db8dd60e21b815260040160405180910390fd5b5f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611241573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906125f1565b61126f919061261c565b90505f61128b662386f26fc10000670de0b6b3a764000061261c565b90505f816112a186670de0b6b3a76400006126c2565b6112ab91906126d9565b90505f8134116112bb57346112bd565b815b90505f6112d182662386f26fc10000611ad0565b90505f6112de828461261c565b6002546040516388dc874360e01b8152600481018d905260248101899052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa158015611338573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135c91906125f1565b9050878111156114025750600254604051631a8ca49b60e21b8152600481018c9052602481018890526044810189905288916001600160a01b031690636a32926c90606401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906125f1565b91506113f382662386f26fc10000611ad0565b92506113ff83836126f8565b93505b61140c828c6126f8565b60028e015560018d015461142190829061261c565b60018e0155821561149f576008546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611476576040519150601f19603f3d011682016040523d82523d5f602084013e61147b565b606091505b505090508061149d57604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b038d169063a9059cbb906044016020604051808303815f875af11580156114e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906126a3565b61152a5760405163022e258160e11b815260040160405180910390fd5b5f843411611538575f611542565b611542853461261c565b905080156115b2576040515f90339083908381818185875af1925050503d805f8114611589576040519150601f19603f3d011682016040523d82523d5f602084013e61158e565b606091505b50509050806115b057604051633fa2a53d60e21b815260040160405180910390fd5b505b336001600160a01b03168f6001600160a01b03167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c8585604051611600929190918252602082015260400190565b60405180910390a36116118e612299565b1561161f5761161f8f611b9d565b50505050505050505050505050506110c060018055565b61163e611af5565b6001600160a01b0381166116a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6110c081611b4e565b6002600154036116d457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6001600160a01b038083165f9081526006602090815260408083208054600282015460018301548451634c0abcdb60e01b815294519397929092169590949193909284928792634c0abcdb92600480830193928290030181865afa158015611745573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176991906125f1565b611773919061261c565b90505f61178787662386f26fc10000611ad0565b90505f611794828961261c565b6002546040516388dc874360e01b81526004810188905260248101869052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa1580156117ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181291906125f1565b9050848111156118ac5750600254604051631a8ca49b60e21b815260048101879052602481018590526044810186905285916001600160a01b031690636a32926c90606401602060405180830381865afa158015611872573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189691906125f1565b91506118a982662386f26fc10000611ad0565b92505b81886002015f8282546118bf91906126f8565b9250508190555080886001015f8282546118d9919061261c565b90915550508215611957576008546040515f916001600160a01b03169085908381818185875af1925050503d805f811461192e576040519150601f19603f3d011682016040523d82523d5f602084013e611933565b606091505b505090508061195557604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0388169063a9059cbb906044016020604051808303815f875af11580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906126a3565b6119e25760405163022e258160e11b815260040160405180910390fd5b5f6119ed84846126f8565b8a116119f9575f611a0d565b611a0384846126f8565b611a0d908b61261c565b90508015611a7d576040515f90339083908381818185875af1925050503d805f8114611a54576040519150601f19603f3d011682016040523d82523d5f602084013e611a59565b606091505b5050905080611a7b57604051633fa2a53d60e21b815260040160405180910390fd5b505b604080518481526020810184905233916001600160a01b038e16917fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c910160405180910390a35050505050505050505050565b5f670de0b6b3a7640000611ae483856126c2565b611aee91906126d9565b9392505050565b5f546001600160a01b03163314610e6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161169f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038082165f908152600660205260409020805460038201549192169060ff1615611be157604051636f555ee160e11b815260040160405180910390fd5b600282015468bdbc41e0348b3000008110611d0f57611c0968bdbc41e0348b3000008261261c565b60038401546040519192505f916101009091046001600160a01b031690685150ae84a8cdf00000908381818185875af1925050503d805f8114611c67576040519150601f19603f3d011682016040523d82523d5f602084013e611c6c565b606091505b5050905080611c8e57604051633fa2a53d60e21b815260040160405180910390fd5b6008546040515f916001600160a01b031690686c6b935b8bbd400000908381818185875af1925050503d805f8114611ce1576040519150601f19603f3d011682016040523d82523d5f602084013e611ce6565b606091505b5050905080611d0857604051633fa2a53d60e21b815260040160405180910390fd5b5050611d28565b60405163f8ffc0af60e01b815260040160405180910390fd5b6040516327b7784d60e11b81523060048201526001600160a01b03831690634f6ef09a906024015f604051808303815f87803b158015611d66575f5ffd5b505af1158015611d78573d5f5f3e3d5ffd5b505050505f8360010154836001600160a01b031663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de291906125f1565b611dec91906126f8565b5f60018087018290556002870182905560038701805460ff191690911790556004805460408051630d0e30db60e41b815290519495506001600160a01b039091169363d0e30db09387938381019391929182900301818588803b158015611e51575f5ffd5b505af1158015611e63573d5f5f3e3d5ffd5b5050600454600354611e8694506001600160a01b039182169350169050846122d4565b600354611e9e9084906001600160a01b0316836122d4565b600480546040516370a0823160e01b8152309281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d91906125f1565b1015611f5b5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e636500000000000000604482015260640161169f565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc391906125f1565b10156120115760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015260640161169f565b600354600480546040516309f56ab160e11b81526001600160a01b0391821692810192909252878116602483015261271060448301526ca2940e609a4ffea220fb79e5b26064830152909116906313ead562906084016020604051808303815f875af1158015612083573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a79190612688565b506040805161016081018252600480546001600160a01b039081168352888116602084015261271083850152620d899f196060840152620d89a0608084015260a0830186905260c083018590525f60e084018190526101008085018290526003808b015491909104831661012086015242610140860152549451634418b22b60e11b81529394909384938493929092169163883164569161214a9188910161270b565b6080604051808303815f875af1158015612166573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906127cf565b935093505092505f828761219e919061261c565b90505f6121ab838861261c565b9050811561222f576004546003546121d0916001600160a01b0390811691165f6122d4565b60048054604051632e1a7d4d60e01b81529182018490526001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015612211575f5ffd5b505af1158015612223573d5f5f3e3d5ffd5b5050505060028a018290555b8015612248576122408930836123cf565b60018a018190555b60408051858152602081018590526001600160a01b038d16917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a25050505050505050505050565b5f5f606460075460636122ac91906126c2565b6122b691906126d9565b905082600101545f1480611aee575080836002015410159392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f9283929087169161232f919061281f565b5f604051808303815f865af19150503d805f8114612368576040519150601f19603f3d011682016040523d82523d5f602084013e61236d565b606091505b509150915081801561239757508051158061239757508080602001905181019061239791906126a3565b6123c85760405162461bcd60e51b8152602060048201526002602482015261534160f01b604482015260640161169f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161242a919061281f565b5f604051808303815f865af19150503d805f8114612463576040519150601f19603f3d011682016040523d82523d5f602084013e612468565b606091505b509150915081801561249257508051158061249257508080602001905181019061249291906126a3565b6123c85760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161169f565b61104e8061283683390190565b6001600160a01b03811681146110c0575f5ffd5b5f602082840312156124f4575f5ffd5b8135611aee816124d0565b5f5f83601f84011261250f575f5ffd5b50813567ffffffffffffffff811115612526575f5ffd5b60208301915083602082850101111561253d575f5ffd5b9250929050565b5f5f5f5f60408587031215612557575f5ffd5b843567ffffffffffffffff81111561256d575f5ffd5b612579878288016124ff565b909550935050602085013567ffffffffffffffff811115612598575f5ffd5b6125a4878288016124ff565b95989497509550505050565b5f5f604083850312156125c1575f5ffd5b82356125cc816124d0565b946020939093013593505050565b5f602082840312156125ea575f5ffd5b5035919050565b5f60208284031215612601575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561098357610983612608565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61266a60408301868861262f565b828103602084015261267d81858761262f565b979650505050505050565b5f60208284031215612698575f5ffd5b8151611aee816124d0565b5f602082840312156126b3575f5ffd5b81518015158114611aee575f5ffd5b808202811582820484141761098357610983612608565b5f826126f357634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098357610983612608565b81516001600160a01b031681526101608101602083015161273760208401826001600160a01b03169052565b50604083015161274e604084018262ffffff169052565b506060830151612763606084018260020b9052565b506080830151612778608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516127bf6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f608085870312156127e2575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612809575f5ffd5b6040860151606090960151949790965092505050565b5f82518060208501845e5f92019182525091905056fe608060405234801561000f575f5ffd5b5060405161104e38038061104e83398101604081905261002e91610237565b8181600361003c838261031f565b506004610049828261031f565b50505061006261005d61007f60201b60201c565b610083565b610078306b033b2e3c9fd0803ce80000006100d4565b50506103fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661012e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f82825461013f91906103d9565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101bd575f5ffd5b81516001600160401b038111156101d6576101d661019a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102045761020461019a565b60405281815283820160200185101561021b575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215610248575f5ffd5b82516001600160401b0381111561025d575f5ffd5b610269858286016101ae565b602085015190935090506001600160401b03811115610286575f5ffd5b610292858286016101ae565b9150509250929050565b600181811c908216806102b057607f821691505b6020821081036102ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561019557805f5260205f20601f840160051c810160208510156102f95750805b601f840160051c820191505b81811015610318575f8155600101610305565b5050505050565b81516001600160401b038111156103385761033861019a565b61034c81610346845461029c565b846102d4565b6020601f82116001811461037e575f83156103675750848201515b5f19600385901b1c1916600184901b178455610318565b5f84815260208120601f198516915b828110156103ad578785015182556020948501946001909201910161038d565b50848210156103ca57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103f857634e487b7160e01b5f52601160045260245ffd5b92915050565b610c438061040b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c806370a08231116100b457806395d89b411161007957806395d89b411461027c578063a457c2d714610284578063a9059cbb14610297578063aa60b06b146102aa578063dd62ed3e146102bd578063f2fde38b146102d0575f5ffd5b806370a082311461020b578063715018a61461023357806379cc67901461023b5780638da5cb5b1461024e578063902d55a514610269575f5ffd5b806339509351116100fa57806339509351146101ab57806342966c68146101be5780634c0abcdb146101d35780634f6ef09a146101e6578063670171fd146101f9575f5ffd5b806306fdde0314610136578063095ea7b31461015457806318160ddd1461017757806323b872dd14610189578063313ce5671461019c575b5f5ffd5b61013e6102e3565b60405161014b9190610a9c565b60405180910390f35b610167610162366004610aec565b610373565b604051901515815260200161014b565b6002545b60405190815260200161014b565b610167610197366004610b14565b61038c565b6040516012815260200161014b565b6101676101b9366004610aec565b6103af565b6101d16101cc366004610b4e565b6103d0565b005b61017b6b024306c4097859c43c00000081565b6101d16101f4366004610b65565b6103dd565b61017b6af8277896582678ac00000081565b61017b610219366004610b65565b6001600160a01b03165f9081526020819052604090205490565b6101d16103fb565b6101d1610249366004610aec565b61040e565b6005546040516001600160a01b03909116815260200161014b565b61017b6b033b2e3c9fd0803ce800000081565b61013e61041c565b610167610292366004610aec565b61042b565b6101676102a5366004610aec565b6104aa565b6101d16102b8366004610b65565b6104b7565b61017b6102cb366004610b85565b6104d6565b6101d16102de366004610b65565b610500565b6060600380546102f290610bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90610bb6565b80156103695780601f1061034057610100808354040283529160200191610369565b820191905f5260205f20905b81548152906001019060200180831161034c57829003601f168201915b5050505050905090565b5f33610380818585610576565b60019150505b92915050565b5f3361039985828561069a565b6103a4858585610712565b506001949350505050565b5f336103808185856103c183836104d6565b6103cb9190610bee565b610576565b6103da33826108b4565b50565b6103e56109dc565b6103da30826af8277896582678ac000000610712565b6104036109dc565b61040c5f610a36565b565b6104188282610a87565b5050565b6060600480546102f290610bb6565b5f338161043882866104d6565b90508381101561049d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a48286868403610576565b5f33610380818585610712565b6104bf6109dc565b6103da30826b024306c4097859c43c000000610712565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6105086109dc565b6001600160a01b03811661056d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610494565b6103da81610a36565b6001600160a01b0383166105d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610494565b6001600160a01b0382166106395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610494565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6106a584846104d6565b90505f19811461070c57818110156106ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610494565b61070c8484848403610576565b50505050565b6001600160a01b0383166107765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610494565b6001600160a01b0382166107d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610494565b6001600160a01b0383165f908152602081905260409020548181101561084f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610494565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070c565b6001600160a01b0382166109145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610494565b6001600160a01b0382165f90815260208190526040902054818110156109875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610494565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161068d565b6005546001600160a01b0316331461040c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610494565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610a9282338361069a565b61041882826108b4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ae7575f5ffd5b919050565b5f5f60408385031215610afd575f5ffd5b610b0683610ad1565b946020939093013593505050565b5f5f5f60608486031215610b26575f5ffd5b610b2f84610ad1565b9250610b3d60208501610ad1565b929592945050506040919091013590565b5f60208284031215610b5e575f5ffd5b5035919050565b5f60208284031215610b75575f5ffd5b610b7e82610ad1565b9392505050565b5f5f60408385031215610b96575f5ffd5b610b9f83610ad1565b9150610bad60208401610ad1565b90509250929050565b600181811c90821680610bca57607f821691505b602082108103610be857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561038657634e487b7160e01b5f52601160045260245ffdfea2646970667358221220fb937a04e79ffbdd252df5bc904c3a65d8caabf1b3fed81da74e6f7b40dd294f64736f6c634300081c0033a26469706673582212203d8344e6ab9f47c482f09a0edaaaff677a048deee524375d9488dc6bfcc5d99164736f6c634300081c003300000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d6900000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e0290000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e
Deployed Bytecode
0x60806040526004361061011e575f3560e01c8063791b98bc1161009d578063ddf731f311610062578063ddf731f31461032f578063e48603391461034e578063e74b981b146103d9578063f088d547146103f8578063f2fde38b1461040b575f5ffd5b8063791b98bc1461028d5780638da5cb5b146102ac5780638e72b23f146102c8578063be33f6bd146102e7578063dd1b9c4a14610306575f5ffd5b80635760f2e3116100e35780635760f2e3146101fd5780636c197ff51461021c578063715018a61461023b57806376771d4b1461024f57806376f728d81461026e575f5ffd5b806309f72da314610129578063198e2b8a1461015b57806331f3efba146101705780633fc8cef31461018f57806341528e72146101c6575f5ffd5b3661012557005b5f5ffd5b348015610134575f5ffd5b506101486101433660046124e4565b61042a565b6040519081526020015b60405180910390f35b61016e610169366004612544565b6105aa565b005b34801561017b575f5ffd5b5061014861018a3660046125b0565b6107dc565b34801561019a575f5ffd5b506004546101ae906001600160a01b031681565b6040516001600160a01b039091168152602001610152565b3480156101d1575f5ffd5b506101486101e03660046124e4565b6001600160a01b03165f9081526006602052604090206002015490565b348015610208575f5ffd5b5061016e6102173660046124e4565b610989565b348015610227575f5ffd5b5061016e6102363660046125b0565b610ab4565b348015610246575f5ffd5b5061016e610e5c565b34801561025a575f5ffd5b506005546101ae906001600160a01b031681565b348015610279575f5ffd5b5061016e6102883660046125da565b610e6f565b348015610298575f5ffd5b506003546101ae906001600160a01b031681565b3480156102b7575f5ffd5b505f546001600160a01b03166101ae565b3480156102d3575f5ffd5b5061016e6102e23660046124e4565b610e7c565b3480156102f2575f5ffd5b506101486103013660046125b0565b610ea6565b348015610311575f5ffd5b5061031b61271081565b60405162ffffff9091168152602001610152565b34801561033a575f5ffd5b5061016e6103493660046124e4565b61103d565b348015610359575f5ffd5b506103a36103683660046124e4565b60066020525f908152604090208054600182015460028301546003909301546001600160a01b0392831693919260ff82169161010090041685565b604080516001600160a01b039687168152602081019590955284019290925215156060830152909116608082015260a001610152565b3480156103e4575f5ffd5b5061016e6103f33660046124e4565b6110c3565b61016e6104063660046124e4565b611114565b348015610416575f5ffd5b5061016e6104253660046124e4565b611636565b6001600160a01b038082165f90815260066020526040812080549192909116806104675760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561048d57604051636f555ee160e11b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff91906125f1565b610509919061261c565b9050805f0361051e57505f9695505050505050565b600254604051631a8ca49b60e21b81526004810185905260248101839052670de0b6b3a764000060448201525f916001600160a01b031690636a32926c90606401602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e91906125f1565b98975050505050505050565b6105b26116b1565b5f848484846040516105c3906124c3565b6105d09493929190612657565b604051809103905ff0801580156105e9573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038381168083525f6020808501828152858701838152606087018481523360808901908152868652600690945293889020965187546001600160a01b0319169087161787559051600187015551600286015590516003909401805491516001600160a81b0319909216941515610100600160a81b03191694909417610100919093160291909117909155905163aa60b06b60e01b8152306004820152919250829163aa60b06b906024015f604051808303815f87803b1580156106bc575f5ffd5b505af11580156106ce573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201525f92506001600160a01b03851691506370a0823190602401602060405180830381865afa158015610716573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a91906125f1565b9050805f0361075c5760405163022e258160e11b815260040160405180910390fd5b6001600160a01b0382165f8181526006602052604090819020600101839055513391907fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4906107b2908b908b908b908b90612657565b60405180910390a334156107ca576107ca82346116db565b5050506107d660018055565b50505050565b6001600160a01b038083165f90815260066020526040812080549192909116806108195760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561083f57604051636f555ee160e11b815260040160405180910390fd5b835f0361085f576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d191906125f1565b6108db919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018a90529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610935573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095991906125f1565b90505f61096d82662386f26fc10000611ad0565b9050610979818361261c565b9750505050505050505b92915050565b610991611af5565b600380546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156109e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612688565b60055f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a919190612688565b600480546001600160a01b0319166001600160a01b039290921691909117905550565b610abc6116b1565b6001600160a01b038083165f908152600660205260409020805490911680610af75760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610b1d57604051636f555ee160e11b815260040160405180910390fd5b825f03610b3d576040516382c4a8c960e01b815260040160405180910390fd5b5f826002015490505f836001015490505f81846001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610baf91906125f1565b610bb9919061261c565b600254604051633696fd2560e11b81526004810186905260248101839052604481018990529192505f916001600160a01b0390911690636d2dfa4a90606401602060405180830381865afa158015610c13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3791906125f1565b90505f610c4b82662386f26fc10000611ad0565b90505f610c58828461261c565b905082861015610c7b5760405163f8ffc0af60e01b815260040160405180910390fd5b60028801805484900390556001880180548a0190558115610d09576008546040515f916001600160a01b03169084908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d0757604051633fa2a53d60e21b815260040160405180910390fd5b505b6040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b038816906323b872dd906064016020604051808303815f875af1158015610d59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7d91906126a3565b610d9a5760405163022e258160e11b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dd9576040519150601f19603f3d011682016040523d82523d5f602084013e610dde565b606091505b5050905080610e0057604051633fa2a53d60e21b815260040160405180910390fd5b604080518b81526020810184905233916001600160a01b038e16917f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f3290910160405180910390a3505050505050505050610e5860018055565b5050565b610e64611af5565b610e6d5f611b4e565b565b610e77611af5565b600755565b610e84611af5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083165f9081526006602052604081208054919290911680610ee35760405163677510db60e11b815260040160405180910390fd5b600382015460ff1615610f0957604051636f555ee160e11b815260040160405180910390fd5b835f03610f2957604051631412d90760e31b815260040160405180910390fd5b60028201545f610f4086662386f26fc10000611ad0565b90505f610f4d828861261c565b90505f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f95573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb991906125f1565b610fc3919061261c565b6002546040516388dc874360e01b81526004810188905260248101839052604481018690529192506001600160a01b0316906388dc874390606401602060405180830381865afa158015611019573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097991906125f1565b611045611af5565b61104d6116b1565b6001600160a01b038082165f90815260066020526040902080549091166110875760405163677510db60e11b815260040160405180910390fd5b600381015460ff16156110ad57604051636f555ee160e11b815260040160405180910390fd5b6110b682611b9d565b506110c060018055565b50565b6110cb611af5565b6001600160a01b0381166110f257604051634e46966960e11b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61111c6116b1565b6001600160a01b038082165f9081526006602052604090208054909116806111575760405163677510db60e11b815260040160405180910390fd5b600382015460ff161561117d57604051636f555ee160e11b815260040160405180910390fd5b345f0361119d57604051631412d90760e31b815260040160405180910390fd5b60028201546007545f906064906111b59060636126c2565b6111bf91906126d9565b90505f8282116111cf575f6111d9565b6111d9838361261c565b9050805f036111fb5760405163261db8dd60e21b815260040160405180910390fd5b5f856001015490505f81866001600160a01b0316634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611241573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906125f1565b61126f919061261c565b90505f61128b662386f26fc10000670de0b6b3a764000061261c565b90505f816112a186670de0b6b3a76400006126c2565b6112ab91906126d9565b90505f8134116112bb57346112bd565b815b90505f6112d182662386f26fc10000611ad0565b90505f6112de828461261c565b6002546040516388dc874360e01b8152600481018d905260248101899052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa158015611338573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135c91906125f1565b9050878111156114025750600254604051631a8ca49b60e21b8152600481018c9052602481018890526044810189905288916001600160a01b031690636a32926c90606401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906125f1565b91506113f382662386f26fc10000611ad0565b92506113ff83836126f8565b93505b61140c828c6126f8565b60028e015560018d015461142190829061261c565b60018e0155821561149f576008546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611476576040519150601f19603f3d011682016040523d82523d5f602084013e61147b565b606091505b505090508061149d57604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b038d169063a9059cbb906044016020604051808303815f875af11580156114e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906126a3565b61152a5760405163022e258160e11b815260040160405180910390fd5b5f843411611538575f611542565b611542853461261c565b905080156115b2576040515f90339083908381818185875af1925050503d805f8114611589576040519150601f19603f3d011682016040523d82523d5f602084013e61158e565b606091505b50509050806115b057604051633fa2a53d60e21b815260040160405180910390fd5b505b336001600160a01b03168f6001600160a01b03167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c8585604051611600929190918252602082015260400190565b60405180910390a36116118e612299565b1561161f5761161f8f611b9d565b50505050505050505050505050506110c060018055565b61163e611af5565b6001600160a01b0381166116a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6110c081611b4e565b6002600154036116d457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6001600160a01b038083165f9081526006602090815260408083208054600282015460018301548451634c0abcdb60e01b815294519397929092169590949193909284928792634c0abcdb92600480830193928290030181865afa158015611745573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061176991906125f1565b611773919061261c565b90505f61178787662386f26fc10000611ad0565b90505f611794828961261c565b6002546040516388dc874360e01b81526004810188905260248101869052604481018390529192505f916001600160a01b03909116906388dc874390606401602060405180830381865afa1580156117ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181291906125f1565b9050848111156118ac5750600254604051631a8ca49b60e21b815260048101879052602481018590526044810186905285916001600160a01b031690636a32926c90606401602060405180830381865afa158015611872573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189691906125f1565b91506118a982662386f26fc10000611ad0565b92505b81886002015f8282546118bf91906126f8565b9250508190555080886001015f8282546118d9919061261c565b90915550508215611957576008546040515f916001600160a01b03169085908381818185875af1925050503d805f811461192e576040519150601f19603f3d011682016040523d82523d5f602084013e611933565b606091505b505090508061195557604051633fa2a53d60e21b815260040160405180910390fd5b505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0388169063a9059cbb906044016020604051808303815f875af11580156119a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c591906126a3565b6119e25760405163022e258160e11b815260040160405180910390fd5b5f6119ed84846126f8565b8a116119f9575f611a0d565b611a0384846126f8565b611a0d908b61261c565b90508015611a7d576040515f90339083908381818185875af1925050503d805f8114611a54576040519150601f19603f3d011682016040523d82523d5f602084013e611a59565b606091505b5050905080611a7b57604051633fa2a53d60e21b815260040160405180910390fd5b505b604080518481526020810184905233916001600160a01b038e16917fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c910160405180910390a35050505050505050505050565b5f670de0b6b3a7640000611ae483856126c2565b611aee91906126d9565b9392505050565b5f546001600160a01b03163314610e6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161169f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038082165f908152600660205260409020805460038201549192169060ff1615611be157604051636f555ee160e11b815260040160405180910390fd5b600282015468bdbc41e0348b3000008110611d0f57611c0968bdbc41e0348b3000008261261c565b60038401546040519192505f916101009091046001600160a01b031690685150ae84a8cdf00000908381818185875af1925050503d805f8114611c67576040519150601f19603f3d011682016040523d82523d5f602084013e611c6c565b606091505b5050905080611c8e57604051633fa2a53d60e21b815260040160405180910390fd5b6008546040515f916001600160a01b031690686c6b935b8bbd400000908381818185875af1925050503d805f8114611ce1576040519150601f19603f3d011682016040523d82523d5f602084013e611ce6565b606091505b5050905080611d0857604051633fa2a53d60e21b815260040160405180910390fd5b5050611d28565b60405163f8ffc0af60e01b815260040160405180910390fd5b6040516327b7784d60e11b81523060048201526001600160a01b03831690634f6ef09a906024015f604051808303815f87803b158015611d66575f5ffd5b505af1158015611d78573d5f5f3e3d5ffd5b505050505f8360010154836001600160a01b031663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de291906125f1565b611dec91906126f8565b5f60018087018290556002870182905560038701805460ff191690911790556004805460408051630d0e30db60e41b815290519495506001600160a01b039091169363d0e30db09387938381019391929182900301818588803b158015611e51575f5ffd5b505af1158015611e63573d5f5f3e3d5ffd5b5050600454600354611e8694506001600160a01b039182169350169050846122d4565b600354611e9e9084906001600160a01b0316836122d4565b600480546040516370a0823160e01b8152309281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ee9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0d91906125f1565b1015611f5b5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e636500000000000000604482015260640161169f565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc391906125f1565b10156120115760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015260640161169f565b600354600480546040516309f56ab160e11b81526001600160a01b0391821692810192909252878116602483015261271060448301526ca2940e609a4ffea220fb79e5b26064830152909116906313ead562906084016020604051808303815f875af1158015612083573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a79190612688565b506040805161016081018252600480546001600160a01b039081168352888116602084015261271083850152620d899f196060840152620d89a0608084015260a0830186905260c083018590525f60e084018190526101008085018290526003808b015491909104831661012086015242610140860152549451634418b22b60e11b81529394909384938493929092169163883164569161214a9188910161270b565b6080604051808303815f875af1158015612166573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906127cf565b935093505092505f828761219e919061261c565b90505f6121ab838861261c565b9050811561222f576004546003546121d0916001600160a01b0390811691165f6122d4565b60048054604051632e1a7d4d60e01b81529182018490526001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015612211575f5ffd5b505af1158015612223573d5f5f3e3d5ffd5b5050505060028a018290555b8015612248576122408930836123cf565b60018a018190555b60408051858152602081018590526001600160a01b038d16917fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45910160405180910390a25050505050505050505050565b5f5f606460075460636122ac91906126c2565b6122b691906126d9565b905082600101545f1480611aee575080836002015410159392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f9283929087169161232f919061281f565b5f604051808303815f865af19150503d805f8114612368576040519150601f19603f3d011682016040523d82523d5f602084013e61236d565b606091505b509150915081801561239757508051158061239757508080602001905181019061239791906126a3565b6123c85760405162461bcd60e51b8152602060048201526002602482015261534160f01b604482015260640161169f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161242a919061281f565b5f604051808303815f865af19150503d805f8114612463576040519150601f19603f3d011682016040523d82523d5f602084013e612468565b606091505b509150915081801561249257508051158061249257508080602001905181019061249291906126a3565b6123c85760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161169f565b61104e8061283683390190565b6001600160a01b03811681146110c0575f5ffd5b5f602082840312156124f4575f5ffd5b8135611aee816124d0565b5f5f83601f84011261250f575f5ffd5b50813567ffffffffffffffff811115612526575f5ffd5b60208301915083602082850101111561253d575f5ffd5b9250929050565b5f5f5f5f60408587031215612557575f5ffd5b843567ffffffffffffffff81111561256d575f5ffd5b612579878288016124ff565b909550935050602085013567ffffffffffffffff811115612598575f5ffd5b6125a4878288016124ff565b95989497509550505050565b5f5f604083850312156125c1575f5ffd5b82356125cc816124d0565b946020939093013593505050565b5f602082840312156125ea575f5ffd5b5035919050565b5f60208284031215612601575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561098357610983612608565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f61266a60408301868861262f565b828103602084015261267d81858761262f565b979650505050505050565b5f60208284031215612698575f5ffd5b8151611aee816124d0565b5f602082840312156126b3575f5ffd5b81518015158114611aee575f5ffd5b808202811582820484141761098357610983612608565b5f826126f357634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098357610983612608565b81516001600160a01b031681526101608101602083015161273760208401826001600160a01b03169052565b50604083015161274e604084018262ffffff169052565b506060830151612763606084018260020b9052565b506080830151612778608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516127bf6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f5f5f5f608085870312156127e2575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff81168114612809575f5ffd5b6040860151606090960151949790965092505050565b5f82518060208501845e5f92019182525091905056fe608060405234801561000f575f5ffd5b5060405161104e38038061104e83398101604081905261002e91610237565b8181600361003c838261031f565b506004610049828261031f565b50505061006261005d61007f60201b60201c565b610083565b610078306b033b2e3c9fd0803ce80000006100d4565b50506103fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661012e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f82825461013f91906103d9565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101bd575f5ffd5b81516001600160401b038111156101d6576101d661019a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102045761020461019a565b60405281815283820160200185101561021b575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215610248575f5ffd5b82516001600160401b0381111561025d575f5ffd5b610269858286016101ae565b602085015190935090506001600160401b03811115610286575f5ffd5b610292858286016101ae565b9150509250929050565b600181811c908216806102b057607f821691505b6020821081036102ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561019557805f5260205f20601f840160051c810160208510156102f95750805b601f840160051c820191505b81811015610318575f8155600101610305565b5050505050565b81516001600160401b038111156103385761033861019a565b61034c81610346845461029c565b846102d4565b6020601f82116001811461037e575f83156103675750848201515b5f19600385901b1c1916600184901b178455610318565b5f84815260208120601f198516915b828110156103ad578785015182556020948501946001909201910161038d565b50848210156103ca57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103f857634e487b7160e01b5f52601160045260245ffd5b92915050565b610c438061040b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c806370a08231116100b457806395d89b411161007957806395d89b411461027c578063a457c2d714610284578063a9059cbb14610297578063aa60b06b146102aa578063dd62ed3e146102bd578063f2fde38b146102d0575f5ffd5b806370a082311461020b578063715018a61461023357806379cc67901461023b5780638da5cb5b1461024e578063902d55a514610269575f5ffd5b806339509351116100fa57806339509351146101ab57806342966c68146101be5780634c0abcdb146101d35780634f6ef09a146101e6578063670171fd146101f9575f5ffd5b806306fdde0314610136578063095ea7b31461015457806318160ddd1461017757806323b872dd14610189578063313ce5671461019c575b5f5ffd5b61013e6102e3565b60405161014b9190610a9c565b60405180910390f35b610167610162366004610aec565b610373565b604051901515815260200161014b565b6002545b60405190815260200161014b565b610167610197366004610b14565b61038c565b6040516012815260200161014b565b6101676101b9366004610aec565b6103af565b6101d16101cc366004610b4e565b6103d0565b005b61017b6b024306c4097859c43c00000081565b6101d16101f4366004610b65565b6103dd565b61017b6af8277896582678ac00000081565b61017b610219366004610b65565b6001600160a01b03165f9081526020819052604090205490565b6101d16103fb565b6101d1610249366004610aec565b61040e565b6005546040516001600160a01b03909116815260200161014b565b61017b6b033b2e3c9fd0803ce800000081565b61013e61041c565b610167610292366004610aec565b61042b565b6101676102a5366004610aec565b6104aa565b6101d16102b8366004610b65565b6104b7565b61017b6102cb366004610b85565b6104d6565b6101d16102de366004610b65565b610500565b6060600380546102f290610bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90610bb6565b80156103695780601f1061034057610100808354040283529160200191610369565b820191905f5260205f20905b81548152906001019060200180831161034c57829003601f168201915b5050505050905090565b5f33610380818585610576565b60019150505b92915050565b5f3361039985828561069a565b6103a4858585610712565b506001949350505050565b5f336103808185856103c183836104d6565b6103cb9190610bee565b610576565b6103da33826108b4565b50565b6103e56109dc565b6103da30826af8277896582678ac000000610712565b6104036109dc565b61040c5f610a36565b565b6104188282610a87565b5050565b6060600480546102f290610bb6565b5f338161043882866104d6565b90508381101561049d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6103a48286868403610576565b5f33610380818585610712565b6104bf6109dc565b6103da30826b024306c4097859c43c000000610712565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6105086109dc565b6001600160a01b03811661056d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610494565b6103da81610a36565b6001600160a01b0383166105d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610494565b6001600160a01b0382166106395760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610494565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6106a584846104d6565b90505f19811461070c57818110156106ff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610494565b61070c8484848403610576565b50505050565b6001600160a01b0383166107765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610494565b6001600160a01b0382166107d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610494565b6001600160a01b0383165f908152602081905260409020548181101561084f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610494565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070c565b6001600160a01b0382166109145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610494565b6001600160a01b0382165f90815260208190526040902054818110156109875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610494565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161068d565b6005546001600160a01b0316331461040c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610494565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610a9282338361069a565b61041882826108b4565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ae7575f5ffd5b919050565b5f5f60408385031215610afd575f5ffd5b610b0683610ad1565b946020939093013593505050565b5f5f5f60608486031215610b26575f5ffd5b610b2f84610ad1565b9250610b3d60208501610ad1565b929592945050506040919091013590565b5f60208284031215610b5e575f5ffd5b5035919050565b5f60208284031215610b75575f5ffd5b610b7e82610ad1565b9392505050565b5f5f60408385031215610b96575f5ffd5b610b9f83610ad1565b9150610bad60208401610ad1565b90509250929050565b600181811c90821680610bca57607f821691505b602082108103610be857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561038657634e487b7160e01b5f52601160045260245ffdfea2646970667358221220fb937a04e79ffbdd252df5bc904c3a65d8caabf1b3fed81da74e6f7b40dd294f64736f6c634300081c0033a26469706673582212203d8344e6ab9f47c482f09a0edaaaff677a048deee524375d9488dc6bfcc5d99164736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d6900000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e0290000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e
-----Decoded View---------------
Arg [0] : _positionManager (address): 0x77DcC9b09C6Ae94CDC726540735682A38e18d690
Arg [1] : _bancorFormula (address): 0x6F12d27C70d354d1D1a52FcBf16cfc9B62b2E029
Arg [2] : _feeRecipient (address): 0x3bEA4a7AA36C9E966c9e403B9Dc81871836B9A6e
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000077dcc9b09c6ae94cdc726540735682a38e18d690
Arg [1] : 0000000000000000000000006f12d27c70d354d1d1a52fcbf16cfc9b62b2e029
Arg [2] : 0000000000000000000000003bea4a7aa36c9e966c9e403b9dc81871836b9a6e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.