Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14881559 | 960 days ago | 0.03840384 ETH | ||||
14881528 | 960 days ago | 2 ETH | ||||
14881528 | 960 days ago | Contract Creation | 0 ETH | |||
14723319 | 986 days ago | 0.02807907 ETH | ||||
14723291 | 986 days ago | 5 ETH | ||||
14723291 | 986 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
proofTokenFactory
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-07 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.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. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/proofNonReflectionTokenFactory.sol interface IBURNER { function burnEmUp() external payable; } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); } interface ITeamFinanceLocker { function lockTokens(address _tokenAddress, address _withdrawalAddress, uint256 _amount, uint256 _unlockTime) external payable returns (uint256 _id); } interface ITokenCutter { function swapTradingStatus() external; function setLaunchedAt() external; function cancelToken() external; } library Fees { struct allFees { uint256 mainFee; uint256 mainFeeOnSell; uint256 lpFee; uint256 lpFeeOnSell; uint256 devFee; uint256 devFeeOnSell; } } contract TokenCutter is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; address payable public hldBurnerAddress; address public hldAdmin; bool public restrictWhales = true; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isDividendExempt; uint256 public launchedAt; uint256 public hldFee = 2; uint256 public mainFee; uint256 public lpFee; uint256 public devFee; uint256 public mainFeeOnSell; uint256 public lpFeeOnSell; uint256 public devFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address public factory; address public tokenOwner; address payable public devWallet; address payable public mainWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = true; mapping (address => bool) public bots; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; constructor (string memory tokenName, string memory tokenSymbol, uint256 initialSupply, address owner, address dev, address main, address routerAddress, address initialHldAdmin, address initialHldBurner, Fees.allFees memory fees) { _name = tokenName; _symbol = tokenSymbol; _totalSupply = initialSupply; //Tx & Wallet Limits _maxTxAmount = initialSupply * 2 / 200; _walletMax = initialSupply * 3 / 100; swapThreshold = initialSupply * 5 / 4000; router = IUniswapV2Router02(routerAddress); pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = type(uint256).max; factory = msg.sender; isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isFeeExempt[owner] = true; isTxLimitExempt[owner] = true; isTxLimitExempt[pair] = true; isTxLimitExempt[factory] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[ZERO] = true; //Fees lpFee = fees.lpFee; lpFeeOnSell = fees.lpFeeOnSell; devFee = fees.devFee; devFeeOnSell = fees.devFeeOnSell; mainFee = fees.mainFee; mainFeeOnSell = fees.mainFeeOnSell; totalFee = devFee.add(lpFee).add(mainFee).add(hldFee); totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(mainFeeOnSell).add(hldFee); require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 17, "Too high sell fee"); tokenOwner = owner; devWallet = payable(dev); mainWallet = payable(main); hldBurnerAddress = payable(initialHldBurner); hldAdmin = initialHldAdmin; //Initial supply uint256 forLP = initialSupply * 95 / 100; //95% uint256 forOwner = initialSupply - forLP; //5% _balances[msg.sender] += forLP; _balances[owner] += forOwner; emit Transfer(address(0), msg.sender, forLP); emit Transfer(address(0), owner, forOwner); } modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyHldAdmin() { require(hldAdmin == _msgSender(), "Ownable: caller is not the hldAdmin"); _; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFactory() { require(factory == _msgSender(), "Ownable: caller is not the factory"); _; } //hldAdmin functions function updateHldAdmin(address newAdmin) external virtual onlyHldAdmin { hldAdmin = newAdmin; } function updateHldBurnerAddress(address newhldBurnerAddress) external onlyHldAdmin { hldBurnerAddress = payable(newhldBurnerAddress); } function setBots(address[] memory bots_) external onlyHldAdmin { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } //Factory functions function swapTradingStatus() external onlyFactory { tradingStatus = !tradingStatus; } function setLaunchedAt() external onlyFactory { require(launchedAt == 0, "already launched"); launchedAt = block.timestamp; } function cancelToken() external onlyFactory { isFeeExempt[address(router)] = true; isTxLimitExempt[address(router)] = true; isTxLimitExempt[tokenOwner] = true; tradingStatus = true; } //Owner functions function changeFees(uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell) external onlyOwner { mainFee = initialMainFee; lpFee = initialLpFee; devFee = initialDevFee; mainFeeOnSell = initialMainFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; totalFee = devFee.add(lpFee).add(hldFee).add(mainFee); totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(hldFee).add(mainFeeOnSell); require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 17, "Too high fee"); } function changeTxLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 24 hours, "too soon"); _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 24 hours, "too soon"); _walletMax = newLimit; } function changeRestrictWhales(bool newValue) external onlyOwner { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 24 hours, "too soon"); restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 24 hours, "too soon"); isTxLimitExempt[holder] = exempt; } function reduceHldFee() external onlyOwner { require(hldFee == 2, "!already reduced"); require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 72 hours, "too soon"); hldFee = 1; totalFee = devFee.add(lpFee).add(hldFee).add(mainFee); totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(hldFee).add(mainFeeOnSell); } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setMainWallet(address payable newMainWallet) external onlyOwner { mainWallet = newMainWallet; } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function delBot(address notbot) external onlyOwner { bots[notbot] = false; } function getCirculatingSupply() external view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) { require(tradingStatus, "Trading Closed"); require(!bots[sender] && !bots[recipient]); if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } require(amount <= _maxTxAmount || isTxLimitExempt[sender], "Max TX Amount"); if(!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient].add(amount) <= _walletMax, "Max Wallet Amount"); } if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); if(sender == pair && block.timestamp < launchedAt + 1 minutes) { // 4-5 blocks revert("Trading Closed"); } emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = amount.mul(feeApplicable).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify; uint256 devBalance; uint256 hldBalance; uint256 amountEthLiquidity; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountToLiquify = tokensToLiquify.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2); } else { amountToLiquify = tokensToLiquify.mul(lpFee).div(totalFee).div(2); } uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { devBalance = amountETH.mul(devFeeOnSell).div(totalFeeIfSelling); hldBalance = amountETH.mul(hldFee).div(totalFeeIfSelling); amountEthLiquidity = amountETH.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2); } else { devBalance = amountETH.mul(devFee).div(totalFee); hldBalance = amountETH.mul(hldFee).div(totalFee); amountEthLiquidity = amountETH.mul(lpFee).div(totalFee).div(2); } uint256 amountEthMain = amountETH.sub(devBalance).sub(hldBalance).sub(amountEthLiquidity); if(amountETH > 0){ IBURNER(hldBurnerAddress).burnEmUp{value: hldBalance}(); devWallet.transfer(devBalance); mainWallet.transfer(amountEthMain); } if(amountToLiquify > 0){ router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } } receive() external payable { } } contract proofTokenFactory is Ownable { address constant ZERO = 0x0000000000000000000000000000000000000000; struct proofToken { bool status; address pair; address owner; uint256 unlockTime; uint256 lockId; } mapping (address => proofToken) public validatedPairs; address public hldAdmin; address public routerAddress; address public lockerAddress; address public hldBurnerAddress; event TokenCreated(address _address); constructor(address initialRouterAddress, address initialHldBurner, address initialLockerAddress) { routerAddress = initialRouterAddress; hldBurnerAddress = initialHldBurner; lockerAddress = initialLockerAddress; hldAdmin = msg.sender; } function createToken(string memory tokenName, string memory tokenSymbol, uint256 initialSupply, uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell, uint256 unlockTime, address operationsWallet, address mainWallet) external payable { require(unlockTime >= block.timestamp + 30 days, "unlock under 30 days"); require(msg.value >= 1 ether, "not enough liquidity"); //create token Fees.allFees memory fees = Fees.allFees(initialMainFee, initialMainFeeOnSell, initialLpFee, initialLpFeeOnSell,initialDevFee, initialDevFeeOnSell); TokenCutter newToken = new TokenCutter(tokenName, tokenSymbol, initialSupply, msg.sender, operationsWallet, mainWallet, routerAddress, hldAdmin, hldBurnerAddress, fees); emit TokenCreated(address(newToken)); //add liquidity newToken.approve(routerAddress, type(uint256).max); IUniswapV2Router02 router = IUniswapV2Router02(routerAddress); router.addLiquidityETH{ value: msg.value }(address(newToken), newToken.balanceOf(address(this)), 0,0, address(this), block.timestamp); // disable trading newToken.swapTradingStatus(); validatedPairs[address(newToken)] = proofToken(false, newToken.pair(), msg.sender, unlockTime, 0); } function finalizeToken(address tokenAddress) external payable { require(validatedPairs[tokenAddress].owner == msg.sender, "!owner"); require(validatedPairs[tokenAddress].status == false, "validated"); address _pair = validatedPairs[tokenAddress].pair; uint256 _unlockTime = validatedPairs[tokenAddress].unlockTime; IERC20(_pair).approve(lockerAddress, type(uint256).max); uint256 lpBalance = IERC20(_pair).balanceOf(address(this)); uint256 _lockId = ITeamFinanceLocker(lockerAddress).lockTokens{value: msg.value}(_pair, msg.sender, lpBalance, _unlockTime); validatedPairs[tokenAddress].lockId = _lockId; //enable trading ITokenCutter(tokenAddress).swapTradingStatus(); ITokenCutter(tokenAddress).setLaunchedAt(); validatedPairs[tokenAddress].status = true; } function cancelToken(address tokenAddress) external { require(validatedPairs[tokenAddress].owner == msg.sender, "!owner"); require(validatedPairs[tokenAddress].status == false, "validated"); address _pair = validatedPairs[tokenAddress].pair; address _owner = validatedPairs[tokenAddress].owner; IUniswapV2Router02 router = IUniswapV2Router02(routerAddress); IERC20(_pair).approve(routerAddress, type(uint256).max); uint256 _lpBalance = IERC20(_pair).balanceOf(address(this)); // enable transfer and allow router to exceed tx limit to remove liquidity ITokenCutter(tokenAddress).cancelToken(); router.removeLiquidityETH(address(tokenAddress), _lpBalance, 0,0, _owner, block.timestamp); // disable transfer of token ITokenCutter(tokenAddress).swapTradingStatus(); delete validatedPairs[tokenAddress]; } function setLockerAddress(address newlockerAddress) external onlyOwner { lockerAddress = newlockerAddress; } function setRouterAddress(address newRouterAddress) external onlyOwner { routerAddress = payable(newRouterAddress); } function setHldBurner(address newHldBurnerAddress) external onlyOwner { hldBurnerAddress = payable(newHldBurnerAddress); } function setHldAdmin(address newHldAdmin) external onlyOwner { hldAdmin = newHldAdmin; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialRouterAddress","type":"address"},{"internalType":"address","name":"initialHldBurner","type":"address"},{"internalType":"address","name":"initialLockerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"initialMainFee","type":"uint256"},{"internalType":"uint256","name":"initialMainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"address","name":"operationsWallet","type":"address"},{"internalType":"address","name":"mainWallet","type":"address"}],"name":"createToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"finalizeToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"hldAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldBurnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newHldAdmin","type":"address"}],"name":"setHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHldBurnerAddress","type":"address"}],"name":"setHldBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlockerAddress","type":"address"}],"name":"setLockerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validatedPairs","outputs":[{"internalType":"bool","name":"status","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"lockId","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200492c3803806200492c8339810160408190526200003491620000fc565b6200003f336200008f565b600380546001600160a01b039485166001600160a01b0319918216179091556005805493851693821693909317909255600480549190931690821617909155600280549091163317905562000146565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000f757600080fd5b919050565b6000806000606084860312156200011257600080fd5b6200011d84620000df565b92506200012d60208501620000df565b91506200013d60408501620000df565b90509250925092565b6147d680620001566000396000f3fe608060405260043610620000fb5760003560e01c8063653ed5d41162000095578063e6a053d01162000060578063e6a053d014620002fd578063ede1588f1462000322578063f2fde38b1462000344578063f4f1af3a146200036957600080fd5b8063653ed5d4146200027e578063715018a614620002a3578063774b584714620002bb5780638da5cb5b14620002dd57600080fd5b80633268cc5611620000d65780633268cc5614620001d75780633675f29b146200021257806341cb87fc14620002345780635f1845bc146200025957600080fd5b80632a1b0b6c14620001005780632dcacf441462000119578063318c359b14620001b2575b600080fd5b6200011762000111366004620012a9565b62000380565b005b3480156200012657600080fd5b5062000177620001383660046200123e565b6001602081905260009182526040909120805491810154600282015460039092015460ff8416936001600160a01b036101009091048116939216919085565b6040805195151586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a0015b60405180910390f35b348015620001bf57600080fd5b5062000117620001d13660046200123e565b6200084f565b348015620001e457600080fd5b50600354620001f9906001600160a01b031681565b6040516001600160a01b039091168152602001620001a9565b3480156200021f57600080fd5b50600454620001f9906001600160a01b031681565b3480156200024157600080fd5b5062000117620002533660046200123e565b6200089e565b3480156200026657600080fd5b5062000117620002783660046200123e565b620008ed565b3480156200028b57600080fd5b50620001176200029d3660046200123e565b6200093c565b348015620002b057600080fd5b506200011762000c9f565b348015620002c857600080fd5b50600554620001f9906001600160a01b031681565b348015620002ea57600080fd5b506000546001600160a01b0316620001f9565b3480156200030a57600080fd5b50620001176200031c3660046200123e565b62000cda565b3480156200032f57600080fd5b50600254620001f9906001600160a01b031681565b3480156200035157600080fd5b5062000117620003633660046200123e565b62000d29565b620001176200037a3660046200123e565b62000dcb565b6200038f4262278d0062001579565b831015620003db5760405162461bcd60e51b8152602060048201526014602482015273756e6c6f636b20756e646572203330206461797360601b60448201526064015b60405180910390fd5b670de0b6b3a76400003410156200042c5760405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206c697175696469747960601b6044820152606401620003d2565b60006040518060c001604052808b81526020018a815260200189815260200188815260200187815260200186815250905060008d8d8d338787600360009054906101000a90046001600160a01b0316600260009054906101000a90046001600160a01b0316600560009054906101000a90046001600160a01b03168a604051620004b69062001189565b620004cb9a9998979695949392919062001488565b604051809103906000f080158015620004e8573d6000803e3d6000fd5b506040516001600160a01b03821681529091507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e9060200160405180910390a160035460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b1580156200057857600080fd5b505af11580156200058d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b3919062001285565b506003546040516370a0823160e01b81523060048201526001600160a01b0391821691829163f305d71991349186918216906370a082319060240160206040518083038186803b1580156200060757600080fd5b505afa1580156200061c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064291906200138f565b60008030426040518863ffffffff1660e01b81526004016200066a969594939291906200144d565b6060604051808303818588803b1580156200068457600080fd5b505af115801562000699573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620006c09190620013ce565b505050816001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620006ff57600080fd5b505af115801562000714573d6000803e3d6000fd5b505050506040518060a00160405280600015158152602001836001600160a01b031663a8aa1b316040518163ffffffff1660e01b815260040160206040518083038186803b1580156200076657600080fd5b505afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001265565b6001600160a01b0390811682523360208084019190915260408084019a909a526000606093840181905295821686526001808252958a902084518154928601516001600160a81b0319909316901515610100600160a81b03191617610100928416929092029190911781559883015194890180546001600160a01b03191695909116949094179093559182015160028701555060800151600390940193909355505050505050505050505050565b6000546001600160a01b031633146200087c5760405162461bcd60e51b8152600401620003d29062001544565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620008cb5760405162461bcd60e51b8152600401620003d29062001544565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200091a5760405162461bcd60e51b8152600401620003d29062001544565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381811660009081526001602081905260409091200154163314620009945760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401620003d2565b6001600160a01b03811660009081526001602052604090205460ff1615620009eb5760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b6044820152606401620003d2565b6001600160a01b038181166000908152600160208190526040918290208054910154600354925163095ea7b360e01b81529284166004840181905260001960248501526101009092048416931691839063095ea7b390604401602060405180830381600087803b15801562000a5f57600080fd5b505af115801562000a74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a9a919062001285565b506040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801562000ade57600080fd5b505afa15801562000af3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b1991906200138f565b9050846001600160a01b031663546a88116040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000b5757600080fd5b505af115801562000b6c573d6000803e3d6000fd5b5050604051629d473b60e21b81526001600160a01b03851692506302751cec915062000ba8908890859060009081908a9042906004016200144d565b6040805180830381600087803b15801562000bc257600080fd5b505af115801562000bd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bfd9190620013a9565b5050846001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c3b57600080fd5b505af115801562000c50573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040822080546001600160a81b031916815590810180546001600160a01b031916905560028101829055600301555050505050565b6000546001600160a01b0316331462000ccc5760405162461bcd60e51b8152600401620003d29062001544565b62000cd8600062001139565b565b6000546001600160a01b0316331462000d075760405162461bcd60e51b8152600401620003d29062001544565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000d565760405162461bcd60e51b8152600401620003d29062001544565b6001600160a01b03811662000dbd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620003d2565b62000dc88162001139565b50565b6001600160a01b038181166000908152600160208190526040909120015416331462000e235760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401620003d2565b6001600160a01b03811660009081526001602052604090205460ff161562000e7a5760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b6044820152606401620003d2565b6001600160a01b0381811660009081526001602052604090819020805460029091015460048054935163095ea7b360e01b81529385169084015260001960248401526101009091049092169190829063095ea7b390604401602060405180830381600087803b15801562000eed57600080fd5b505af115801562000f02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f28919062001285565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562000f6c57600080fd5b505afa15801562000f81573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa791906200138f565b60048054604051633ea99e0f60e11b81526001600160a01b03878116938201939093523360248201526044810184905260648101869052929350600092911690637d533c1e9034906084016020604051808303818588803b1580156200100c57600080fd5b505af115801562001021573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200104891906200138f565b6001600160a01b038616600081815260016020526040808220600301849055805163fbd7575360e01b81529051939450919263fbd7575392600480820193929182900301818387803b1580156200109e57600080fd5b505af1158015620010b3573d6000803e3d6000fd5b50505050846001600160a01b03166327193bc46040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620010f357600080fd5b505af115801562001108573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040909120805460ff191690911790555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6131d480620015cd83390190565b8035620011a481620015b6565b919050565b600082601f830112620011bb57600080fd5b813567ffffffffffffffff80821115620011d957620011d9620015a0565b604051601f8301601f19908116603f01168101908282118183101715620012045762001204620015a0565b816040528381528660208588010111156200121e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156200125157600080fd5b81356200125e81620015b6565b9392505050565b6000602082840312156200127857600080fd5b81516200125e81620015b6565b6000602082840312156200129857600080fd5b815180151581146200125e57600080fd5b6000806000806000806000806000806000806101808d8f031215620012cd57600080fd5b67ffffffffffffffff8d351115620012e457600080fd5b620012f38e8e358f01620011a9565b9b5067ffffffffffffffff60208e013511156200130f57600080fd5b620013218e60208f01358f01620011a9565b9a5060408d0135995060608d0135985060808d0135975060a08d0135965060c08d0135955060e08d013594506101008d013593506101208d013592506200136c6101408e0162001197565b91506200137d6101608e0162001197565b90509295989b509295989b509295989b565b600060208284031215620013a257600080fd5b5051919050565b60008060408385031215620013bd57600080fd5b505080516020909101519092909150565b600080600060608486031215620013e457600080fd5b8351925060208401519150604084015190509250925092565b6000815180845260005b81811015620014255760208185018101518683018201520162001407565b8181111562001438576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60006101e08083526200149e8184018e620013fd565b90508281036020840152620014b4818d620013fd565b91505089604083015260018060a01b03808a166060840152808916608084015280881660a084015280871660c084015280861660e084015280851661010084015250825161012083015260208301516101408301526040830151610160830152606083015161018083015260808301516101a083015260a08301516101c08301529b9a5050505050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156200159b57634e487b7160e01b600052601160045260246000fd5b500190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462000dc857600080fdfe60806040526006805460ff60a01b1916600160a01b1790556002600b556019805461010160a81b61ffff60a81b199091161790553480156200004057600080fd5b50604051620031d4380380620031d4833981016040819052620000639162000824565b8951620000789060039060208d019062000631565b5088516200008e9060049060208c019062000631565b50600288815560c890620000a4908a906200098e565b620000b091906200096b565b601b556064620000c28960036200098e565b620000ce91906200096b565b601c55610fa0620000e18960056200098e565b620000ed91906200096b565b601d55601480546001600160a01b0319166001600160a01b0386169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200014557600080fd5b505afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000180919062000806565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001dd57600080fd5b505afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000218919062000806565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200026057600080fd5b505af115801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000806565b601580546001600160a01b039283166001600160a01b03199182161782553060008181526001602081815260408084206014548916855282528084206000199055601680549096163317865593835260078152838320805460ff19908116841790915585548816845284842080548216841790558e88168452848420805482168417905560088252848420805482168417905595548716835283832080548716831790559354909516815281812080548516861790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805485168617905580527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805490931690931790915590820151600d81905560608301516010556080830151600e81905560a08401516011558351600c81905584840151600f55600b5462000410949093620003fc938492909190620015aa6200061c821b17901c565b6200061c60201b620015aa1790919060201c565b60128190555062000442600b54620003fc600f54620003fc6010546011546200061c60201b620015aa1790919060201c565b601355601254600c10156200048d5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b60448201526064015b60405180910390fd5b60116013541115620004d65760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b604482015260640162000484565b601780546001600160a01b03199081166001600160a01b038a81169190911790925560188054821689841617905560198054821688841617905560058054821685841617905560068054909116918516919091179055600060646200053d8a605f6200098e565b6200054991906200096b565b9050600062000559828b620009b0565b336000908152602081905260408120805492935084929091906200057f90849062000950565b90915550506001600160a01b03891660009081526020819052604081208054839290620005ae90849062000950565b90915550506040518281523390600090600080516020620031b48339815191529060200160405180910390a36040518181526001600160a01b038a1690600090600080516020620031b48339815191529060200160405180910390a350505050505050505050505062000a33565b60006200062a828462000950565b9392505050565b8280546200063f90620009ca565b90600052602060002090601f016020900481019282620006635760008555620006ae565b82601f106200067e57805160ff1916838001178555620006ae565b82800160010185558215620006ae579182015b82811115620006ae57825182559160200191906001019062000691565b50620006bc929150620006c0565b5090565b5b80821115620006bc5760008155600101620006c1565b80516001600160a01b0381168114620006ef57600080fd5b919050565b600082601f8301126200070657600080fd5b81516001600160401b0381111562000722576200072262000a1d565b602062000738601f8301601f191682016200091d565b82815285828487010111156200074d57600080fd5b60005b838110156200076d57858101830151828201840152820162000750565b838111156200077f5760008385840101525b5095945050505050565b600060c082840312156200079c57600080fd5b60405160c081016001600160401b0381118282101715620007c157620007c162000a1d565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b6000602082840312156200081957600080fd5b6200062a82620006d7565b6000806000806000806000806000806101e08b8d0312156200084557600080fd5b8a516001600160401b03808211156200085d57600080fd5b6200086b8e838f01620006f4565b9b5060208d01519150808211156200088257600080fd5b50620008918d828e01620006f4565b99505060408b01519750620008a960608c01620006d7565b9650620008b960808c01620006d7565b9550620008c960a08c01620006d7565b9450620008d960c08c01620006d7565b9350620008e960e08c01620006d7565b9250620008fa6101008c01620006d7565b91506200090c8c6101208d0162000789565b90509295989b9194979a5092959850565b604051601f8201601f191681016001600160401b038111828210171562000948576200094862000a1d565b604052919050565b6000821982111562000966576200096662000a07565b500190565b6000826200098957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620009ab57620009ab62000a07565b500290565b600082821015620009c557620009c562000a07565b500390565b600181811c90821680620009df57607f821691505b6020821081141562000a0157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6127718062000a436000396000f3fe6080604052600436106103855760003560e01c80638b42507f116101d1578063c45a015511610102578063dd62ed3e116100a0578063f7c722051161006f578063f7c7220514610a47578063f887ea4014610a67578063fabe628314610a87578063fbd7575314610aa757600080fd5b8063dd62ed3e146109ab578063e5d85108146109f1578063e66b1d1e14610a07578063ede1588f14610a2757600080fd5b8063d0a5eb4e116100dc578063d0a5eb4e14610935578063d1db380914610955578063d4fb9a011461096a578063d920334e1461098b57600080fd5b8063c45a0155146108df578063ca987b0e146108ff578063cb29813c1461091557600080fd5b8063a457c2d71161016f578063b515566a11610149578063b515566a14610859578063bb542ef014610879578063bf56b37114610899578063bfd79284146108af57600080fd5b8063a457c2d7146107f9578063a8aa1b3114610819578063a9059cbb1461083957600080fd5b806395d89b41116101ab57806395d89b411461078e578063985b9db0146107a3578063a3a2e89e146107b9578063a3e67610146107d957600080fd5b80638b42507f146107285780638ea5220f146107585780639502c4261461077857600080fd5b80633dab5269116102b65780636827e764116102545780637c0ff205116102235780637c0ff205146106c65780637d1db4a5146106dc5780637db1342c146106f2578063807c2d9c1461071257600080fd5b80636827e76414610644578063704ce43e1461065a57806370a0823114610670578063774b5847146106a657600080fd5b806343d49dda1161029057806343d49dda146105cd57806344de2e4c146105ed5780634a74bb021461060e578063546a88111461062f57600080fd5b80633dab52691461054d5780633f4218e01461056d5780634355855a1461059d57600080fd5b806323b62b7511610323578063273123b7116102fd578063273123b7146104dc5780632b112e49146104fc578063313ce56714610511578063395093511461052d57600080fd5b806323b62b751461046f57806323b872dd146104a757806327193bc4146104c757600080fd5b80630963da6c1161035f5780630963da6c1461040c57806318160ddd146104225780631df4ccfc146104375780631f53ac021461044d57600080fd5b80630445b6671461039157806306fdde03146103ba578063095ea7b3146103dc57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a7601d5481565b6040519081526020015b60405180910390f35b3480156103c657600080fd5b506103cf610abc565b6040516103b19190612456565b3480156103e857600080fd5b506103fc6103f736600461229d565b610b4e565b60405190151581526020016103b1565b34801561041857600080fd5b506103a7600c5481565b34801561042e57600080fd5b506002546103a7565b34801561044357600080fd5b506103a760125481565b34801561045957600080fd5b5061046d6104683660046121b4565b610b66565b005b34801561047b57600080fd5b5060195461048f906001600160a01b031681565b6040516001600160a01b0390911681526020016103b1565b3480156104b357600080fd5b506103fc6104c2366004612227565b610bbb565b3480156104d357600080fd5b5061046d610be2565b3480156104e857600080fd5b5061046d6104f73660046121b4565b610c55565b34801561050857600080fd5b506103a7610ca0565b34801561051d57600080fd5b50604051600981526020016103b1565b34801561053957600080fd5b506103fc61054836600461229d565b610d0d565b34801561055957600080fd5b5061046d6105683660046123b0565b610d4c565b34801561057957600080fd5b506103fc6105883660046121b4565b60076020526000908152604090205460ff1681565b3480156105a957600080fd5b506103fc6105b83660046121b4565b60096020526000908152604090205460ff1681565b3480156105d957600080fd5b5061046d6105e83660046121b4565b610d98565b3480156105f957600080fd5b506006546103fc90600160a01b900460ff1681565b34801561061a57600080fd5b506019546103fc90600160a81b900460ff1681565b34801561063b57600080fd5b5061046d610de4565b34801561065057600080fd5b506103a7600e5481565b34801561066657600080fd5b506103a7600d5481565b34801561067c57600080fd5b506103a761068b3660046121b4565b6001600160a01b031660009081526020819052604090205490565b3480156106b257600080fd5b5060055461048f906001600160a01b031681565b3480156106d257600080fd5b506103a760105481565b3480156106e857600080fd5b506103a7601b5481565b3480156106fe57600080fd5b5061046d61070d3660046123cc565b610e7c565b34801561071e57600080fd5b506103a7601c5481565b34801561073457600080fd5b506103fc6107433660046121b4565b60086020526000908152604090205460ff1681565b34801561076457600080fd5b5060185461048f906001600160a01b031681565b34801561078457600080fd5b506103a760115481565b34801561079a57600080fd5b506103cf610ef9565b3480156107af57600080fd5b506103a7600f5481565b3480156107c557600080fd5b5061046d6107d4366004612268565b610f08565b3480156107e557600080fd5b5060175461048f906001600160a01b031681565b34801561080557600080fd5b506103fc61081436600461229d565b610f5d565b34801561082557600080fd5b5060155461048f906001600160a01b031681565b34801561084557600080fd5b506103fc61085436600461229d565b610ffa565b34801561086557600080fd5b5061046d6108743660046122c9565b611008565b34801561088557600080fd5b5061046d6108943660046121b4565b61109e565b3480156108a557600080fd5b506103a7600a5481565b3480156108bb57600080fd5b506103fc6108ca3660046121b4565b601a6020526000908152604090205460ff1681565b3480156108eb57600080fd5b5060165461048f906001600160a01b031681565b34801561090b57600080fd5b506103a760135481565b34801561092157600080fd5b5061046d610930366004612413565b6110ea565b34801561094157600080fd5b5061046d6109503660046121b4565b611205565b34801561096157600080fd5b5061046d611251565b34801561097657600080fd5b506019546103fc90600160b01b900460ff1681565b34801561099757600080fd5b5061046d6109a63660046123cc565b61135d565b3480156109b757600080fd5b506103a76109c63660046121ee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109fd57600080fd5b506103a7600b5481565b348015610a1357600080fd5b5061046d610a22366004612395565b6113da565b348015610a3357600080fd5b5060065461048f906001600160a01b031681565b348015610a5357600080fd5b5061046d610a623660046121b4565b611470565b348015610a7357600080fd5b5060145461048f906001600160a01b031681565b348015610a9357600080fd5b5061046d610aa2366004612268565b6114bc565b348015610ab357600080fd5b5061046d61155f565b606060038054610acb9061268b565b80601f0160208091040260200160405190810160405280929190818152602001828054610af79061268b565b8015610b445780601f10610b1957610100808354040283529160200191610b44565b820191906000526020600020905b815481529060010190602001808311610b2757829003601f168201915b5050505050905090565b600033610b5c8185856115b6565b5060019392505050565b6017546001600160a01b03163314610b995760405162461bcd60e51b8152600401610b9090612533565b60405180910390fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600033610bc98582856116da565b610bd485858561176c565b5060019150505b9392505050565b6016546001600160a01b03163314610c0c5760405162461bcd60e51b8152600401610b9090612568565b600a5415610c4f5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b90565b42600a55565b6017546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610b9090612533565b6001600160a01b03166000908152601a60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610d089291610d029190611b3e565b90611b3e565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610b5c9082908690610d4790879061261b565b6115b6565b6017546001600160a01b03163314610d765760405162461bcd60e51b8152600401610b9090612533565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6006546001600160a01b03163314610dc25760405162461bcd60e51b8152600401610b90906124f0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b9090612568565b601480546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601754909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6017546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610b9090612533565b600a54610ec55760405162461bcd60e51b8152600401610b90906124cd565b600a54610ed5906201518061261b565b421015610ef45760405162461bcd60e51b8152600401610b90906124ab565b601c55565b606060048054610acb9061268b565b6017546001600160a01b03163314610f325760405162461bcd60e51b8152600401610b9090612533565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610fe25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b90565b610fef82868684036115b6565b506001949350505050565b600033610fef81858561176c565b6006546001600160a01b031633146110325760405162461bcd60e51b8152600401610b90906124f0565b60005b815181101561109a576001601a6000848481518110611056576110566126f7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611092816126c6565b915050611035565b5050565b6017546001600160a01b031633146110c85760405162461bcd60e51b8152600401610b9090612533565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146111145760405162461bcd60e51b8152600401610b9090612533565b600c869055600d849055600e829055600f85905560108390556011819055600b5461114d908790611147908186896115aa565b906115aa565b601281905550611176600f54611147600b546111476010546011546115aa90919063ffffffff16565b601355601254600c10156111bb5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b90565b601160135411156111fd5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b90565b505050505050565b6017546001600160a01b0316331461122f5760405162461bcd60e51b8152600401610b9090612533565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610b9090612533565b600b546002146112c05760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610b90565b600a546112df5760405162461bcd60e51b8152600401610b90906124cd565b600a546112ef906203f48061261b565b42101561130e5760405162461bcd60e51b8152600401610b90906124ab565b6001600b819055600c54600d54600e5461132f9361114792909183916115aa565b601281905550611358600f54611147600b546111476010546011546115aa90919063ffffffff16565b601355565b6017546001600160a01b031633146113875760405162461bcd60e51b8152600401610b9090612533565b600a546113a65760405162461bcd60e51b8152600401610b90906124cd565b600a546113b6906201518061261b565b4210156113d55760405162461bcd60e51b8152600401610b90906124ab565b601b55565b6017546001600160a01b031633146114045760405162461bcd60e51b8152600401610b9090612533565b600a546114235760405162461bcd60e51b8152600401610b90906124cd565b600a54611433906201518061261b565b4210156114525760405162461bcd60e51b8152600401610b90906124ab565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6006546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b90906124f0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146114e65760405162461bcd60e51b8152600401610b9090612533565b600a546115055760405162461bcd60e51b8152600401610b90906124cd565b600a54611515906201518061261b565b4210156115345760405162461bcd60e51b8152600401610b90906124ab565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146115895760405162461bcd60e51b8152600401610b9090612568565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000610bdb828461261b565b6001600160a01b0383166116185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b90565b6001600160a01b0382166116795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b90565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461176657818110156117595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b90565b61176684848484036115b6565b50505050565b601954600090600160b01b900460ff166117b95760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b90565b6001600160a01b0384166000908152601a602052604090205460ff161580156117fb57506001600160a01b0383166000908152601a602052604090205460ff16155b61180457600080fd5b601954600160a01b900460ff161561182857611821848484611b4a565b9050610bdb565b601b548211158061185157506001600160a01b03841660009081526008602052604090205460ff165b61188d5760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b6044820152606401610b90565b6001600160a01b03831660009081526008602052604090205460ff161580156118bf5750600654600160a01b900460ff165b1561192c57601c546001600160a01b0384166000908152602081905260409020546118ea90846115aa565b111561192c5760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b6044820152606401610b90565b6015546001600160a01b031633148015906119515750601954600160a01b900460ff16155b80156119665750601954600160a81b900460ff165b80156119835750601d543060009081526020819052604090205410155b1561199057611990611c27565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081529081905291909120546119e1918490612095565b6001600160a01b03851660009081526020818152604080832093909355600790529081205460ff16158015611a2f57506001600160a01b03841660009081526007602052604090205460ff16155b611a395782611a44565b611a448585856120c1565b6001600160a01b038516600090815260208190526040902054909150611a6a90826115aa565b6001600160a01b038086166000908152602081905260409020919091556015548682169116148015611aa85750600a54611aa590603c61261b565b42105b15611ae65760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b90565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2b91815260200190565b60405180910390a3506001949350505050565b6000610bdb8284612674565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081529081905291822054611b9a918490612095565b6001600160a01b038086166000908152602081905260408082209390935590851681522054611bc990836115aa565b6001600160a01b038481166000818152602081815260409182902094909455518581529092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b17905530600090815260208190526040812054601254909190819081908190600210611c8a57611c836002611c7d601354611c7d6010548a61217c90919063ffffffff16565b90612188565b9350611cad565b611caa6002611c7d601254611c7d600d548a61217c90919063ffffffff16565b93505b6000611cb98686611b3e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611cf357611cf36126f7565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d4757600080fd5b505afa158015611d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7f91906121d1565b81600181518110611d9257611d926126f7565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790611dd89085906000908690309042906004016125aa565b600060405180830381600087803b158015611df257600080fd5b505af1158015611e06573d6000803e3d6000fd5b505050506000479050600260125411611e7a57611e34601354611c7d6011548461217c90919063ffffffff16565b9550611e51601354611c7d600b548461217c90919063ffffffff16565b9450611e736002611c7d601354611c7d6010548661217c90919063ffffffff16565b9350611ed7565b611e95601254611c7d600e548461217c90919063ffffffff16565b9550611eb2601254611c7d600b548461217c90919063ffffffff16565b9450611ed46002611c7d601254611c7d600d548661217c90919063ffffffff16565b93505b6000611ee985610d028881868c611b3e565b90508115611fd157600560009054906101000a90046001600160a01b03166001600160a01b0316630c50f89d876040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f4157600080fd5b505af1158015611f55573d6000803e3d6000fd5b50506018546040516001600160a01b0390911693508a156108fc0292508a91506000818181858888f19350505050158015611f94573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611fcf573d6000803e3d6000fd5b505b871561207d5760145460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990879060c4016060604051808303818588803b15801561204057600080fd5b505af1158015612054573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061207991906123e5565b5050505b50506019805460ff60a01b1916905550505050505050565b600081848411156120b95760405162461bcd60e51b8152600401610b909190612456565b505050900390565b60155460009081906001600160a01b038581169116146120e3576012546120e7565b6013545b905060006120fa6064611c7d868561217c565b3060009081526020819052604090205490915061211790826115aa565b3060008181526020818152604091829020939093555183815290916001600160a01b038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36121728482611b3e565b9695505050505050565b6000610bdb8284612655565b6000610bdb8284612633565b803561219f81612723565b919050565b8035801515811461219f57600080fd5b6000602082840312156121c657600080fd5b8135610bdb81612723565b6000602082840312156121e357600080fd5b8151610bdb81612723565b6000806040838503121561220157600080fd5b823561220c81612723565b9150602083013561221c81612723565b809150509250929050565b60008060006060848603121561223c57600080fd5b833561224781612723565b9250602084013561225781612723565b929592945050506040919091013590565b6000806040838503121561227b57600080fd5b823561228681612723565b9150612294602084016121a4565b90509250929050565b600080604083850312156122b057600080fd5b82356122bb81612723565b946020939093013593505050565b600060208083850312156122dc57600080fd5b823567ffffffffffffffff808211156122f457600080fd5b818501915085601f83011261230857600080fd5b81358181111561231a5761231a61270d565b8060051b604051601f19603f8301168101818110858211171561233f5761233f61270d565b604052828152858101935084860182860187018a101561235e57600080fd5b600095505b838610156123885761237481612194565b855260019590950194938601938601612363565b5098975050505050505050565b6000602082840312156123a757600080fd5b610bdb826121a4565b600080604083850312156123c357600080fd5b6122bb836121a4565b6000602082840312156123de57600080fd5b5035919050565b6000806000606084860312156123fa57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561242c57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561248357858101830151858201604001528201612467565b81811115612495576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b60208082526023908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460408201526236b4b760e91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125fa5784516001600160a01b0316835293830193918301916001016125d5565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561262e5761262e6126e1565b500190565b60008261265057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561266f5761266f6126e1565b500290565b600082821015612686576126866126e1565b500390565b600181811c9082168061269f57607f821691505b602082108114156126c057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126da576126da6126e1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461273857600080fd5b5056fea264697066735822122066bde435a58658fde273e258146139b21fe9591d7f8c1a1c260299e6685b510b64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ec451baaf10bcb50d3e09c03ac664e6ef56ea04ac29a256d6c4db6032614ae2564736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb
Deployed Bytecode
0x608060405260043610620000fb5760003560e01c8063653ed5d41162000095578063e6a053d01162000060578063e6a053d014620002fd578063ede1588f1462000322578063f2fde38b1462000344578063f4f1af3a146200036957600080fd5b8063653ed5d4146200027e578063715018a614620002a3578063774b584714620002bb5780638da5cb5b14620002dd57600080fd5b80633268cc5611620000d65780633268cc5614620001d75780633675f29b146200021257806341cb87fc14620002345780635f1845bc146200025957600080fd5b80632a1b0b6c14620001005780632dcacf441462000119578063318c359b14620001b2575b600080fd5b6200011762000111366004620012a9565b62000380565b005b3480156200012657600080fd5b5062000177620001383660046200123e565b6001602081905260009182526040909120805491810154600282015460039092015460ff8416936001600160a01b036101009091048116939216919085565b6040805195151586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a0015b60405180910390f35b348015620001bf57600080fd5b5062000117620001d13660046200123e565b6200084f565b348015620001e457600080fd5b50600354620001f9906001600160a01b031681565b6040516001600160a01b039091168152602001620001a9565b3480156200021f57600080fd5b50600454620001f9906001600160a01b031681565b3480156200024157600080fd5b5062000117620002533660046200123e565b6200089e565b3480156200026657600080fd5b5062000117620002783660046200123e565b620008ed565b3480156200028b57600080fd5b50620001176200029d3660046200123e565b6200093c565b348015620002b057600080fd5b506200011762000c9f565b348015620002c857600080fd5b50600554620001f9906001600160a01b031681565b348015620002ea57600080fd5b506000546001600160a01b0316620001f9565b3480156200030a57600080fd5b50620001176200031c3660046200123e565b62000cda565b3480156200032f57600080fd5b50600254620001f9906001600160a01b031681565b3480156200035157600080fd5b5062000117620003633660046200123e565b62000d29565b620001176200037a3660046200123e565b62000dcb565b6200038f4262278d0062001579565b831015620003db5760405162461bcd60e51b8152602060048201526014602482015273756e6c6f636b20756e646572203330206461797360601b60448201526064015b60405180910390fd5b670de0b6b3a76400003410156200042c5760405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206c697175696469747960601b6044820152606401620003d2565b60006040518060c001604052808b81526020018a815260200189815260200188815260200187815260200186815250905060008d8d8d338787600360009054906101000a90046001600160a01b0316600260009054906101000a90046001600160a01b0316600560009054906101000a90046001600160a01b03168a604051620004b69062001189565b620004cb9a9998979695949392919062001488565b604051809103906000f080158015620004e8573d6000803e3d6000fd5b506040516001600160a01b03821681529091507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e9060200160405180910390a160035460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b1580156200057857600080fd5b505af11580156200058d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b3919062001285565b506003546040516370a0823160e01b81523060048201526001600160a01b0391821691829163f305d71991349186918216906370a082319060240160206040518083038186803b1580156200060757600080fd5b505afa1580156200061c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064291906200138f565b60008030426040518863ffffffff1660e01b81526004016200066a969594939291906200144d565b6060604051808303818588803b1580156200068457600080fd5b505af115801562000699573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620006c09190620013ce565b505050816001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620006ff57600080fd5b505af115801562000714573d6000803e3d6000fd5b505050506040518060a00160405280600015158152602001836001600160a01b031663a8aa1b316040518163ffffffff1660e01b815260040160206040518083038186803b1580156200076657600080fd5b505afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001265565b6001600160a01b0390811682523360208084019190915260408084019a909a526000606093840181905295821686526001808252958a902084518154928601516001600160a81b0319909316901515610100600160a81b03191617610100928416929092029190911781559883015194890180546001600160a01b03191695909116949094179093559182015160028701555060800151600390940193909355505050505050505050505050565b6000546001600160a01b031633146200087c5760405162461bcd60e51b8152600401620003d29062001544565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620008cb5760405162461bcd60e51b8152600401620003d29062001544565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200091a5760405162461bcd60e51b8152600401620003d29062001544565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381811660009081526001602081905260409091200154163314620009945760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401620003d2565b6001600160a01b03811660009081526001602052604090205460ff1615620009eb5760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b6044820152606401620003d2565b6001600160a01b038181166000908152600160208190526040918290208054910154600354925163095ea7b360e01b81529284166004840181905260001960248501526101009092048416931691839063095ea7b390604401602060405180830381600087803b15801562000a5f57600080fd5b505af115801562000a74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a9a919062001285565b506040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801562000ade57600080fd5b505afa15801562000af3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b1991906200138f565b9050846001600160a01b031663546a88116040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000b5757600080fd5b505af115801562000b6c573d6000803e3d6000fd5b5050604051629d473b60e21b81526001600160a01b03851692506302751cec915062000ba8908890859060009081908a9042906004016200144d565b6040805180830381600087803b15801562000bc257600080fd5b505af115801562000bd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bfd9190620013a9565b5050846001600160a01b031663fbd757536040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c3b57600080fd5b505af115801562000c50573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040822080546001600160a81b031916815590810180546001600160a01b031916905560028101829055600301555050505050565b6000546001600160a01b0316331462000ccc5760405162461bcd60e51b8152600401620003d29062001544565b62000cd8600062001139565b565b6000546001600160a01b0316331462000d075760405162461bcd60e51b8152600401620003d29062001544565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000d565760405162461bcd60e51b8152600401620003d29062001544565b6001600160a01b03811662000dbd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620003d2565b62000dc88162001139565b50565b6001600160a01b038181166000908152600160208190526040909120015416331462000e235760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401620003d2565b6001600160a01b03811660009081526001602052604090205460ff161562000e7a5760405162461bcd60e51b81526020600482015260096024820152681d985b1a59185d195960ba1b6044820152606401620003d2565b6001600160a01b0381811660009081526001602052604090819020805460029091015460048054935163095ea7b360e01b81529385169084015260001960248401526101009091049092169190829063095ea7b390604401602060405180830381600087803b15801562000eed57600080fd5b505af115801562000f02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f28919062001285565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801562000f6c57600080fd5b505afa15801562000f81573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa791906200138f565b60048054604051633ea99e0f60e11b81526001600160a01b03878116938201939093523360248201526044810184905260648101869052929350600092911690637d533c1e9034906084016020604051808303818588803b1580156200100c57600080fd5b505af115801562001021573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200104891906200138f565b6001600160a01b038616600081815260016020526040808220600301849055805163fbd7575360e01b81529051939450919263fbd7575392600480820193929182900301818387803b1580156200109e57600080fd5b505af1158015620010b3573d6000803e3d6000fd5b50505050846001600160a01b03166327193bc46040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620010f357600080fd5b505af115801562001108573d6000803e3d6000fd5b5050506001600160a01b039095166000908152600160208190526040909120805460ff191690911790555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6131d480620015cd83390190565b8035620011a481620015b6565b919050565b600082601f830112620011bb57600080fd5b813567ffffffffffffffff80821115620011d957620011d9620015a0565b604051601f8301601f19908116603f01168101908282118183101715620012045762001204620015a0565b816040528381528660208588010111156200121e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156200125157600080fd5b81356200125e81620015b6565b9392505050565b6000602082840312156200127857600080fd5b81516200125e81620015b6565b6000602082840312156200129857600080fd5b815180151581146200125e57600080fd5b6000806000806000806000806000806000806101808d8f031215620012cd57600080fd5b67ffffffffffffffff8d351115620012e457600080fd5b620012f38e8e358f01620011a9565b9b5067ffffffffffffffff60208e013511156200130f57600080fd5b620013218e60208f01358f01620011a9565b9a5060408d0135995060608d0135985060808d0135975060a08d0135965060c08d0135955060e08d013594506101008d013593506101208d013592506200136c6101408e0162001197565b91506200137d6101608e0162001197565b90509295989b509295989b509295989b565b600060208284031215620013a257600080fd5b5051919050565b60008060408385031215620013bd57600080fd5b505080516020909101519092909150565b600080600060608486031215620013e457600080fd5b8351925060208401519150604084015190509250925092565b6000815180845260005b81811015620014255760208185018101518683018201520162001407565b8181111562001438576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60006101e08083526200149e8184018e620013fd565b90508281036020840152620014b4818d620013fd565b91505089604083015260018060a01b03808a166060840152808916608084015280881660a084015280871660c084015280861660e084015280851661010084015250825161012083015260208301516101408301526040830151610160830152606083015161018083015260808301516101a083015260a08301516101c08301529b9a5050505050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156200159b57634e487b7160e01b600052601160045260246000fd5b500190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462000dc857600080fdfe60806040526006805460ff60a01b1916600160a01b1790556002600b556019805461010160a81b61ffff60a81b199091161790553480156200004057600080fd5b50604051620031d4380380620031d4833981016040819052620000639162000824565b8951620000789060039060208d019062000631565b5088516200008e9060049060208c019062000631565b50600288815560c890620000a4908a906200098e565b620000b091906200096b565b601b556064620000c28960036200098e565b620000ce91906200096b565b601c55610fa0620000e18960056200098e565b620000ed91906200096b565b601d55601480546001600160a01b0319166001600160a01b0386169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200014557600080fd5b505afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000180919062000806565b6001600160a01b031663c9c65396601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001dd57600080fd5b505afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000218919062000806565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200026057600080fd5b505af115801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000806565b601580546001600160a01b039283166001600160a01b03199182161782553060008181526001602081815260408084206014548916855282528084206000199055601680549096163317865593835260078152838320805460ff19908116841790915585548816845284842080548216841790558e88168452848420805482168417905560088252848420805482168417905595548716835283832080548716831790559354909516815281812080548516861790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805485168617905580527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805490931690931790915590820151600d81905560608301516010556080830151600e81905560a08401516011558351600c81905584840151600f55600b5462000410949093620003fc938492909190620015aa6200061c821b17901c565b6200061c60201b620015aa1790919060201c565b60128190555062000442600b54620003fc600f54620003fc6010546011546200061c60201b620015aa1790919060201c565b601355601254600c10156200048d5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b60448201526064015b60405180910390fd5b60116013541115620004d65760405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b604482015260640162000484565b601780546001600160a01b03199081166001600160a01b038a81169190911790925560188054821689841617905560198054821688841617905560058054821685841617905560068054909116918516919091179055600060646200053d8a605f6200098e565b6200054991906200096b565b9050600062000559828b620009b0565b336000908152602081905260408120805492935084929091906200057f90849062000950565b90915550506001600160a01b03891660009081526020819052604081208054839290620005ae90849062000950565b90915550506040518281523390600090600080516020620031b48339815191529060200160405180910390a36040518181526001600160a01b038a1690600090600080516020620031b48339815191529060200160405180910390a350505050505050505050505062000a33565b60006200062a828462000950565b9392505050565b8280546200063f90620009ca565b90600052602060002090601f016020900481019282620006635760008555620006ae565b82601f106200067e57805160ff1916838001178555620006ae565b82800160010185558215620006ae579182015b82811115620006ae57825182559160200191906001019062000691565b50620006bc929150620006c0565b5090565b5b80821115620006bc5760008155600101620006c1565b80516001600160a01b0381168114620006ef57600080fd5b919050565b600082601f8301126200070657600080fd5b81516001600160401b0381111562000722576200072262000a1d565b602062000738601f8301601f191682016200091d565b82815285828487010111156200074d57600080fd5b60005b838110156200076d57858101830151828201840152820162000750565b838111156200077f5760008385840101525b5095945050505050565b600060c082840312156200079c57600080fd5b60405160c081016001600160401b0381118282101715620007c157620007c162000a1d565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b6000602082840312156200081957600080fd5b6200062a82620006d7565b6000806000806000806000806000806101e08b8d0312156200084557600080fd5b8a516001600160401b03808211156200085d57600080fd5b6200086b8e838f01620006f4565b9b5060208d01519150808211156200088257600080fd5b50620008918d828e01620006f4565b99505060408b01519750620008a960608c01620006d7565b9650620008b960808c01620006d7565b9550620008c960a08c01620006d7565b9450620008d960c08c01620006d7565b9350620008e960e08c01620006d7565b9250620008fa6101008c01620006d7565b91506200090c8c6101208d0162000789565b90509295989b9194979a5092959850565b604051601f8201601f191681016001600160401b038111828210171562000948576200094862000a1d565b604052919050565b6000821982111562000966576200096662000a07565b500190565b6000826200098957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620009ab57620009ab62000a07565b500290565b600082821015620009c557620009c562000a07565b500390565b600181811c90821680620009df57607f821691505b6020821081141562000a0157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6127718062000a436000396000f3fe6080604052600436106103855760003560e01c80638b42507f116101d1578063c45a015511610102578063dd62ed3e116100a0578063f7c722051161006f578063f7c7220514610a47578063f887ea4014610a67578063fabe628314610a87578063fbd7575314610aa757600080fd5b8063dd62ed3e146109ab578063e5d85108146109f1578063e66b1d1e14610a07578063ede1588f14610a2757600080fd5b8063d0a5eb4e116100dc578063d0a5eb4e14610935578063d1db380914610955578063d4fb9a011461096a578063d920334e1461098b57600080fd5b8063c45a0155146108df578063ca987b0e146108ff578063cb29813c1461091557600080fd5b8063a457c2d71161016f578063b515566a11610149578063b515566a14610859578063bb542ef014610879578063bf56b37114610899578063bfd79284146108af57600080fd5b8063a457c2d7146107f9578063a8aa1b3114610819578063a9059cbb1461083957600080fd5b806395d89b41116101ab57806395d89b411461078e578063985b9db0146107a3578063a3a2e89e146107b9578063a3e67610146107d957600080fd5b80638b42507f146107285780638ea5220f146107585780639502c4261461077857600080fd5b80633dab5269116102b65780636827e764116102545780637c0ff205116102235780637c0ff205146106c65780637d1db4a5146106dc5780637db1342c146106f2578063807c2d9c1461071257600080fd5b80636827e76414610644578063704ce43e1461065a57806370a0823114610670578063774b5847146106a657600080fd5b806343d49dda1161029057806343d49dda146105cd57806344de2e4c146105ed5780634a74bb021461060e578063546a88111461062f57600080fd5b80633dab52691461054d5780633f4218e01461056d5780634355855a1461059d57600080fd5b806323b62b7511610323578063273123b7116102fd578063273123b7146104dc5780632b112e49146104fc578063313ce56714610511578063395093511461052d57600080fd5b806323b62b751461046f57806323b872dd146104a757806327193bc4146104c757600080fd5b80630963da6c1161035f5780630963da6c1461040c57806318160ddd146104225780631df4ccfc146104375780631f53ac021461044d57600080fd5b80630445b6671461039157806306fdde03146103ba578063095ea7b3146103dc57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a7601d5481565b6040519081526020015b60405180910390f35b3480156103c657600080fd5b506103cf610abc565b6040516103b19190612456565b3480156103e857600080fd5b506103fc6103f736600461229d565b610b4e565b60405190151581526020016103b1565b34801561041857600080fd5b506103a7600c5481565b34801561042e57600080fd5b506002546103a7565b34801561044357600080fd5b506103a760125481565b34801561045957600080fd5b5061046d6104683660046121b4565b610b66565b005b34801561047b57600080fd5b5060195461048f906001600160a01b031681565b6040516001600160a01b0390911681526020016103b1565b3480156104b357600080fd5b506103fc6104c2366004612227565b610bbb565b3480156104d357600080fd5b5061046d610be2565b3480156104e857600080fd5b5061046d6104f73660046121b4565b610c55565b34801561050857600080fd5b506103a7610ca0565b34801561051d57600080fd5b50604051600981526020016103b1565b34801561053957600080fd5b506103fc61054836600461229d565b610d0d565b34801561055957600080fd5b5061046d6105683660046123b0565b610d4c565b34801561057957600080fd5b506103fc6105883660046121b4565b60076020526000908152604090205460ff1681565b3480156105a957600080fd5b506103fc6105b83660046121b4565b60096020526000908152604090205460ff1681565b3480156105d957600080fd5b5061046d6105e83660046121b4565b610d98565b3480156105f957600080fd5b506006546103fc90600160a01b900460ff1681565b34801561061a57600080fd5b506019546103fc90600160a81b900460ff1681565b34801561063b57600080fd5b5061046d610de4565b34801561065057600080fd5b506103a7600e5481565b34801561066657600080fd5b506103a7600d5481565b34801561067c57600080fd5b506103a761068b3660046121b4565b6001600160a01b031660009081526020819052604090205490565b3480156106b257600080fd5b5060055461048f906001600160a01b031681565b3480156106d257600080fd5b506103a760105481565b3480156106e857600080fd5b506103a7601b5481565b3480156106fe57600080fd5b5061046d61070d3660046123cc565b610e7c565b34801561071e57600080fd5b506103a7601c5481565b34801561073457600080fd5b506103fc6107433660046121b4565b60086020526000908152604090205460ff1681565b34801561076457600080fd5b5060185461048f906001600160a01b031681565b34801561078457600080fd5b506103a760115481565b34801561079a57600080fd5b506103cf610ef9565b3480156107af57600080fd5b506103a7600f5481565b3480156107c557600080fd5b5061046d6107d4366004612268565b610f08565b3480156107e557600080fd5b5060175461048f906001600160a01b031681565b34801561080557600080fd5b506103fc61081436600461229d565b610f5d565b34801561082557600080fd5b5060155461048f906001600160a01b031681565b34801561084557600080fd5b506103fc61085436600461229d565b610ffa565b34801561086557600080fd5b5061046d6108743660046122c9565b611008565b34801561088557600080fd5b5061046d6108943660046121b4565b61109e565b3480156108a557600080fd5b506103a7600a5481565b3480156108bb57600080fd5b506103fc6108ca3660046121b4565b601a6020526000908152604090205460ff1681565b3480156108eb57600080fd5b5060165461048f906001600160a01b031681565b34801561090b57600080fd5b506103a760135481565b34801561092157600080fd5b5061046d610930366004612413565b6110ea565b34801561094157600080fd5b5061046d6109503660046121b4565b611205565b34801561096157600080fd5b5061046d611251565b34801561097657600080fd5b506019546103fc90600160b01b900460ff1681565b34801561099757600080fd5b5061046d6109a63660046123cc565b61135d565b3480156109b757600080fd5b506103a76109c63660046121ee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109fd57600080fd5b506103a7600b5481565b348015610a1357600080fd5b5061046d610a22366004612395565b6113da565b348015610a3357600080fd5b5060065461048f906001600160a01b031681565b348015610a5357600080fd5b5061046d610a623660046121b4565b611470565b348015610a7357600080fd5b5060145461048f906001600160a01b031681565b348015610a9357600080fd5b5061046d610aa2366004612268565b6114bc565b348015610ab357600080fd5b5061046d61155f565b606060038054610acb9061268b565b80601f0160208091040260200160405190810160405280929190818152602001828054610af79061268b565b8015610b445780601f10610b1957610100808354040283529160200191610b44565b820191906000526020600020905b815481529060010190602001808311610b2757829003601f168201915b5050505050905090565b600033610b5c8185856115b6565b5060019392505050565b6017546001600160a01b03163314610b995760405162461bcd60e51b8152600401610b9090612533565b60405180910390fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600033610bc98582856116da565b610bd485858561176c565b5060019150505b9392505050565b6016546001600160a01b03163314610c0c5760405162461bcd60e51b8152600401610b9090612568565b600a5415610c4f5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b90565b42600a55565b6017546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610b9090612533565b6001600160a01b03166000908152601a60205260409020805460ff19169055565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354600254610d089291610d029190611b3e565b90611b3e565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610b5c9082908690610d4790879061261b565b6115b6565b6017546001600160a01b03163314610d765760405162461bcd60e51b8152600401610b9090612533565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6006546001600160a01b03163314610dc25760405162461bcd60e51b8152600401610b90906124f0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b9090612568565b601480546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601754909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6017546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610b9090612533565b600a54610ec55760405162461bcd60e51b8152600401610b90906124cd565b600a54610ed5906201518061261b565b421015610ef45760405162461bcd60e51b8152600401610b90906124ab565b601c55565b606060048054610acb9061268b565b6017546001600160a01b03163314610f325760405162461bcd60e51b8152600401610b9090612533565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610fe25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b90565b610fef82868684036115b6565b506001949350505050565b600033610fef81858561176c565b6006546001600160a01b031633146110325760405162461bcd60e51b8152600401610b90906124f0565b60005b815181101561109a576001601a6000848481518110611056576110566126f7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611092816126c6565b915050611035565b5050565b6017546001600160a01b031633146110c85760405162461bcd60e51b8152600401610b9090612533565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146111145760405162461bcd60e51b8152600401610b9090612533565b600c869055600d849055600e829055600f85905560108390556011819055600b5461114d908790611147908186896115aa565b906115aa565b601281905550611176600f54611147600b546111476010546011546115aa90919063ffffffff16565b601355601254600c10156111bb5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b90565b601160135411156111fd5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b90565b505050505050565b6017546001600160a01b0316331461122f5760405162461bcd60e51b8152600401610b9090612533565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610b9090612533565b600b546002146112c05760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606401610b90565b600a546112df5760405162461bcd60e51b8152600401610b90906124cd565b600a546112ef906203f48061261b565b42101561130e5760405162461bcd60e51b8152600401610b90906124ab565b6001600b819055600c54600d54600e5461132f9361114792909183916115aa565b601281905550611358600f54611147600b546111476010546011546115aa90919063ffffffff16565b601355565b6017546001600160a01b031633146113875760405162461bcd60e51b8152600401610b9090612533565b600a546113a65760405162461bcd60e51b8152600401610b90906124cd565b600a546113b6906201518061261b565b4210156113d55760405162461bcd60e51b8152600401610b90906124ab565b601b55565b6017546001600160a01b031633146114045760405162461bcd60e51b8152600401610b9090612533565b600a546114235760405162461bcd60e51b8152600401610b90906124cd565b600a54611433906201518061261b565b4210156114525760405162461bcd60e51b8152600401610b90906124ab565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6006546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b90906124f0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146114e65760405162461bcd60e51b8152600401610b9090612533565b600a546115055760405162461bcd60e51b8152600401610b90906124cd565b600a54611515906201518061261b565b4210156115345760405162461bcd60e51b8152600401610b90906124ab565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6016546001600160a01b031633146115895760405162461bcd60e51b8152600401610b9090612568565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000610bdb828461261b565b6001600160a01b0383166116185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b90565b6001600160a01b0382166116795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b90565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461176657818110156117595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b90565b61176684848484036115b6565b50505050565b601954600090600160b01b900460ff166117b95760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b90565b6001600160a01b0384166000908152601a602052604090205460ff161580156117fb57506001600160a01b0383166000908152601a602052604090205460ff16155b61180457600080fd5b601954600160a01b900460ff161561182857611821848484611b4a565b9050610bdb565b601b548211158061185157506001600160a01b03841660009081526008602052604090205460ff165b61188d5760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b6044820152606401610b90565b6001600160a01b03831660009081526008602052604090205460ff161580156118bf5750600654600160a01b900460ff165b1561192c57601c546001600160a01b0384166000908152602081905260409020546118ea90846115aa565b111561192c5760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b6044820152606401610b90565b6015546001600160a01b031633148015906119515750601954600160a01b900460ff16155b80156119665750601954600160a81b900460ff165b80156119835750601d543060009081526020819052604090205410155b1561199057611990611c27565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081529081905291909120546119e1918490612095565b6001600160a01b03851660009081526020818152604080832093909355600790529081205460ff16158015611a2f57506001600160a01b03841660009081526007602052604090205460ff16155b611a395782611a44565b611a448585856120c1565b6001600160a01b038516600090815260208190526040902054909150611a6a90826115aa565b6001600160a01b038086166000908152602081905260409020919091556015548682169116148015611aa85750600a54611aa590603c61261b565b42105b15611ae65760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610b90565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b2b91815260200190565b60405180910390a3506001949350505050565b6000610bdb8284612674565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081529081905291822054611b9a918490612095565b6001600160a01b038086166000908152602081905260408082209390935590851681522054611bc990836115aa565b6001600160a01b038481166000818152602081815260409182902094909455518581529092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b17905530600090815260208190526040812054601254909190819081908190600210611c8a57611c836002611c7d601354611c7d6010548a61217c90919063ffffffff16565b90612188565b9350611cad565b611caa6002611c7d601254611c7d600d548a61217c90919063ffffffff16565b93505b6000611cb98686611b3e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611cf357611cf36126f7565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d4757600080fd5b505afa158015611d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7f91906121d1565b81600181518110611d9257611d926126f7565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790611dd89085906000908690309042906004016125aa565b600060405180830381600087803b158015611df257600080fd5b505af1158015611e06573d6000803e3d6000fd5b505050506000479050600260125411611e7a57611e34601354611c7d6011548461217c90919063ffffffff16565b9550611e51601354611c7d600b548461217c90919063ffffffff16565b9450611e736002611c7d601354611c7d6010548661217c90919063ffffffff16565b9350611ed7565b611e95601254611c7d600e548461217c90919063ffffffff16565b9550611eb2601254611c7d600b548461217c90919063ffffffff16565b9450611ed46002611c7d601254611c7d600d548661217c90919063ffffffff16565b93505b6000611ee985610d028881868c611b3e565b90508115611fd157600560009054906101000a90046001600160a01b03166001600160a01b0316630c50f89d876040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f4157600080fd5b505af1158015611f55573d6000803e3d6000fd5b50506018546040516001600160a01b0390911693508a156108fc0292508a91506000818181858888f19350505050158015611f94573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611fcf573d6000803e3d6000fd5b505b871561207d5760145460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990879060c4016060604051808303818588803b15801561204057600080fd5b505af1158015612054573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061207991906123e5565b5050505b50506019805460ff60a01b1916905550505050505050565b600081848411156120b95760405162461bcd60e51b8152600401610b909190612456565b505050900390565b60155460009081906001600160a01b038581169116146120e3576012546120e7565b6013545b905060006120fa6064611c7d868561217c565b3060009081526020819052604090205490915061211790826115aa565b3060008181526020818152604091829020939093555183815290916001600160a01b038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36121728482611b3e565b9695505050505050565b6000610bdb8284612655565b6000610bdb8284612633565b803561219f81612723565b919050565b8035801515811461219f57600080fd5b6000602082840312156121c657600080fd5b8135610bdb81612723565b6000602082840312156121e357600080fd5b8151610bdb81612723565b6000806040838503121561220157600080fd5b823561220c81612723565b9150602083013561221c81612723565b809150509250929050565b60008060006060848603121561223c57600080fd5b833561224781612723565b9250602084013561225781612723565b929592945050506040919091013590565b6000806040838503121561227b57600080fd5b823561228681612723565b9150612294602084016121a4565b90509250929050565b600080604083850312156122b057600080fd5b82356122bb81612723565b946020939093013593505050565b600060208083850312156122dc57600080fd5b823567ffffffffffffffff808211156122f457600080fd5b818501915085601f83011261230857600080fd5b81358181111561231a5761231a61270d565b8060051b604051601f19603f8301168101818110858211171561233f5761233f61270d565b604052828152858101935084860182860187018a101561235e57600080fd5b600095505b838610156123885761237481612194565b855260019590950194938601938601612363565b5098975050505050505050565b6000602082840312156123a757600080fd5b610bdb826121a4565b600080604083850312156123c357600080fd5b6122bb836121a4565b6000602082840312156123de57600080fd5b5035919050565b6000806000606084860312156123fa57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561242c57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561248357858101830151858201604001528201612467565b81811115612495576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b60208082526023908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460408201526236b4b760e91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125fa5784516001600160a01b0316835293830193918301916001016125d5565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561262e5761262e6126e1565b500190565b60008261265057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561266f5761266f6126e1565b500290565b600082821015612686576126866126e1565b500390565b600181811c9082168061269f57607f821691505b602082108114156126c057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126da576126da6126e1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461273857600080fd5b5056fea264697066735822122066bde435a58658fde273e258146139b21fe9591d7f8c1a1c260299e6685b510b64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ec451baaf10bcb50d3e09c03ac664e6ef56ea04ac29a256d6c4db6032614ae2564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb
-----Decoded View---------------
Arg [0] : initialRouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initialHldBurner (address): 0xf9859aB850A8cC66Ff33001798BaCa257b64bCf5
Arg [2] : initialLockerAddress (address): 0xE2fE530C047f2d85298b07D9333C05737f1435fB
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5
Arg [2] : 000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb
Deployed Bytecode Sourcemap
35573:4657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36397:1433;;;;;;:::i;:::-;;:::i;:::-;;35864:53;;;;;;;;;;-1:-1:-1;35864:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35864:53:0;;;;;;;;;;;;;;;;;5950:14:1;;5943:22;5925:41;;-1:-1:-1;;;;;6040:15:1;;;6035:2;6020:18;;6013:43;6092:15;;;;6072:18;;;6065:43;;;;6139:2;6124:18;;6117:34;6182:3;6167:19;;6160:35;5912:3;5897:19;35864:53:0;;;;;;;;40117:102;;;;;;;;;;-1:-1:-1;40117:102:0;;;;;:::i;:::-;;:::i;35956:28::-;;;;;;;;;;-1:-1:-1;35956:28:0;;;;-1:-1:-1;;;;;35956:28:0;;;;;;-1:-1:-1;;;;;4285:32:1;;;4267:51;;4255:2;4240:18;35956:28:0;4121:203:1;35991:28:0;;;;;;;;;;-1:-1:-1;35991:28:0;;;;-1:-1:-1;;;;;35991:28:0;;;39830:131;;;;;;;;;;-1:-1:-1;39830:131:0;;;;;:::i;:::-;;:::i;39973:136::-;;;;;;;;;;-1:-1:-1;39973:136:0;;;;;:::i;:::-;;:::i;38748:935::-;;;;;;;;;;-1:-1:-1;38748:935:0;;;;;:::i;:::-;;:::i;13033:103::-;;;;;;;;;;;;;:::i;36026:31::-;;;;;;;;;;-1:-1:-1;36026:31:0;;;;-1:-1:-1;;;;;36026:31:0;;;12382:87;;;;;;;;;;-1:-1:-1;12428:7:0;12455:6;-1:-1:-1;;;;;12455:6:0;12382:87;;39695:122;;;;;;;;;;-1:-1:-1;39695:122:0;;;;;:::i;:::-;;:::i;35926:23::-;;;;;;;;;;-1:-1:-1;35926:23:0;;;;-1:-1:-1;;;;;35926:23:0;;;13291:201;;;;;;;;;;-1:-1:-1;13291:201:0;;;;;:::i;:::-;;:::i;37838:902::-;;;;;;:::i;:::-;;:::i;36397:1433::-;36812:25;:15;36830:7;36812:25;:::i;:::-;36798:10;:39;;36790:72;;;;-1:-1:-1;;;36790:72:0;;8934:2:1;36790:72:0;;;8916:21:1;8973:2;8953:18;;;8946:30;-1:-1:-1;;;8992:18:1;;;8985:50;9052:18;;36790:72:0;;;;;;;;;36894:7;36881:9;:20;;36873:53;;;;-1:-1:-1;;;36873:53:0;;7841:2:1;36873:53:0;;;7823:21:1;7880:2;7860:18;;;7853:30;-1:-1:-1;;;7899:18:1;;;7892:50;7959:18;;36873:53:0;7639:344:1;36873:53:0;36967:24;36994:119;;;;;;;;37007:14;36994:119;;;;37023:20;36994:119;;;;37045:12;36994:119;;;;37059:18;36994:119;;;;37078:13;36994:119;;;;37093:19;36994:119;;;36967:146;;37124:20;37163:9;37174:11;37187:13;37202:10;37214:16;37232:10;37244:13;;;;;;;;;-1:-1:-1;;;;;37244:13:0;37259:8;;;;;;;;;-1:-1:-1;;;;;37259:8:0;37269:16;;;;;;;;;-1:-1:-1;;;;;37269:16:0;37287:4;37147:145;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37308:31:0;;-1:-1:-1;;;;;4285:32:1;;4267:51;;37124:168:0;;-1:-1:-1;37308:31:0;;4255:2:1;4240:18;37308:31:0;;;;;;;37394:13;;37377:50;;-1:-1:-1;;;37377:50:0;;-1:-1:-1;;;;;37394:13:0;;;37377:50;;;4955:51:1;-1:-1:-1;;5022:18:1;;;5015:34;37377:16:0;;;;;;4928:18:1;;37377:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;37485:13:0;;37572:33;;-1:-1:-1;;;37572:33:0;;37599:4;37572:33;;;4267:51:1;-1:-1:-1;;;;;37485:13:0;;;;;;37510:22;;37541:9;;37561:8;;37572:18;;;;;4240::1;;37572:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37607:1;37609;37620:4;37627:15;37510:133;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37684:8;-1:-1:-1;;;;;37684:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37761:61;;;;;;;;37772:5;37761:61;;;;;;37779:8;-1:-1:-1;;;;;37779:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37761:61:0;;;;;37796:10;37761:61;;;;;;;;;;;;;;;;-1:-1:-1;37761:61:0;;;;;;;37725:33;;;;;:14;:33;;;;;;;:97;;;;;;;;-1:-1:-1;;;;;;37725:97:0;;;;;;-1:-1:-1;;;;;;37725:97:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37725:97:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37725:97:0;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;36397:1433:0:o;40117:102::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;40189:8:::1;:22:::0;;-1:-1:-1;;;;;;40189:22:0::1;-1:-1:-1::0;;;;;40189:22:0;;;::::1;::::0;;;::::1;::::0;;40117:102::o;39830:131::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;39912:13:::1;:41:::0;;-1:-1:-1;;;;;;39912:41:0::1;-1:-1:-1::0;;;;;39912:41:0;;;::::1;::::0;;;::::1;::::0;;39830:131::o;39973:136::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;40054:16:::1;:47:::0;;-1:-1:-1;;;;;;40054:47:0::1;-1:-1:-1::0;;;;;40054:47:0;;;::::1;::::0;;;::::1;::::0;;39973:136::o;38748:935::-;-1:-1:-1;;;;;38819:28:0;;;;;;;:14;:28;;;;;;;;:34;;;38857:10;38819:48;38811:67;;;;-1:-1:-1;;;38811:67:0;;9644:2:1;38811:67:0;;;9626:21:1;9683:1;9663:18;;;9656:29;-1:-1:-1;;;9701:18:1;;;9694:36;9747:18;;38811:67:0;9442:329:1;38811:67:0;-1:-1:-1;;;;;38897:28:0;;;;;;:14;:28;;;;;:35;;;:44;38889:66;;;;-1:-1:-1;;;38889:66:0;;8597:2:1;38889:66:0;;;8579:21:1;8636:1;8616:18;;;8609:29;-1:-1:-1;;;8654:18:1;;;8647:39;8703:18;;38889:66:0;8395:332:1;38889:66:0;-1:-1:-1;;;;;38984:28:0;;;38968:13;38984:28;;;:14;:28;;;;;;;;;:33;;39045:34;;;39139:13;;39164:55;;-1:-1:-1;;;39164:55:0;;39139:13;;;39164:55;;;4955:51:1;;;-1:-1:-1;;5022:18:1;;;5015:34;38984:33:0;;;;;;;39045:34;;38984:33;;39164:21;;4928:18:1;;39164:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39254:38:0;;-1:-1:-1;;;39254:38:0;;39286:4;39254:38;;;4267:51:1;39233:18:0;;-1:-1:-1;;;;;39254:23:0;;;;;4240:18:1;;39254:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39233:59;;39402:12;-1:-1:-1;;;;;39389:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39440:90:0;;-1:-1:-1;;;39440:90:0;;-1:-1:-1;;;;;39440:25:0;;;-1:-1:-1;39440:25:0;;-1:-1:-1;39440:90:0;;39474:12;;39489:10;;39501:1;;;;39506:6;;39514:15;;39440:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39594:12;-1:-1:-1;;;;;39581:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;39647:28:0;;;;;;;:14;:28;;;;;;;39640:35;;-1:-1:-1;;;;;;39640:35:0;;;;;;;;-1:-1:-1;;;;;;39640:35:0;;;;;;;;;;;;-1:-1:-1;;;;;38748:935:0:o;13033:103::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;13098:30:::1;13125:1;13098:18;:30::i;:::-;13033:103::o:0;39695:122::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;39777:13:::1;:32:::0;;-1:-1:-1;;;;;;39777:32:0::1;-1:-1:-1::0;;;;;39777:32:0;;;::::1;::::0;;;::::1;::::0;;39695:122::o;13291:201::-;12428:7;12455:6;-1:-1:-1;;;;;12455:6:0;4215:10;12602:23;12594:68;;;;-1:-1:-1;;;12594:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13380:22:0;::::1;13372:73;;;::::0;-1:-1:-1;;;13372:73:0;;8190:2:1;13372:73:0::1;::::0;::::1;8172:21:1::0;8229:2;8209:18;;;8202:30;8268:34;8248:18;;;8241:62;-1:-1:-1;;;8319:18:1;;;8312:36;8365:19;;13372:73:0::1;7988:402:1::0;13372:73:0::1;13456:28;13475:8;13456:18;:28::i;:::-;13291:201:::0;:::o;37838:902::-;-1:-1:-1;;;;;37919:28:0;;;;;;;:14;:28;;;;;;;;:34;;;37957:10;37919:48;37911:67;;;;-1:-1:-1;;;37911:67:0;;9644:2:1;37911:67:0;;;9626:21:1;9683:1;9663:18;;;9656:29;-1:-1:-1;;;9701:18:1;;;9694:36;9747:18;;37911:67:0;9442:329:1;37911:67:0;-1:-1:-1;;;;;37997:28:0;;;;;;:14;:28;;;;;:35;;;:44;37989:66;;;;-1:-1:-1;;;37989:66:0;;8597:2:1;37989:66:0;;;8579:21:1;8636:1;8616:18;;;8609:29;-1:-1:-1;;;8654:18:1;;;8647:39;8703:18;;37989:66:0;8395:332:1;37989:66:0;-1:-1:-1;;;;;38086:28:0;;;38070:13;38086:28;;;:14;:28;;;;;;;:33;;38152:39;;;;;38224:13;;;38202:55;;-1:-1:-1;;;38202:55:0;;38224:13;;;38202:55;;;4955:51:1;-1:-1:-1;;5022:18:1;;;5015:34;38086:33:0;;;;;;;;38152:39;38086:33;;38202:21;;4928:18:1;;38202:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38298:38:0;;-1:-1:-1;;;38298:38:0;;38330:4;38298:38;;;4267:51:1;38278:17:0;;-1:-1:-1;;;;;38298:23:0;;;;;4240:18:1;;38298:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38394:13;;;38375:105;;-1:-1:-1;;;38375:105:0;;-1:-1:-1;;;;;4616:15:1;;;38375:105:0;;;4598:34:1;;;;38445:10:0;4648:18:1;;;4641:43;4700:18;;;4693:34;;;4743:18;;;4736:34;;;38278:58:0;;-1:-1:-1;38357:15:0;;38394:13;;;38375:44;;38427:9;;4532:19:1;;38375:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38491:28:0;;;;;;:14;:28;;;;;;:35;;:45;;;38575:46;;-1:-1:-1;;;38575:46:0;;;;38357:123;;-1:-1:-1;38491:28:0;;38575:44;;:46;;;;;38491:28;38575:46;;;;;;38491:28;;38575:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38646:12;-1:-1:-1;;;;;38633:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;38688:28:0;;;;;;;38726:4;38688:28;;;;;;;;:42;;-1:-1:-1;;38688:42:0;;;;;;-1:-1:-1;;;;;37838:902:0:o;13652:191::-;13726:16;13745:6;;-1:-1:-1;;;;;13762:17:0;;;-1:-1:-1;;;;;;13762:17:0;;;;;;13795:40;;13745:6;;;;;;;13795:40;;13726:16;13795:40;13715:128;13652:191;:::o;-1:-1:-1:-;;;;;;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:719::-;196:5;249:3;242:4;234:6;230:17;226:27;216:55;;267:1;264;257:12;216:55;303:6;290:20;329:18;366:2;362;359:10;356:36;;;372:18;;:::i;:::-;447:2;441:9;415:2;501:13;;-1:-1:-1;;497:22:1;;;521:2;493:31;489:40;477:53;;;545:18;;;565:22;;;542:46;539:72;;;591:18;;:::i;:::-;631:10;627:2;620:22;666:2;658:6;651:18;712:3;705:4;700:2;692:6;688:15;684:26;681:35;678:55;;;729:1;726;719:12;678:55;793:2;786:4;778:6;774:17;767:4;759:6;755:17;742:54;840:1;833:4;828:2;820:6;816:15;812:26;805:37;860:6;851:15;;;;;;153:719;;;;:::o;877:247::-;936:6;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;877:247;-1:-1:-1;;;877:247:1:o;1129:251::-;1199:6;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1300:9;1294:16;1319:31;1344:5;1319:31;:::i;1385:277::-;1452:6;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1553:9;1547:16;1606:5;1599:13;1592:21;1585:5;1582:32;1572:60;;1628:1;1625;1618:12;1667:1222;1845:6;1853;1861;1869;1877;1885;1893;1901;1909;1917;1925:7;1934;1988:3;1976:9;1967:7;1963:23;1959:33;1956:53;;;2005:1;2002;1995:12;1956:53;2049:18;2037:9;2024:23;2021:47;2018:67;;;2081:1;2078;2071:12;2018:67;2104;2163:7;2150:9;2137:23;2126:9;2122:39;2104:67;:::i;:::-;2094:77;;2220:18;2214:2;2203:9;2199:18;2186:32;2183:56;2180:76;;;2252:1;2249;2242:12;2180:76;2275;2343:7;2336:2;2325:9;2321:18;2308:32;2297:9;2293:48;2275:76;:::i;:::-;2265:86;;2398:2;2387:9;2383:18;2370:32;2360:42;;2449:2;2438:9;2434:18;2421:32;2411:42;;2500:3;2489:9;2485:19;2472:33;2462:43;;2552:3;2541:9;2537:19;2524:33;2514:43;;2604:3;2593:9;2589:19;2576:33;2566:43;;2656:3;2645:9;2641:19;2628:33;2618:43;;2708:3;2697:9;2693:19;2680:33;2670:43;;2760:3;2749:9;2745:19;2732:33;2722:43;;2785:39;2819:3;2808:9;2804:19;2785:39;:::i;:::-;2774:50;;2844:39;2878:3;2867:9;2863:19;2844:39;:::i;:::-;2833:50;;1667:1222;;;;;;;;;;;;;;:::o;2894:184::-;2964:6;3017:2;3005:9;2996:7;2992:23;2988:32;2985:52;;;3033:1;3030;3023:12;2985:52;-1:-1:-1;3056:16:1;;2894:184;-1:-1:-1;2894:184:1:o;3083:245::-;3162:6;3170;3223:2;3211:9;3202:7;3198:23;3194:32;3191:52;;;3239:1;3236;3229:12;3191:52;-1:-1:-1;;3262:16:1;;3318:2;3303:18;;;3297:25;3262:16;;3297:25;;-1:-1:-1;3083:245:1:o;3333:306::-;3421:6;3429;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3535:9;3529:16;3519:26;;3585:2;3574:9;3570:18;3564:25;3554:35;;3629:2;3618:9;3614:18;3608:25;3598:35;;3333:306;;;;;:::o;3644:472::-;3686:3;3724:5;3718:12;3751:6;3746:3;3739:19;3776:1;3786:162;3800:6;3797:1;3794:13;3786:162;;;3862:4;3918:13;;;3914:22;;3908:29;3890:11;;;3886:20;;3879:59;3815:12;3786:162;;;3966:6;3963:1;3960:13;3957:87;;;4032:1;4025:4;4016:6;4011:3;4007:16;4003:27;3996:38;3957:87;-1:-1:-1;4098:2:1;4077:15;-1:-1:-1;;4073:29:1;4064:39;;;;4105:4;4060:50;;3644:472;-1:-1:-1;;3644:472:1:o;5060:607::-;-1:-1:-1;;;;;5419:15:1;;;5401:34;;5466:2;5451:18;;5444:34;;;;5509:2;5494:18;;5487:34;;;;5552:2;5537:18;;5530:34;;;;5601:15;;;5595:3;5580:19;;5573:44;5381:3;5633:19;;5626:35;;;;5350:3;5335:19;;5060:607::o;6206:1428::-;6638:4;6667:3;6697:2;6686:9;6679:21;6723:45;6764:2;6753:9;6749:18;6741:6;6723:45;:::i;:::-;6709:59;;6816:9;6808:6;6804:22;6799:2;6788:9;6784:18;6777:50;6844:33;6870:6;6862;6844:33;:::i;:::-;6836:41;;;6913:6;6908:2;6897:9;6893:18;6886:34;6956:1;6952;6947:3;6943:11;6939:19;7006:2;6998:6;6994:15;6989:2;6978:9;6974:18;6967:43;7059:2;7051:6;7047:15;7041:3;7030:9;7026:19;7019:44;7112:2;7104:6;7100:15;7094:3;7083:9;7079:19;7072:44;7165:2;7157:6;7153:15;7147:3;7136:9;7132:19;7125:44;7218:2;7210:6;7206:15;7200:3;7189:9;7185:19;7178:44;7271:2;7263:6;7259:15;7253:3;7242:9;7238:19;7231:44;;7318:6;7312:13;7306:3;7295:9;7291:19;7284:42;7381:2;7373:6;7369:15;7363:22;7357:3;7346:9;7342:19;7335:51;7441:2;7433:6;7429:15;7423:22;7417:3;7406:9;7402:19;7395:51;7501:2;7493:6;7489:15;7483:22;7477:3;7466:9;7462:19;7455:51;7561:3;7553:6;7549:16;7543:23;7537:3;7526:9;7522:19;7515:52;7622:3;7614:6;7610:16;7604:23;7598:3;7587:9;7583:19;7576:52;6206:1428;;;;;;;;;;;;;:::o;9081:356::-;9283:2;9265:21;;;9302:18;;;9295:30;9361:34;9356:2;9341:18;;9334:62;9428:2;9413:18;;9081:356::o;9776:225::-;9816:3;9847:1;9843:6;9840:1;9837:13;9834:136;;;9892:10;9887:3;9883:20;9880:1;9873:31;9927:4;9924:1;9917:15;9955:4;9952:1;9945:15;9834:136;-1:-1:-1;9986:9:1;;9776:225::o;10006:127::-;10067:10;10062:3;10058:20;10055:1;10048:31;10098:4;10095:1;10088:15;10122:4;10119:1;10112:15;10138:131;-1:-1:-1;;;;;10213:31:1;;10203:42;;10193:70;;10259:1;10256;10249:12
Swarm Source
ipfs://ec451baaf10bcb50d3e09c03ac664e6ef56ea04ac29a256d6c4db6032614ae25
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.