Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 KILROY
Holders
26
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Kilroy
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-04 */ // SPDX-License-Identifier: Unlicensed /* %@@@@@@@@@@@( @@@@@@@@@@@, (@@@@@@@@@@ @@@@@@# @@@@@@. @@@@@@ @@@@@ @@@@@ @@@@ @@@@ @@@. @@@@ @@@* @@@ @@@ @@@@ @@@ @@@@ @@* @@@ @@@ &@@@ @@@@ @@@ &@@& &@@@ @@@ (@@@ @@@ @@@ .( @@ @@@ @@@@ @@@ @@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@@@@@@* @@@ @@& @@@ @@/ @@@@@ @@@@ @@@@@@. @@@@@* @@@@ ,@@& @@@ #@@( @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ ,@@@/**%@@@@@@@@ .**((%&@@@@@@@@@@@@( @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, @@, @@@ @@@@@@@@@@@ @ @@@@@@@&%%##((//,,.. @@ @@@. @@. @@@@ @@@@ @@@@@ &@@/ @@@ #@@@, @@@. @@@ @@@@ @@ @@@ @@@ @@@@ @@@@@ %@@@@ @@@( @@@ @@@@@ @@@@ @@@@ @@@@ @@ @@@ @@& @@@@@ @@@@@ @@@@@@@@@@@ @@@ @@@@@ @@@@ @@@@ @@@( &@@ @@@ @@@ @@@@@ @@@@@@ @@@ @@@@@ @@@@@@@@@@% @@@@@ @@@@@ %@@@ @@@ @@@ @@@@@@ @@@ @@( @@@@@@@ &@@/ @@@, @@@ @@@ @@@ #@@@@@ @@@ @@@ @@@@@@& #@* @@@@@@ @@@@@@& , @@& @@@ @@% @@@ @@% @@@ @@@ (@@@ &@@ @@@ @@ @@@ @@@ @@@ @@@ *@@@ @@@ @@@ @@@% @@@( @@@@@@@@@@@@@@@@ Kilroy is here, on ETH Telegram: https://t.me/kilroyportal Twitter : https://twitter.com/KilroyOnEth Website : https://kilroyoneth.com/ */ pragma solidity ^0.6.12; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); 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 addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Kilroy is Context, IERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => uint256) private _specialFees; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromReward; mapping( address => bool) private _hasSpecialFee; address[] private _excludedFromReward; address payable public projectFundAddress = payable(0x57A1ab41a7B567ED03BC610ba510143059177C17); address payable public buyBackAddress = payable(0x000000000000000000000000000000000000dEaD); address payable public burnAddress = payable(0x000000000000000000000000000000000000dEaD); uint256 public numTokensToSell = 10000 * (10**18); uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000 * (10**18); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public _maxTxAmount = 2000000 * (10**18); string private constant _symbol = "KILROY"; string private constant _name = "First viral meme ever"; uint8 private constant _decimals = 18; uint256 public _taxFee = 0; uint256 private _prevTaxFee = _taxFee; uint256 public _liquidityFee = 100; uint256 private _prevLiquidityFee = _liquidityFee; uint256 public _projectFee = 300; uint256 private _prevProjectFee = _projectFee; uint256 public _buyBackFee = 0; uint256 private _prevBuyBackFee = _buyBackFee; uint256 public _totalLiqFee = 0; uint256 private _prevTotalLiqFee = _totalLiqFee; uint256 private _tFeeTotal; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public swapAndLiquifyMaxAmountEnabled = true; uint256 private constant MIN_BUY_AMOUNT = 0; uint256 private constant MAX_BUY_AMOUNT = 10000000 * (10 ** 18); uint256 public _buyBackMinAmount = MIN_BUY_AMOUNT; uint256 public _buyBackMaxAmount = MAX_BUY_AMOUNT; uint256 public _buyBackSize = 1500; // 15 % uint256 private _buyBackCooldownInterval = (1 hours); uint256 private _buyBackCooldownTimestamp = 0; uint256 private timeLock = 0; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); event SwapAndLiquifyMaxAmountEnabled(bool enabled, uint256 maxTokenIntoLiquidity); event SwapAndFundProject(uint256 amount); event SwapForBuyBack(uint256 amount); event SetUniswapRouterAddress(address newRouter, address pair); event SetUniswapPairAddress(address newPair); event SetFundAddress(address newAddress); event SetFees(uint256 newRewardFee, uint256 newLiquidityFee, uint256 newProjectFee, uint256 newBuyBackFee); event ExcludeFromReward(address account); event IncludeInReward(address account); event SetFee(address account, uint256 newFee, bool enabled); event SetnumTokensToSell(uint256 amount); event RescueETH(uint256 amount); event TimeLock(uint256 timestamp); event SetBuyBackConfiguration(uint256 amountMin, uint256 amountMax, uint256 cooldownInterval, uint256 buyBackSize); event SetBuyBackAddress(address newAddress); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; // BSC MainNet, Uniswapswap Router IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _hasSpecialFee[ owner() ] = true; _hasSpecialFee[ address(this) ] = true; //exclude pair from receiving rewards _isExcludedFromReward[ uniswapV2Pair ] = true; _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee); _prevTotalLiqFee = _totalLiqFee; timeLock = block.timestamp; _buyBackCooldownTimestamp = block.timestamp; emit Transfer(address(0), _msgSender(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromReward[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) external view returns (bool) { return _isExcludedFromReward[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function isFeeForAddressEnabled(address account) external view returns (bool) { return _hasSpecialFee[ account ]; } function getFeeForAddress(address account) external view returns (uint256) { return _specialFees[ account ]; } function setUniswapRouterAddress(address routerAddress) external onlyOwner() { require(address(uniswapV2Router) != routerAddress); IUniswapV2Router02 newRouter = IUniswapV2Router02( routerAddress ); // test if pair exists and create if it does not exist address pair = IUniswapV2Factory(newRouter.factory()).getPair(address(this), newRouter.WETH()); if (pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(newRouter.factory()).createPair(address(this), newRouter.WETH()); } else { uniswapV2Pair = pair; } // approve new router to spend contract tokens _approve( address(this), routerAddress, MAX ); // reset approval of old router _approve( address(this), address(uniswapV2Router), 0); // update state uniswapV2Router = IUniswapV2Router02(newRouter); emit SetUniswapRouterAddress(routerAddress, uniswapV2Pair); } function setUniswapPairAddress(address newPair) external onlyOwner() { uniswapV2Pair = newPair; emit SetUniswapPairAddress(uniswapV2Pair); } function setFundAddress(address newAddress) external onlyOwner() { projectFundAddress = payable(newAddress); emit SetFundAddress(projectFundAddress); } function setFees(uint256 newRewardFee, uint256 newLiquidityFee, uint256 newProjectFee, uint256 newBuyBackFee) external onlyOwner() { require( (newRewardFee.add(newLiquidityFee).add(newProjectFee).add(newBuyBackFee)) <= 1000, "Total fees must be <= 1000" ); _taxFee = newRewardFee; _liquidityFee = newLiquidityFee; _projectFee = newProjectFee; _buyBackFee = newBuyBackFee; _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee); emit SetFees(newRewardFee, newLiquidityFee, newProjectFee, newBuyBackFee); } function setFee(address account, uint256 newFee, bool enabled) external onlyOwner { require( newFee <= 1000, "Total fee must be <= 1000" ); _specialFees[ account ] = newFee; _hasSpecialFee[ account ] = enabled; emit SetFee(account, newFee, enabled); } function setBuyBackConfiguration(uint256 amountMin, uint256 amountMax, uint256 cooldownInterval, uint256 buyBackSize) external onlyOwner { require( amountMin > MIN_BUY_AMOUNT ); require( amountMin <= _buyBackMaxAmount) ; require( amountMax > MIN_BUY_AMOUNT ); require( amountMax <= MAX_BUY_AMOUNT ); require( buyBackSize > 0 ); require( buyBackSize <= (10 ** 4)) ; _buyBackMinAmount = amountMin; _buyBackMaxAmount = amountMax; _buyBackCooldownInterval = cooldownInterval; _buyBackCooldownTimestamp = block.timestamp; _buyBackSize = buyBackSize; emit SetBuyBackConfiguration(amountMin, amountMax, cooldownInterval, buyBackSize); } function setBuyBackAddress(address newAddress) external onlyOwner() { buyBackAddress = payable(newAddress); emit SetBuyBackAddress(buyBackAddress); } function excludeFromReward(address account) external onlyOwner() { require(!_isExcludedFromReward[account], "Account is already excluded"); require(_excludedFromReward.length < 100); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromReward[account] = true; _excludedFromReward.push(account); emit ExcludeFromReward(account); } function includeInReward(address account) external onlyOwner() { require(_isExcludedFromReward[account], "Account is already included"); require(_excludedFromReward.length < 100); for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_excludedFromReward[i] == account) { _excludedFromReward[i] = _excludedFromReward[_excludedFromReward.length - 1]; uint256 currentRate = _getRate(); _rOwned[account] = _tOwned[account].mul(currentRate); _tOwned[account] = 0; _isExcludedFromReward[account] = false; _excludedFromReward.pop(); break; } } emit IncludeInReward(account); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setSwapAndLiquifyMaxAmountEnabled(bool _enabled) external onlyOwner { swapAndLiquifyMaxAmountEnabled = _enabled; emit SwapAndLiquifyMaxAmountEnabled(_enabled, numTokensToSell); } function setSwapAndLiquifyMaxAmount(uint256 amount) external onlyOwner { require( amount > 0 ); numTokensToSell = amount; emit SetnumTokensToSell(amount); } // contract gains ETH over time function rescueETH(uint256 amount) external onlyOwner { payable( msg.sender ).transfer(amount); emit RescueETH(amount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_rOwned[_excludedFromReward[i]] > rSupply || _tOwned[_excludedFromReward[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excludedFromReward[i]]); tSupply = tSupply.sub(_tOwned[_excludedFromReward[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcludedFromReward[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**4 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_totalLiqFee).div( 10**4 ); } function saveAllFees() private { _prevTaxFee = _taxFee; _prevTotalLiqFee = _totalLiqFee; _prevProjectFee = _projectFee; _prevLiquidityFee = _liquidityFee; _prevBuyBackFee = _buyBackFee; } function setSpecialFee(address from, address to) private returns (bool) { uint256 totalFee = _taxFee.add(_liquidityFee).add(_projectFee).add(_buyBackFee); if( totalFee == 0 ) { return false; // don't take fee } // either one or both have a special fee, take the lowest address lowestFeeAccount = from; if( _hasSpecialFee[from] && _hasSpecialFee[to]) { lowestFeeAccount = ( _specialFees[from] > _specialFees[to] ? to : from ); } else if ( _hasSpecialFee[to] ) { lowestFeeAccount = to; } // get the fee uint256 fee = _specialFees[ lowestFeeAccount ]; // set fees _taxFee = fee.mul(_taxFee).div( totalFee ); _liquidityFee = fee.mul(_liquidityFee).div( totalFee ); _projectFee = fee.mul(_projectFee).div( totalFee ); _buyBackFee = fee.mul(_buyBackFee).div( totalFee ); _totalLiqFee = _liquidityFee.add(_projectFee).add(_buyBackFee); return ( _taxFee.add(_liquidityFee).add(_buyBackFee) ) > 0; } function restoreAllFees() private { _taxFee = _prevTaxFee; _totalLiqFee = _prevTotalLiqFee; _projectFee = _prevProjectFee; _liquidityFee = _prevLiquidityFee; _buyBackFee = _prevBuyBackFee; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0) ); require(spender != address(0) ); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount <= balanceOf(from), "Transfer amount exceeds allowance"); require(amount >= 0, "Transfer amount must be >= 0"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance > numTokensToSell; // save all the fees saveAllFees(); // if the address has a special fee, use it if( _hasSpecialFee[from] || _hasSpecialFee[to] ) { setSpecialFee(from,to); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled && _totalLiqFee > 0 ) { if( swapAndLiquifyMaxAmountEnabled ) { contractTokenBalance = numTokensToSell; } swapAndLiquify(contractTokenBalance); } //transfer amount, it will deduct fee and reflect tokens _tokenTransfer(from,to,amount); // restore all the fees restoreAllFees(); } function swapAndLiquify(uint256 tAmount) private lockTheSwap { uint256 forLiquidity = tAmount.mul(_liquidityFee).div(_totalLiqFee); uint256 forBuyBack = tAmount.mul(_buyBackFee).div(_totalLiqFee); uint256 forWallets = tAmount.sub(forLiquidity).sub(forBuyBack); if(forLiquidity > 0 && _liquidityFee > 0) { // sell half the tokens for ETH and add liquidity uint256 half = forLiquidity.div(2); uint256 otherHalf = forLiquidity.sub(half); uint256 initialBalance = address(this).balance; swapTokensForETH(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } if(forWallets > 0 && _projectFee > 0) { // sell tokens for ETH and send to project fund uint256 initialBalance = address(this).balance; swapTokensForETH(forWallets); uint256 newBalance = address(this).balance.sub(initialBalance); transferToAddressETH(projectFundAddress, newBalance); emit SwapAndFundProject(newBalance); } if(forBuyBack >0 && _buyBackFee > 0) { uint256 buyBackAmount = address(this).balance.mul( _buyBackSize ).div( 10 ** 4); // if there is a max set on amount to buy back, cap the amount of eth to spent if( buyBackAmount > _buyBackMaxAmount ) { buyBackAmount = _buyBackMaxAmount; } // buy if more than minimum amount of eth to spent if( buyBackAmount > _buyBackMinAmount && _buyBackCooldownTimestamp < block.timestamp) { swapForBuyback(buyBackAmount); _buyBackCooldownTimestamp = block.timestamp + _buyBackCooldownInterval; } } } function swapTokensForETH(uint256 tokenAmount) private { // generate the pancake pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if( _allowances[ address(this)][address(uniswapV2Router)] < tokenAmount ) _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapForBuyback(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, buyBackAddress, block.timestamp ); emit SwapForBuyBack(amount); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { if( _allowances[ address(this)][address(uniswapV2Router)] < tokenAmount ) _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable burnAddress, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //to receive ETH from pancakeV2Router when swapping receive() external payable {} }
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":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInReward","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RescueETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetBuyBackAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cooldownInterval","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackSize","type":"uint256"}],"name":"SetBuyBackConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProjectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyBackFee","type":"uint256"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFundAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPair","type":"address"}],"name":"SetUniswapPairAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"SetUniswapRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetnumTokensToSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndFundProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"maxTokenIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquifyMaxAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapForBuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimeLock","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":[],"name":"_buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_projectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFeeForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFeeForAddressEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensToSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMin","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"uint256","name":"cooldownInterval","type":"uint256"},{"internalType":"uint256","name":"buyBackSize","type":"uint256"}],"name":"setBuyBackConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newProjectFee","type":"uint256"},{"internalType":"uint256","name":"newBuyBackFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAndLiquifyMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyMaxAmountEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setUniswapPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setUniswapRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyMaxAmountEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600980546001600160a01b03199081167357a1ab41a7b567ed03bc610ba510143059177c1717909155600a8054821661dead908117909155600b805490921617905569021e19e0c9bab2400000600c556a52b7d2dcc80cd2e4000000600d556a34f8e1f3adab5d4bffffff19600e556a01a784379d99db42000000600f556000601081905560118190556064601281905560135561012c60148190556015556016819055601781905560188190556019819055601c805460ff60b01b1960ff60a81b19909116600160a81b1716600160b01b179055601d8190556a084595161401484a000000601e556105dc601f55610e1060205560218190556022553480156200010e57600080fd5b5060006200011b62000459565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e54600260006200017662000459565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ed57600080fd5b505afa15801562000202573d6000803e3d6000fd5b505050506040513d60208110156200021957600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200026a57600080fd5b505afa1580156200027f573d6000803e3d6000fd5b505050506040513d60208110156200029657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002e957600080fd5b505af1158015620002fe573d6000803e3d6000fd5b505050506040513d60208110156200031557600080fd5b5051601c80546001600160a01b03199081166001600160a01b0393841617909155601b8054909116918316919091179055600160076000620003566200045d565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260078452828120805486166001908117909155601c5490921681526006845291909120805490931617909155601654601454601254620003ea93620003d692906200215a6200046c821b17901c565b6200046c60201b6200215a1790919060201c565b60188190556019554260228190556021556200040562000459565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a350620004ce565b3390565b6000546001600160a01b031690565b600082820183811015620004c7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6136ed80620004de6000396000f3fe6080604052600436106102cd5760003560e01c80636bc87c3a11610175578063a457c2d7116100dc578063db15d18511610095578063deb4e9e61161006f578063deb4e9e614610a5b578063ee46443014610a70578063f2fde38b14610a85578063fb9c12ac14610ab8576102d4565b8063db15d185146109d8578063dccced7714610a0b578063dd62ed3e14610a20576102d4565b8063a457c2d7146108bf578063a9059cbb146108f8578063ad740f8c14610931578063bd7644b814610964578063c49b9a8014610997578063d795b97c146109c3576102d4565b80637d1db4a51161012e5780637d1db4a5146107f057806385dc30041461080557806388f82020146108385780638da5cb5b1461086b57806395d89b41146108805780639e252f0014610895576102d4565b80636bc87c3a1461072d5780636fcba3771461074257806370a082311461077e57806370d5ae05146107b1578063715018a6146107c6578063783478ad146107db576102d4565b80632d838119116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb021461069d57806352390c02146106b2578063682bcb10146106e55780636883937714610718576102d4565b80634549b0391461061557806345ba883e1461064757806349bd5a5e14610688576102d4565b80632d8381191461050c578063310c165f14610536578063313ce567146105695780633685d4191461059457806339509351146105c75780633b124fe714610600576102d4565b80631694505e116102865780631694505e14610432578063178bfc6a1461044757806318160ddd1461045c5780631834848c146104715780631f1942a81461049d57806323b872dd146104c9576102d4565b806306fdde03146102d9578063095ea7b3146103635780630bfe9327146103b057806312706f04146103d757806313114a9d146103ec57806313c5d7a914610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610af4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610b41565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610b47565b3480156103f857600080fd5b506103c5610b4d565b34801561040d57600080fd5b50610416610b53565b604080516001600160a01b039092168252519081900360200190f35b34801561043e57600080fd5b50610416610b62565b34801561045357600080fd5b506103c5610b71565b34801561046857600080fd5b506103c5610b77565b34801561047d57600080fd5b5061049b6004803603602081101561049457600080fd5b5035610b7d565b005b3480156104a957600080fd5b5061049b600480360360208110156104c057600080fd5b50351515610c1d565b3480156104d557600080fd5b5061039c600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610cd3565b34801561051857600080fd5b506103c56004803603602081101561052f57600080fd5b5035610d5a565b34801561054257600080fd5b5061039c6004803603602081101561055957600080fd5b50356001600160a01b0316610dbc565b34801561057557600080fd5b5061057e610dda565b6040805160ff9092168252519081900360200190f35b3480156105a057600080fd5b5061049b600480360360208110156105b757600080fd5b50356001600160a01b0316610ddf565b3480156105d357600080fd5b5061039c600480360360408110156105ea57600080fd5b506001600160a01b038135169060200135611032565b34801561060c57600080fd5b506103c5611080565b34801561062157600080fd5b506103c56004803603604081101561063857600080fd5b50803590602001351515611086565b34801561065357600080fd5b5061049b6004803603606081101561066a57600080fd5b506001600160a01b0381351690602081013590604001351515611118565b34801561069457600080fd5b5061041661123c565b3480156106a957600080fd5b5061039c61124b565b3480156106be57600080fd5b5061049b600480360360208110156106d557600080fd5b50356001600160a01b031661125b565b3480156106f157600080fd5b506103c56004803603602081101561070857600080fd5b50356001600160a01b0316611427565b34801561072457600080fd5b506103c5611442565b34801561073957600080fd5b506103c5611448565b34801561074e57600080fd5b5061049b6004803603608081101561076557600080fd5b508035906020810135906040810135906060013561144e565b34801561078a57600080fd5b506103c5600480360360208110156107a157600080fd5b50356001600160a01b0316611584565b3480156107bd57600080fd5b506104166115e6565b3480156107d257600080fd5b5061049b6115f5565b3480156107e757600080fd5b50610416611697565b3480156107fc57600080fd5b506103c56116a6565b34801561081157600080fd5b5061049b6004803603602081101561082857600080fd5b50356001600160a01b03166116ac565b34801561084457600080fd5b5061039c6004803603602081101561085b57600080fd5b50356001600160a01b031661175e565b34801561087757600080fd5b5061041661177c565b34801561088c57600080fd5b506102ee61178b565b3480156108a157600080fd5b5061049b600480360360208110156108b857600080fd5b50356117ab565b3480156108cb57600080fd5b5061039c600480360360408110156108e257600080fd5b506001600160a01b038135169060200135611867565b34801561090457600080fd5b5061039c6004803603604081101561091b57600080fd5b506001600160a01b0381351690602001356118cf565b34801561093d57600080fd5b5061049b6004803603602081101561095457600080fd5b50356001600160a01b03166118e3565b34801561097057600080fd5b5061049b6004803603602081101561098757600080fd5b50356001600160a01b0316611995565b3480156109a357600080fd5b5061049b600480360360208110156109ba57600080fd5b50351515611a47565b3480156109cf57600080fd5b506103c5611af2565b3480156109e457600080fd5b5061049b600480360360208110156109fb57600080fd5b50356001600160a01b0316611af8565b348015610a1757600080fd5b506103c5611f03565b348015610a2c57600080fd5b506103c560048036036040811015610a4357600080fd5b506001600160a01b0381358116916020013516611f09565b348015610a6757600080fd5b5061039c611f34565b348015610a7c57600080fd5b506103c5611f44565b348015610a9157600080fd5b5061049b60048036036020811015610aa857600080fd5b50356001600160a01b0316611f4a565b348015610ac457600080fd5b5061049b60048036036080811015610adb57600080fd5b5080359060208101359060408101359060600135612042565b6040805180820190915260158152742334b939ba103b34b930b61036b2b6b29032bb32b960591b602082015290565b6000610b37610b306121bb565b84846121bf565b5060015b92915050565b60145481565b60165481565b601a5490565b6009546001600160a01b031681565b601b546001600160a01b031681565b601e5481565b600d5490565b610b856121bb565b6000546001600160a01b03908116911614610bd5576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b60008111610be257600080fd5b600c8190556040805182815290517fe7451016bbe54564a97ab1bb8887f3372065e0213bd53f7557908ea1dbfa80879181900360200190a150565b610c256121bb565b6000546001600160a01b03908116911614610c75576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c805460ff60b01b1916600160b01b83151590810291909117909155600c5460408051928352602083019190915280517f9b7a23929654e960c9f5e67d1510da776cffd86bd08b7278978c38bcf6ce43819281900390910190a150565b6000610ce0848484612247565b610d5084610cec6121bb565b610d4b85604051806060016040528060288152602001613626602891396001600160a01b038a16600090815260056020526040812090610d2a6121bb565b6001600160a01b031681526020810191909152604001600020549190612417565b6121bf565b5060019392505050565b6000600e54821115610d9d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613594602a913960400191505060405180910390fd5b6000610da76124ae565b9050610db383826124d1565b9150505b919050565b6001600160a01b031660009081526007602052604090205460ff1690565b601290565b610de76121bb565b6000546001600160a01b03908116911614610e37576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610ea4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b600854606411610eb357600080fd5b60005b600854811015610ff257816001600160a01b031660088281548110610ed757fe5b6000918252602090912001546001600160a01b03161415610fea57600880546000198101908110610f0457fe5b600091825260209091200154600880546001600160a01b039092169183908110610f2a57fe5b6000918252602082200180546001600160a01b0319166001600160a01b039390931692909217909155610f5b6124ae565b6001600160a01b038416600090815260036020526040902054909150610f819082612513565b6001600160a01b038416600090815260026020908152604080832093909355600381528282208290556006905220805460ff191690556008805480610fc257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610ff2565b600101610eb6565b50604080516001600160a01b038316815290517fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f9181900360200190a150565b6000610b3761103f6121bb565b84610d4b85600560006110506121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061215a565b60105481565b6000600d548311156110df576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110fe5760006110ef8461256c565b50939550610b3b945050505050565b60006111098461256c565b50929550610b3b945050505050565b6111206121bb565b6000546001600160a01b03908116911614611170576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e88211156111c7576040805162461bcd60e51b815260206004820152601960248201527f546f74616c20666565206d757374206265203c3d203130303000000000000000604482015290519081900360640190fd5b6001600160a01b03831660008181526004602090815260408083208690556007825291829020805485151560ff199091168117909155825193845290830185905282820152517fd12bcdb5e9d1b97987843d1dc1654e96429c968a5efbc5a47dab1955052282469181900360600190a1505050565b601c546001600160a01b031681565b601c54600160a81b900460ff1681565b6112636121bb565b6000546001600160a01b039081169116146112b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611321576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60085460641161133057600080fd5b6001600160a01b0381166000908152600260205260409020541561138a576001600160a01b03811660009081526002602052604090205461137090610d5a565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b03191684179055815192835290517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99281900390910190a150565b6001600160a01b031660009081526004602052604090205490565b60185481565b60125481565b6114566121bb565b6000546001600160a01b039081169116146114a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e86114bf826114b98581898961215a565b9061215a565b1115611512576040805162461bcd60e51b815260206004820152601a60248201527f546f74616c2066656573206d757374206265203c3d2031303030000000000000604482015290519081900360640190fd5b6010849055601283905560148290556016819055611534816114b9858561215a565b60185560408051858152602081018590528082018490526060810183905290517f747eaccb30a9769474f1620ae0dd833b1ffb89520dcac6833b33df942b7c0c499181900360800190a150505050565b6001600160a01b03811660009081526006602052604081205460ff16156115c457506001600160a01b038116600090815260036020526040902054610db7565b6001600160a01b038216600090815260026020526040902054610b3b90610d5a565b600b546001600160a01b031681565b6115fd6121bb565b6000546001600160a01b0390811691161461164d576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a546001600160a01b031681565b600f5481565b6116b46121bb565b6000546001600160a01b03908116911614611704576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f45215203c85e400cb105104faee2424849a1f3c133e4137bb7c8fcfd5364abd2916020908290030190a150565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b6040805180820190915260068152654b494c524f5960d01b602082015290565b6117b36121bb565b6000546001600160a01b03908116911614611803576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611830573d6000803e3d6000fd5b506040805182815290517f3373c052f32575936b89b777340cd8fa8fc47f26ff5ae1620367db5ac6b9d8f49181900360200190a150565b6000610b376118746121bb565b84610d4b85604051806060016040528060258152602001613693602591396005600061189e6121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612417565b6000610b376118dc6121bb565b8484612247565b6118eb6121bb565b6000546001600160a01b0390811691161461193b576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f200c92aaea275302bf641e37f7a5dda63f445f08f4fc74a5cde7fd643f609e09916020908290030190a150565b61199d6121bb565b6000546001600160a01b039081169116146119ed576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fe792dda6a0f616f273c6a9ed38ffd11a0871204bcb8cfdd55258070a7f84fa6f916020908290030190a150565b611a4f6121bb565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b601f5481565b611b006121bb565b6000546001600160a01b03908116911614611b50576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601b546001600160a01b0382811691161415611b6b57600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d6020811015611bd557600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6020811015611c4f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611c9f57600080fd5b505afa158015611cb3573d6000803e3d6000fd5b505050506040513d6020811015611cc957600080fd5b505190506001600160a01b038116611e5a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d6020811015611d3e57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b5051601c80546001600160a01b0319166001600160a01b03909216919091179055611e76565b601c80546001600160a01b0319166001600160a01b0383161790555b611e8330846000196121bf565b601b54611e9c9030906001600160a01b031660006121bf565b601b80546001600160a01b0319166001600160a01b0384811691909117909155601c5460408051868416815291909216602082015281517f842d1084f58007af8d568ff91d81878d43da3ade04078ded46330567e6bea5da929181900390910190a1505050565b601d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b601c54600160b01b900460ff1681565b600c5481565b611f526121bb565b6000546001600160a01b03908116911614611fa2576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe75760405162461bcd60e51b81526004018080602001828103825260268152602001806135be6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61204a6121bb565b6000546001600160a01b0390811691161461209a576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600084116120a757600080fd5b601e548411156120b657600080fd5b600083116120c357600080fd5b6a084595161401484a0000008311156120db57600080fd5b600081116120e857600080fd5b6127108111156120f757600080fd5b601d849055601e839055602082815542602155601f8290556040805186815291820185905281810184905260608201839052517ffa1de0d454e156a6208a517053f77e0aebf802ff6a0aa7e8aacfd29e0cc3cf239181900360800190a150505050565b6000828201838110156121b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166121d257600080fd5b6001600160a01b0382166121e557600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661228c5760405162461bcd60e51b815260040180806020018281038252602581526020018061366e6025913960400191505060405180910390fd5b6001600160a01b0382166122d15760405162461bcd60e51b81526004018080602001828103825260238152602001806135716023913960400191505060405180910390fd5b6122da83611584565b8111156123185760405162461bcd60e51b81526004018080602001828103825260218152602001806135e46021913960400191505060405180910390fd5b600061232330611584565b600c5490915081116123336125bb565b6001600160a01b03851660009081526007602052604090205460ff168061237257506001600160a01b03841660009081526007602052604090205460ff165b156123835761238185856125db565b505b80801561239a5750601c54600160a01b900460ff16155b80156123b45750601c546001600160a01b03868116911614155b80156123c95750601c54600160a81b900460ff165b80156123d757506000601854115b156123fd57601c54600160b01b900460ff16156123f457600c5491505b6123fd8261276f565b61240885858561296d565b612410612a74565b5050505050565b600081848411156124a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561246b578181015183820152602001612453565b50505050905090810190601f1680156124985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006124bb612a94565b90925090506124ca82826124d1565b9250505090565b60006121b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf7565b60008261252257506000610b3b565b8282028284828161252f57fe5b04146121b45760405162461bcd60e51b81526004018080602001828103825260218152602001806136056021913960400191505060405180910390fd5b60008060008060008060008060006125838a612c5c565b92509250925060008060006125a18d868661259c6124ae565b612c98565b919f909e50909c50959a5093985091965092945050505050565b601054601155601854601955601454601555601254601355601654601755565b6000806126016016546114b96014546114b960125460105461215a90919063ffffffff16565b905080612612576000915050610b3b565b6001600160a01b038416600090815260076020526040902054849060ff16801561265457506001600160a01b03841660009081526007602052604090205460ff165b15612690576001600160a01b03808516600090815260046020526040808220549288168252902054116126875784612689565b835b90506126b4565b6001600160a01b03841660009081526007602052604090205460ff16156126b45750825b6001600160a01b0381166000908152600460205260409020546010546126e79084906126e1908490612513565b906124d1565b6010556012546126fe9084906126e1908490612513565b6012556014546127159084906126e1908490612513565b60145560165461272c9084906126e1908490612513565b601681905560145460125461274692916114b9919061215a565b6018556016546012546010546000926127649290916114b99161215a565b119695505050505050565b601c805460ff60a01b1916600160a01b17905560185460125460009161279a916126e1908590612513565b905060006127b96018546126e16016548661251390919063ffffffff16565b905060006127d1826127cb8686612ce8565b90612ce8565b90506000831180156127e557506000601254115b1561286e5760006127f78460026124d1565b905060006128058583612ce8565b90504761281183612d2a565b600061281d4783612ce8565b90506128298382612f08565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505b60008111801561288057506000601454115b156128ea574761288f82612d2a565b600061289b4783612ce8565b6009549091506128b4906001600160a01b031682612ff3565b6040805182815290517f938f1ed4457a26afa862c76b6248f937d72279bf5fed7430c43c1d7c3356ac379181900360200190a150505b6000821180156128fc57506000601654115b1561295a57600061291e6127106126e1601f544761251390919063ffffffff16565b9050601e5481111561292f5750601e545b601d5481118015612941575042602154105b156129585761294f81613029565b60205442016021555b505b5050601c805460ff60a01b191690555050565b6001600160a01b03831660009081526006602052604090205460ff1680156129ae57506001600160a01b03821660009081526006602052604090205460ff16155b156129c3576129be838383613206565b612a6f565b6001600160a01b03831660009081526006602052604090205460ff16158015612a0457506001600160a01b03821660009081526006602052604090205460ff165b15612a14576129be83838361332a565b6001600160a01b03831660009081526006602052604090205460ff168015612a5457506001600160a01b03821660009081526006602052604090205460ff165b15612a64576129be8383836133d3565b612a6f838383613446565b505050565b601154601055601954601855601554601455601354601255601754601655565b600e54600d546000918291825b600854811015612bc557826002600060088481548110612abd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b225750816003600060088481548110612afb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b3957600e54600d5494509450505050612bf3565b612b796002600060088481548110612b4d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ce8565b9250612bbb6003600060088481548110612b8f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ce8565b9150600101612aa1565b50600d54600e54612bd5916124d1565b821015612bed57600e54600d54935093505050612bf3565b90925090505b9091565b60008183612c465760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561246b578181015183820152602001612453565b506000838581612c5257fe5b0495945050505050565b600080600080612c6b8561348a565b90506000612c78866134a7565b90506000612c8a826127cb8986612ce8565b979296509094509092505050565b6000808080612ca78886612513565b90506000612cb58887612513565b90506000612cc38888612513565b90506000612cd5826127cb8686612ce8565b939b939a50919850919650505050505050565b60006121b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612417565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d5857fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dac57600080fd5b505afa158015612dc0573d6000803e3d6000fd5b505050506040513d6020811015612dd657600080fd5b5051815182906001908110612de757fe5b6001600160a01b03928316602091820292909201810191909152306000908152600582526040808220601b549094168252929091522054821115612e3d57601b54612e3d9030906001600160a01b0316846121bf565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612ec3578181015183820152602001612eab565b505050509050019650505050505050600060405180830381600087803b158015612eec57600080fd5b505af1158015612f00573d6000803e3d6000fd5b505050505050565b306000908152600560209081526040808320601b546001600160a01b03168452909152902054821115612f4d57601b54612f4d9030906001600160a01b0316846121bf565b601b54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612fc257600080fd5b505af1158015612fd6573d6000803e3d6000fd5b50505050506040513d6060811015612fed57600080fd5b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b60408051600280825260608083018452926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561308d57600080fd5b505afa1580156130a1573d6000803e3d6000fd5b505050506040513d60208110156130b757600080fd5b5051815182906000906130c657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106130f457fe5b6001600160a01b03928316602091820292909201810191909152601b54600a5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b8381101561318d578181015183820152602001613175565b50505050905001955050505050506000604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50506040805186815290517fca881194a4e2559fbdad4caf5417634a16ff329086cc52919b656dfb1a15487f94509081900360200192509050a15050565b6000806000806000806132188761256c565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061324a9088612ce8565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132799087612ce8565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546132a8908661215a565b6001600160a01b0389166000908152600260205260409020556132ca816134c4565b6132d4848361354c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061333c8761256c565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061336e9087612ce8565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546133a4908461215a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546132a8908661215a565b6000806000806000806133e58761256c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134179088612ce8565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461336e9087612ce8565b6000806000806000806134588761256c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132799087612ce8565b6000610b3b6127106126e16010548561251390919063ffffffff16565b6000610b3b6127106126e16018548561251390919063ffffffff16565b60006134ce6124ae565b905060006134dc8383612513565b306000908152600260205260409020549091506134f9908261215a565b3060009081526002602090815260408083209390935560069052205460ff1615612a6f5730600090815260036020526040902054613537908461215a565b30600090815260036020526040902055505050565b600e546135599083612ce8565b600e55601a54613569908261215a565b601a55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a8864736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80636bc87c3a11610175578063a457c2d7116100dc578063db15d18511610095578063deb4e9e61161006f578063deb4e9e614610a5b578063ee46443014610a70578063f2fde38b14610a85578063fb9c12ac14610ab8576102d4565b8063db15d185146109d8578063dccced7714610a0b578063dd62ed3e14610a20576102d4565b8063a457c2d7146108bf578063a9059cbb146108f8578063ad740f8c14610931578063bd7644b814610964578063c49b9a8014610997578063d795b97c146109c3576102d4565b80637d1db4a51161012e5780637d1db4a5146107f057806385dc30041461080557806388f82020146108385780638da5cb5b1461086b57806395d89b41146108805780639e252f0014610895576102d4565b80636bc87c3a1461072d5780636fcba3771461074257806370a082311461077e57806370d5ae05146107b1578063715018a6146107c6578063783478ad146107db576102d4565b80632d838119116102345780634549b039116101ed5780634a74bb02116101c75780634a74bb021461069d57806352390c02146106b2578063682bcb10146106e55780636883937714610718576102d4565b80634549b0391461061557806345ba883e1461064757806349bd5a5e14610688576102d4565b80632d8381191461050c578063310c165f14610536578063313ce567146105695780633685d4191461059457806339509351146105c75780633b124fe714610600576102d4565b80631694505e116102865780631694505e14610432578063178bfc6a1461044757806318160ddd1461045c5780631834848c146104715780631f1942a81461049d57806323b872dd146104c9576102d4565b806306fdde03146102d9578063095ea7b3146103635780630bfe9327146103b057806312706f04146103d757806313114a9d146103ec57806313c5d7a914610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610af4565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610b41565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610b47565b3480156103f857600080fd5b506103c5610b4d565b34801561040d57600080fd5b50610416610b53565b604080516001600160a01b039092168252519081900360200190f35b34801561043e57600080fd5b50610416610b62565b34801561045357600080fd5b506103c5610b71565b34801561046857600080fd5b506103c5610b77565b34801561047d57600080fd5b5061049b6004803603602081101561049457600080fd5b5035610b7d565b005b3480156104a957600080fd5b5061049b600480360360208110156104c057600080fd5b50351515610c1d565b3480156104d557600080fd5b5061039c600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610cd3565b34801561051857600080fd5b506103c56004803603602081101561052f57600080fd5b5035610d5a565b34801561054257600080fd5b5061039c6004803603602081101561055957600080fd5b50356001600160a01b0316610dbc565b34801561057557600080fd5b5061057e610dda565b6040805160ff9092168252519081900360200190f35b3480156105a057600080fd5b5061049b600480360360208110156105b757600080fd5b50356001600160a01b0316610ddf565b3480156105d357600080fd5b5061039c600480360360408110156105ea57600080fd5b506001600160a01b038135169060200135611032565b34801561060c57600080fd5b506103c5611080565b34801561062157600080fd5b506103c56004803603604081101561063857600080fd5b50803590602001351515611086565b34801561065357600080fd5b5061049b6004803603606081101561066a57600080fd5b506001600160a01b0381351690602081013590604001351515611118565b34801561069457600080fd5b5061041661123c565b3480156106a957600080fd5b5061039c61124b565b3480156106be57600080fd5b5061049b600480360360208110156106d557600080fd5b50356001600160a01b031661125b565b3480156106f157600080fd5b506103c56004803603602081101561070857600080fd5b50356001600160a01b0316611427565b34801561072457600080fd5b506103c5611442565b34801561073957600080fd5b506103c5611448565b34801561074e57600080fd5b5061049b6004803603608081101561076557600080fd5b508035906020810135906040810135906060013561144e565b34801561078a57600080fd5b506103c5600480360360208110156107a157600080fd5b50356001600160a01b0316611584565b3480156107bd57600080fd5b506104166115e6565b3480156107d257600080fd5b5061049b6115f5565b3480156107e757600080fd5b50610416611697565b3480156107fc57600080fd5b506103c56116a6565b34801561081157600080fd5b5061049b6004803603602081101561082857600080fd5b50356001600160a01b03166116ac565b34801561084457600080fd5b5061039c6004803603602081101561085b57600080fd5b50356001600160a01b031661175e565b34801561087757600080fd5b5061041661177c565b34801561088c57600080fd5b506102ee61178b565b3480156108a157600080fd5b5061049b600480360360208110156108b857600080fd5b50356117ab565b3480156108cb57600080fd5b5061039c600480360360408110156108e257600080fd5b506001600160a01b038135169060200135611867565b34801561090457600080fd5b5061039c6004803603604081101561091b57600080fd5b506001600160a01b0381351690602001356118cf565b34801561093d57600080fd5b5061049b6004803603602081101561095457600080fd5b50356001600160a01b03166118e3565b34801561097057600080fd5b5061049b6004803603602081101561098757600080fd5b50356001600160a01b0316611995565b3480156109a357600080fd5b5061049b600480360360208110156109ba57600080fd5b50351515611a47565b3480156109cf57600080fd5b506103c5611af2565b3480156109e457600080fd5b5061049b600480360360208110156109fb57600080fd5b50356001600160a01b0316611af8565b348015610a1757600080fd5b506103c5611f03565b348015610a2c57600080fd5b506103c560048036036040811015610a4357600080fd5b506001600160a01b0381358116916020013516611f09565b348015610a6757600080fd5b5061039c611f34565b348015610a7c57600080fd5b506103c5611f44565b348015610a9157600080fd5b5061049b60048036036020811015610aa857600080fd5b50356001600160a01b0316611f4a565b348015610ac457600080fd5b5061049b60048036036080811015610adb57600080fd5b5080359060208101359060408101359060600135612042565b6040805180820190915260158152742334b939ba103b34b930b61036b2b6b29032bb32b960591b602082015290565b6000610b37610b306121bb565b84846121bf565b5060015b92915050565b60145481565b60165481565b601a5490565b6009546001600160a01b031681565b601b546001600160a01b031681565b601e5481565b600d5490565b610b856121bb565b6000546001600160a01b03908116911614610bd5576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b60008111610be257600080fd5b600c8190556040805182815290517fe7451016bbe54564a97ab1bb8887f3372065e0213bd53f7557908ea1dbfa80879181900360200190a150565b610c256121bb565b6000546001600160a01b03908116911614610c75576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c805460ff60b01b1916600160b01b83151590810291909117909155600c5460408051928352602083019190915280517f9b7a23929654e960c9f5e67d1510da776cffd86bd08b7278978c38bcf6ce43819281900390910190a150565b6000610ce0848484612247565b610d5084610cec6121bb565b610d4b85604051806060016040528060288152602001613626602891396001600160a01b038a16600090815260056020526040812090610d2a6121bb565b6001600160a01b031681526020810191909152604001600020549190612417565b6121bf565b5060019392505050565b6000600e54821115610d9d5760405162461bcd60e51b815260040180806020018281038252602a815260200180613594602a913960400191505060405180910390fd5b6000610da76124ae565b9050610db383826124d1565b9150505b919050565b6001600160a01b031660009081526007602052604090205460ff1690565b601290565b610de76121bb565b6000546001600160a01b03908116911614610e37576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610ea4576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b600854606411610eb357600080fd5b60005b600854811015610ff257816001600160a01b031660088281548110610ed757fe5b6000918252602090912001546001600160a01b03161415610fea57600880546000198101908110610f0457fe5b600091825260209091200154600880546001600160a01b039092169183908110610f2a57fe5b6000918252602082200180546001600160a01b0319166001600160a01b039390931692909217909155610f5b6124ae565b6001600160a01b038416600090815260036020526040902054909150610f819082612513565b6001600160a01b038416600090815260026020908152604080832093909355600381528282208290556006905220805460ff191690556008805480610fc257fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610ff2565b600101610eb6565b50604080516001600160a01b038316815290517fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f9181900360200190a150565b6000610b3761103f6121bb565b84610d4b85600560006110506121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061215a565b60105481565b6000600d548311156110df576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110fe5760006110ef8461256c565b50939550610b3b945050505050565b60006111098461256c565b50929550610b3b945050505050565b6111206121bb565b6000546001600160a01b03908116911614611170576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e88211156111c7576040805162461bcd60e51b815260206004820152601960248201527f546f74616c20666565206d757374206265203c3d203130303000000000000000604482015290519081900360640190fd5b6001600160a01b03831660008181526004602090815260408083208690556007825291829020805485151560ff199091168117909155825193845290830185905282820152517fd12bcdb5e9d1b97987843d1dc1654e96429c968a5efbc5a47dab1955052282469181900360600190a1505050565b601c546001600160a01b031681565b601c54600160a81b900460ff1681565b6112636121bb565b6000546001600160a01b039081169116146112b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611321576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60085460641161133057600080fd5b6001600160a01b0381166000908152600260205260409020541561138a576001600160a01b03811660009081526002602052604090205461137090610d5a565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b03191684179055815192835290517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99281900390910190a150565b6001600160a01b031660009081526004602052604090205490565b60185481565b60125481565b6114566121bb565b6000546001600160a01b039081169116146114a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6103e86114bf826114b98581898961215a565b9061215a565b1115611512576040805162461bcd60e51b815260206004820152601a60248201527f546f74616c2066656573206d757374206265203c3d2031303030000000000000604482015290519081900360640190fd5b6010849055601283905560148290556016819055611534816114b9858561215a565b60185560408051858152602081018590528082018490526060810183905290517f747eaccb30a9769474f1620ae0dd833b1ffb89520dcac6833b33df942b7c0c499181900360800190a150505050565b6001600160a01b03811660009081526006602052604081205460ff16156115c457506001600160a01b038116600090815260036020526040902054610db7565b6001600160a01b038216600090815260026020526040902054610b3b90610d5a565b600b546001600160a01b031681565b6115fd6121bb565b6000546001600160a01b0390811691161461164d576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a546001600160a01b031681565b600f5481565b6116b46121bb565b6000546001600160a01b03908116911614611704576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f45215203c85e400cb105104faee2424849a1f3c133e4137bb7c8fcfd5364abd2916020908290030190a150565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b6040805180820190915260068152654b494c524f5960d01b602082015290565b6117b36121bb565b6000546001600160a01b03908116911614611803576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b604051339082156108fc029083906000818181858888f19350505050158015611830573d6000803e3d6000fd5b506040805182815290517f3373c052f32575936b89b777340cd8fa8fc47f26ff5ae1620367db5ac6b9d8f49181900360200190a150565b6000610b376118746121bb565b84610d4b85604051806060016040528060258152602001613693602591396005600061189e6121bb565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612417565b6000610b376118dc6121bb565b8484612247565b6118eb6121bb565b6000546001600160a01b0390811691161461193b576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517f200c92aaea275302bf641e37f7a5dda63f445f08f4fc74a5cde7fd643f609e09916020908290030190a150565b61199d6121bb565b6000546001600160a01b039081169116146119ed576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fe792dda6a0f616f273c6a9ed38ffd11a0871204bcb8cfdd55258070a7f84fa6f916020908290030190a150565b611a4f6121bb565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601c8054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b601f5481565b611b006121bb565b6000546001600160a01b03908116911614611b50576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b601b546001600160a01b0382811691161415611b6b57600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d6020811015611bd557600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6020811015611c4f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b158015611c9f57600080fd5b505afa158015611cb3573d6000803e3d6000fd5b505050506040513d6020811015611cc957600080fd5b505190506001600160a01b038116611e5a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d6020811015611d3e57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015611d8e57600080fd5b505afa158015611da2573d6000803e3d6000fd5b505050506040513d6020811015611db857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015611e0a57600080fd5b505af1158015611e1e573d6000803e3d6000fd5b505050506040513d6020811015611e3457600080fd5b5051601c80546001600160a01b0319166001600160a01b03909216919091179055611e76565b601c80546001600160a01b0319166001600160a01b0383161790555b611e8330846000196121bf565b601b54611e9c9030906001600160a01b031660006121bf565b601b80546001600160a01b0319166001600160a01b0384811691909117909155601c5460408051868416815291909216602082015281517f842d1084f58007af8d568ff91d81878d43da3ade04078ded46330567e6bea5da929181900390910190a1505050565b601d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b601c54600160b01b900460ff1681565b600c5481565b611f526121bb565b6000546001600160a01b03908116911614611fa2576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b6001600160a01b038116611fe75760405162461bcd60e51b81526004018080602001828103825260268152602001806135be6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61204a6121bb565b6000546001600160a01b0390811691161461209a576040805162461bcd60e51b8152602060048201819052602482015260008051602061364e833981519152604482015290519081900360640190fd5b600084116120a757600080fd5b601e548411156120b657600080fd5b600083116120c357600080fd5b6a084595161401484a0000008311156120db57600080fd5b600081116120e857600080fd5b6127108111156120f757600080fd5b601d849055601e839055602082815542602155601f8290556040805186815291820185905281810184905260608201839052517ffa1de0d454e156a6208a517053f77e0aebf802ff6a0aa7e8aacfd29e0cc3cf239181900360800190a150505050565b6000828201838110156121b4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166121d257600080fd5b6001600160a01b0382166121e557600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661228c5760405162461bcd60e51b815260040180806020018281038252602581526020018061366e6025913960400191505060405180910390fd5b6001600160a01b0382166122d15760405162461bcd60e51b81526004018080602001828103825260238152602001806135716023913960400191505060405180910390fd5b6122da83611584565b8111156123185760405162461bcd60e51b81526004018080602001828103825260218152602001806135e46021913960400191505060405180910390fd5b600061232330611584565b600c5490915081116123336125bb565b6001600160a01b03851660009081526007602052604090205460ff168061237257506001600160a01b03841660009081526007602052604090205460ff165b156123835761238185856125db565b505b80801561239a5750601c54600160a01b900460ff16155b80156123b45750601c546001600160a01b03868116911614155b80156123c95750601c54600160a81b900460ff165b80156123d757506000601854115b156123fd57601c54600160b01b900460ff16156123f457600c5491505b6123fd8261276f565b61240885858561296d565b612410612a74565b5050505050565b600081848411156124a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561246b578181015183820152602001612453565b50505050905090810190601f1680156124985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006124bb612a94565b90925090506124ca82826124d1565b9250505090565b60006121b483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf7565b60008261252257506000610b3b565b8282028284828161252f57fe5b04146121b45760405162461bcd60e51b81526004018080602001828103825260218152602001806136056021913960400191505060405180910390fd5b60008060008060008060008060006125838a612c5c565b92509250925060008060006125a18d868661259c6124ae565b612c98565b919f909e50909c50959a5093985091965092945050505050565b601054601155601854601955601454601555601254601355601654601755565b6000806126016016546114b96014546114b960125460105461215a90919063ffffffff16565b905080612612576000915050610b3b565b6001600160a01b038416600090815260076020526040902054849060ff16801561265457506001600160a01b03841660009081526007602052604090205460ff165b15612690576001600160a01b03808516600090815260046020526040808220549288168252902054116126875784612689565b835b90506126b4565b6001600160a01b03841660009081526007602052604090205460ff16156126b45750825b6001600160a01b0381166000908152600460205260409020546010546126e79084906126e1908490612513565b906124d1565b6010556012546126fe9084906126e1908490612513565b6012556014546127159084906126e1908490612513565b60145560165461272c9084906126e1908490612513565b601681905560145460125461274692916114b9919061215a565b6018556016546012546010546000926127649290916114b99161215a565b119695505050505050565b601c805460ff60a01b1916600160a01b17905560185460125460009161279a916126e1908590612513565b905060006127b96018546126e16016548661251390919063ffffffff16565b905060006127d1826127cb8686612ce8565b90612ce8565b90506000831180156127e557506000601254115b1561286e5760006127f78460026124d1565b905060006128058583612ce8565b90504761281183612d2a565b600061281d4783612ce8565b90506128298382612f08565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505b60008111801561288057506000601454115b156128ea574761288f82612d2a565b600061289b4783612ce8565b6009549091506128b4906001600160a01b031682612ff3565b6040805182815290517f938f1ed4457a26afa862c76b6248f937d72279bf5fed7430c43c1d7c3356ac379181900360200190a150505b6000821180156128fc57506000601654115b1561295a57600061291e6127106126e1601f544761251390919063ffffffff16565b9050601e5481111561292f5750601e545b601d5481118015612941575042602154105b156129585761294f81613029565b60205442016021555b505b5050601c805460ff60a01b191690555050565b6001600160a01b03831660009081526006602052604090205460ff1680156129ae57506001600160a01b03821660009081526006602052604090205460ff16155b156129c3576129be838383613206565b612a6f565b6001600160a01b03831660009081526006602052604090205460ff16158015612a0457506001600160a01b03821660009081526006602052604090205460ff165b15612a14576129be83838361332a565b6001600160a01b03831660009081526006602052604090205460ff168015612a5457506001600160a01b03821660009081526006602052604090205460ff165b15612a64576129be8383836133d3565b612a6f838383613446565b505050565b601154601055601954601855601554601455601354601255601754601655565b600e54600d546000918291825b600854811015612bc557826002600060088481548110612abd57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b225750816003600060088481548110612afb57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b3957600e54600d5494509450505050612bf3565b612b796002600060088481548110612b4d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ce8565b9250612bbb6003600060088481548110612b8f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ce8565b9150600101612aa1565b50600d54600e54612bd5916124d1565b821015612bed57600e54600d54935093505050612bf3565b90925090505b9091565b60008183612c465760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561246b578181015183820152602001612453565b506000838581612c5257fe5b0495945050505050565b600080600080612c6b8561348a565b90506000612c78866134a7565b90506000612c8a826127cb8986612ce8565b979296509094509092505050565b6000808080612ca78886612513565b90506000612cb58887612513565b90506000612cc38888612513565b90506000612cd5826127cb8686612ce8565b939b939a50919850919650505050505050565b60006121b483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612417565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d5857fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dac57600080fd5b505afa158015612dc0573d6000803e3d6000fd5b505050506040513d6020811015612dd657600080fd5b5051815182906001908110612de757fe5b6001600160a01b03928316602091820292909201810191909152306000908152600582526040808220601b549094168252929091522054821115612e3d57601b54612e3d9030906001600160a01b0316846121bf565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612ec3578181015183820152602001612eab565b505050509050019650505050505050600060405180830381600087803b158015612eec57600080fd5b505af1158015612f00573d6000803e3d6000fd5b505050505050565b306000908152600560209081526040808320601b546001600160a01b03168452909152902054821115612f4d57601b54612f4d9030906001600160a01b0316846121bf565b601b54600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612fc257600080fd5b505af1158015612fd6573d6000803e3d6000fd5b50505050506040513d6060811015612fed57600080fd5b50505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a6f573d6000803e3d6000fd5b60408051600280825260608083018452926020830190803683375050601b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561308d57600080fd5b505afa1580156130a1573d6000803e3d6000fd5b505050506040513d60208110156130b757600080fd5b5051815182906000906130c657fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106130f457fe5b6001600160a01b03928316602091820292909201810191909152601b54600a5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b8381101561318d578181015183820152602001613175565b50505050905001955050505050506000604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50506040805186815290517fca881194a4e2559fbdad4caf5417634a16ff329086cc52919b656dfb1a15487f94509081900360200192509050a15050565b6000806000806000806132188761256c565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061324a9088612ce8565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546132799087612ce8565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546132a8908661215a565b6001600160a01b0389166000908152600260205260409020556132ca816134c4565b6132d4848361354c565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061333c8761256c565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061336e9087612ce8565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546133a4908461215a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546132a8908661215a565b6000806000806000806133e58761256c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134179088612ce8565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461336e9087612ce8565b6000806000806000806134588761256c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506132799087612ce8565b6000610b3b6127106126e16010548561251390919063ffffffff16565b6000610b3b6127106126e16018548561251390919063ffffffff16565b60006134ce6124ae565b905060006134dc8383612513565b306000908152600260205260409020549091506134f9908261215a565b3060009081526002602090815260408083209390935560069052205460ff1615612a6f5730600090815260036020526040902054613537908461215a565b30600090815260036020526040902055505050565b600e546135599083612ce8565b600e55601a54613569908261215a565b601a55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a8864736f6c634300060c0033
Deployed Bytecode Sourcemap
26045:26530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30710:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31644:163;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31644:163:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27448:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27541:30;;;;;;;;;;;;;:::i;32785:89::-;;;;;;;;;;;;;:::i;26534:95::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26534:95:0;;;;;;;;;;;;;;27765:41;;;;;;;;;;;;;:::i;28179:49::-;;;;;;;;;;;;;:::i;30993:97::-;;;;;;;;;;;;;:::i;38716:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38716:190:0;;:::i;:::-;;38496:212;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38496:212:0;;;;:::i;31815:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31815:315:0;;;;;;;;;;;;;;;;;:::i;33328:252::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33328:252:0;;:::i;33588:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33588:129:0;-1:-1:-1;;;;;33588:129:0;;:::i;30900:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37528:775;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37528:775:0;-1:-1:-1;;;;;37528:775:0;;:::i;32138:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32138:220:0;;;;;;;;:::i;27266:26::-;;;;;;;;;;;;;:::i;32882:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32882:438:0;;;;;;;;;:::i;35820:294::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35820:294:0;;;;;;;;;;;;;;;:::i;27813:28::-;;;;;;;;;;;;;:::i;27896:40::-;;;;;;;;;;;;;:::i;37059:461::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37059:461:0;-1:-1:-1;;;;;37059:461:0;;:::i;33725:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33725:125:0;-1:-1:-1;;;;;33725:125:0;;:::i;27632:31::-;;;;;;;;;;;;;:::i;27349:34::-;;;;;;;;;;;;;:::i;35212:600::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35212:600:0;;;;;;;;;;;;;;;;;:::i;31098:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31098:208:0;-1:-1:-1;;;;;31098:208:0;;:::i;26734:88::-;;;;;;;;;;;;;:::i;17526:148::-;;;;;;;;;;;;;:::i;26636:91::-;;;;;;;;;;;;;:::i;27046:48::-;;;;;;;;;;;;;:::i;35029:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35029:176:0;-1:-1:-1;;;;;35029:176:0;;:::i;32645:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32645:132:0;-1:-1:-1;;;;;32645:132:0;;:::i;16883:79::-;;;;;;;;;;;;;:::i;30803:89::-;;;;;;;;;;;;;:::i;38951:146::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38951:146:0;;:::i;32366:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32366:271:0;;;;;;;;:::i;31314:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31314:169:0;;;;;;;;:::i;36877:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36877:174:0;-1:-1:-1;;;;;36877:174:0;;:::i;34856:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34856:165:0;-1:-1:-1;;;;;34856:165:0;;:::i;38311:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38311:173:0;;;;:::i;28235:34::-;;;;;;;;;;;;;:::i;33858:990::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33858:990:0;-1:-1:-1;;;;;33858:990:0;;:::i;28123:49::-;;;;;;;;;;;;;:::i;31491:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31491:145:0;;;;;;;;;;:::i;27943:49::-;;;;;;;;;;;;;:::i;26831:::-;;;;;;;;;;;;;:::i;17829:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17829:244:0;-1:-1:-1;;;;;17829:244:0;;:::i;36122:747::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36122:747:0;;;;;;;;;;;;;;;;;:::i;30710:85::-;30782:5;;;;;;;;;;;;-1:-1:-1;;;30782:5:0;;;;30710:85;:::o;31644:163::-;31721:4;31738:39;31747:12;:10;:12::i;:::-;31761:7;31770:6;31738:8;:39::i;:::-;-1:-1:-1;31795:4:0;31644:163;;;;;:::o;27448:32::-;;;;:::o;27541:30::-;;;;:::o;32785:89::-;32856:10;;32785:89;:::o;26534:95::-;;;-1:-1:-1;;;;;26534:95:0;;:::o;27765:41::-;;;-1:-1:-1;;;;;27765:41:0;;:::o;28179:49::-;;;;:::o;30993:97::-;31075:7;;30993:97;:::o;38716:190::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38816:1:::1;38807:6;:10;38798:21;;;::::0;::::1;;38830:15;:24:::0;;;38872:26:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38716:190:::0;:::o;38496:212::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38584:30:::1;:41:::0;;-1:-1:-1;;;;38584:41:0::1;-1:-1:-1::0;;;38584:41:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;38684:15:::1;::::0;38643:57:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;38496:212:::0;:::o;31815:315::-;31915:4;31932:36;31942:6;31950:9;31961:6;31932:9;:36::i;:::-;31979:121;31988:6;31996:12;:10;:12::i;:::-;32010:89;32048:6;32010:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32010:19:0;;;;;;:11;:19;;;;;;32030:12;:10;:12::i;:::-;-1:-1:-1;;;;;32010:33:0;;;;;;;;;;;;-1:-1:-1;32010:33:0;;;:89;:37;:89::i;:::-;31979:8;:121::i;:::-;-1:-1:-1;32118:4:0;31815:315;;;;;:::o;33328:252::-;33394:7;33433;;33422;:18;;33414:73;;;;-1:-1:-1;;;33414:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33498:19;33520:10;:8;:10::i;:::-;33498:32;-1:-1:-1;33548:24:0;:7;33498:32;33548:11;:24::i;:::-;33541:31;;;33328:252;;;;:::o;33588:129::-;-1:-1:-1;;;;;33684:25:0;33660:4;33684:25;;;:14;:25;;;;;;;;;33588:129::o;30900:85::-;27251:2;30900:85;:::o;37528:775::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37610:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;37602:70;;;::::0;;-1:-1:-1;;;37602:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37691:19;:26:::0;37720:3:::1;-1:-1:-1::0;37683:41:0::1;;;::::0;::::1;;37740:9;37735:519;37759:19;:26:::0;37755:30;::::1;37735:519;;;37837:7;-1:-1:-1::0;;;;;37811:33:0::1;:19;37831:1;37811:22;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37811:22:0::1;:33;37807:436;;;37890:19;37910:26:::0;;-1:-1:-1;;37910:30:0;;;37890:51;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;37865:19:::1;:22:::0;;-1:-1:-1;;;;;37890:51:0;;::::1;::::0;37885:1;;37865:22;::::1;;;;;;::::0;;;::::1;::::0;;::::1;:76:::0;;-1:-1:-1;;;;;;37865:76:0::1;-1:-1:-1::0;;;;;37865:76:0;;;::::1;::::0;;;::::1;::::0;;;37982:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;38030:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37960:32;;-1:-1:-1;38030:33:0::1;::::0;37960:32;38030:20:::1;:33::i;:::-;-1:-1:-1::0;;;;;38011:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:52;;;;38082:7:::1;:16:::0;;;;;:20;;;38121:21:::1;:30:::0;;;:38;;-1:-1:-1;;38121:38:0::1;::::0;;38178:19:::1;:25:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38178:25:0;;;;;-1:-1:-1;;;;;;38178:25:0::1;::::0;;;;;-1:-1:-1;38222:5:0::1;;37807:436;37787:3;;37735:519;;;-1:-1:-1::0;38271:24:0::1;::::0;;-1:-1:-1;;;;;38271:24:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;37528:775:::0;:::o;32138:220::-;32228:4;32245:83;32254:12;:10;:12::i;:::-;32268:7;32277:50;32316:10;32277:11;:25;32289:12;:10;:12::i;:::-;-1:-1:-1;;;;;32277:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32277:25:0;;;:34;;;;;;;;;;;:38;:50::i;27266:26::-;;;;:::o;32882:438::-;32974:7;33013;;33002;:18;;32994:62;;;;;-1:-1:-1;;;32994:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33072:17;33067:246;;33107:15;33131:19;33142:7;33131:10;:19::i;:::-;-1:-1:-1;33106:44:0;;-1:-1:-1;33165:14:0;;-1:-1:-1;;;;;33165:14:0;33067:246;33214:23;33245:19;33256:7;33245:10;:19::i;:::-;-1:-1:-1;33212:52:0;;-1:-1:-1;33279:22:0;;-1:-1:-1;;;;;33279:22:0;35820:294;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35932:4:::1;35922:6;:14;;35913:54;;;::::0;;-1:-1:-1;;;35913:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35980:23:0;::::1;;::::0;;;:12:::1;:23;::::0;;;;;;;:32;;;36023:14:::1;:25:::0;;;;;;:35;;;::::1;;-1:-1:-1::0;;36023:35:0;;::::1;::::0;::::1;::::0;;;36074:32;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;::::1;35820:294:::0;;;:::o;27813:28::-;;;-1:-1:-1;;;;;27813:28:0;;:::o;27896:40::-;;;-1:-1:-1;;;27896:40:0;;;;;:::o;37059:461::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37144:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;37143:31;37135:71;;;::::0;;-1:-1:-1;;;37135:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37225:19;:26:::0;37254:3:::1;-1:-1:-1::0;37217:41:0::1;;;::::0;::::1;;-1:-1:-1::0;;;;;37272:16:0;::::1;37291:1;37272:16:::0;;;:7:::1;:16;::::0;;;;;:20;37269:108:::1;;-1:-1:-1::0;;;;;37348:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37328:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37309:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37269:108:::1;-1:-1:-1::0;;;;;37387:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;37387:37:0::1;37420:4;37387:37:::0;;::::1;::::0;;;37435:19:::1;:33:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37435:33:0::1;::::0;::::1;::::0;;37486:26;;;;;;;::::1;::::0;;;;;;;;::::1;37059:461:::0;:::o;33725:125::-;-1:-1:-1;;;;;33819:23:0;33791:7;33819:23;;;:12;:23;;;;;;;33725:125::o;27632:31::-;;;;:::o;27349:34::-;;;;:::o;35212:600::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35440:4:::1;35364:71;35421:13:::0;35364:52:::1;35402:13:::0;35364:52;:12;35381:15;35364:16:::1;:33::i;:::-;:37:::0;::::1;:52::i;:71::-;35363:81;;35354:122;;;::::0;;-1:-1:-1;;;35354:122:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35497:7;:22:::0;;;35530:13:::1;:31:::0;;;35572:11:::1;:27:::0;;;35610:11:::1;:27:::0;;;35663:47:::1;35624:13:::0;35663:30:::1;35546:15:::0;35586:13;35663:17:::1;:30::i;:47::-;35648:12;:62:::0;35736:68:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;35212:600:::0;;;;:::o;31098:208::-;-1:-1:-1;;;;;31188:30:0;;31164:7;31188:30;;;:21;:30;;;;;;;;31184:59;;;-1:-1:-1;;;;;;31227:16:0;;;;;;:7;:16;;;;;;31220:23;;31184:59;-1:-1:-1;;;;;31281:16:0;;;;;;:7;:16;;;;;;31261:37;;:19;:37::i;26734:88::-;;;-1:-1:-1;;;;;26734:88:0;;:::o;17526:148::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;17633:1:::1;17617:6:::0;;17596:40:::1;::::0;-1:-1:-1;;;;;17617:6:0;;::::1;::::0;17596:40:::1;::::0;17633:1;;17596:40:::1;17664:1;17647:19:::0;;-1:-1:-1;;;;;;17647:19:0::1;::::0;;17526:148::o;26636:91::-;;;-1:-1:-1;;;;;26636:91:0;;:::o;27046:48::-;;;;:::o;35029:176::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;35105:18:::1;:40:::0;;-1:-1:-1;;;;;;35105:40:0::1;-1:-1:-1::0;;;;;35105:40:0;;::::1;::::0;;;::::1;::::0;;;;35163:34:::1;::::0;;35178:18;;;::::1;35163:34:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;35029:176:::0;:::o;32645:132::-;-1:-1:-1;;;;;32739:30:0;32715:4;32739:30;;;:21;:30;;;;;;;;;32645:132::o;16883:79::-;16921:7;16948:6;-1:-1:-1;;;;;16948:6:0;16883:79;:::o;30803:89::-;30877:7;;;;;;;;;;;;-1:-1:-1;;;30877:7:0;;;;30803:89;:::o;38951:146::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;39016:38:::1;::::0;39025:10:::1;::::0;39016:38;::::1;;;::::0;39047:6;;39016:38:::1;::::0;;;39047:6;39025:10;39016:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;39072:17:0::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38951:146:::0;:::o;32366:271::-;32461:4;32478:129;32487:12;:10;:12::i;:::-;32501:7;32510:96;32549:15;32510:96;;;;;;;;;;;;;;;;;:11;:25;32522:12;:10;:12::i;:::-;-1:-1:-1;;;;;32510:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32510:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;31314:169::-;31394:4;31411:42;31421:12;:10;:12::i;:::-;31435:9;31446:6;31411:9;:42::i;36877:174::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;36956:14:::1;:36:::0;;-1:-1:-1;;;;;;36956:36:0::1;-1:-1:-1::0;;;;;36956:36:0;;::::1;::::0;;;::::1;::::0;;;;37010:33:::1;::::0;;37028:14;;;::::1;37010:33:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;36877:174:::0;:::o;34856:165::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;34936:13:::1;:23:::0;;-1:-1:-1;;;;;;34936:23:0::1;-1:-1:-1::0;;;;;34936:23:0;;::::1;::::0;;;::::1;::::0;;;;34977:36:::1;::::0;;34999:13;;;::::1;34977:36:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;34856:165:::0;:::o;38311:173::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;38390:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38390:32:0;::::1;-1:-1:-1::0;;;;38390:32:0;;::::1;::::0;;;::::1;::::0;;;38438:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38311:173:::0;:::o;28235:34::-;;;;:::o;33858:990::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;33962:15:::1;::::0;-1:-1:-1;;;;;33954:41:0;;::::1;33962:15:::0;::::1;33954:41;;33946:50;;;::::0;::::1;;34007:28;34058:13;34007:66;;34148:12;34181:9;-1:-1:-1::0;;;;;34181:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34181:19:0;34225:16:::1;::::0;;-1:-1:-1;;;34225:16:0;;;;-1:-1:-1;;;;;34163:46:0;;::::1;::::0;::::1;::::0;34218:4:::1;::::0;34225:14;;::::1;::::0;::::1;::::0;:16:::1;::::0;;::::1;::::0;34181:19:::1;::::0;34225:16;;;;;;;;:14;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34225:16:0;34163:79:::1;::::0;;-1:-1:-1;;;;;;34163:79:0::1;::::0;;;;;;-1:-1:-1;;;;;34163:79:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;34225:16:::1;::::0;34163:79;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34163:79:0;;-1:-1:-1;;;;;;34257:18:0;::::1;34253:211;;34326:9;-1:-1:-1::0;;;;;34326:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34326:19:0;34373:16:::1;::::0;;-1:-1:-1;;;34373:16:0;;;;-1:-1:-1;;;;;34308:49:0;;::::1;::::0;::::1;::::0;34366:4:::1;::::0;34373:14;;::::1;::::0;::::1;::::0;:16:::1;::::0;;::::1;::::0;34326:19:::1;::::0;34373:16;;;;;;;;:14;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34373:16:0;34308:82:::1;::::0;;-1:-1:-1;;;;;;34308:82:0::1;::::0;;;;;;-1:-1:-1;;;;;34308:82:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;34373:16:::1;::::0;34308:82;;;;;;;-1:-1:-1;34308:82:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34308:82:0;34292:13:::1;:98:::0;;-1:-1:-1;;;;;;34292:98:0::1;-1:-1:-1::0;;;;;34292:98:0;;::::1;::::0;;;::::1;::::0;;34253:211:::1;;;34432:13;:20:::0;;-1:-1:-1;;;;;;34432:20:0::1;-1:-1:-1::0;;;;;34432:20:0;::::1;;::::0;;34253:211:::1;34532:45;34550:4;34557:13:::0;-1:-1:-1;;34532:8:0::1;:45::i;:::-;34664:15;::::0;34631:53:::1;::::0;34649:4:::1;::::0;-1:-1:-1;;;;;34664:15:0::1;;34631:8;:53::i;:::-;34722:15;:47:::0;;-1:-1:-1;;;;;;34722:47:0::1;-1:-1:-1::0;;;;;34722:47:0;;::::1;::::0;;;::::1;::::0;;;34826:13:::1;::::0;34787:53:::1;::::0;;;;::::1;::::0;;34826:13;;;::::1;34787:53;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;17165:1;;33858:990:::0;:::o;28123:49::-;;;;:::o;31491:145::-;-1:-1:-1;;;;;31601:18:0;;;31574:7;31601:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31491:145::o;27943:49::-;;;-1:-1:-1;;;27943:49:0;;;;;:::o;26831:::-;;;;:::o;17829:244::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17918:22:0;::::1;17910:73;;;;-1:-1:-1::0;;;17910:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18020:6;::::0;;17999:38:::1;::::0;-1:-1:-1;;;;;17999:38:0;;::::1;::::0;18020:6;::::1;::::0;17999:38:::1;::::0;::::1;18048:6;:17:::0;;-1:-1:-1;;;;;;18048:17:0::1;-1:-1:-1::0;;;;;18048:17:0;;;::::1;::::0;;;::::1;::::0;;17829:244::o;36122:747::-;17105:12;:10;:12::i;:::-;17095:6;;-1:-1:-1;;;;;17095:6:0;;;:22;;;17087:67;;;;;-1:-1:-1;;;17087:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17087:67:0;;;;;;;;;;;;;;;28043:1:::1;36279:9;:26;36270:37;;;::::0;::::1;;36340:17;;36327:9;:30;;36318:40;;;::::0;::::1;;28043:1;36379:9;:26;36370:37;;;::::0;::::1;;28094:21;36427:9;:27;;36418:38;;;::::0;::::1;;36490:1;36476:11;:15;36467:26;;;::::0;::::1;;36529:7;36513:11;:24;;36504:34;;;::::0;::::1;;36552:17;:29:::0;;;36592:17:::1;:29:::0;;;36632:24:::1;:43:::0;;;36715:15:::1;36686:25;:44:::0;36741:12:::1;:26:::0;;;36785:76:::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;36122:747:::0;;;;:::o;11374:181::-;11432:7;11464:5;;;11488:6;;;;11480:46;;;;;-1:-1:-1;;;11480:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11546:1;11374:181;-1:-1:-1;;;11374:181:0:o;7610:106::-;7698:10;7610:106;:::o;43589:261::-;-1:-1:-1;;;;;43682:19:0;;43674:29;;;;;;-1:-1:-1;;;;;43722:21:0;;43714:31;;;;;;-1:-1:-1;;;;;43758:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43810:32;;;;;;;;;;;;;;;;;43589:261;;;:::o;43858:1658::-;-1:-1:-1;;;;;43980:18:0;;43972:68;;;;-1:-1:-1;;;43972:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44059:16:0;;44051:64;;;;-1:-1:-1;;;44051:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44144:15;44154:4;44144:9;:15::i;:::-;44134:6;:25;;44126:71;;;;-1:-1:-1;;;44126:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44276:28;44307:24;44325:4;44307:9;:24::i;:::-;44392:15;;44276:55;;-1:-1:-1;44369:38:0;;44466:13;:11;:13::i;:::-;-1:-1:-1;;;;;44549:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;44573:18:0;;;;;;:14;:18;;;;;;;;44549:42;44545:98;;;44609:22;44623:4;44628:2;44609:13;:22::i;:::-;;44545:98;44955:19;:53;;;;-1:-1:-1;44992:16:0;;-1:-1:-1;;;44992:16:0;;;;44991:17;44955:53;:91;;;;-1:-1:-1;45033:13:0;;-1:-1:-1;;;;;45025:21:0;;;45033:13;;45025:21;;44955:91;:129;;;;-1:-1:-1;45063:21:0;;-1:-1:-1;;;45063:21:0;;;;44955:129;:162;;;;;45116:1;45101:12;;:16;44955:162;44937:393;;;45148:30;;-1:-1:-1;;;45148:30:0;;;;45144:110;;;45223:15;;45200:38;;45144:110;45282:36;45297:20;45282:14;:36::i;:::-;45416:30;45431:4;45436:2;45439:6;45416:14;:30::i;:::-;45492:16;:14;:16::i;:::-;43858:1658;;;;;:::o;12277:192::-;12363:7;12399:12;12391:6;;;;12383:29;;;;-1:-1:-1;;;12383:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12435:5:0;;;12277:192::o;40464:163::-;40505:7;40526:15;40543;40562:19;:17;:19::i;:::-;40525:56;;-1:-1:-1;40525:56:0;-1:-1:-1;40599:20:0;40525:56;;40599:11;:20::i;:::-;40592:27;;;;40464:163;:::o;13675:132::-;13733:7;13760:39;13764:1;13767;13760:39;;;;;;;;;;;;;;;;;:3;:39::i;12728:471::-;12786:7;13031:6;13027:47;;-1:-1:-1;13061:1:0;13054:8;;13027:47;13098:5;;;13102:1;13098;:5;:1;13122:5;;;;;:10;13114:56;;;;-1:-1:-1;;;13114:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39262:419;39321:7;39330;39339;39348;39357;39366;39387:23;39412:12;39426:18;39448:20;39460:7;39448:11;:20::i;:::-;39386:82;;;;;;39480:15;39497:23;39522:12;39538:50;39550:7;39559:4;39565:10;39577;:8;:10::i;:::-;39538:11;:50::i;:::-;39479:109;;;;-1:-1:-1;39479:109:0;;-1:-1:-1;39639:15:0;;-1:-1:-1;39656:4:0;;-1:-1:-1;39662:10:0;;-1:-1:-1;39262:419:0;;-1:-1:-1;;;;;39262:419:0:o;41970:237::-;42026:7;;42012:11;:21;42063:12;;42044:16;:31;42104:11;;42086:15;:29;42146:13;;42126:17;:33;42188:11;;42170:15;:29;41970:237::o;42217:1115::-;42283:4;42310:16;42329:60;42377:11;;42329:43;42360:11;;42329:26;42341:13;;42329:7;;:11;;:26;;;;:::i;:60::-;42310:79;-1:-1:-1;42404:13:0;42400:77;;42442:5;42435:12;;;;;42400:77;-1:-1:-1;;;;;42602:20:0;;42556:24;42602:20;;;:14;:20;;;;;;42583:4;;42602:20;;:42;;;;-1:-1:-1;;;;;;42626:18:0;;;;;;:14;:18;;;;;;;;42602:42;42598:227;;;-1:-1:-1;;;;;42703:16:0;;;;;;;:12;:16;;;;;;;42682:18;;;;;;;;:37;:49;;42727:4;42682:49;;;42722:2;42682:49;42661:72;;42598:227;;;-1:-1:-1;;;;;42756:18:0;;;;;;:14;:18;;;;;;;;42751:74;;;-1:-1:-1;42811:2:0;42751:74;-1:-1:-1;;;;;42875:32:0;;42861:11;42875:32;;;:12;:32;;;;;;42967:7;;42959:32;;42981:8;;42959:16;;42875:32;;42959:7;:16::i;:::-;:20;;:32::i;:::-;42949:7;:42;43026:13;;43018:38;;43046:8;;43018:22;;:3;;:7;:22::i;:38::-;43002:13;:54;43089:11;;43081:36;;43107:8;;43081:20;;:3;;:7;:20::i;:36::-;43067:11;:50;43150:11;;43142:36;;43168:8;;43142:20;;:3;;:7;:20::i;:36::-;43128:11;:50;;;43224:11;;43206:13;;:47;;43128:50;43206:30;;:13;:17;:30::i;:47::-;43191:12;:62;43306:11;;43287:13;;43275:7;;43323:1;;43275:43;;43306:11;;43275:26;;:11;:26::i;:43::-;43273:51;;42217:1115;-1:-1:-1;;;;;;42217:1115:0:o;45524:1991::-;29543:16;:23;;-1:-1:-1;;;;29543:23:0;-1:-1:-1;;;29543:23:0;;;45650:12:::1;::::0;45631:13:::1;::::0;29543:23;;45619:44:::1;::::0;:26:::1;::::0;:7;;:11:::1;:26::i;:44::-;45596:67;;45674:18;45695:42;45724:12;;45695:24;45707:11;;45695:7;:11;;:24;;;;:::i;:42::-;45674:63:::0;-1:-1:-1;45748:18:0::1;45769:41;45674:63:::0;45769:25:::1;:7:::0;45781:12;45769:11:::1;:25::i;:::-;:29:::0;::::1;:41::i;:::-;45748:62;;45849:1;45834:12;:16;:37;;;;;45870:1;45854:13;;:17;45834:37;45831:530;;;45960:12;45975:19;:12:::0;45992:1:::1;45975:16;:19::i;:::-;45960:34:::0;-1:-1:-1;46009:17:0::1;46029:22;:12:::0;45960:34;46029:16:::1;:22::i;:::-;46009:42:::0;-1:-1:-1;46097:21:0::1;46133:22;46150:4:::0;46133:16:::1;:22::i;:::-;46172:18;46193:41;:21;46219:14:::0;46193:25:::1;:41::i;:::-;46172:62;;46249:35;46262:9;46273:10;46249:12;:35::i;:::-;46306:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;45831:530;;;;;46405:1;46392:10;:14;:33;;;;;46424:1;46410:11;;:15;46392:33;46389:423;;;46538:21;46574:28;46591:10:::0;46574:16:::1;:28::i;:::-;46619:18;46640:41;:21;46666:14:::0;46640:25:::1;:41::i;:::-;46717:18;::::0;46619:62;;-1:-1:-1;46696:52:0::1;::::0;-1:-1:-1;;;;;46717:18:0::1;46619:62:::0;46696:20:::1;:52::i;:::-;46770:30;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46389:423;;;46839:1;46827:10;:13;:32;;;;;46858:1;46844:11;;:15;46827:32;46824:682;;;46878:21;46902:55;46949:7;46902:41;46929:12;;46902:21;:25;;:41;;;;:::i;:55::-;46878:79;;47086:17;;47070:13;:33;47066:108;;;-1:-1:-1::0;47141:17:0::1;::::0;47066:108:::1;47274:17;;47258:13;:33;:80;;;;;47323:15;47295:25;;:43;47258:80;47254:241;;;47359:29;47374:13;47359:14;:29::i;:::-;47455:24;::::0;47437:15:::1;:42;47409:25;:70:::0;47254:241:::1;46824:682;;-1:-1:-1::0;;29589:16:0;:24;;-1:-1:-1;;;;29589:24:0;;;-1:-1:-1;;45524:1991:0:o;49516:628::-;-1:-1:-1;;;;;49614:29:0;;;;;;:21;:29;;;;;;;;:66;;;;-1:-1:-1;;;;;;49648:32:0;;;;;;:21;:32;;;;;;;;49647:33;49614:66;49610:527;;;49697:48;49719:6;49727:9;49738:6;49697:21;:48::i;:::-;49610:527;;;-1:-1:-1;;;;;49768:29:0;;;;;;:21;:29;;;;;;;;49767:30;:66;;;;-1:-1:-1;;;;;;49801:32:0;;;;;;:21;:32;;;;;;;;49767:66;49763:374;;;49850:46;49870:6;49878:9;49889:6;49850:19;:46::i;49763:374::-;-1:-1:-1;;;;;49918:29:0;;;;;;:21;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;49951:32:0;;;;;;:21;:32;;;;;;;;49918:65;49914:223;;;50000:48;50022:6;50030:9;50041:6;50000:21;:48::i;49914:223::-;50081:44;50099:6;50107:9;50118:6;50081:17;:44::i;:::-;49516:628;;;:::o;43340:240::-;43395:11;;43385:7;:21;43432:16;;43417:12;:31;43473:15;;43459:11;:29;43515:17;;43499:13;:33;43557:15;;43543:11;:29;43340:240::o;40635:611::-;40732:7;;40768;;40685;;;;;40792:339;40816:19;:26;40812:30;;40792:339;;;40902:7;40868;:31;40876:19;40896:1;40876:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40876:22:0;40868:31;;;;;;;;;;;;;:41;;:86;;;40947:7;40913;:31;40921:19;40941:1;40921:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40921:22:0;40913:31;;;;;;;;;;;;;:41;40868:86;40864:117;;;40964:7;;40973;;40956:25;;;;;;;;;40864:117;41006:44;41018:7;:31;41026:19;41046:1;41026:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41026:22:0;41018:31;;;;;;;;;;;;;41006:7;;:11;:44::i;:::-;40996:54;;41075:44;41087:7;:31;41095:19;41115:1;41095:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41095:22:0;41087:31;;;;;;;;;;;;;41075:7;;:11;:44::i;:::-;41065:54;-1:-1:-1;40844:3:0;;40792:339;;;-1:-1:-1;41167:7:0;;41155;;:20;;:11;:20::i;:::-;41145:7;:30;41141:61;;;41185:7;;41194;;41177:25;;;;;;;;41141:61;41221:7;;-1:-1:-1;41230:7:0;-1:-1:-1;40635:611:0;;;:::o;14303:278::-;14389:7;14424:12;14417:5;14409:28;;;;-1:-1:-1;;;14409:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14448:9;14464:1;14460;:5;;;;;;;14303:278;-1:-1:-1;;;;;14303:278:0:o;39689:330::-;39749:7;39758;39767;39787:12;39802:24;39818:7;39802:15;:24::i;:::-;39787:39;;39837:18;39858:30;39880:7;39858:21;:30::i;:::-;39837:51;-1:-1:-1;39899:23:0;39925:33;39837:51;39925:17;:7;39937:4;39925:11;:17::i;:33::-;39899:59;39994:4;;-1:-1:-1;40000:10:0;;-1:-1:-1;39689:330:0;;-1:-1:-1;;;39689:330:0:o;40027:429::-;40142:7;;;;40198:24;:7;40210:11;40198;:24::i;:::-;40180:42;-1:-1:-1;40233:12:0;40248:21;:4;40257:11;40248:8;:21::i;:::-;40233:36;-1:-1:-1;40280:18:0;40301:27;:10;40316:11;40301:14;:27::i;:::-;40280:48;-1:-1:-1;40339:23:0;40365:33;40280:48;40365:17;:7;40377:4;40365:11;:17::i;:33::-;40417:7;;;;-1:-1:-1;40443:4:0;;-1:-1:-1;40027:429:0;;-1:-1:-1;;;;;;;40027:429:0:o;11838:136::-;11896:7;11923:43;11927:1;11930;11923:43;;;;;;;;;;;;;;;;;:3;:43::i;47523:677::-;47674:16;;;47688:1;47674:16;;;47650:21;47674:16;;;;;47650:21;47674:16;;;;;;;;;;-1:-1:-1;47674:16:0;47650:40;;47719:4;47701;47706:1;47701:7;;;;;;;;-1:-1:-1;;;;;47701:23:0;;;:7;;;;;;;;;;:23;;;;47745:15;;:22;;;-1:-1:-1;;;47745:22:0;;;;:15;;;;;:20;;:22;;;;;47701:7;;47745:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47745:22:0;47735:7;;:4;;47740:1;;47735:7;;;;;;-1:-1:-1;;;;;47735:32:0;;;:7;;;;;;;;;;:32;;;;47805:4;47784:27;;;;:11;:27;;;;;;47820:15;;;;;47784:53;;;;;;;;:67;-1:-1:-1;47780:149:0;;;47899:15;;47867:62;;47884:4;;-1:-1:-1;;;;;47899:15:0;47917:11;47867:8;:62::i;:::-;47968:15;;:224;;-1:-1:-1;;;47968:224:0;;;;;;;;:15;:224;;;;;;48146:4;47968:224;;;;;;48166:15;47968:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47968:15:0;;;;:66;;48049:11;;48119:4;;48146;48166:15;47968:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47523:677;;:::o;48890:545::-;49004:4;48983:27;;;;:11;:27;;;;;;;;49019:15;;-1:-1:-1;;;;;49019:15:0;48983:53;;;;;;;;:67;-1:-1:-1;48979:149:0;;;49098:15;;49066:62;;49083:4;;-1:-1:-1;;;;;49098:15:0;49116:11;49066:8;:62::i;:::-;49171:15;;49375:11;;49171:256;;;-1:-1:-1;;;49171:256:0;;49243:4;49171:256;;;;;;;;;;:15;:256;;;;;;;;;;-1:-1:-1;;;;;49375:11:0;;;49171:256;;;;49401:15;49171:256;;;;;;:15;;;;;:31;;49210:9;;49171:256;;;;;;;;;;;;;;;49210:9;49171:15;:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;48890:545:0:o;48756:126::-;48848:26;;-1:-1:-1;;;;;48848:18:0;;;:26;;;;;48867:6;;48848:26;;;;48867:6;48848:18;:26;;;;;;;;;;;;;;;;;;;48208:540;48351:16;;;48365:1;48351:16;;;48327:21;48351:16;;;;;48327:21;48351:16;;;;;;;;-1:-1:-1;;48388:15:0;;:22;;;-1:-1:-1;;;48388:22:0;;;;48327:40;;-1:-1:-1;;;;;;48388:15:0;;;;:20;;-1:-1:-1;48388:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48388:22:0;48378:7;;:4;;48383:1;;48378:7;;;;;;;;;:32;-1:-1:-1;;;;;48378:32:0;;;-1:-1:-1;;;;;48378:32:0;;;;;48439:4;48421;48426:1;48421:7;;;;;;;;-1:-1:-1;;;;;48421:23:0;;;:7;;;;;;;;;;:23;;;;48483:15;;48645:14;;48483:217;;-1:-1:-1;;;48483:217:0;;:15;:217;;;;;;48645:14;;;48483:217;;;;;;48674:15;48483:217;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;48557:6;;48483:15;;48626:4;;48645:14;;48674:15;;48483:217;;;;;;;;;;;;;;;:15;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48718:22:0;;;;;;;;;;-1:-1:-1;48718:22:0;;;;;;;-1:-1:-1;48718:22:0;-1:-1:-1;48718:22:0;48208:540;;:::o;51256:566::-;51359:15;51376:23;51401:12;51415:23;51440:12;51454:18;51476:19;51487:7;51476:10;:19::i;:::-;-1:-1:-1;;;;;51524:15:0;;;;;;:7;:15;;;;;;51358:137;;-1:-1:-1;51358:137:0;;-1:-1:-1;51358:137:0;;-1:-1:-1;51358:137:0;-1:-1:-1;51358:137:0;-1:-1:-1;51358:137:0;-1:-1:-1;51524:28:0;;51544:7;51524:19;:28::i;:::-;-1:-1:-1;;;;;51506:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51581:7;:15;;;;:28;;51601:7;51581:19;:28::i;:::-;-1:-1:-1;;;;;51563:15:0;;;;;;;:7;:15;;;;;;:46;;;;51641:18;;;;;;;:39;;51664:15;51641:22;:39::i;:::-;-1:-1:-1;;;;;51620:18:0;;;;;;:7;:18;;;;;:60;51694:26;51709:10;51694:14;:26::i;:::-;51731:23;51743:4;51749;51731:11;:23::i;:::-;51787:9;-1:-1:-1;;;;;51770:44:0;51779:6;-1:-1:-1;;;;;51770:44:0;;51798:15;51770:44;;;;;;;;;;;;;;;;;;51256:566;;;;;;;;;:::o;50662:586::-;50763:15;50780:23;50805:12;50819:23;50844:12;50858:18;50880:19;50891:7;50880:10;:19::i;:::-;-1:-1:-1;;;;;50928:15:0;;;;;;:7;:15;;;;;;50762:137;;-1:-1:-1;50762:137:0;;-1:-1:-1;50762:137:0;;-1:-1:-1;50762:137:0;-1:-1:-1;50762:137:0;-1:-1:-1;50762:137:0;-1:-1:-1;50928:28:0;;50762:137;50928:19;:28::i;:::-;-1:-1:-1;;;;;50910:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;50988:18;;;;;:7;:18;;;;;:39;;51011:15;50988:22;:39::i;:::-;-1:-1:-1;;;;;50967:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51059:7;:18;;;;:39;;51082:15;51059:22;:39::i;51833:642::-;51936:15;51953:23;51978:12;51992:23;52017:12;52031:18;52053:19;52064:7;52053:10;:19::i;:::-;-1:-1:-1;;;;;52101:15:0;;;;;;:7;:15;;;;;;51935:137;;-1:-1:-1;51935:137:0;;-1:-1:-1;51935:137:0;;-1:-1:-1;51935:137:0;-1:-1:-1;51935:137:0;-1:-1:-1;51935:137:0;-1:-1:-1;52101:28:0;;52121:7;52101:19;:28::i;:::-;-1:-1:-1;;;;;52083:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52158:7;:15;;;;:28;;52178:7;52158:19;:28::i;50152:502::-;50251:15;50268:23;50293:12;50307:23;50332:12;50346:18;50368:19;50379:7;50368:10;:19::i;:::-;-1:-1:-1;;;;;50416:15:0;;;;;;:7;:15;;;;;;50250:137;;-1:-1:-1;50250:137:0;;-1:-1:-1;50250:137:0;;-1:-1:-1;50250:137:0;-1:-1:-1;50250:137:0;-1:-1:-1;50250:137:0;-1:-1:-1;50416:28:0;;50250:137;50416:19;:28::i;41635:154::-;41699:7;41726:55;41765:5;41726:20;41738:7;;41726;:11;;:20;;;;:::i;41797:165::-;41867:7;41894:60;41938:5;41894:25;41906:12;;41894:7;:11;;:25;;;;:::i;41258:365::-;41321:19;41344:10;:8;:10::i;:::-;41321:33;-1:-1:-1;41365:18:0;41386:27;:10;41321:33;41386:14;:27::i;:::-;41465:4;41449:22;;;;:7;:22;;;;;;41365:48;;-1:-1:-1;41449:38:0;;41365:48;41449:26;:38::i;:::-;41440:4;41424:22;;;;:7;:22;;;;;;;;:63;;;;41501:21;:36;;;;;;41498:117;;;41593:4;41577:22;;;;:7;:22;;;;;;:38;;41604:10;41577:26;:38::i;:::-;41568:4;41552:22;;;;:7;:22;;;;;:63;41258:365;;;:::o;39107:147::-;39185:7;;:17;;39197:4;39185:11;:17::i;:::-;39175:7;:27;39226:10;;:20;;39241:4;39226:14;:20::i;:::-;39213:10;:33;-1:-1:-1;;39107:147:0:o
Swarm Source
ipfs://f52e9d8651d9d39a1afc86a83571c5558d07ab0836db56ccd9c9437f12d48a88
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.