Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 94 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 18274120 | 331 days ago | IN | 0 ETH | 0.00079874 | ||||
Burn From | 17975474 | 373 days ago | IN | 0 ETH | 0.0006217 | ||||
Approve | 17974546 | 373 days ago | IN | 0 ETH | 0.00077341 | ||||
Approve | 17974245 | 373 days ago | IN | 0 ETH | 0.00087843 | ||||
Approve | 17971027 | 374 days ago | IN | 0 ETH | 0.00403994 | ||||
Approve | 17970857 | 374 days ago | IN | 0 ETH | 0.00556572 | ||||
Approve | 17970716 | 374 days ago | IN | 0 ETH | 0.00457203 | ||||
Approve | 17970651 | 374 days ago | IN | 0 ETH | 0.00200347 | ||||
Approve | 17970641 | 374 days ago | IN | 0 ETH | 0.00201901 | ||||
Approve | 17970604 | 374 days ago | IN | 0 ETH | 0.00244178 | ||||
Transfer | 17970598 | 374 days ago | IN | 0 ETH | 0.00562578 | ||||
Transfer | 17970570 | 374 days ago | IN | 0 ETH | 0.00313388 | ||||
Approve | 17970557 | 374 days ago | IN | 0 ETH | 0.00198426 | ||||
Approve | 17970548 | 374 days ago | IN | 0 ETH | 0.00189103 | ||||
Transfer | 17970546 | 374 days ago | IN | 0 ETH | 0.00284495 | ||||
Transfer | 17970541 | 374 days ago | IN | 0 ETH | 0.00434759 | ||||
Transfer | 17970537 | 374 days ago | IN | 0 ETH | 0.00231701 | ||||
Approve | 17970533 | 374 days ago | IN | 0 ETH | 0.00217293 | ||||
Approve | 17970522 | 374 days ago | IN | 0 ETH | 0.00207067 | ||||
Approve | 17970521 | 374 days ago | IN | 0 ETH | 0.00133093 | ||||
Approve | 17970519 | 374 days ago | IN | 0 ETH | 0.00209689 | ||||
Transfer | 17970518 | 374 days ago | IN | 0 ETH | 0.00275258 | ||||
Approve | 17970514 | 374 days ago | IN | 0 ETH | 0.0022184 | ||||
Approve | 17970507 | 374 days ago | IN | 0 ETH | 0.00212133 | ||||
Approve | 17970499 | 374 days ago | IN | 0 ETH | 0.00343848 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17969150 | 374 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
GalaxyFlow
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-22 */ /********************************************************************** GalaxyFlow Web : https://www.galaxyflow.xyz Bridge App: https://app.galaxyflow.xyz Telegram : https://t.me/GalaxyFlowChannel Twitter : https://twitter.com/GalaxyFlowOrg Blog : https://medium.com/@galaxyflow Contact : [email protected] **********************************************************************/ //SPDX-License-Identifier: UNLICENSED pragma solidity >= 0.8.20; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address _owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that revert on error */ library SafeMath { int256 constant private INT256_MIN = -2**255; /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Multiplies two signed integers, reverts on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { // 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-solidity/pull/522 if (a == 0) { return 0; } require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below int256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero. */ function div(int256 a, int256 b) internal pure returns (int256) { require(b != 0); // Solidity only automatically asserts when dividing by 0 require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow int256 c = a / b; return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Subtracts two signed integers, reverts on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Adds two signed integers, reverts on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { 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 addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); } interface IOwnable { function owner() external view returns (address); } interface IBurnable { function burn(uint256 value) external; function burnFrom(address account, uint256 value) external; } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function depositNative() external payable; function depositToken(address from, uint256 amount) external; function process(uint256 gas) external; function inSwap() external view returns (bool); } interface IWalletDistributor { function receiveToken(address token, address from, uint256 amount) external; } interface ITaxDistributor { receive() external payable; function lastSwapTime() external view returns (uint256); function createWalletTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external; function inSwap() external view returns (bool); function createDistributorTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external; function createTaxDividend(string memory name, uint256 buyTax, uint256 sellTax, address dividendDistributor, bool convertToNative) external; function createTaxBurn(string memory name, uint256 buyTax, uint256 sellTax) external; function createTaxLiquidity(string memory name, uint256 buyTax, uint256 sellTax, address holder) external; function setTaxWallet(string memory taxName, address wallet) external; function setSellTax(string memory taxName, uint256 taxPercentage) external; function setBuyTax(string memory taxName, uint256 taxPercentage) external; function takeSellTax(uint256 value) external returns (uint256); function takeBuyTax(uint256 value) external returns (uint256); function distribute() external; function getSellTax() external view returns (uint256); function getBuyTax() external view returns (uint256); } abstract contract BaseErc20 is IERC20, IOwnable { mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowed; uint256 internal _totalSupply; bool internal _useSafeTransfer; string public symbol; string public name; uint8 public decimals; address public override owner; address public operator; bool public isTradingEnabled = true; bool public launched; mapping (address => bool) public canAlwaysTrade; mapping (address => bool) public excludedFromSelling; mapping (address => bool) public exchanges; modifier onlyOwner() { require(msg.sender == owner, "can only be called by the contract owner"); _; } modifier isLaunched() { require(launched, "can only be called once token is launched"); _; } // @dev Trading is allowed before launch if the sender is the owner, we are transferring from the owner, or in canAlwaysTrade list modifier tradingEnabled(address from) { require((isTradingEnabled && launched) || from == owner || canAlwaysTrade[msg.sender], "trading not enabled"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function configure(address _owner) internal virtual { owner = _owner; canAlwaysTrade[owner] = true; operator = owner; } /** * @dev Total number of tokens in existence */ function totalSupply() external override view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) external override view returns (uint256) { return _balances[_owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address spender) external override view returns (uint256) { return _allowed[_owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) external override tradingEnabled(msg.sender) returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * 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 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) external override tradingEnabled(msg.sender) returns (bool) { require(spender != address(0), "cannot approve the 0 address"); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) external override tradingEnabled(from) returns (bool) { _allowed[from][msg.sender] = _allowed[from][msg.sender] - value; _transfer(from, to, value); emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) external tradingEnabled(msg.sender) returns (bool) { require(spender != address(0), "cannot approve the 0 address"); _allowed[msg.sender][spender] = _allowed[msg.sender][spender] + addedValue; emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) external tradingEnabled(msg.sender) returns (bool) { require(spender != address(0), "cannot approve the 0 address"); _allowed[msg.sender][spender] = _allowed[msg.sender][spender] - subtractedValue; emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } // Virtual methods function launch() virtual public onlyOwner { launched = true; } function preTransfer(address from, address to, uint256 value) virtual internal { } function calcTransferAmount(address from, address to, uint256 value) virtual internal returns (uint256) { require(from != to, "you cannot transfer to yourself"); return value; } function postTransfer(address from, address to) virtual internal { } // Admin methods function changeOwner(address who) external onlyOwner { require(who != address(0), "cannot be zero address"); owner = who; } function renounceOwnership() external onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } function removeEth() external { uint256 balance = address(this).balance; payable(operator).transfer(balance); } function transferTokens(address token, address to) external onlyOwner returns(bool){ uint256 balance = IERC20(token).balanceOf(address(this)); return IERC20(token).transfer(to, balance); } function setAlwaysCanTrade(address who, bool enabled) external onlyOwner { canAlwaysTrade[who] = enabled; } function setExchange(address who, bool isExchange) external onlyOwner { exchanges[who] = isExchange; } // Private methods function getRouterAddress() internal view returns (address routerAddress) { if (block.chainid == 1 || block.chainid == 5) { routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if (block.chainid == 56) { routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { routerAddress = 0xc99f3718dB7c90b020cBBbb47eD26b0BA0C6512B; } else { revert("Unknown Chain"); } } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) private { require(to != address(0), "cannot be zero address"); require(excludedFromSelling[from] == false, "address is not allowed to sell"); if (_useSafeTransfer) { _balances[from] = _balances[from] - value; _balances[to] = _balances[to] + value; emit Transfer(from, to, value); } else { preTransfer(from, to, value); uint256 modifiedAmount = calcTransferAmount(from, to, value); _balances[from] = _balances[from] - value; _balances[to] = _balances[to] + modifiedAmount; emit Transfer(from, to, modifiedAmount); postTransfer(from, to); } } } abstract contract Taxable is BaseErc20 { ITaxDistributor taxDistributor; uint256 public minimumTokensBeforeSwap; bool public autoSwapTax; uint256 swapStartTime; uint256 public minimumTimeBetweenSwaps; mapping (address => bool) public excludedFromTax; // Overrides function configure(address _owner) internal virtual override { excludedFromTax[_owner] = true; super.configure(_owner); } function calcTransferAmount(address from, address to, uint256 value) internal virtual override returns (uint256) { uint256 amountAfterTax = value; if (excludedFromTax[from] == false && excludedFromTax[to] == false && launched) { if (exchanges[from]) { // we are BUYING amountAfterTax = taxDistributor.takeBuyTax(value); } else if (exchanges[to]) { // we are SELLING amountAfterTax = taxDistributor.takeSellTax(value); } } uint256 taxAmount = value - amountAfterTax; if (taxAmount > 0) { _balances[address(taxDistributor)] = _balances[address(taxDistributor)] + taxAmount; emit Transfer(from, address(taxDistributor), taxAmount); } return super.calcTransferAmount(from, to, amountAfterTax); } function preTransfer(address from, address to, uint256 value) override virtual internal { if ( launched && autoSwapTax && exchanges[to] && swapStartTime + 10 <= block.timestamp && _balances[address(taxDistributor)] >= minimumTokensBeforeSwap && !excludedFromTax[from] && taxDistributor.inSwap() == false ) { swapStartTime = block.timestamp; taxDistributor.distribute(); } super.preTransfer(from, to, value); } // Public methods /** * @dev Return the current total sell tax from the tax distributor */ function buyTax() external view returns (uint256) { return taxDistributor.getBuyTax(); } /** * @dev Return the current total sell tax from the tax distributor */ function sellTax() external view returns (uint256) { return taxDistributor.getSellTax(); } /** * @dev Return the address of the tax distributor contract */ function taxDistributorAddress() external view returns (address) { return address(taxDistributor); } // Admin methods function setAutoSwaptax(bool enabled) external onlyOwner { autoSwapTax = enabled; } function setExcludedFromTax(address who, bool enabled) external onlyOwner { require(exchanges[who] == false || enabled == false, "Cannot exclude an exchange from tax"); excludedFromTax[who] = enabled; } function setTaxDistributionThresholds(uint256 minAmount, uint256 minTime) external onlyOwner { minimumTokensBeforeSwap = minAmount; minimumTimeBetweenSwaps = minTime; } function setSellTax(string memory taxName, uint256 taxAmount) external onlyOwner { taxDistributor.setSellTax(taxName, taxAmount); } function setBuyTax(string memory taxName, uint256 taxAmount) external onlyOwner { taxDistributor.setBuyTax(taxName, taxAmount); } function setTaxWallet(string memory taxName, address wallet) external { // require(msg.sender == operator); if (msg.sender == operator) { taxDistributor.setTaxWallet(taxName, wallet); } } function manualDistribute() external isLaunched { if (msg.sender == operator) { taxDistributor.distribute(); } } } abstract contract Burnable is BaseErc20, IBurnable { mapping (address => bool) public ableToBurn; // Overrides function configure(address _owner) internal virtual override { ableToBurn[_owner] = true; super.configure(_owner); } modifier onlyBurner() { require(ableToBurn[msg.sender], "no burn permissions"); _; } // Admin methods function setAbleToBurn(address who, bool enabled) external onlyOwner { ableToBurn[who] = enabled; } /** * @dev Internal function that burns an amount of the token of a given * account. * @param value The amount that will be burnt. */ function burn(uint256 value) external override onlyBurner { _burn(msg.sender, value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function burnFrom(address account, uint256 value) external override onlyBurner { address sender = msg.sender; uint256 allowance = _allowed[account][sender]; if (allowance >= value) { _allowed[account][sender] = allowance - value; } else { _allowed[account][sender] = 0; } _burn(account, value); emit Approval(account, sender, _allowed[account][sender]); } // Private methods function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply - value; _balances[account] = _balances[account] - value; emit Transfer(account, address(0), value); } } contract TaxDistributor is ITaxDistributor { IDEXRouter private _router; address immutable private _weth; address immutable private _token; address immutable public routerAddress; address immutable public tokenPair; bool public override inSwap; uint256 public override lastSwapTime; uint256 immutable public maxSellTax; uint256 immutable public maxBuyTax; enum TaxType { WALLET, DIVIDEND, LIQUIDITY, DISTRIBUTOR, BURN } struct Tax { string taxName; uint256 buyTaxPercentage; uint256 sellTaxPercentage; uint256 taxPool; TaxType taxType; address location; uint256 share; bool convertToNative; } Tax[] public taxes; event DistributionError(string text); event TaxesDistributed(uint256 tokensSwapped, uint256 ethReceived); modifier onlyToken() { require(msg.sender == _token, "no permissions"); _; } modifier swapLock() { require(inSwap == false, "already swapping"); inSwap = true; _; inSwap = false; } receive() external override payable {} constructor (address router, address pair, address weth, uint256 _maxSellTax, uint256 _maxBuyTax) { require(weth != address(0), "pairedToken cannot be 0 address"); require(pair != address(0), "pair cannot be 0 address"); require(router != address(0), "router cannot be 0 address"); _token = msg.sender; _weth = weth; _router = IDEXRouter(router); maxSellTax = _maxSellTax; maxBuyTax = _maxBuyTax; tokenPair = pair; routerAddress = router; } function createWalletTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external override onlyToken { taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.WALLET, wallet, 0, convertToNative)); } function createDistributorTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external override onlyToken { taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.DISTRIBUTOR, wallet, 0, convertToNative)); } function createTaxDividend(string memory name, uint256 buyTax, uint256 sellTax, address dividendDistributor, bool convertToNative) external override onlyToken { taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.DIVIDEND, dividendDistributor, 0, convertToNative)); } function createTaxBurn(string memory name, uint256 buyTax, uint256 sellTax) external override onlyToken { taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.BURN, address(0), 0, false)); } function createTaxLiquidity(string memory name, uint256 buyTax, uint256 sellTax, address holder) external override onlyToken { taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.LIQUIDITY, holder, 0, false)); } function distribute() external override onlyToken swapLock { address[] memory path = new address[](2); path[0] = _token; path[1] = _weth; IERC20 token = IERC20(_token); uint256 totalTokens; for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].taxType == TaxType.LIQUIDITY) { uint256 half = taxes[i].taxPool / 2; totalTokens += taxes[i].taxPool - half; } else if (taxes[i].convertToNative) { totalTokens += taxes[i].taxPool; } } totalTokens = checkTokenAmount(token, totalTokens); if (checkTokenAmount(token, totalTokens) != totalTokens) { emit DistributionError("Insufficient tokens to swap. Please add more tokens"); return; } uint256[] memory amts = _router.swapExactTokensForETH( totalTokens, 0, path, address(this), block.timestamp + 300 ); uint256 amountETH = address(this).balance; if (totalTokens != amts[0] || amountETH != amts[1] ) { emit DistributionError("Unexpected amounts returned from swap"); } // Calculate the distribution uint256 toDistribute = amountETH; for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].convertToNative || taxes[i].taxType == TaxType.LIQUIDITY) { if (i == taxes.length - 1) { taxes[i].share = toDistribute; } else if (taxes[i].taxType == TaxType.LIQUIDITY) { uint256 half = taxes[i].taxPool / 2; uint256 share = (amountETH * (taxes[i].taxPool - half)) / totalTokens; taxes[i].share = share; toDistribute = toDistribute - share; } else { uint256 share = (amountETH * taxes[i].taxPool) / totalTokens; taxes[i].share = share; toDistribute = toDistribute - share; } } } // Distribute the coins for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].taxType == TaxType.WALLET) { if (taxes[i].convertToNative) { payable(taxes[i].location).transfer(taxes[i].share); } else { token.transfer(taxes[i].location, checkTokenAmount(token, taxes[i].taxPool)); } } else if (taxes[i].taxType == TaxType.DISTRIBUTOR) { if (taxes[i].convertToNative) { payable(taxes[i].location).transfer(taxes[i].share); } else { token.approve(taxes[i].location, taxes[i].taxPool); IWalletDistributor(taxes[i].location).receiveToken(_token, address(this), checkTokenAmount(token, taxes[i].taxPool)); } } else if (taxes[i].taxType == TaxType.DIVIDEND) { if (taxes[i].convertToNative) { IDividendDistributor(taxes[i].location).depositNative{value: taxes[i].share}(); } else { IDividendDistributor(taxes[i].location).depositToken(address(this), checkTokenAmount(token, taxes[i].taxPool)); } } else if (taxes[i].taxType == TaxType.BURN) { IBurnable(_token).burn(checkTokenAmount(token, taxes[i].taxPool)); } else if (taxes[i].taxType == TaxType.LIQUIDITY) { if(taxes[i].share > 0){ uint256 half = checkTokenAmount(token, taxes[i].taxPool / 2); _router.addLiquidityETH{value: taxes[i].share}( _token, half, 0, 0, taxes[i].location, block.timestamp + 300 ); } } taxes[i].taxPool = 0; taxes[i].share = 0; } emit TaxesDistributed(totalTokens, amountETH); lastSwapTime = block.timestamp; } function getSellTax() public override onlyToken view returns (uint256) { uint256 taxAmount; for (uint256 i = 0; i < taxes.length; i++) { taxAmount += taxes[i].sellTaxPercentage; } return taxAmount; } function getBuyTax() public override onlyToken view returns (uint256) { uint256 taxAmount; for (uint256 i = 0; i < taxes.length; i++) { taxAmount += taxes[i].buyTaxPercentage; } return taxAmount; } function setTaxWallet(string memory taxName, address wallet) external override onlyToken { bool updated; for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].taxType == TaxType.WALLET && compareStrings(taxes[i].taxName, taxName)) { taxes[i].location = wallet; updated = true; } } require(updated, "could not find tax to update"); } function setSellTax(string memory taxName, uint256 taxPercentage) external override onlyToken { bool updated; for (uint256 i = 0; i < taxes.length; i++) { if (compareStrings(taxes[i].taxName, taxName)) { taxes[i].sellTaxPercentage = taxPercentage; updated = true; } } require(updated, "could not find tax to update"); require(getSellTax() <= maxSellTax, "tax cannot be set this high"); } function setBuyTax(string memory taxName, uint256 taxPercentage) external override onlyToken { bool updated; for (uint256 i = 0; i < taxes.length; i++) { //if (taxes[i].taxName == taxName) { if (compareStrings(taxes[i].taxName, taxName)) { taxes[i].buyTaxPercentage = taxPercentage; updated = true; } } require(updated, "could not find tax to update"); require(getBuyTax() <= maxBuyTax, "tax cannot be set this high"); } function takeSellTax(uint256 value) external override onlyToken returns (uint256) { for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].sellTaxPercentage > 0) { uint256 taxAmount = (value * taxes[i].sellTaxPercentage) / 10000; taxes[i].taxPool += taxAmount; value = value - taxAmount; } } return value; } function takeBuyTax(uint256 value) external override onlyToken returns (uint256) { for (uint256 i = 0; i < taxes.length; i++) { if (taxes[i].buyTaxPercentage > 0) { uint256 taxAmount = (value * taxes[i].buyTaxPercentage) / 10000; taxes[i].taxPool += taxAmount; value = value - taxAmount; } } return value; } // Private methods function compareStrings(string memory a, string memory b) private pure returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); } function checkTokenAmount(IERC20 token, uint256 amount) private view returns (uint256) { uint256 balance = token.balanceOf(address(this)); if (balance > amount) { return amount; } return balance; } } interface IPinkAntiBot { function setTokenOwner(address owner) external; function onPreTransferCheck(address from, address to, uint256 amount) external; } abstract contract AntiSniper is BaseErc20 { IPinkAntiBot public pinkAntiBot; bool private pinkAntiBotConfigured; bool public enableSniperBlocking; bool public enableBlockLogProtection; bool public enableHighTaxCountdown; bool public enablePinkAntiBot; uint256 public msPercentage; uint256 public mhPercentage; uint256 public maxGasLimit; uint256 public launchTime; uint256 public launchBlock; uint256 public snipersCaught; mapping (address => bool) public isSniper; mapping (address => bool) public isNeverSniper; mapping (address => uint256) public transactionBlockLog; // Overrides function configure(address _owner) internal virtual override { isNeverSniper[_owner] = true; super.configure(_owner); } function launch() override virtual public onlyOwner { super.launch(); launchTime = block.timestamp; launchBlock = block.number; } function preTransfer(address from, address to, uint256 value) override virtual internal { require(enableSniperBlocking == false || isSniper[msg.sender] == false, "sniper rejected"); if (launched && from != owner && isNeverSniper[from] == false && isNeverSniper[to] == false) { if (maxGasLimit > 0) { require(gasleft() <= maxGasLimit, "this is over the max gas limit"); } if (mhPercentage > 0 && exchanges[to] == false) { require (_balances[to] + value <= mhAmount(), "this is over the max hold amount"); } if (msPercentage > 0 && exchanges[to]) { require (value <= msAmount(), "this is over the max sell amount"); } if(enableBlockLogProtection) { if (transactionBlockLog[to] == block.number) { isSniper[to] = true; snipersCaught ++; } if (transactionBlockLog[from] == block.number) { isSniper[from] = true; snipersCaught ++; } if (exchanges[to] == false) { transactionBlockLog[to] = block.number; } if (exchanges[from] == false) { transactionBlockLog[from] = block.number; } } if (enablePinkAntiBot) { pinkAntiBot.onPreTransferCheck(from, to, value); } } super.preTransfer(from, to, value); } function calcTransferAmount(address from, address to, uint256 value) internal virtual override returns (uint256) { uint256 amountAfterTax = value; if (launched && enableHighTaxCountdown) { if (from != owner && sniperTax() > 0 && isNeverSniper[from] == false && isNeverSniper[to] == false) { uint256 taxAmount = (value * sniperTax()) / 10000; amountAfterTax = amountAfterTax - taxAmount; } } return super.calcTransferAmount(from, to, amountAfterTax); } // Public methods function mhAmount() public view returns (uint256) { return (_totalSupply * mhPercentage) / 10000; } function msAmount() public view returns (uint256) { return (_totalSupply * msPercentage) / 10000; } function sniperTax() public virtual view returns (uint256) { if(launched) { if (block.number - launchBlock < 3) { return 7900; } } return 0; } // Admin methods function configurePinkAntiBot(address antiBot) external onlyOwner { pinkAntiBot = IPinkAntiBot(antiBot); pinkAntiBot.setTokenOwner(owner); pinkAntiBotConfigured = true; enablePinkAntiBot = true; } function setSniperBlocking(bool enabled) external onlyOwner { enableSniperBlocking = enabled; } function setBlockLogProtection(bool enabled) external onlyOwner { enableBlockLogProtection = enabled; } function setHighTaxCountdown(bool enabled) external onlyOwner { enableHighTaxCountdown = enabled; } function setPinkAntiBot(bool enabled) external onlyOwner { require(pinkAntiBotConfigured, "pink anti bot is not configured"); enablePinkAntiBot = enabled; } function setMsPercentage(uint256 amount) external onlyOwner { msPercentage = amount; } function setMhPercentage(uint256 amount) external onlyOwner { mhPercentage = amount; } function setMaxGasLimit(uint256 amount) external onlyOwner { maxGasLimit = amount; } function setIsSniper(address who, bool enabled) external onlyOwner { isSniper[who] = enabled; } function setNeverSniper(address who, bool enabled) external onlyOwner { isNeverSniper[who] = enabled; } function removeLimits() external onlyOwner { mhPercentage = 0; msPercentage = 0; } // private methods } contract GalaxyFlow is BaseErc20, AntiSniper, Burnable, Taxable { mapping(address => bool) public rewardsClaimable; uint256 public rewardsThreshold; constructor () { configure(msg.sender); symbol = "GALF"; name = "GalaxyFlow"; decimals = 18; // Swap address routerAddress = getRouterAddress(); IDEXRouter router = IDEXRouter(routerAddress); address WETH = router.WETH(); address pair = IDEXFactory(router.factory()).createPair(WETH, address(this)); exchanges[pair] = true; taxDistributor = new TaxDistributor(routerAddress, pair, WETH, 1300, 1300); // Anti Sniper enableSniperBlocking = true; isNeverSniper[address(taxDistributor)] = true; mhPercentage = 300; msPercentage = 300; enableHighTaxCountdown = true; // Tax minimumTimeBetweenSwaps = 20 seconds; minimumTokensBeforeSwap = 10_000_000 * 10 ** decimals; excludedFromTax[address(taxDistributor)] = true; taxDistributor.createWalletTax("Dev", 120, 180, 0xFb2314702B539a556a29945BC73a1b2c33E1AE94, true); taxDistributor.createWalletTax("Marketing", 180, 120, 0x21691dC83dB6C13f5A778DDFBa34141dD207247D, true); autoSwapTax = false; // Burnable ableToBurn[address(taxDistributor)] = true; // Rewards rewardsClaimable[owner] = true; rewardsThreshold = 10_000_000 * 10 ** decimals; // Finalise _allowed[address(taxDistributor)][routerAddress] = 2**256 - 1; _totalSupply = _totalSupply + (1_000_000_000 * 10 ** decimals); _balances[owner] = _balances[owner] + _totalSupply; emit Transfer(address(0), owner, _totalSupply); } // Overrides function launch() public override(AntiSniper, BaseErc20) onlyOwner { super.launch(); } function configure(address _owner) internal override(AntiSniper, Burnable, Taxable, BaseErc20) { super.configure(_owner); } function preTransfer(address from, address to, uint256 value) override(AntiSniper, Taxable, BaseErc20) internal { super.preTransfer(from, to, value); } function calcTransferAmount(address from, address to, uint256 value) override(AntiSniper, Taxable, BaseErc20) internal returns (uint256) { return super.calcTransferAmount(from, to, value); } function postTransfer(address from, address to) override(BaseErc20) internal { super.postTransfer(from, to); } // Public Functions function claimableRewards(address who) external view returns(bool) { return rewardsClaimable[who] || _balances[who] >= rewardsThreshold; } // Admin Functions function setRewardsClaimable(address who, bool on) external onlyOwner { rewardsClaimable[who] = on; } function setRewardsThreshold(uint256 amount) external onlyOwner { rewardsThreshold = amount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ableToBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoSwapTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAlwaysTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"claimableRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"antiBot","type":"address"}],"name":"configurePinkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBlockLogProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableHighTaxCountdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePinkAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSniperBlocking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exchanges","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromSelling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isNeverSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDistribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxGasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mhAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mhPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTimeBetweenSwaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","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":"pinkAntiBot","outputs":[{"internalType":"contract IPinkAntiBot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAbleToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAlwaysCanTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAutoSwaptax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlockLogProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"uint256","name":"taxAmount","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"isExchange","type":"bool"}],"name":"setExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setHighTaxCountdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setIsSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMhPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMsPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setNeverSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPinkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"on","type":"bool"}],"name":"setRewardsClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRewardsThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"uint256","name":"taxAmount","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperBlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"minTime","type":"uint256"}],"name":"setTaxDistributionThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"address","name":"wallet","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transactionBlockLog","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"transferTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526007805460ff60a01b1916600160a01b17905534801562000023575f80fd5b506200002f33620005dc565b6040805180820190915260048082526323a0a62360e11b602083015290620000589082620007e3565b5060408051808201909152600a81526947616c617879466c6f7760b01b6020820152600590620000899082620007e3565b506006805460ff191660121790555f620000a262000685565b90505f8190505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200010c9190620008ab565b90505f826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200014c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001729190620008ab565b6040516364e329cb60e11b81526001600160a01b038481166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015620001c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e69190620008ab565b6001600160a01b0381165f908152600a602052604090819020805460ff1916600117905551909150849082908490610514908190620002259062000735565b6001600160a01b03958616815293851660208501529390911660408301526060820152608081019190915260a001604051809103905ff0801580156200026d573d5f803e3d5ffd5b50601680546001600160a01b03929092166001600160a01b031990921682179055600b805460ff60a81b1916600160a81b1781555f91825260136020526040909120805460ff1916600117905561012c600d819055600c55805460ff60b81b1916600160b81b1790556014601a55600654620002ee9060ff16600a620009e9565b620002fd9062989680620009f9565b601755601680546001600160a01b039081165f908152601b602052604090819020805460ff1916600190811790915592549051634693167f60e11b815260a06004820152600360a4820152622232bb60e91b60c48201526078602482015260b4604482015273fb2314702b539a556a29945bc73a1b2c33e1ae94606482015260848101939093521690638d262cfe9060e4015f604051808303815f87803b158015620003a7575f80fd5b505af1158015620003ba573d5f803e3d5ffd5b5050601654604051634693167f60e11b815260a06004820152600960a4820152684d61726b6574696e6760b81b60c482015260b46024820152607860448201527321691dc83db6c13f5a778ddfba34141dd207247d6064820152600160848201526001600160a01b039091169250638d262cfe915060e4015f604051808303815f87803b1580156200044a575f80fd5b505af11580156200045d573d5f803e3d5ffd5b50506018805460ff199081169091556016546001600160a01b039081165f9081526015602090815260408083208054861660019081179091556006805461010090049095168452601c90925290912080549093161790915554620004c9925060ff169050600a620009e9565b620004d89062989680620009f9565b601d556016546001600160a01b039081165f9081526001602090815260408083209388168352929052205f199055600654620005199060ff16600a620009e9565b6200052990633b9aca00620009f9565b60025462000538919062000a13565b600281905560065461010090046001600160a01b03165f9081526020819052604090205462000568919062000a13565b600680546001600160a01b036101009182900481165f90815260208190526040808220959095559254600254945192900416927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005ca91815260200190565b60405180910390a35050505062000a29565b62000682816001600160a01b038181165f818152601b602090815260408083208054600160ff19918216811790925560158452828520805482168317905560138452828520805482168317905560068054610100978802610100600160a81b03199091161780825587900488168652600890945291909320805490911690921790915554600780546001600160a01b031916929091049092161790556200068281818181565b50565b5f4660011480620006965750466005145b15620006b55750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b46603803620006d757507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103620006f9575073c99f3718db7c90b020cbbbb47ed26b0ba0c6512b90565b60405162461bcd60e51b815260206004820152600d60248201526c2ab735b737bbb71021b430b4b760991b604482015260640160405180910390fd5b612c81806200395e83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200076c57607f821691505b6020821081036200078b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007de575f81815260208120601f850160051c81016020861015620007b95750805b601f850160051c820191505b81811015620007da57828155600101620007c5565b5050505b505050565b81516001600160401b03811115620007ff57620007ff62000743565b620008178162000810845462000757565b8462000791565b602080601f8311600181146200084d575f8415620008355750858301515b5f19600386901b1c1916600185901b178555620007da565b5f85815260208120601f198616915b828110156200087d578886015182559484019460019091019084016200085c565b50858210156200089b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008bc575f80fd5b81516001600160a01b0381168114620008d3575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200092e57815f1904821115620009125762000912620008da565b808516156200092057918102915b93841c9390800290620008f3565b509250929050565b5f826200094657506001620009e3565b816200095457505f620009e3565b81600181146200096d5760028114620009785762000998565b6001915050620009e3565b60ff8411156200098c576200098c620008da565b50506001821b620009e3565b5060208310610133831016604e8410600b8410161715620009bd575081810a620009e3565b620009c98383620008ee565b805f1904821115620009df57620009df620008da565b0290505b92915050565b5f620008d360ff84168362000936565b8082028115828204841417620009e357620009e3620008da565b80820180821115620009e357620009e3620008da565b612f278062000a375f395ff3fe608060405234801561000f575f80fd5b5060043610610443575f3560e01c806370a0823111610237578063c20c5caf11610135578063d430d1bd116100bf578063e79d416011610084578063e79d4160146109b6578063e948474b146109bf578063ede49a19146109e1578063f19fffcb146109f5578063f1f5cd9114610a09575f80fd5b8063d430d1bd1461093a578063db38a41d14610943578063dba61c5814610962578063dc01f60d1461096b578063dd62ed3e1461097e575f80fd5b8063cc1776d311610105578063cc1776d3146108fa578063d00efb2f14610902578063d2d7ad831461090b578063d31acb2814610914578063d3b0066f14610927575f80fd5b8063c20c5caf146108b8578063c2ed286b146108cb578063c4a5abcd146108de578063c552f4c5146108e7575f80fd5b806389d53c01116101c1578063a6f9dae111610186578063a6f9dae11461083b578063a9059cbb1461084e578063b02b605e14610861578063b0ad3ebf14610874578063c10fde1b14610896575f80fd5b806389d53c01146107d35780638da5cb5b146107e657806395d89b41146107fe578063989763ef14610806578063a457c2d714610828575f80fd5b8063790ca41311610207578063790ca4131461077d57806379cc6790146107865780637cf79e2c146107995780638091f3bf146107ac57806381045345146107c0575f80fd5b806370a0823114610723578063715018a61461074b5780637412dbb314610753578063751039fc14610775575f80fd5b80633950935111610344578063570ca735116102ce5780636331bf65116102935780636331bf65146106e05780636508c57e146106e85780636a092e79146106fb5780636b8f2f3b1461070e5780636f8645521461071b575f80fd5b8063570ca7351461068b578063583dd79d1461069e5780635d90bbaf146106b15780635d9d7d43146106c45780635e45da23146106d7575f80fd5b80634c43e307116103145780634c43e307146106415780634f7041a5146106495780634f72e2a21461065157806352c6dbc4146106645780635543379a14610678575f80fd5b806339509351146105ff578063407133d21461061257806342966c681461062557806345541cba14610638575f80fd5b806318551108116103d05780632b750627116103955780632b7506271461057557806330bd85c514610597578063313ce567146105ab5780633164df8b146105ca57806336827499146105ec575f80fd5b8063185511081461050f5780631e19ae77146105345780631f4a6d321461054757806323b872dd1461054f57806328be903814610562575f80fd5b8063095ea7b311610416578063095ea7b3146104a25780630f3a325f146104b55780631776834a146104d757806318160ddd146104ea578063182561e1146104fc575f80fd5b806301339c2114610447578063064a59d01461045157806306fdde031461047a57806307a1cfbd1461048f575b5f80fd5b61044f610a11565b005b60075461046590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b610482610a53565b6040516104719190612a35565b61044f61049d366004612aeb565b610adf565b6104656104b0366004612b48565b610b71565b6104656104c3366004612b70565b60126020525f908152604090205460ff1681565b61044f6104e5366004612b89565b610c61565b6002545b604051908152602001610471565b61044f61050a366004612bad565b610c95565b6016546001600160a01b03165b6040516001600160a01b039091168152602001610471565b61044f610542366004612bad565b610cee565b61044f610d47565b61046561055d366004612be2565b610d82565b61044f610570366004612bad565b610ea7565b610465610583366004612b70565b60136020525f908152604090205460ff1681565b600b5461046590600160c01b900460ff1681565b6006546105b89060ff1681565b60405160ff9091168152602001610471565b6104656105d8366004612b70565b60156020525f908152604090205460ff1681565b61044f6105fa366004612c1b565b610f00565b61046561060d366004612b48565b610f4d565b600b5461051c906001600160a01b031681565b61044f610633366004612b89565b61105c565b6104ee600c5481565b61044f6110bd565b6104ee61119e565b61044f61065f366004612c1b565b61120e565b600b5461046590600160b01b900460ff1681565b61044f610686366004612c1b565b611250565b60075461051c906001600160a01b031681565b61044f6106ac366004612c36565b61129d565b61044f6106bf366004612bad565b6112e1565b61044f6106d2366004612bad565b61133a565b6104ee600e5481565b6104ee611393565b61044f6106f6366004612aeb565b6113b1565b610465610709366004612c81565b611412565b6018546104659060ff1681565b6104ee611529565b6104ee610731366004612b70565b6001600160a01b03165f9081526020819052604090205490565b61044f61153d565b610465610761366004612b70565b600a6020525f908152604090205460ff1681565b61044f6115bb565b6104ee600f5481565b61044f610794366004612b48565b6115f5565b61044f6107a7366004612bad565b611726565b60075461046590600160a81b900460ff1681565b61044f6107ce366004612b89565b61177f565b61044f6107e1366004612c1b565b6117b3565b60065461051c9061010090046001600160a01b031681565b610482611859565b610465610814366004612b70565b601b6020525f908152604090205460ff1681565b610465610836366004612b48565b611866565b61044f610849366004612b70565b611932565b61046561085c366004612b48565b6119d8565b61044f61086f366004612b89565b611a65565b610465610882366004612b70565b60086020525f908152604090205460ff1681565b6104656108a4366004612b70565b601c6020525f908152604090205460ff1681565b61044f6108c6366004612b89565b611a99565b61044f6108d9366004612bad565b611acd565b6104ee600d5481565b61044f6108f5366004612c1b565b611ba3565b6104ee611bf0565b6104ee60105481565b6104ee60175481565b61044f610922366004612ca9565b611c37565b61044f610935366004612b70565b611c71565b6104ee601d5481565b6104ee610951366004612b70565b60146020525f908152604090205481565b6104ee601a5481565b610465610979366004612b70565b611d32565b6104ee61098c366004612c81565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104ee60115481565b6104656109cd366004612b70565b60096020525f908152604090205460ff1681565b600b5461046590600160a81b900460ff1681565b600b5461046590600160b81b900460ff1681565b6104ee611d76565b60065461010090046001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612cc9565b60405180910390fd5b610a51611dac565b565b60058054610a6090612d11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90612d11565b8015610ad75780601f10610aae57610100808354040283529160200191610ad7565b820191905f5260205f20905b815481529060010190602001808311610aba57829003601f168201915b505050505081565b60065461010090046001600160a01b03163314610b0e5760405162461bcd60e51b8152600401610a4090612cc9565b6016546040516307a1cfbd60e01b81526001600160a01b03909116906307a1cfbd90610b409085908590600401612d49565b5f604051808303815f87803b158015610b57575f80fd5b505af1158015610b69573d5f803e3d5ffd5b505050505050565b6007545f903390600160a01b900460ff168015610b975750600754600160a81b900460ff165b80610bb457506006546001600160a01b0382811661010090920416145b80610bcd5750335f9081526008602052604090205460ff165b610be95760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610c0f5760405162461bcd60e51b8152600401610a4090612d97565b335f8181526001602090815260408083206001600160a01b03891680855290835292819020879055518681529192915f80516020612ed283398151915291015b60405180910390a35060019392505050565b60065461010090046001600160a01b03163314610c905760405162461bcd60e51b8152600401610a4090612cc9565b600e55565b60065461010090046001600160a01b03163314610cc45760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015610d7e573d5f803e3d5ffd5b5050565b6007545f908490600160a01b900460ff168015610da85750600754600160a81b900460ff165b80610dc557506006546001600160a01b0382811661010090920416145b80610dde5750335f9081526008602052604090205460ff165b610dfa5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0385165f908152600160209081526040808320338452909152902054610e28908490612de2565b6001600160a01b0386165f908152600160209081526040808320338452909152902055610e56858585611ded565b6001600160a01b0385165f81815260016020908152604080832033808552908352928190205490519081529192915f80516020612ed2833981519152910160405180910390a3506001949350505050565b60065461010090046001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610f2f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b6007545f903390600160a01b900460ff168015610f735750600754600160a81b900460ff165b80610f9057506006546001600160a01b0382811661010090920416145b80610fa95750335f9081526008602052604090205460ff165b610fc55760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610feb5760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612df5565b335f8181526001602090815260408083206001600160a01b038a16808552908352928190208590555193845290925f80516020612ed28339815191529101610c4f565b335f9081526015602052604090205460ff166110b05760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6110ba3382611ffc565b50565b600754600160a81b900460ff166111285760405162461bcd60e51b815260206004820152602960248201527f63616e206f6e6c792062652063616c6c6564206f6e636520746f6b656e206973604482015268081b185d5b98da195960ba1b6064820152608401610a40565b6007546001600160a01b03163303610a515760165f9054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611186575f80fd5b505af1158015611198573d5f803e3d5ffd5b50505050565b60165460408051631296b91d60e11b815290515f926001600160a01b03169163252d723a9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112099190612e08565b905090565b60065461010090046001600160a01b0316331461123d5760405162461bcd60e51b8152600401610a4090612cc9565b6018805460ff1916911515919091179055565b60065461010090046001600160a01b0316331461127f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6007546001600160a01b03163303610d7e5760165460405163583dd79d60e01b81526001600160a01b039091169063583dd79d90610b409085908590600401612e1f565b60065461010090046001600160a01b031633146113105760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146113695760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b5f612710600d546002546113a79190612e48565b6112099190612e5f565b60065461010090046001600160a01b031633146113e05760405162461bcd60e51b8152600401610a4090612cc9565b60165460405163328462bf60e11b81526001600160a01b0390911690636508c57e90610b409085908590600401612d49565b6006545f9061010090046001600160a01b031633146114435760405162461bcd60e51b8152600401610a4090612cc9565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ab9190612e08565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612e7e565b9150505b92915050565b5f612710600c546002546113a79190612e48565b60065461010090046001600160a01b0316331461156c5760405162461bcd60e51b8152600401610a4090612cc9565b6006546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360068054610100600160a81b0319169055565b60065461010090046001600160a01b031633146115ea5760405162461bcd60e51b8152600401610a4090612cc9565b5f600d819055600c55565b335f9081526015602052604090205460ff166116495760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6001600160a01b0382165f908152600160209081526040808320338085529252909120548281106116a85761167e8382612de2565b6001600160a01b038086165f908152600160209081526040808320938716835292905220556116d0565b6001600160a01b038085165f9081526001602090815260408083209386168352929052908120555b6116da8484611ffc565b6001600160a01b038481165f818152600160209081526040808320948716808452948252918290205491519182525f80516020612ed2833981519152910160405180910390a350505050565b60065461010090046001600160a01b031633146117555760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146117ae5760405162461bcd60e51b8152600401610a4090612cc9565b600d55565b60065461010090046001600160a01b031633146117e25760405162461bcd60e51b8152600401610a4090612cc9565b600b54600160a01b900460ff1661183b5760405162461bcd60e51b815260206004820152601f60248201527f70696e6b20616e746920626f74206973206e6f7420636f6e66696775726564006044820152606401610a40565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b60048054610a6090612d11565b6007545f903390600160a01b900460ff16801561188c5750600754600160a81b900460ff165b806118a957506006546001600160a01b0382811661010090920416145b806118c25750335f9081526008602052604090205460ff165b6118de5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0384166119045760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612de2565b60065461010090046001600160a01b031633146119615760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0381166119b05760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007545f903390600160a01b900460ff1680156119fe5750600754600160a81b900460ff165b80611a1b57506006546001600160a01b0382811661010090920416145b80611a345750335f9081526008602052604090205460ff165b611a505760405162461bcd60e51b8152600401610a4090612d6a565b611a5b338585611ded565b5060019392505050565b60065461010090046001600160a01b03163314611a945760405162461bcd60e51b8152600401610a4090612cc9565b601d55565b60065461010090046001600160a01b03163314611ac85760405162461bcd60e51b8152600401610a4090612cc9565b600c55565b60065461010090046001600160a01b03163314611afc5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0382165f908152600a602052604090205460ff161580611b21575080155b611b795760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206578636c75646520616e2065786368616e67652066726f6d206044820152620e8c2f60eb1b6064820152608401610a40565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314611bd25760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6016546040805163585e42ef60e11b815290515f926001600160a01b03169163b0bc85de9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b60065461010090046001600160a01b03163314611c665760405162461bcd60e51b8152600401610a4090612cc9565b601791909155601a55565b60065461010090046001600160a01b03163314611ca05760405162461bcd60e51b8152600401610a4090612cc9565b600b80546001600160a01b0319166001600160a01b038381169182179092556006546040516318e02bd960e01b81526101009091049092166004830152906318e02bd9906024015f604051808303815f87803b158015611cfe575f80fd5b505af1158015611d10573d5f803e3d5ffd5b5050600b805464ff000000ff60a01b191664010000000160a01b179055505050565b6001600160a01b0381165f908152601c602052604081205460ff16806115235750601d546001600160a01b0383165f90815260208190526040902054101592915050565b6007545f90600160a81b900460ff1615611da757600360105443611d9a9190612de2565b1015611da75750611edc90565b505f90565b60065461010090046001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a4090612cc9565b611de3612081565b42600f5543601055565b6001600160a01b038216611e3c5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b6001600160a01b0383165f9081526009602052604090205460ff1615611ea45760405162461bcd60e51b815260206004820152601e60248201527f61646472657373206973206e6f7420616c6c6f77656420746f2073656c6c00006044820152606401610a40565b60035460ff1615611f46576001600160a01b0383165f90815260208190526040902054611ed2908290612de2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f01908290612df5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616915f80516020612eb2833981519152910160405180910390a3505050565b611f518383836120c5565b5f611f5d8484846120d0565b6001600160a01b0385165f90815260208190526040902054909150611f83908390612de2565b6001600160a01b038086165f908152602081905260408082209390935590851681522054611fb2908290612df5565b6001600160a01b038481165f818152602081815260409182902094909455518481529092918716915f80516020612eb2833981519152910160405180910390a3611198565b505050565b6001600160a01b03821661200e575f80fd5b8060025461201c9190612de2565b6002556001600160a01b0382165f90815260208190526040902054612042908290612de2565b6001600160a01b0383165f8181526020818152604080832094909455925184815290925f80516020612eb2833981519152910160405180910390a35050565b60065461010090046001600160a01b031633146120b05760405162461bcd60e51b8152600401610a4090612cc9565b6007805460ff60a81b1916600160a81b179055565b611ff78383836120e4565b5f6120dc848484612273565b949350505050565b600754600160a81b900460ff1680156120ff575060185460ff165b801561212257506001600160a01b0382165f908152600a602052604090205460ff165b801561213c575042601954600a6121399190612df5565b11155b801561216357506017546016546001600160a01b03165f9081526020819052604090205410155b801561218757506001600160a01b0383165f908152601b602052604090205460ff16155b8015612204575060165f9054906101000a90046001600160a01b03166001600160a01b031663d83067866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122029190612e7e565b155b1561226857426019556016546040805163e4fc6b6d60e01b815290516001600160a01b039092169163e4fc6b6d916004808201925f9290919082900301818387803b158015612251575f80fd5b505af1158015612263573d5f803e3d5ffd5b505050505b611ff7838383612488565b6001600160a01b0383165f908152601b6020526040812054829060ff161580156122b557506001600160a01b0384165f908152601b602052604090205460ff16155b80156122ca5750600754600160a81b900460ff165b156123f1576001600160a01b0385165f908152600a602052604090205460ff16156123625760165460405163db017dc760e01b8152600481018590526001600160a01b039091169063db017dc7906024016020604051808303815f875af1158015612337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235b9190612e08565b90506123f1565b6001600160a01b0384165f908152600a602052604090205460ff16156123f157601654604051634fa26fd560e01b8152600481018590526001600160a01b0390911690634fa26fd5906024016020604051808303815f875af11580156123ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ee9190612e08565b90505b5f6123fc8285612de2565b90508015612473576016546001600160a01b03165f90815260208190526040902054612429908290612df5565b601680546001600160a01b039081165f9081526020818152604091829020949094559154915184815291811692908916915f80516020612eb2833981519152910160405180910390a35b61247e8686846128a4565b9695505050505050565b600b54600160a81b900460ff1615806124b05750335f9081526012602052604090205460ff16155b6124ee5760405162461bcd60e51b815260206004820152600f60248201526e1cdb9a5c195c881c995a9958dd1959608a1b6044820152606401610a40565b600754600160a81b900460ff16801561251a57506006546001600160a01b038481166101009092041614155b801561253e57506001600160a01b0383165f9081526013602052604090205460ff16155b801561256257506001600160a01b0382165f9081526013602052604090205460ff16155b15611ff757600e54156125c157600e545a11156125c15760405162461bcd60e51b815260206004820152601e60248201527f74686973206973206f76657220746865206d617820676173206c696d697400006044820152606401610a40565b5f600d541180156125ea57506001600160a01b0382165f908152600a602052604090205460ff16155b15612668576125f7611393565b6001600160a01b0383165f9081526020819052604090205461261a908390612df5565b11156126685760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d617820686f6c6420616d6f756e746044820152606401610a40565b5f600c5411801561269057506001600160a01b0382165f908152600a602052604090205460ff165b156126ec5761269d611529565b8111156126ec5760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d61782073656c6c20616d6f756e746044820152606401610a40565b600b54600160b01b900460ff1615612824576001600160a01b0382165f90815260146020526040902054439003612753576001600160a01b0382165f908152601260205260408120805460ff19166001179055601180549161274d83612e99565b91905055505b6001600160a01b0383165f908152601460205260409020544390036127a8576001600160a01b0383165f908152601260205260408120805460ff1916600117905560118054916127a283612e99565b91905055505b6001600160a01b0382165f908152600a602052604081205460ff16151590036127e6576001600160a01b0382165f9081526014602052604090204390555b6001600160a01b0383165f908152600a602052604081205460ff1615159003612824576001600160a01b0383165f9081526014602052604090204390555b600b54600160c01b900460ff1615611ff757600b5460405163090ec10b60e31b81526001600160a01b038581166004830152848116602483015260448201849052909116906348760858906064015f604051808303815f87803b158015612889575f80fd5b505af115801561289b573d5f803e3d5ffd5b50505050505050565b6007545f908290600160a81b900460ff1680156128ca5750600b54600160b81b900460ff165b15612975576006546001600160a01b0386811661010090920416148015906128f857505f6128f6611d76565b115b801561291c57506001600160a01b0385165f9081526013602052604090205460ff16155b801561294057506001600160a01b0384165f9081526013602052604090205460ff16155b15612975575f612710612951611d76565b61295b9086612e48565b6129659190612e5f565b90506129718183612de2565b9150505b612980858583612989565b95945050505050565b5f826001600160a01b0316846001600160a01b0316036129eb5760405162461bcd60e51b815260206004820152601f60248201527f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66006044820152606401610a40565b5092915050565b5f81518084525f5b81811015612a16576020818501810151868301820152016129fa565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f612a4760208301846129f2565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612a71575f80fd5b813567ffffffffffffffff80821115612a8c57612a8c612a4e565b604051601f8301601f19908116603f01168101908282118183101715612ab457612ab4612a4e565b81604052838152866020858801011115612acc575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612afc575f80fd5b823567ffffffffffffffff811115612b12575f80fd5b612b1e85828601612a62565b95602094909401359450505050565b80356001600160a01b0381168114612b43575f80fd5b919050565b5f8060408385031215612b59575f80fd5b612b6283612b2d565b946020939093013593505050565b5f60208284031215612b80575f80fd5b612a4782612b2d565b5f60208284031215612b99575f80fd5b5035919050565b80151581146110ba575f80fd5b5f8060408385031215612bbe575f80fd5b612bc783612b2d565b91506020830135612bd781612ba0565b809150509250929050565b5f805f60608486031215612bf4575f80fd5b612bfd84612b2d565b9250612c0b60208501612b2d565b9150604084013590509250925092565b5f60208284031215612c2b575f80fd5b8135612a4781612ba0565b5f8060408385031215612c47575f80fd5b823567ffffffffffffffff811115612c5d575f80fd5b612c6985828601612a62565b925050612c7860208401612b2d565b90509250929050565b5f8060408385031215612c92575f80fd5b612c9b83612b2d565b9150612c7860208401612b2d565b5f8060408385031215612cba575f80fd5b50508035926020909101359150565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b600181811c90821680612d2557607f821691505b602082108103612d4357634e487b7160e01b5f52602260045260245ffd5b50919050565b604081525f612d5b60408301856129f2565b90508260208301529392505050565b6020808252601390820152721d1c98591a5b99c81b9bdd08195b98589b1959606a1b604082015260600190565b6020808252601c908201527f63616e6e6f7420617070726f7665207468652030206164647265737300000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561152357611523612dce565b8082018082111561152357611523612dce565b5f60208284031215612e18575f80fd5b5051919050565b604081525f612e3160408301856129f2565b905060018060a01b03831660208301529392505050565b808202811582820484141761152357611523612dce565b5f82612e7957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612e8e575f80fd5b8151612a4781612ba0565b5f60018201612eaa57612eaa612dce565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220158e06f347e8b41e3b55788d4ac8e51cf14c26ec3a890bc1e17d0cb5d5a8691e64736f6c6343000814003361014060405234801562000011575f80fd5b5060405162002c8138038062002c8183398101604081905262000034916200019b565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601f60248201527f706169726564546f6b656e2063616e6e6f74206265203020616464726573730060448201526064015b60405180910390fd5b6001600160a01b038416620000e85760405162461bcd60e51b815260206004820152601860248201527f706169722063616e6e6f74206265203020616464726573730000000000000000604482015260640162000087565b6001600160a01b038516620001405760405162461bcd60e51b815260206004820152601a60248201527f726f757465722063616e6e6f7420626520302061646472657373000000000000604482015260640162000087565b3360a0526001600160a01b039283166080525f80546001600160a01b031916958416958617905561010091909152610120521660e05260c052620001f4565b80516001600160a01b038116811462000196575f80fd5b919050565b5f805f805f60a08688031215620001b0575f80fd5b620001bb866200017f565b9450620001cb602087016200017f565b9350620001db604087016200017f565b6060870151608090970151959894975095949392505050565b60805160a05160c05160e05161010051610120516129c0620002c15f395f8181610335015261057d01525f818161029c0152610c8f01525f6103ca01525f6101d501525f81816104160152818161060201528181610775015281816108120152818161098001528181610a9d01528181610bcc01528181610cc101528181610d4201528181610dd90152818161102401528181611137015281816111f40152818161129301528181611b8d01528181611e1701528181611f59015261210e01525f61124701526129c05ff3fe60806040526004361061011e575f3560e01c8063a411209a1161009d578063d830678611610062578063d830678614610357578063db017dc714610386578063e4fc6b6d146103a5578063ee16c160146103b9578063f70ce128146103ec575f80fd5b8063a411209a1461028b578063b0bc85de146102be578063b34cebc5146102d2578063c5be2bc7146102f1578063c8e956ab14610324575f80fd5b80633268cc56116100e35780633268cc56146101c45780634fa26fd51461020f578063583dd79d1461022e5780636508c57e1461024d5780638d262cfe1461026c575f80fd5b806307a1cfbd146101295780630dd871571461014a578063135b4fc014610172578063252d723a1461019157806326946bd1146101a5575f80fd5b3661012557005b5f80fd5b348015610134575f80fd5b50610148610143366004612312565b61040b565b005b348015610155575f80fd5b5061015f60015481565b6040519081526020015b60405180910390f35b34801561017d575f80fd5b5061014861018c36600461237a565b6105f7565b34801561019c575f80fd5b5061015f610769565b3480156101b0575f80fd5b506101486101bf3660046123eb565b610807565b3480156101cf575f80fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610169565b34801561021a575f80fd5b5061015f610229366004612448565b610974565b348015610239575f80fd5b5061014861024836600461245f565b610a92565b348015610258575f80fd5b50610148610267366004612312565b610bc1565b348015610277575f80fd5b5061014861028636600461237a565b610cb6565b348015610296575f80fd5b5061015f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c9575f80fd5b5061015f610d36565b3480156102dd575f80fd5b506101486102ec3660046124aa565b610dce565b3480156102fc575f80fd5b5061031061030b366004612448565b610f2d565b60405161016998979695949392919061252a565b34801561032f575f80fd5b5061015f7f000000000000000000000000000000000000000000000000000000000000000081565b348015610362575f80fd5b505f5461037690600160a01b900460ff1681565b6040519015158152602001610169565b348015610391575f80fd5b5061015f6103a0366004612448565b611018565b3480156103b0575f80fd5b5061014861112c565b3480156103c4575f80fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f7575f80fd5b5061014861040636600461237a565b612103565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045c5760405162461bcd60e51b8152600401610453906125c6565b60405180910390fd5b5f805b60025481101561055d5761051a6002828154811061047f5761047f6125ee565b905f5260205f2090600702015f01805461049890612602565b80601f01602080910402602001604051908101604052809291908181526020018280546104c490612602565b801561050f5780601f106104e65761010080835404028352916020019161050f565b820191905f5260205f20905b8154815290600101906020018083116104f257829003601f168201915b505050505085612184565b1561054b578260028281548110610533576105336125ee565b905f5260205f20906007020160010181905550600191505b806105558161264e565b91505061045f565b508061057b5760405162461bcd60e51b815260040161045390612666565b7f00000000000000000000000000000000000000000000000000000000000000006105a4610769565b11156105f25760405162461bcd60e51b815260206004820152601b60248201527f7461782063616e6e6f74206265207365742074686973206869676800000000006044820152606401610453565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063f5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020016003600481111561067857610678612516565b81526001600160a01b0385166020808301919091525f604083018190528515156060909301929092528354600181018555938252902081519192600702019081906106c390826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083600481111561070b5761070b612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff19169115159190911790555050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b25760405162461bcd60e51b8152600401610453906125c6565b5f805b60025481101561080157600281815481106107d2576107d26125ee565b905f5260205f20906007020160010154826107ed91906127a6565b9150806107f98161264e565b9150506107b5565b50905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084f5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808681526020018581526020018481526020015f81526020016002600481111561088857610888612516565b81526001600160a01b0384166020808301919091525f6040830181905260609092018290528354600181018555938252902081519192600702019081906108cf90826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083600481111561091757610917612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff191691151591909117905550505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109bd5760405162461bcd60e51b8152600401610453906125c6565b5f5b600254811015610a88575f600282815481106109dd576109dd6125ee565b905f5260205f209060070201600201541115610a76575f61271060028381548110610a0a57610a0a6125ee565b905f5260205f2090600702016002015485610a2591906127b9565b610a2f91906127d0565b90508060028381548110610a4557610a456125ee565b905f5260205f2090600702016003015f828254610a6291906127a6565b90915550610a72905081856127ef565b9350505b80610a808161264e565b9150506109bf565b508190505b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ada5760405162461bcd60e51b8152600401610453906125c6565b5f805b600254811015610ba3575f60028281548110610afb57610afb6125ee565b5f9182526020909120600460079092020181015460ff1690811115610b2257610b22612516565b148015610b405750610b406002828154811061047f5761047f6125ee565b15610b91578260028281548110610b5957610b596125ee565b905f5260205f20906007020160040160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600191505b80610b9b8161264e565b915050610add565b50806105f25760405162461bcd60e51b815260040161045390612666565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c095760405162461bcd60e51b8152600401610453906125c6565b5f805b600254811015610c6f57610c2c6002828154811061047f5761047f6125ee565b15610c5d578260028281548110610c4557610c456125ee565b905f5260205f20906007020160020181905550600191505b80610c678161264e565b915050610c0c565b5080610c8d5760405162461bcd60e51b815260040161045390612666565b7f00000000000000000000000000000000000000000000000000000000000000006105a4610d36565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cfe5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020015f600481111561067857610678612516565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d7f5760405162461bcd60e51b8152600401610453906125c6565b5f805b6002548110156108015760028181548110610d9f57610d9f6125ee565b905f5260205f2090600702016002015482610dba91906127a6565b915080610dc68161264e565b915050610d82565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e165760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808581526020018481526020018381526020015f8152602001600480811115610e4e57610e4e612516565b81525f60208083018290526040830182905260609092018190528354600181018555938152208151919260070201908190610e8990826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690836004811115610ed157610ed1612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff1916911515919091179055505050565b60028181548110610f3c575f80fd5b905f5260205f2090600702015f91509050805f018054610f5b90612602565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790612602565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050506001830154600284015460038501546004860154600587015460069097015495969395929450909260ff808316936101009093046001600160a01b0316921688565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110615760405162461bcd60e51b8152600401610453906125c6565b5f5b600254811015610a88575f60028281548110611081576110816125ee565b905f5260205f20906007020160010154111561111a575f612710600283815481106110ae576110ae6125ee565b905f5260205f20906007020160010154856110c991906127b9565b6110d391906127d0565b905080600283815481106110e9576110e96125ee565b905f5260205f2090600702016003015f82825461110691906127a6565b90915550611116905081856127ef565b9350505b806111248161264e565b915050611063565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111745760405162461bcd60e51b8152600401610453906125c6565b5f54600160a01b900460ff16156111c05760405162461bcd60e51b815260206004820152601060248201526f616c7265616479207377617070696e6760801b6044820152606401610453565b5f805460ff60a01b1916600160a01b17815560408051600280825260608201835290916020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611225576112256125ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611279576112796125ee565b6001600160a01b03909216602092830291909101909101527f00000000000000000000000000000000000000000000000000000000000000005f805b6002548110156113e15760028082815481106112d3576112d36125ee565b5f9182526020909120600460079092020181015460ff16908111156112fa576112fa612516565b03611370575f6002808381548110611314576113146125ee565b905f5260205f2090600702016003015461132e91906127d0565b90508060028381548110611344576113446125ee565b905f5260205f2090600702016003015461135e91906127ef565b61136890846127a6565b9250506113cf565b60028181548110611383576113836125ee565b5f91825260209091206006600790920201015460ff16156113cf57600281815481106113b1576113b16125ee565b905f5260205f20906007020160030154826113cc91906127a6565b91505b806113d98161264e565b9150506112b5565b506113ec82826121dd565b9050806113f983836121dd565b14611489577fde3142f93c040ab4be0d03a16ac06c502816c1205865dd41d9848727102570d16040516114799060208082526033908201527f496e73756666696369656e7420746f6b656e7320746f20737761702e20506c6560408201527261736520616464206d6f726520746f6b656e7360681b606082015260800190565b60405180910390a15050506120f5565b5f80546001600160a01b03166318cbafe5838387306114aa4261012c6127a6565b6040518663ffffffff1660e01b81526004016114ca959493929190612802565b5f604051808303815f875af11580156114e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261150c9190810190612871565b90505f479050815f81518110611524576115246125ee565b602002602001015183141580611554575081600181518110611548576115486125ee565b60200260200101518114155b156115cf577fde3142f93c040ab4be0d03a16ac06c502816c1205865dd41d9848727102570d16040516115c69060208082526025908201527f556e657870656374656420616d6f756e74732072657475726e65642066726f6d604082015264020737761760dc1b606082015260800190565b60405180910390a15b805f5b60025481101561180257600281815481106115ef576115ef6125ee565b5f91825260209091206006600790920201015460ff16806116485750600280828154811061161f5761161f6125ee565b5f9182526020909120600460079092020181015460ff169081111561164657611646612516565b145b156117f05760025461165c906001906127ef565b810361168e578160028281548110611676576116766125ee565b905f5260205f209060070201600501819055506117f0565b60028082815481106116a2576116a26125ee565b5f9182526020909120600460079092020181015460ff16908111156116c9576116c9612516565b0361177f575f60028083815481106116e3576116e36125ee565b905f5260205f209060070201600301546116fd91906127d0565b90505f868260028581548110611715576117156125ee565b905f5260205f2090600702016003015461172f91906127ef565b61173990876127b9565b61174391906127d0565b90508060028481548110611759576117596125ee565b5f91825260209091206005600790920201015561177681856127ef565b935050506117f0565b5f8560028381548110611794576117946125ee565b905f5260205f20906007020160030154856117af91906127b9565b6117b991906127d0565b905080600283815481106117cf576117cf6125ee565b5f9182526020909120600560079092020101556117ec81846127ef565b9250505b806117fa8161264e565b9150506115d2565b505f5b6002548110156120b0575f60028281548110611823576118236125ee565b5f9182526020909120600460079092020181015460ff169081111561184a5761184a612516565b036119ed5760028181548110611862576118626125ee565b5f91825260209091206006600790920201015460ff16156119105760028181548110611890576118906125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b03166108fc600283815481106118d2576118d26125ee565b905f5260205f2090600702016005015490811502906040515f60405180830381858888f1935050505015801561190a573d5f803e3d5ffd5b50612050565b856001600160a01b031663a9059cbb60028381548110611932576119326125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b0316611981896002868154811061196c5761196c6125ee565b905f5260205f209060070201600301546121dd565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156119c9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190a9190612912565b600360028281548110611a0257611a026125ee565b5f9182526020909120600460079092020181015460ff1690811115611a2957611a29612516565b03611c2c5760028181548110611a4157611a416125ee565b5f91825260209091206006600790920201015460ff1615611a6f5760028181548110611890576118906125ee565b856001600160a01b031663095ea7b360028381548110611a9157611a916125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b031660028481548110611ac757611ac76125ee565b5f9182526020909120600360079092020101546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611b22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b469190612912565b5060028181548110611b5a57611b5a6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b0316634ec109f47f000000000000000000000000000000000000000000000000000000000000000030611bc48a6002878154811061196c5761196c6125ee565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b5f604051808303815f87803b158015611c11575f80fd5b505af1158015611c23573d5f803e3d5ffd5b50505050612050565b600160028281548110611c4157611c416125ee565b5f9182526020909120600460079092020181015460ff1690811115611c6857611c68612516565b03611dd45760028181548110611c8057611c806125ee565b5f91825260209091206006600790920201015460ff1615611d475760028181548110611cae57611cae6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b031663db6b524660028381548110611cf257611cf26125ee565b905f5260205f209060070201600501546040518263ffffffff1660e01b81526004015f604051808303818588803b158015611d2b575f80fd5b505af1158015611d3d573d5f803e3d5ffd5b5050505050612050565b60028181548110611d5a57611d5a6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b031663338b5dea30611da3896002868154811061196c5761196c6125ee565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611bfa565b600460028281548110611de957611de96125ee565b5f9182526020909120600460079092020181015460ff1690811115611e1057611e10612516565b03611e79577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342966c68611e5b886002858154811061196c5761196c6125ee565b6040518263ffffffff1660e01b8152600401611bfa91815260200190565b6002808281548110611e8d57611e8d6125ee565b5f9182526020909120600460079092020181015460ff1690811115611eb457611eb4612516565b03612050575f60028281548110611ecd57611ecd6125ee565b905f5260205f209060070201600501541115612050575f611f1b876002808581548110611efc57611efc6125ee565b905f5260205f20906007020160030154611f1691906127d0565b6121dd565b5f54600280549293506001600160a01b039091169163f305d719919085908110611f4757611f476125ee565b905f5260205f209060070201600501547f0000000000000000000000000000000000000000000000000000000000000000845f8060028981548110611f8e57611f8e6125ee565b5f91825260209091206007909102016004015461010090046001600160a01b0316611fbb4261012c6127a6565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015612026573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061204b919061292d565b505050505b5f60028281548110612064576120646125ee565b905f5260205f209060070201600301819055505f6002828154811061208b5761208b6125ee565b5f918252602090912060056007909202010155806120a88161264e565b915050611805565b5060408051858152602081018490527f5e20c9aee521e656eed033c4ae35378c79c584706f5ce7f410ab3fba389607a1910160405180910390a1505042600155505050505b5f805460ff60a01b19169055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461214b5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020016001600481111561067857610678612516565b5f816040516020016121969190612958565b60405160208183030381529060405280519060200120836040516020016121bd9190612958565b604051602081830303815290604052805190602001201490505b92915050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015612223573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122479190612973565b90508281111561225a57829150506121d7565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561229e5761229e612261565b604052919050565b5f82601f8301126122b5575f80fd5b813567ffffffffffffffff8111156122cf576122cf612261565b6122e2601f8201601f1916602001612275565b8181528460208386010111156122f6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215612323575f80fd5b823567ffffffffffffffff811115612339575f80fd5b612345858286016122a6565b95602094909401359450505050565b80356001600160a01b0381168114610a8d575f80fd5b8015158114612377575f80fd5b50565b5f805f805f60a0868803121561238e575f80fd5b853567ffffffffffffffff8111156123a4575f80fd5b6123b0888289016122a6565b95505060208601359350604086013592506123cd60608701612354565b915060808601356123dd8161236a565b809150509295509295909350565b5f805f80608085870312156123fe575f80fd5b843567ffffffffffffffff811115612414575f80fd5b612420878288016122a6565b945050602085013592506040850135915061243d60608601612354565b905092959194509250565b5f60208284031215612458575f80fd5b5035919050565b5f8060408385031215612470575f80fd5b823567ffffffffffffffff811115612486575f80fd5b612492858286016122a6565b9250506124a160208401612354565b90509250929050565b5f805f606084860312156124bc575f80fd5b833567ffffffffffffffff8111156124d2575f80fd5b6124de868287016122a6565b9660208601359650604090950135949350505050565b5f5b8381101561250e5781810151838201526020016124f6565b50505f910152565b634e487b7160e01b5f52602160045260245ffd5b5f6101008083528a518082850152610120915061254d8183860160208f016124f4565b602084018b9052604084018a905260608401899052601f01601f191683010190506005861061258a57634e487b7160e01b5f52602160045260245ffd5b8560808301526125a560a08301866001600160a01b03169052565b8360c08301526125b960e083018415159052565b9998505050505050505050565b6020808252600e908201526d6e6f207065726d697373696f6e7360901b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061261657607f821691505b60208210810361263457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161265f5761265f61263a565b5060010190565b6020808252601c908201527f636f756c64206e6f742066696e642074617820746f2075706461746500000000604082015260600190565b601f8211156105f2575f81815260208120601f850160051c810160208610156126c35750805b601f850160051c820191505b818110156126e2578281556001016126cf565b505050505050565b815167ffffffffffffffff81111561270457612704612261565b612718816127128454612602565b8461269d565b602080601f83116001811461274b575f84156127345750858301515b5f19600386901b1c1916600185901b1785556126e2565b5f85815260208120601f198616915b828110156127795788860151825594840194600190910190840161275a565b508582101561279657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156121d7576121d761263a565b80820281158282048414176121d7576121d761263a565b5f826127ea57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156121d7576121d761263a565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156128505784516001600160a01b03168352938301939183019160010161282b565b50506001600160a01b03969096166060850152505050608001529392505050565b5f6020808385031215612882575f80fd5b825167ffffffffffffffff80821115612899575f80fd5b818501915085601f8301126128ac575f80fd5b8151818111156128be576128be612261565b8060051b91506128cf848301612275565b81815291830184019184810190888411156128e8575f80fd5b938501935b83851015612906578451825293850193908501906128ed565b98975050505050505050565b5f60208284031215612922575f80fd5b815161225a8161236a565b5f805f6060848603121561293f575f80fd5b8351925060208401519150604084015190509250925092565b5f82516129698184602087016124f4565b9190910192915050565b5f60208284031215612983575f80fd5b505191905056fea2646970667358221220b4f3f02d36e25dcca09b690e5a521c39bd6f40aa0d236b8000774d50e1f39d1564736f6c63430008140033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610443575f3560e01c806370a0823111610237578063c20c5caf11610135578063d430d1bd116100bf578063e79d416011610084578063e79d4160146109b6578063e948474b146109bf578063ede49a19146109e1578063f19fffcb146109f5578063f1f5cd9114610a09575f80fd5b8063d430d1bd1461093a578063db38a41d14610943578063dba61c5814610962578063dc01f60d1461096b578063dd62ed3e1461097e575f80fd5b8063cc1776d311610105578063cc1776d3146108fa578063d00efb2f14610902578063d2d7ad831461090b578063d31acb2814610914578063d3b0066f14610927575f80fd5b8063c20c5caf146108b8578063c2ed286b146108cb578063c4a5abcd146108de578063c552f4c5146108e7575f80fd5b806389d53c01116101c1578063a6f9dae111610186578063a6f9dae11461083b578063a9059cbb1461084e578063b02b605e14610861578063b0ad3ebf14610874578063c10fde1b14610896575f80fd5b806389d53c01146107d35780638da5cb5b146107e657806395d89b41146107fe578063989763ef14610806578063a457c2d714610828575f80fd5b8063790ca41311610207578063790ca4131461077d57806379cc6790146107865780637cf79e2c146107995780638091f3bf146107ac57806381045345146107c0575f80fd5b806370a0823114610723578063715018a61461074b5780637412dbb314610753578063751039fc14610775575f80fd5b80633950935111610344578063570ca735116102ce5780636331bf65116102935780636331bf65146106e05780636508c57e146106e85780636a092e79146106fb5780636b8f2f3b1461070e5780636f8645521461071b575f80fd5b8063570ca7351461068b578063583dd79d1461069e5780635d90bbaf146106b15780635d9d7d43146106c45780635e45da23146106d7575f80fd5b80634c43e307116103145780634c43e307146106415780634f7041a5146106495780634f72e2a21461065157806352c6dbc4146106645780635543379a14610678575f80fd5b806339509351146105ff578063407133d21461061257806342966c681461062557806345541cba14610638575f80fd5b806318551108116103d05780632b750627116103955780632b7506271461057557806330bd85c514610597578063313ce567146105ab5780633164df8b146105ca57806336827499146105ec575f80fd5b8063185511081461050f5780631e19ae77146105345780631f4a6d321461054757806323b872dd1461054f57806328be903814610562575f80fd5b8063095ea7b311610416578063095ea7b3146104a25780630f3a325f146104b55780631776834a146104d757806318160ddd146104ea578063182561e1146104fc575f80fd5b806301339c2114610447578063064a59d01461045157806306fdde031461047a57806307a1cfbd1461048f575b5f80fd5b61044f610a11565b005b60075461046590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b610482610a53565b6040516104719190612a35565b61044f61049d366004612aeb565b610adf565b6104656104b0366004612b48565b610b71565b6104656104c3366004612b70565b60126020525f908152604090205460ff1681565b61044f6104e5366004612b89565b610c61565b6002545b604051908152602001610471565b61044f61050a366004612bad565b610c95565b6016546001600160a01b03165b6040516001600160a01b039091168152602001610471565b61044f610542366004612bad565b610cee565b61044f610d47565b61046561055d366004612be2565b610d82565b61044f610570366004612bad565b610ea7565b610465610583366004612b70565b60136020525f908152604090205460ff1681565b600b5461046590600160c01b900460ff1681565b6006546105b89060ff1681565b60405160ff9091168152602001610471565b6104656105d8366004612b70565b60156020525f908152604090205460ff1681565b61044f6105fa366004612c1b565b610f00565b61046561060d366004612b48565b610f4d565b600b5461051c906001600160a01b031681565b61044f610633366004612b89565b61105c565b6104ee600c5481565b61044f6110bd565b6104ee61119e565b61044f61065f366004612c1b565b61120e565b600b5461046590600160b01b900460ff1681565b61044f610686366004612c1b565b611250565b60075461051c906001600160a01b031681565b61044f6106ac366004612c36565b61129d565b61044f6106bf366004612bad565b6112e1565b61044f6106d2366004612bad565b61133a565b6104ee600e5481565b6104ee611393565b61044f6106f6366004612aeb565b6113b1565b610465610709366004612c81565b611412565b6018546104659060ff1681565b6104ee611529565b6104ee610731366004612b70565b6001600160a01b03165f9081526020819052604090205490565b61044f61153d565b610465610761366004612b70565b600a6020525f908152604090205460ff1681565b61044f6115bb565b6104ee600f5481565b61044f610794366004612b48565b6115f5565b61044f6107a7366004612bad565b611726565b60075461046590600160a81b900460ff1681565b61044f6107ce366004612b89565b61177f565b61044f6107e1366004612c1b565b6117b3565b60065461051c9061010090046001600160a01b031681565b610482611859565b610465610814366004612b70565b601b6020525f908152604090205460ff1681565b610465610836366004612b48565b611866565b61044f610849366004612b70565b611932565b61046561085c366004612b48565b6119d8565b61044f61086f366004612b89565b611a65565b610465610882366004612b70565b60086020525f908152604090205460ff1681565b6104656108a4366004612b70565b601c6020525f908152604090205460ff1681565b61044f6108c6366004612b89565b611a99565b61044f6108d9366004612bad565b611acd565b6104ee600d5481565b61044f6108f5366004612c1b565b611ba3565b6104ee611bf0565b6104ee60105481565b6104ee60175481565b61044f610922366004612ca9565b611c37565b61044f610935366004612b70565b611c71565b6104ee601d5481565b6104ee610951366004612b70565b60146020525f908152604090205481565b6104ee601a5481565b610465610979366004612b70565b611d32565b6104ee61098c366004612c81565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104ee60115481565b6104656109cd366004612b70565b60096020525f908152604090205460ff1681565b600b5461046590600160a81b900460ff1681565b600b5461046590600160b81b900460ff1681565b6104ee611d76565b60065461010090046001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612cc9565b60405180910390fd5b610a51611dac565b565b60058054610a6090612d11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90612d11565b8015610ad75780601f10610aae57610100808354040283529160200191610ad7565b820191905f5260205f20905b815481529060010190602001808311610aba57829003601f168201915b505050505081565b60065461010090046001600160a01b03163314610b0e5760405162461bcd60e51b8152600401610a4090612cc9565b6016546040516307a1cfbd60e01b81526001600160a01b03909116906307a1cfbd90610b409085908590600401612d49565b5f604051808303815f87803b158015610b57575f80fd5b505af1158015610b69573d5f803e3d5ffd5b505050505050565b6007545f903390600160a01b900460ff168015610b975750600754600160a81b900460ff165b80610bb457506006546001600160a01b0382811661010090920416145b80610bcd5750335f9081526008602052604090205460ff165b610be95760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610c0f5760405162461bcd60e51b8152600401610a4090612d97565b335f8181526001602090815260408083206001600160a01b03891680855290835292819020879055518681529192915f80516020612ed283398151915291015b60405180910390a35060019392505050565b60065461010090046001600160a01b03163314610c905760405162461bcd60e51b8152600401610a4090612cc9565b600e55565b60065461010090046001600160a01b03163314610cc45760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015610d7e573d5f803e3d5ffd5b5050565b6007545f908490600160a01b900460ff168015610da85750600754600160a81b900460ff165b80610dc557506006546001600160a01b0382811661010090920416145b80610dde5750335f9081526008602052604090205460ff165b610dfa5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0385165f908152600160209081526040808320338452909152902054610e28908490612de2565b6001600160a01b0386165f908152600160209081526040808320338452909152902055610e56858585611ded565b6001600160a01b0385165f81815260016020908152604080832033808552908352928190205490519081529192915f80516020612ed2833981519152910160405180910390a3506001949350505050565b60065461010090046001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610f2f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b6007545f903390600160a01b900460ff168015610f735750600754600160a81b900460ff165b80610f9057506006546001600160a01b0382811661010090920416145b80610fa95750335f9081526008602052604090205460ff165b610fc55760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610feb5760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612df5565b335f8181526001602090815260408083206001600160a01b038a16808552908352928190208590555193845290925f80516020612ed28339815191529101610c4f565b335f9081526015602052604090205460ff166110b05760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6110ba3382611ffc565b50565b600754600160a81b900460ff166111285760405162461bcd60e51b815260206004820152602960248201527f63616e206f6e6c792062652063616c6c6564206f6e636520746f6b656e206973604482015268081b185d5b98da195960ba1b6064820152608401610a40565b6007546001600160a01b03163303610a515760165f9054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611186575f80fd5b505af1158015611198573d5f803e3d5ffd5b50505050565b60165460408051631296b91d60e11b815290515f926001600160a01b03169163252d723a9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112099190612e08565b905090565b60065461010090046001600160a01b0316331461123d5760405162461bcd60e51b8152600401610a4090612cc9565b6018805460ff1916911515919091179055565b60065461010090046001600160a01b0316331461127f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6007546001600160a01b03163303610d7e5760165460405163583dd79d60e01b81526001600160a01b039091169063583dd79d90610b409085908590600401612e1f565b60065461010090046001600160a01b031633146113105760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146113695760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b5f612710600d546002546113a79190612e48565b6112099190612e5f565b60065461010090046001600160a01b031633146113e05760405162461bcd60e51b8152600401610a4090612cc9565b60165460405163328462bf60e11b81526001600160a01b0390911690636508c57e90610b409085908590600401612d49565b6006545f9061010090046001600160a01b031633146114435760405162461bcd60e51b8152600401610a4090612cc9565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ab9190612e08565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612e7e565b9150505b92915050565b5f612710600c546002546113a79190612e48565b60065461010090046001600160a01b0316331461156c5760405162461bcd60e51b8152600401610a4090612cc9565b6006546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360068054610100600160a81b0319169055565b60065461010090046001600160a01b031633146115ea5760405162461bcd60e51b8152600401610a4090612cc9565b5f600d819055600c55565b335f9081526015602052604090205460ff166116495760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6001600160a01b0382165f908152600160209081526040808320338085529252909120548281106116a85761167e8382612de2565b6001600160a01b038086165f908152600160209081526040808320938716835292905220556116d0565b6001600160a01b038085165f9081526001602090815260408083209386168352929052908120555b6116da8484611ffc565b6001600160a01b038481165f818152600160209081526040808320948716808452948252918290205491519182525f80516020612ed2833981519152910160405180910390a350505050565b60065461010090046001600160a01b031633146117555760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146117ae5760405162461bcd60e51b8152600401610a4090612cc9565b600d55565b60065461010090046001600160a01b031633146117e25760405162461bcd60e51b8152600401610a4090612cc9565b600b54600160a01b900460ff1661183b5760405162461bcd60e51b815260206004820152601f60248201527f70696e6b20616e746920626f74206973206e6f7420636f6e66696775726564006044820152606401610a40565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b60048054610a6090612d11565b6007545f903390600160a01b900460ff16801561188c5750600754600160a81b900460ff165b806118a957506006546001600160a01b0382811661010090920416145b806118c25750335f9081526008602052604090205460ff165b6118de5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0384166119045760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612de2565b60065461010090046001600160a01b031633146119615760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0381166119b05760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007545f903390600160a01b900460ff1680156119fe5750600754600160a81b900460ff165b80611a1b57506006546001600160a01b0382811661010090920416145b80611a345750335f9081526008602052604090205460ff165b611a505760405162461bcd60e51b8152600401610a4090612d6a565b611a5b338585611ded565b5060019392505050565b60065461010090046001600160a01b03163314611a945760405162461bcd60e51b8152600401610a4090612cc9565b601d55565b60065461010090046001600160a01b03163314611ac85760405162461bcd60e51b8152600401610a4090612cc9565b600c55565b60065461010090046001600160a01b03163314611afc5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0382165f908152600a602052604090205460ff161580611b21575080155b611b795760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206578636c75646520616e2065786368616e67652066726f6d206044820152620e8c2f60eb1b6064820152608401610a40565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314611bd25760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6016546040805163585e42ef60e11b815290515f926001600160a01b03169163b0bc85de9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b60065461010090046001600160a01b03163314611c665760405162461bcd60e51b8152600401610a4090612cc9565b601791909155601a55565b60065461010090046001600160a01b03163314611ca05760405162461bcd60e51b8152600401610a4090612cc9565b600b80546001600160a01b0319166001600160a01b038381169182179092556006546040516318e02bd960e01b81526101009091049092166004830152906318e02bd9906024015f604051808303815f87803b158015611cfe575f80fd5b505af1158015611d10573d5f803e3d5ffd5b5050600b805464ff000000ff60a01b191664010000000160a01b179055505050565b6001600160a01b0381165f908152601c602052604081205460ff16806115235750601d546001600160a01b0383165f90815260208190526040902054101592915050565b6007545f90600160a81b900460ff1615611da757600360105443611d9a9190612de2565b1015611da75750611edc90565b505f90565b60065461010090046001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a4090612cc9565b611de3612081565b42600f5543601055565b6001600160a01b038216611e3c5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b6001600160a01b0383165f9081526009602052604090205460ff1615611ea45760405162461bcd60e51b815260206004820152601e60248201527f61646472657373206973206e6f7420616c6c6f77656420746f2073656c6c00006044820152606401610a40565b60035460ff1615611f46576001600160a01b0383165f90815260208190526040902054611ed2908290612de2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f01908290612df5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616915f80516020612eb2833981519152910160405180910390a3505050565b611f518383836120c5565b5f611f5d8484846120d0565b6001600160a01b0385165f90815260208190526040902054909150611f83908390612de2565b6001600160a01b038086165f908152602081905260408082209390935590851681522054611fb2908290612df5565b6001600160a01b038481165f818152602081815260409182902094909455518481529092918716915f80516020612eb2833981519152910160405180910390a3611198565b505050565b6001600160a01b03821661200e575f80fd5b8060025461201c9190612de2565b6002556001600160a01b0382165f90815260208190526040902054612042908290612de2565b6001600160a01b0383165f8181526020818152604080832094909455925184815290925f80516020612eb2833981519152910160405180910390a35050565b60065461010090046001600160a01b031633146120b05760405162461bcd60e51b8152600401610a4090612cc9565b6007805460ff60a81b1916600160a81b179055565b611ff78383836120e4565b5f6120dc848484612273565b949350505050565b600754600160a81b900460ff1680156120ff575060185460ff165b801561212257506001600160a01b0382165f908152600a602052604090205460ff165b801561213c575042601954600a6121399190612df5565b11155b801561216357506017546016546001600160a01b03165f9081526020819052604090205410155b801561218757506001600160a01b0383165f908152601b602052604090205460ff16155b8015612204575060165f9054906101000a90046001600160a01b03166001600160a01b031663d83067866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122029190612e7e565b155b1561226857426019556016546040805163e4fc6b6d60e01b815290516001600160a01b039092169163e4fc6b6d916004808201925f9290919082900301818387803b158015612251575f80fd5b505af1158015612263573d5f803e3d5ffd5b505050505b611ff7838383612488565b6001600160a01b0383165f908152601b6020526040812054829060ff161580156122b557506001600160a01b0384165f908152601b602052604090205460ff16155b80156122ca5750600754600160a81b900460ff165b156123f1576001600160a01b0385165f908152600a602052604090205460ff16156123625760165460405163db017dc760e01b8152600481018590526001600160a01b039091169063db017dc7906024016020604051808303815f875af1158015612337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235b9190612e08565b90506123f1565b6001600160a01b0384165f908152600a602052604090205460ff16156123f157601654604051634fa26fd560e01b8152600481018590526001600160a01b0390911690634fa26fd5906024016020604051808303815f875af11580156123ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ee9190612e08565b90505b5f6123fc8285612de2565b90508015612473576016546001600160a01b03165f90815260208190526040902054612429908290612df5565b601680546001600160a01b039081165f9081526020818152604091829020949094559154915184815291811692908916915f80516020612eb2833981519152910160405180910390a35b61247e8686846128a4565b9695505050505050565b600b54600160a81b900460ff1615806124b05750335f9081526012602052604090205460ff16155b6124ee5760405162461bcd60e51b815260206004820152600f60248201526e1cdb9a5c195c881c995a9958dd1959608a1b6044820152606401610a40565b600754600160a81b900460ff16801561251a57506006546001600160a01b038481166101009092041614155b801561253e57506001600160a01b0383165f9081526013602052604090205460ff16155b801561256257506001600160a01b0382165f9081526013602052604090205460ff16155b15611ff757600e54156125c157600e545a11156125c15760405162461bcd60e51b815260206004820152601e60248201527f74686973206973206f76657220746865206d617820676173206c696d697400006044820152606401610a40565b5f600d541180156125ea57506001600160a01b0382165f908152600a602052604090205460ff16155b15612668576125f7611393565b6001600160a01b0383165f9081526020819052604090205461261a908390612df5565b11156126685760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d617820686f6c6420616d6f756e746044820152606401610a40565b5f600c5411801561269057506001600160a01b0382165f908152600a602052604090205460ff165b156126ec5761269d611529565b8111156126ec5760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d61782073656c6c20616d6f756e746044820152606401610a40565b600b54600160b01b900460ff1615612824576001600160a01b0382165f90815260146020526040902054439003612753576001600160a01b0382165f908152601260205260408120805460ff19166001179055601180549161274d83612e99565b91905055505b6001600160a01b0383165f908152601460205260409020544390036127a8576001600160a01b0383165f908152601260205260408120805460ff1916600117905560118054916127a283612e99565b91905055505b6001600160a01b0382165f908152600a602052604081205460ff16151590036127e6576001600160a01b0382165f9081526014602052604090204390555b6001600160a01b0383165f908152600a602052604081205460ff1615159003612824576001600160a01b0383165f9081526014602052604090204390555b600b54600160c01b900460ff1615611ff757600b5460405163090ec10b60e31b81526001600160a01b038581166004830152848116602483015260448201849052909116906348760858906064015f604051808303815f87803b158015612889575f80fd5b505af115801561289b573d5f803e3d5ffd5b50505050505050565b6007545f908290600160a81b900460ff1680156128ca5750600b54600160b81b900460ff165b15612975576006546001600160a01b0386811661010090920416148015906128f857505f6128f6611d76565b115b801561291c57506001600160a01b0385165f9081526013602052604090205460ff16155b801561294057506001600160a01b0384165f9081526013602052604090205460ff16155b15612975575f612710612951611d76565b61295b9086612e48565b6129659190612e5f565b90506129718183612de2565b9150505b612980858583612989565b95945050505050565b5f826001600160a01b0316846001600160a01b0316036129eb5760405162461bcd60e51b815260206004820152601f60248201527f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66006044820152606401610a40565b5092915050565b5f81518084525f5b81811015612a16576020818501810151868301820152016129fa565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f612a4760208301846129f2565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612a71575f80fd5b813567ffffffffffffffff80821115612a8c57612a8c612a4e565b604051601f8301601f19908116603f01168101908282118183101715612ab457612ab4612a4e565b81604052838152866020858801011115612acc575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612afc575f80fd5b823567ffffffffffffffff811115612b12575f80fd5b612b1e85828601612a62565b95602094909401359450505050565b80356001600160a01b0381168114612b43575f80fd5b919050565b5f8060408385031215612b59575f80fd5b612b6283612b2d565b946020939093013593505050565b5f60208284031215612b80575f80fd5b612a4782612b2d565b5f60208284031215612b99575f80fd5b5035919050565b80151581146110ba575f80fd5b5f8060408385031215612bbe575f80fd5b612bc783612b2d565b91506020830135612bd781612ba0565b809150509250929050565b5f805f60608486031215612bf4575f80fd5b612bfd84612b2d565b9250612c0b60208501612b2d565b9150604084013590509250925092565b5f60208284031215612c2b575f80fd5b8135612a4781612ba0565b5f8060408385031215612c47575f80fd5b823567ffffffffffffffff811115612c5d575f80fd5b612c6985828601612a62565b925050612c7860208401612b2d565b90509250929050565b5f8060408385031215612c92575f80fd5b612c9b83612b2d565b9150612c7860208401612b2d565b5f8060408385031215612cba575f80fd5b50508035926020909101359150565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b600181811c90821680612d2557607f821691505b602082108103612d4357634e487b7160e01b5f52602260045260245ffd5b50919050565b604081525f612d5b60408301856129f2565b90508260208301529392505050565b6020808252601390820152721d1c98591a5b99c81b9bdd08195b98589b1959606a1b604082015260600190565b6020808252601c908201527f63616e6e6f7420617070726f7665207468652030206164647265737300000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561152357611523612dce565b8082018082111561152357611523612dce565b5f60208284031215612e18575f80fd5b5051919050565b604081525f612e3160408301856129f2565b905060018060a01b03831660208301529392505050565b808202811582820484141761152357611523612dce565b5f82612e7957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612e8e575f80fd5b8151612a4781612ba0565b5f60018201612eaa57612eaa612dce565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220158e06f347e8b41e3b55788d4ac8e51cf14c26ec3a890bc1e17d0cb5d5a8691e64736f6c63430008140033
Deployed Bytecode Sourcemap
39453:3073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41297:100;;;:::i;:::-;;8386:35;;;;;-1:-1:-1;;;8386:35:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;8386:35:0;;;;;;;;8260:19;;;:::i;:::-;;;;;;;:::i;20732:143::-;;;;;;:::i;:::-;;:::i;11448:314::-;;;;;;:::i;:::-;;:::i;34612:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38965:98;;;;;;:::i;:::-;;:::i;9530:102::-;9612:12;;9530:102;;;3069:25:1;;;3057:2;3042:18;9530:102:0;2923:177:1;42292:115:0;;;;;;:::i;:::-;;:::i;19878:114::-;19969:14;;-1:-1:-1;;;;;19969:14:0;19878:114;;;-1:-1:-1;;;;;3712:32:1;;;3694:51;;3682:2;3667:18;19878:114:0;3548:203:1;21716:113:0;;;;;;:::i;:::-;;:::i;15213:134::-;;;:::i;12235:328::-;;;;;;:::i;:::-;;:::i;15713:116::-;;;;;;:::i;:::-;;:::i;34660:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34361:29;;;;;-1:-1:-1;;;34361:29:0;;;;;;8286:21;;;;;;;;;;;;4261:4:1;4249:17;;;4231:36;;4219:2;4204:18;8286:21:0;4089:184:1;21350:43:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38425:113;;;;;;:::i;:::-;;:::i;13078:381::-;;;;;;:::i;:::-;;:::i;34157:31::-;;;;;-1:-1:-1;;;;;34157:31:0;;;22000:101;;;;;;:::i;:::-;;:::i;34403:27::-;;;;;;21131:148;;;:::i;19484:102::-;;;:::i;20038:97::-;;;;;;:::i;:::-;;:::i;34277:36::-;;;;;-1:-1:-1;;;34277:36:0;;;;;;38296:117;;;;;;:::i;:::-;;:::i;8356:23::-;;;;;-1:-1:-1;;;;;8356:23:0;;;20887:232;;;;;;:::i;:::-;;:::i;39075:109::-;;;;;;:::i;:::-;;:::i;39192:117::-;;;;;;:::i;:::-;;:::i;34471:26::-;;;;;;37419:113;;;:::i;20579:145::-;;;;;;:::i;:::-;;:::i;15357:211::-;;;;;;:::i;:::-;;:::i;17527:23::-;;;;;;;;;37544:114;;;:::i;9849:119::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9943:17:0;9916:7;9943:17;;;;;;;;;;;;9849:119;15065:140;;;:::i;8574:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39317:105;;;:::i;34506:25::-;;;;;;22500:449;;;;;;:::i;:::-;;:::i;15580:121::-;;;;;;:::i;:::-;;:::i;8428:20::-;;;;;-1:-1:-1;;;8428:20:0;;;;;;38853:100;;;;;;:::i;:::-;;:::i;38550:179::-;;;;;;:::i;:::-;;:::i;8320:29::-;;;;;;;;-1:-1:-1;;;;;8320:29:0;;;8233:20;;;:::i;17630:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13979:391;;;;;;:::i;:::-;;:::i;14911:146::-;;;;;;:::i;:::-;;:::i;10623:178::-;;;;;;:::i;:::-;;:::i;42415:108::-;;;;;;:::i;:::-;;:::i;8461:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39526:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38741:100;;;;;;:::i;:::-;;:::i;20143:225::-;;;;;;:::i;:::-;;:::i;34437:27::-;;;;;;38175:109;;;;;;:::i;:::-;;:::i;19684:104::-;;;:::i;34538:26::-;;;;;;17482:38;;;;;;20376:191;;;;;;:::i;:::-;;:::i;37926:237::-;;;;;;:::i;:::-;;:::i;39581:31::-;;;;;;34713:55;;;;;;:::i;:::-;;;;;;;;;;;;;;17585:38;;;;;;42106:152;;;;;;:::i;:::-;;:::i;10308:144::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10419:16:0;;;10392:7;10419:16;;;:8;:16;;;;;;;;:25;;;;;;;;;;;;;10308:144;34571:28;;;;;;8515:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34238:32;;;;;-1:-1:-1;;;34238:32:0;;;;;;34320:34;;;;;-1:-1:-1;;;34320:34:0;;;;;;37669:217;;;:::i;41297:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;;;;;;;;;41375:14:::1;:12;:14::i;:::-;41297:100::o:0;8260:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20732:143::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20823:14:::1;::::0;:44:::1;::::0;-1:-1:-1;;;20823:44:0;;-1:-1:-1;;;;;20823:14:0;;::::1;::::0;:24:::1;::::0;:44:::1;::::0;20848:7;;20857:9;;20823:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20732:143:::0;;:::o;11448:314::-;9082:16;;11551:4;;11530:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11576:21:0;::::1;11568:62;;;;-1:-1:-1::0;;;11568:62:0::1;;;;;;;:::i;:::-;11652:10;11643:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;11643:29:0;::::1;::::0;;;;;;;;;;:37;;;11696:36;3069:25:1;;;11643:29:0;;11652:10;-1:-1:-1;;;;;;;;;;;11696:36:0;3042:18:1;11696:36:0::1;;;;;;;;-1:-1:-1::0;11750:4:0::1;::::0;11448:314;-1:-1:-1;;;11448:314:0:o;38965:98::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;39035:11:::1;:20:::0;38965:98::o;42292:115::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42373:21:0;;;::::1;;::::0;;;:16:::1;:21;::::0;;;;:26;;-1:-1:-1;;42373:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42292:115::o;21716:113::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21796:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:25;;-1:-1:-1;;21796:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21716:113::o;15213:134::-;15312:8;;15304:35;;15272:21;;-1:-1:-1;;;;;15312:8:0;;15304:35;;;;;15272:21;;15254:15;15304:35;15254:15;15304:35;15272:21;15312:8;15304:35;;;;;;;;;;;;;;;;;;;;;15243:104;15213:134::o;12235:328::-;9082:16;;12346:4;;12331;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12392:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;12407:10:::1;12392:26:::0;;;;;;;;:34:::1;::::0;12421:5;;12392:34:::1;:::i;:::-;-1:-1:-1::0;;;;;12363:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;12378:10:::1;12363:26:::0;;;;;;;:63;12437:26:::1;12372:4:::0;12453:2;12457:5;12437:9:::1;:26::i;:::-;-1:-1:-1::0;;;;;12479:54:0;::::1;12506:14;::::0;;;:8:::1;:14;::::0;;;;;;;12494:10:::1;12506:26:::0;;;;;;;;;;;12479:54;;3069:25:1;;;12494:10:0;;12479:54;-1:-1:-1;;;;;;;;;;;12479:54:0;3042:18:1;12479:54:0::1;;;;;;;-1:-1:-1::0;12551:4:0::1;::::0;12235:328;-1:-1:-1;;;;12235:328:0:o;15713:116::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15794:14:0;;;::::1;;::::0;;;:9:::1;:14;::::0;;;;:27;;-1:-1:-1;;15794:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15713:116::o;38425:113::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38498:22:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38498:32:0::1;-1:-1:-1::0;;;;38498:32:0;;::::1;::::0;;;::::1;::::0;;38425:113::o;13078:381::-;9082:16;;13187:4;;13166:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13212:21:0;::::1;13204:62;;;;-1:-1:-1::0;;;13204:62:0::1;;;;;;;:::i;:::-;13320:10;13311:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;13311:29:0;::::1;::::0;;;;;;;;:42:::1;::::0;13343:10;;13311:42:::1;:::i;:::-;13288:10;13279:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;13279:29:0;::::1;::::0;;;;;;;;;;:74;;;13369:60;3069:25:1;;;13279:29:0;;-1:-1:-1;;;;;;;;;;;13369:60:0;3042:18:1;13369:60:0::1;2923:177:1::0;22000:101:0;21629:10;21618:22;;;;:10;:22;;;;;;;;21610:54;;;;-1:-1:-1;;;21610:54:0;;8064:2:1;21610:54:0;;;8046:21:1;8103:2;8083:18;;;8076:30;-1:-1:-1;;;8122:18:1;;;8115:49;8181:18;;21610:54:0;7862:343:1;21610:54:0;22069:24:::1;22075:10;22087:5;22069;:24::i;:::-;22000:101:::0;:::o;21131:148::-;8806:8;;-1:-1:-1;;;8806:8:0;;;;8798:62;;;;-1:-1:-1;;;8798:62:0;;8412:2:1;8798:62:0;;;8394:21:1;8451:2;8431:18;;;8424:30;8490:34;8470:18;;;8463:62;-1:-1:-1;;;8541:18:1;;;8534:39;8590:19;;8798:62:0;8210:405:1;8798:62:0;21208:8:::1;::::0;-1:-1:-1;;;;;21208:8:0::1;21194:10;:22:::0;21190:82:::1;;21233:14;;;;;;;;;-1:-1:-1::0;;;;;21233:14:0::1;-1:-1:-1::0;;;;;21233:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21131:148::o:0;19484:102::-;19552:14;;:26;;;-1:-1:-1;;;19552:26:0;;;;19525:7;;-1:-1:-1;;;;;19552:14:0;;:24;;:26;;;;;;;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19545:33;;19484:102;:::o;20038:97::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20106:11:::1;:21:::0;;-1:-1:-1;;20106:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20038:97::o;38296:117::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38371:24:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;38371:34:0::1;-1:-1:-1::0;;;;38371:34:0;;::::1;::::0;;;::::1;::::0;;38296:117::o;20887:232::-;21031:8;;-1:-1:-1;;;;;21031:8:0;21017:10;:22;21013:99;;21056:14;;:44;;-1:-1:-1;;;21056:44:0;;-1:-1:-1;;;;;21056:14:0;;;;:27;;:44;;21084:7;;21093:6;;21056:44;;;:::i;39075:109::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39153:13:0;;;::::1;;::::0;;;:8:::1;:13;::::0;;;;:23;;-1:-1:-1;;39153:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39075:109::o;39192:117::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39273:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:28;;-1:-1:-1;;39273:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39192:117::o;37419:113::-;37460:7;37519:5;37503:12;;37488;;:27;;;;:::i;:::-;37487:37;;;;:::i;20579:145::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20671:14:::1;::::0;:45:::1;::::0;-1:-1:-1;;;20671:45:0;;-1:-1:-1;;;;;20671:14:0;;::::1;::::0;:25:::1;::::0;:45:::1;::::0;20697:7;;20706:9;;20671:45:::1;;;:::i;15357:211::-:0;8683:5;;15435:4;;8683:5;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;15469:38:::1;::::0;-1:-1:-1;;;15469:38:0;;15501:4:::1;15469:38;::::0;::::1;3694:51:1::0;15451:15:0::1;::::0;-1:-1:-1;;;;;15469:23:0;::::1;::::0;::::1;::::0;3667:18:1;;15469:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15525:35;::::0;-1:-1:-1;;;15525:35:0;;-1:-1:-1;;;;;9718:32:1;;;15525:35:0::1;::::0;::::1;9700:51:1::0;9767:18;;;9760:34;;;15451:56:0;;-1:-1:-1;15525:22:0;;::::1;::::0;::::1;::::0;9673:18:1;;15525:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15518:42;;;8744:1;15357:211:::0;;;;:::o;37544:114::-;37585:7;37645:5;37629:12;;37614;;:27;;;;:::i;15065:140::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;15150:5:::1;::::0;15129:39:::1;::::0;15165:1:::1;::::0;15150:5:::1;::::0;::::1;-1:-1:-1::0;;;;;15150:5:0::1;::::0;15129:39:::1;::::0;15165:1;;15129:39:::1;15179:5;:18:::0;;-1:-1:-1;;;;;;15179:18:0::1;::::0;;15065:140::o;39317:105::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;39386:1:::1;39371:12;:16:::0;;;39398:12:::1;:16:::0;39317:105::o;22500:449::-;21629:10;21618:22;;;;:10;:22;;;;;;;;21610:54;;;;-1:-1:-1;;;21610:54:0;;8064:2:1;21610:54:0;;;8046:21:1;8103:2;8083:18;;;8076:30;-1:-1:-1;;;8122:18:1;;;8115:49;8181:18;;21610:54:0;7862:343:1;21610:54:0;-1:-1:-1;;;;;22648:17:0;::::1;22590:14;22648:17:::0;;;:8:::1;:17;::::0;;;;;;;22607:10:::1;22648:25:::0;;;;;;;;;22688:18;;::::1;22684:158;;22751:17;22763:5:::0;22751:9;:17:::1;:::i;:::-;-1:-1:-1::0;;;;;22723:17:0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;;;:25;;::::1;::::0;;;;;;:45;22684:158:::1;;;-1:-1:-1::0;;;;;22801:17:0;;::::1;22829:1;22801:17:::0;;;:8:::1;:17;::::0;;;;;;;:25;;::::1;::::0;;;;;;;;:29;22684:158:::1;22852:21;22858:7;22867:5;22852;:21::i;:::-;-1:-1:-1::0;;;;;22889:52:0;;::::1;22915:17;::::0;;;:8:::1;:17;::::0;;;;;;;22889:52;;::::1;22915:25:::0;;;;;;;;;;;22889:52;;3069:25:1;;;-1:-1:-1;;;;;;;;;;;22889:52:0;3042:18:1;22889:52:0::1;;;;;;;22579:370;;22500:449:::0;;:::o;15580:121::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15664:19:0;;;::::1;;::::0;;;:14:::1;:19;::::0;;;;:29;;-1:-1:-1;;15664:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15580:121::o;38853:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38924:12:::1;:21:::0;38853:100::o;38550:179::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38626:21:::1;::::0;-1:-1:-1;;;38626:21:0;::::1;;;38618:65;;;::::0;-1:-1:-1;;;38618:65:0;;10257:2:1;38618:65:0::1;::::0;::::1;10239:21:1::0;10296:2;10276:18;;;10269:30;10335:33;10315:18;;;10308:61;10386:18;;38618:65:0::1;10055:355:1::0;38618:65:0::1;38694:17;:27:::0;;;::::1;;-1:-1:-1::0;;;38694:27:0::1;-1:-1:-1::0;;;;38694:27:0;;::::1;::::0;;;::::1;::::0;;38550:179::o;8233:20::-;;;;;;;:::i;13979:391::-;9082:16;;14093:4;;14072:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14118:21:0;::::1;14110:62;;;;-1:-1:-1::0;;;14110:62:0::1;;;;;;;:::i;:::-;14226:10;14217:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;14217:29:0;::::1;::::0;;;;;;;;:47:::1;::::0;14249:15;;14217:47:::1;:::i;14911:146::-:0;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14983:17:0;::::1;14975:52;;;::::0;-1:-1:-1;;;14975:52:0;;10617:2:1;14975:52:0::1;::::0;::::1;10599:21:1::0;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:52;10737:18;;14975:52:0::1;10415:346:1::0;14975:52:0::1;15038:5;:11:::0;;-1:-1:-1;;;;;15038:11:0;;::::1;;;-1:-1:-1::0;;;;;;15038:11:0;;::::1;::::0;;;::::1;::::0;;14911:146::o;10623:178::-;9082:16;;10722:4;;10701:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;10739:32:::1;10749:10;10761:2;10765:5;10739:9;:32::i;:::-;-1:-1:-1::0;10789:4:0::1;::::0;10623:178;-1:-1:-1;;;10623:178:0:o;42415:108::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;42490:16:::1;:25:::0;42415:108::o;38741:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38812:12:::1;:21:::0;38741:100::o;20143:225::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20236:14:0;::::1;;::::0;;;:9:::1;:14;::::0;;;;;::::1;;:23;::::0;:43:::1;;-1:-1:-1::0;20263:16:0;::::1;20236:43;20228:91;;;::::0;-1:-1:-1;;;20228:91:0;;10968:2:1;20228:91:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;11046:34;11026:18;;;11019:62;-1:-1:-1;;;11097:18:1;;;11090:33;11140:19;;20228:91:0::1;10766:399:1::0;20228:91:0::1;-1:-1:-1::0;;;;;20330:20:0;;;::::1;;::::0;;;:15:::1;:20;::::0;;;;:30;;-1:-1:-1;;20330:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20143:225::o;38175:109::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38246:20:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;38246:30:0::1;-1:-1:-1::0;;;;38246:30:0;;::::1;::::0;;;::::1;::::0;;38175:109::o;19684:104::-;19753:14;;:27;;;-1:-1:-1;;;19753:27:0;;;;19726:7;;-1:-1:-1;;;;;19753:14:0;;:25;;:27;;;;;;;;;;;;;;:14;:27;;;;;;;;;;;;;;20376:191;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20480:23:::1;:35:::0;;;;20526:23:::1;:33:::0;20376:191::o;37926:237::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38003:11:::1;:35:::0;;-1:-1:-1;;;;;;38003:35:0::1;-1:-1:-1::0;;;;;38003:35:0;;::::1;::::0;;::::1;::::0;;;38075:5:::1;::::0;38049:32:::1;::::0;-1:-1:-1;;;38049:32:0;;38003:35:::1;38075:5:::0;;::::1;::::0;;::::1;38049:32;::::0;::::1;3694:51:1::0;38003:35:0;38049:25:::1;::::0;3667:18:1;;38049:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;38092:21:0::1;:28:::0;;-1:-1:-1;;;;38131:24:0;-1:-1:-1;;;38131:24:0;;;-1:-1:-1;;;37926:237:0:o;42106:152::-;-1:-1:-1;;;;;42191:21:0;;42167:4;42191:21;;;:16;:21;;;;;;;;;:59;;-1:-1:-1;42234:16:0;;-1:-1:-1;;;;;42216:14:0;;:9;:14;;;;;;;;;;;:34;;42184:66;42106:152;-1:-1:-1;;42106:152:0:o;37669:217::-;37742:8;;37719:7;;-1:-1:-1;;;37742:8:0;;;;37739:121;;;37800:1;37786:11;;37771:12;:26;;;;:::i;:::-;:30;37767:82;;;-1:-1:-1;37829:4:0;;37669:217::o;37767:82::-;-1:-1:-1;37877:1:0;;37669:217::o;34959:161::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;35022:14:::1;:12;:14::i;:::-;35060:15;35047:10;:28:::0;35100:12:::1;35086:11;:26:::0;34959:161::o;16599:787::-;-1:-1:-1;;;;;16686:16:0;;16678:51;;;;-1:-1:-1;;;16678:51:0;;10617:2:1;16678:51:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:52;10737:18;;16678:51:0;10415:346:1;16678:51:0;-1:-1:-1;;;;;16748:25:0;;;;;;:19;:25;;;;;;;;:34;16740:77;;;;-1:-1:-1;;;16740:77:0;;11372:2:1;16740:77:0;;;11354:21:1;11411:2;11391:18;;;11384:30;11450:32;11430:18;;;11423:60;11500:18;;16740:77:0;11170:354:1;16740:77:0;16842:16;;;;16838:541;;;-1:-1:-1;;;;;16895:15:0;;:9;:15;;;;;;;;;;;:23;;16913:5;;16895:23;:::i;:::-;-1:-1:-1;;;;;16877:15:0;;;:9;:15;;;;;;;;;;;:41;;;;16949:13;;;;;;;:21;;16965:5;;16949:21;:::i;:::-;-1:-1:-1;;;;;16933:13:0;;;:9;:13;;;;;;;;;;;;:37;;;;16990:25;3069::1;;;16933:13:0;;16990:25;;;;-1:-1:-1;;;;;;;;;;;16990:25:0;3042:18:1;16990:25:0;;;;;;;16599:787;;;:::o;16838:541::-;17050:28;17062:4;17068:2;17072:5;17050:11;:28::i;:::-;17095:22;17120:35;17139:4;17145:2;17149:5;17120:18;:35::i;:::-;-1:-1:-1;;;;;17188:15:0;;:9;:15;;;;;;;;;;;17095:60;;-1:-1:-1;17188:23:0;;17206:5;;17188:23;:::i;:::-;-1:-1:-1;;;;;17170:15:0;;;:9;:15;;;;;;;;;;;:41;;;;17242:13;;;;;;;:30;;17258:14;;17242:30;:::i;:::-;-1:-1:-1;;;;;17226:13:0;;;:9;:13;;;;;;;;;;;;:46;;;;17294:34;3069:25:1;;;17226:13:0;;17294:34;;;;-1:-1:-1;;;;;;;;;;;17294:34:0;3042:18:1;17294:34:0;;;;;;;17345:22;15213:134;16838:541;16599:787;;;:::o;22981:263::-;-1:-1:-1;;;;;23056:21:0;;23048:30;;;;;;23121:5;23106:12;;:20;;;;:::i;:::-;23091:12;:35;-1:-1:-1;;;;;23158:18:0;;:9;:18;;;;;;;;;;;:26;;23179:5;;23158:26;:::i;:::-;-1:-1:-1;;;;;23137:18:0;;:9;:18;;;;;;;;;;;:47;;;;23200:36;;3069:25:1;;;23137:9:0;;-1:-1:-1;;;;;;;;;;;23200:36:0;3042:18:1;23200:36:0;;;;;;;22981:263;;:::o;14414:77::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;14468:8:::1;:15:::0;;-1:-1:-1;;;;14468:15:0::1;-1:-1:-1::0;;;14468:15:0::1;::::0;;14414:77::o;41554:165::-;41677:34;41695:4;41701:2;41705:5;41677:17;:34::i;41731:204::-;41859:7;41886:41;41911:4;41917:2;41921:5;41886:24;:41::i;:::-;41879:48;41731:204;-1:-1:-1;;;;41731:204:0:o;18787:570::-;18904:8;;-1:-1:-1;;;18904:8:0;;;;:37;;;;-1:-1:-1;18930:11:0;;;;18904:37;:68;;;;-1:-1:-1;;;;;;18959:13:0;;;;;;:9;:13;;;;;;;;18904:68;:123;;;;;19012:15;18990:13;;19006:2;18990:18;;;;:::i;:::-;:37;;18904:123;:201;;;;-1:-1:-1;19082:23:0;;19062:14;;-1:-1:-1;;;;;19062:14:0;19044:9;:34;;;;;;;;;;;:61;;18904:201;:240;;;;-1:-1:-1;;;;;;19123:21:0;;;;;;:15;:21;;;;;;;;19122:22;18904:240;:289;;;;;19161:14;;;;;;;;;-1:-1:-1;;;;;19161:14:0;-1:-1:-1;;;;;19161:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;18904:289;18886:419;;;19236:15;19220:13;:31;19266:14;;:27;;;-1:-1:-1;;;19266:27:0;;;;-1:-1:-1;;;;;19266:14:0;;;;:25;;:27;;;;;:14;;:27;;;;;;;;:14;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18886:419;19315:34;19333:4;19339:2;19343:5;19315:17;:34::i;17871:906::-;-1:-1:-1;;;;;18052:21:0;;17975:7;18052:21;;;:15;:21;;;;;;18030:5;;18052:21;;:30;;;:62;;-1:-1:-1;;;;;;18086:19:0;;;;;;:15;:19;;;;;;;;:28;18052:62;:74;;;;-1:-1:-1;18118:8:0;;-1:-1:-1;;;18118:8:0;;;;18052:74;18048:390;;;-1:-1:-1;;;;;18147:15:0;;;;;;:9;:15;;;;;;;;18143:284;;;18234:14;;:32;;-1:-1:-1;;;18234:32:0;;;;;3069:25:1;;;-1:-1:-1;;;;;18234:14:0;;;;:25;;3042:18:1;;18234:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18217:49;;18143:284;;;-1:-1:-1;;;;;18292:13:0;;;;;;:9;:13;;;;;;;;18288:139;;;18378:14;;:33;;-1:-1:-1;;;18378:33:0;;;;;3069:25:1;;;-1:-1:-1;;;;;18378:14:0;;;;:26;;3042:18:1;;18378:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18361:50;;18288:139;18450:17;18470:22;18478:14;18470:5;:22;:::i;:::-;18450:42;-1:-1:-1;18507:13:0;;18503:199;;18592:14;;-1:-1:-1;;;;;18592:14:0;18574:9;:34;;;;;;;;;;;:46;;18611:9;;18574:46;:::i;:::-;18555:14;;;-1:-1:-1;;;;;18555:14:0;;;18537:9;:34;;;;;;;;;;;;:83;;;;18663:14;;18640:50;;3069:25:1;;;18663:14:0;;;;18640:50;;;;-1:-1:-1;;;;;;;;;;;18640:50:0;3042:18:1;18640:50:0;;;;;;;18503:199;18719:50;18744:4;18750:2;18754:14;18719:24;:50::i;:::-;18712:57;17871:906;-1:-1:-1;;;;;;17871:906:0:o;35132:1682::-;35239:20;;-1:-1:-1;;;35239:20:0;;;;:29;;:62;;-1:-1:-1;35281:10:0;35272:20;;;;:8;:20;;;;;;;;:29;35239:62;35231:90;;;;-1:-1:-1;;;35231:90:0;;11731:2:1;35231:90:0;;;11713:21:1;11770:2;11750:18;;;11743:30;-1:-1:-1;;;11789:18:1;;;11782:45;11844:18;;35231:90:0;11529:339:1;35231:90:0;35346:8;;-1:-1:-1;;;35346:8:0;;;;:25;;;;-1:-1:-1;35366:5:0;;-1:-1:-1;;;;;35358:13:0;;;35366:5;;;;;35358:13;;35346:25;:57;;;;-1:-1:-1;;;;;;35375:19:0;;;;;;:13;:19;;;;;;;;:28;35346:57;:87;;;;-1:-1:-1;;;;;;35407:17:0;;;;;;:13;:17;;;;;;;;:26;35346:87;35342:1410;;;35468:11;;:15;35464:122;;35524:11;;35511:9;:24;;35503:67;;;;-1:-1:-1;;;35503:67:0;;12075:2:1;35503:67:0;;;12057:21:1;12114:2;12094:18;;;12087:30;12153:32;12133:18;;;12126:60;12203:18;;35503:67:0;11873:354:1;35503:67:0;35633:1;35618:12;;:16;:42;;;;-1:-1:-1;;;;;;35638:13:0;;;;;;:9;:13;;;;;;;;:22;35618:42;35614:164;;;35715:10;:8;:10::i;:::-;-1:-1:-1;;;;;35690:13:0;;:9;:13;;;;;;;;;;;:21;;35706:5;;35690:21;:::i;:::-;:35;;35681:81;;;;-1:-1:-1;;;35681:81:0;;12434:2:1;35681:81:0;;;12416:21:1;;;12453:18;;;12446:30;12512:34;12492:18;;;12485:62;12564:18;;35681:81:0;12232:356:1;35681:81:0;35825:1;35810:12;;:16;:33;;;;-1:-1:-1;;;;;;35830:13:0;;;;;;:9;:13;;;;;;;;35810:33;35806:139;;;35882:10;:8;:10::i;:::-;35873:5;:19;;35864:65;;;;-1:-1:-1;;;35864:65:0;;12795:2:1;35864:65:0;;;12777:21:1;;;12814:18;;;12807:30;12873:34;12853:18;;;12846:62;12925:18;;35864:65:0;12593:356:1;35864:65:0;35976:24;;-1:-1:-1;;;35976:24:0;;;;35973:635;;;-1:-1:-1;;;;;36025:23:0;;;;;;:19;:23;;;;;;36052:12;36025:39;;36021:146;;-1:-1:-1;;;;;36089:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;36089:19:0;36104:4;36089:19;;;36131:13;:16;;;;;;:::i;:::-;;;;;;36021:146;-1:-1:-1;;;;;36189:25:0;;;;;;:19;:25;;;;;;36218:12;36189:41;;36185:150;;-1:-1:-1;;;;;36255:14:0;;;;;;:8;:14;;;;;:21;;-1:-1:-1;;36255:21:0;36272:4;36255:21;;;36299:13;:16;;;;;;:::i;:::-;;;;;;36185:150;-1:-1:-1;;;;;36357:13:0;;;;;;:9;:13;;;;;;;;:22;;;;36353:109;;-1:-1:-1;;;;;36404:23:0;;;;;;:19;:23;;;;;36430:12;36404:38;;36353:109;-1:-1:-1;;;;;36484:15:0;;;;;;:9;:15;;;;;;;;:24;;;;36480:113;;-1:-1:-1;;;;;36533:25:0;;;;;;:19;:25;;;;;36561:12;36533:40;;36480:113;36640:17;;-1:-1:-1;;;36640:17:0;;;;36636:105;;;36678:11;;:47;;-1:-1:-1;;;36678:47:0;;-1:-1:-1;;;;;13352:15:1;;;36678:47:0;;;13334:34:1;13404:15;;;13384:18;;;13377:43;13436:18;;;13429:34;;;36678:11:0;;;;:30;;13269:18:1;;36678:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16599:787;;;:::o;36826:552::-;36995:8;;36930:7;;36975:5;;-1:-1:-1;;;36995:8:0;;;;:34;;;;-1:-1:-1;37007:22:0;;-1:-1:-1;;;37007:22:0;;;;36995:34;36991:312;;;37058:5;;-1:-1:-1;;;;;37050:13:0;;;37058:5;;;;;37050:13;;;;:32;;;37081:1;37067:11;:9;:11::i;:::-;:15;37050:32;:64;;;;-1:-1:-1;;;;;;37086:19:0;;;;;;:13;:19;;;;;;;;:28;37050:64;:94;;;;-1:-1:-1;;;;;;37118:17:0;;;;;;:13;:17;;;;;;;;:26;37050:94;37046:246;;;37165:17;37209:5;37194:11;:9;:11::i;:::-;37186:19;;:5;:19;:::i;:::-;37185:29;;;;:::i;:::-;37165:49;-1:-1:-1;37250:26:0;37165:49;37250:14;:26;:::i;:::-;37233:43;;37146:146;37046:246;37320:50;37345:4;37351:2;37355:14;37320:24;:50::i;:::-;37313:57;36826:552;-1:-1:-1;;;;;36826:552:0:o;14593:200::-;14688:7;14724:2;-1:-1:-1;;;;;14716:10:0;:4;-1:-1:-1;;;;;14716:10:0;;14708:54;;;;-1:-1:-1;;;14708:54:0;;13676:2:1;14708:54:0;;;13658:21:1;13715:2;13695:18;;;13688:30;13754:33;13734:18;;;13727:61;13805:18;;14708:54:0;13474:355:1;14708:54:0;-1:-1:-1;14780:5:0;14593:200;-1:-1:-1;;14593:200:0:o;206:423:1:-;248:3;286:5;280:12;313:6;308:3;301:19;338:1;348:162;362:6;359:1;356:13;348:162;;;424:4;480:13;;;476:22;;470:29;452:11;;;448:20;;441:59;377:12;348:162;;;352:3;555:1;548:4;539:6;534:3;530:16;526:27;519:38;618:4;611:2;607:7;602:2;594:6;590:15;586:29;581:3;577:39;573:50;566:57;;;206:423;;;;:::o;634:220::-;783:2;772:9;765:21;746:4;803:45;844:2;833:9;829:18;821:6;803:45;:::i;:::-;795:53;634:220;-1:-1:-1;;;634:220:1:o;859:127::-;920:10;915:3;911:20;908:1;901:31;951:4;948:1;941:15;975:4;972:1;965:15;991:719;1034:5;1087:3;1080:4;1072:6;1068:17;1064:27;1054:55;;1105:1;1102;1095:12;1054:55;1141:6;1128:20;1167:18;1204:2;1200;1197:10;1194:36;;;1210:18;;:::i;:::-;1285:2;1279:9;1253:2;1339:13;;-1:-1:-1;;1335:22:1;;;1359:2;1331:31;1327:40;1315:53;;;1383:18;;;1403:22;;;1380:46;1377:72;;;1429:18;;:::i;:::-;1469:10;1465:2;1458:22;1504:2;1496:6;1489:18;1550:3;1543:4;1538:2;1530:6;1526:15;1522:26;1519:35;1516:55;;;1567:1;1564;1557:12;1516:55;1631:2;1624:4;1616:6;1612:17;1605:4;1597:6;1593:17;1580:54;1678:1;1671:4;1666:2;1658:6;1654:15;1650:26;1643:37;1698:6;1689:15;;;;;;991:719;;;;:::o;1715:390::-;1793:6;1801;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;1910:9;1897:23;1943:18;1935:6;1932:30;1929:50;;;1975:1;1972;1965:12;1929:50;1998;2040:7;2031:6;2020:9;2016:22;1998:50;:::i;:::-;1988:60;2095:2;2080:18;;;;2067:32;;-1:-1:-1;;;;1715:390:1:o;2110:173::-;2178:20;;-1:-1:-1;;;;;2227:31:1;;2217:42;;2207:70;;2273:1;2270;2263:12;2207:70;2110:173;;;:::o;2288:254::-;2356:6;2364;2417:2;2405:9;2396:7;2392:23;2388:32;2385:52;;;2433:1;2430;2423:12;2385:52;2456:29;2475:9;2456:29;:::i;:::-;2446:39;2532:2;2517:18;;;;2504:32;;-1:-1:-1;;;2288:254:1:o;2547:186::-;2606:6;2659:2;2647:9;2638:7;2634:23;2630:32;2627:52;;;2675:1;2672;2665:12;2627:52;2698:29;2717:9;2698:29;:::i;2738:180::-;2797:6;2850:2;2838:9;2829:7;2825:23;2821:32;2818:52;;;2866:1;2863;2856:12;2818:52;-1:-1:-1;2889:23:1;;2738:180;-1:-1:-1;2738:180:1:o;3105:118::-;3191:5;3184:13;3177:21;3170:5;3167:32;3157:60;;3213:1;3210;3203:12;3228:315;3293:6;3301;3354:2;3342:9;3333:7;3329:23;3325:32;3322:52;;;3370:1;3367;3360:12;3322:52;3393:29;3412:9;3393:29;:::i;:::-;3383:39;;3472:2;3461:9;3457:18;3444:32;3485:28;3507:5;3485:28;:::i;:::-;3532:5;3522:15;;;3228:315;;;;;:::o;3756:328::-;3833:6;3841;3849;3902:2;3890:9;3881:7;3877:23;3873:32;3870:52;;;3918:1;3915;3908:12;3870:52;3941:29;3960:9;3941:29;:::i;:::-;3931:39;;3989:38;4023:2;4012:9;4008:18;3989:38;:::i;:::-;3979:48;;4074:2;4063:9;4059:18;4046:32;4036:42;;3756:328;;;;;:::o;4278:241::-;4334:6;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4442:9;4429:23;4461:28;4483:5;4461:28;:::i;4753:396::-;4831:6;4839;4892:2;4880:9;4871:7;4867:23;4863:32;4860:52;;;4908:1;4905;4898:12;4860:52;4948:9;4935:23;4981:18;4973:6;4970:30;4967:50;;;5013:1;5010;5003:12;4967:50;5036;5078:7;5069:6;5058:9;5054:22;5036:50;:::i;:::-;5026:60;;;5105:38;5139:2;5128:9;5124:18;5105:38;:::i;:::-;5095:48;;4753:396;;;;;:::o;5154:260::-;5222:6;5230;5283:2;5271:9;5262:7;5258:23;5254:32;5251:52;;;5299:1;5296;5289:12;5251:52;5322:29;5341:9;5322:29;:::i;:::-;5312:39;;5370:38;5404:2;5393:9;5389:18;5370:38;:::i;5419:248::-;5487:6;5495;5548:2;5536:9;5527:7;5523:23;5519:32;5516:52;;;5564:1;5561;5554:12;5516:52;-1:-1:-1;;5587:23:1;;;5657:2;5642:18;;;5629:32;;-1:-1:-1;5419:248:1:o;5672:404::-;5874:2;5856:21;;;5913:2;5893:18;;;5886:30;5952:34;5947:2;5932:18;;5925:62;-1:-1:-1;;;6018:2:1;6003:18;;5996:38;6066:3;6051:19;;5672:404::o;6081:380::-;6160:1;6156:12;;;;6203;;;6224:61;;6278:4;6270:6;6266:17;6256:27;;6224:61;6331:2;6323:6;6320:14;6300:18;6297:38;6294:161;;6377:10;6372:3;6368:20;6365:1;6358:31;6412:4;6409:1;6402:15;6440:4;6437:1;6430:15;6294:161;;6081:380;;;:::o;6466:291::-;6643:2;6632:9;6625:21;6606:4;6663:45;6704:2;6693:9;6689:18;6681:6;6663:45;:::i;:::-;6655:53;;6744:6;6739:2;6728:9;6724:18;6717:34;6466:291;;;;;:::o;6762:343::-;6964:2;6946:21;;;7003:2;6983:18;;;6976:30;-1:-1:-1;;;7037:2:1;7022:18;;7015:49;7096:2;7081:18;;6762:343::o;7110:352::-;7312:2;7294:21;;;7351:2;7331:18;;;7324:30;7390;7385:2;7370:18;;7363:58;7453:2;7438:18;;7110:352::o;7467:127::-;7528:10;7523:3;7519:20;7516:1;7509:31;7559:4;7556:1;7549:15;7583:4;7580:1;7573:15;7599:128;7666:9;;;7687:11;;;7684:37;;;7701:18;;:::i;7732:125::-;7797:9;;;7818:10;;;7815:36;;;7831:18;;:::i;8620:184::-;8690:6;8743:2;8731:9;8722:7;8718:23;8714:32;8711:52;;;8759:1;8756;8749:12;8711:52;-1:-1:-1;8782:16:1;;8620:184;-1:-1:-1;8620:184:1:o;8809:317::-;8986:2;8975:9;8968:21;8949:4;9006:45;9047:2;9036:9;9032:18;9024:6;9006:45;:::i;:::-;8998:53;;9116:1;9112;9107:3;9103:11;9099:19;9091:6;9087:32;9082:2;9071:9;9067:18;9060:60;8809:317;;;;;:::o;9131:168::-;9204:9;;;9235;;9252:15;;;9246:22;;9232:37;9222:71;;9273:18;;:::i;9304:217::-;9344:1;9370;9360:132;;9414:10;9409:3;9405:20;9402:1;9395:31;9449:4;9446:1;9439:15;9477:4;9474:1;9467:15;9360:132;-1:-1:-1;9506:9:1;;9304:217::o;9805:245::-;9872:6;9925:2;9913:9;9904:7;9900:23;9896:32;9893:52;;;9941:1;9938;9931:12;9893:52;9973:9;9967:16;9992:28;10014:5;9992:28;:::i;12954:135::-;12993:3;13014:17;;;13011:43;;13034:18;;:::i;:::-;-1:-1:-1;13081:1:1;13070:13;;12954:135::o
Swarm Source
ipfs://b4f3f02d36e25dcca09b690e5a521c39bd6f40aa0d236b8000774d50e1f39d15
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.