Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 69 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 12867509 | 1277 days ago | IN | 0 ETH | 0.00088448 | ||||
Approve | 12866628 | 1277 days ago | IN | 0 ETH | 0.00091009 | ||||
Approve | 12866608 | 1277 days ago | IN | 0 ETH | 0.00102414 | ||||
Approve | 12866569 | 1277 days ago | IN | 0 ETH | 0.00118707 | ||||
Transfer | 12866560 | 1277 days ago | IN | 0 ETH | 0.00278769 | ||||
Transfer | 12866545 | 1277 days ago | IN | 0 ETH | 0.00298649 | ||||
Approve | 12866428 | 1277 days ago | IN | 0 ETH | 0.00093104 | ||||
Approve | 12866378 | 1277 days ago | IN | 0 ETH | 0.00086307 | ||||
Approve | 12866099 | 1277 days ago | IN | 0 ETH | 0.00060517 | ||||
Renounce Ownersh... | 12866065 | 1277 days ago | IN | 0 ETH | 0.00016909 | ||||
Approve | 12866058 | 1277 days ago | IN | 0 ETH | 0.00060517 | ||||
Approve | 12866057 | 1277 days ago | IN | 0 ETH | 0.00074483 | ||||
Approve | 12866043 | 1277 days ago | IN | 0 ETH | 0.00083793 | ||||
Set Tax Fee Perc... | 12866042 | 1277 days ago | IN | 0 ETH | 0.00034345 | ||||
Approve | 12866040 | 1277 days ago | IN | 0 ETH | 0.00065172 | ||||
Approve | 12866038 | 1277 days ago | IN | 0 ETH | 0.00065172 | ||||
Approve | 12866037 | 1277 days ago | IN | 0 ETH | 0.00079138 | ||||
Approve | 12866037 | 1277 days ago | IN | 0 ETH | 0.00097759 | ||||
Approve | 12866028 | 1277 days ago | IN | 0 ETH | 0.00121035 | ||||
Set Max Tx Perce... | 12866025 | 1277 days ago | IN | 0 ETH | 0.00043484 | ||||
Set Tax Fee Perc... | 12866024 | 1277 days ago | IN | 0 ETH | 0.00064006 | ||||
Set Tax Fee Perc... | 12866016 | 1277 days ago | IN | 0 ETH | 0.00022028 | ||||
Set Swap And Liq... | 12866016 | 1277 days ago | IN | 0 ETH | 0.00047721 | ||||
Set Max Tx Perce... | 12866014 | 1277 days ago | IN | 0 ETH | 0.00049696 | ||||
Include In Fee | 12865996 | 1277 days ago | IN | 0 ETH | 0.00025544 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FIRESALE
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-20 */ /** * FireSale Finance Official Contract Features: 14% rapid burn protocol 2% fee auto added and locked to the liquidity pool 2% fee auto distributed to all holders 2% fee added to marketing wallet to fund advertisements and promotions */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed 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) { // Solidity only automatically asserts when dividing by 0 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 Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract FIRESALE is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; address payable charityWallet = 0x000000000000000000000000000000000000dEaD; address payable marketingWallet = 0x3CBe589143A73964118B938966be3c57A9d6c1BA; uint8 private constant _DECIMALS = 8; uint256 private constant _DECIMALFACTOR = 10**uint256(_DECIMALS); uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1_000_000_000_000_000 * _DECIMALFACTOR; uint256 private _rTotal = (MAX - (MAX % _tTotal)); // 2% of the supply uint256 public _maxTxAmount = 20_000_000_000_000 * _DECIMALFACTOR; // Add to liquidity when accumulates % of supply uint256 private numTokensSellToAddToLiquidity = 10_000 * _DECIMALFACTOR; uint256 private _tFeeTotal; uint256 private _tBurnTotal; string private constant _name = "FireSale"; string private constant _symbol = "FIRE"; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _charityFee = 0; uint256 private _previousCharityFee = _charityFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 14; uint256 private _previousBurnFee = _burnFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AddLiquidityETH(uint256 amountA, uint256 amountB); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // v2 testnet 0xD99D1c33F9fC3444f8101754aBC46c52416550D1 // 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 _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _DECIMALS; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "BEP20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "BEP20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function totalBurn() public view returns (uint256) { return _tBurnTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { Values memory values = _getValues(tAmount); return values.rAmount; } else { Values memory values = _getValues(tAmount); return values.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 excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { /* Changed error message to "Account not excluded" See "SSL-01 | Incorrect error message" from the Certik audit of safemoon. */ require(_isExcluded[account], "Account not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { Values memory values = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rBurn = values.tBurn.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(values.rAmount); _tOwned[recipient] = _tOwned[recipient].add(values.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(values.rTransferAmount); _takeLiquidity(values.tLiquidity); _takeDev(values.tCharity); _reflectFee(values.rFee, rBurn, values.tFee, values.tBurn); emit Transfer(sender, recipient, values.tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setCharityFeePercent(uint256 charityFee) external onlyOwner() { _charityFee = charityFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { _burnFee = burnFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee( uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn ) private { _rTotal = _rTotal.sub(rFee).sub(rBurn); _tFeeTotal = _tFeeTotal.add(tFee); _tBurnTotal = _tBurnTotal.add(tBurn); _tTotal = _tTotal.sub(tBurn); } struct Values { uint256 rAmount; uint256 rTransferAmount; uint256 rFee; uint256 tTransferAmount; uint256 tFee; uint256 tLiquidity; uint256 tCharity; uint256 tBurn; } struct TValues { uint256 tTransferAmount; uint256 tFee; uint256 tBurn; uint256 tLiquidity; uint256 tCharity; } function _getValues(uint256 tAmount) private view returns (Values memory) { TValues memory tValues = _getTValues(tAmount); Values memory values; (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tValues.tFee, tValues.tLiquidity, tValues.tCharity, tValues.tBurn, _getRate() ); values.rAmount = rAmount; values.rTransferAmount = rTransferAmount; values.rFee = rFee; values.tTransferAmount = tValues.tTransferAmount; values.tFee = tValues.tFee; values.tLiquidity = tValues.tLiquidity; values.tCharity = tValues.tCharity; values.tBurn = tValues.tBurn; return values; } function _getTValues(uint256 tAmount) private view returns (TValues memory) { TValues memory tValues; tValues.tFee = calculateTaxFee(tAmount); tValues.tCharity = calculatecharityFee(tAmount); tValues.tBurn = calculateBurnFee(tAmount); tValues.tLiquidity = calculateLiquidityFee(tAmount); tValues.tTransferAmount = tAmount .sub(tValues.tFee) .sub(tValues.tLiquidity) .sub(tValues.tCharity); return tValues; } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 tBurn, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity).sub(rBurn); 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 < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[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 (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeDev(uint256 tCharity) private { uint256 currentRate = _getRate(); uint256 rCharity = tCharity.mul(currentRate); _rOwned[charityWallet] = _rOwned[charityWallet].add(rCharity); if (_isExcluded[charityWallet]) _tOwned[charityWallet] = _tOwned[charityWallet].add(tCharity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculatecharityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_charityFee).div(10**2); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeFees() external onlyOwner() { removeAllFee(); } function restoreFees() external onlyOwner() { restoreAllFee(); } function removeAllFee() private { if ( _taxFee == 0 && _liquidityFee == 0 && _charityFee == 0 && _burnFee == 0 ) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousCharityFee = _charityFee; _previousBurnFee = _burnFee; _taxFee = 0; _liquidityFee = 0; _charityFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _charityFee = _previousCharityFee; _burnFee = _previousBurnFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "BEP20: transfer from the zero address"); require(to != address(0), "BEP20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // 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. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, charity, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into 3 parts uint256 fist_part = contractTokenBalance.div(4); uint256 second_part = contractTokenBalance.div(4); uint256 third_part = contractTokenBalance.sub(second_part).sub(fist_part); // Swap bnb uint256 originalBalance = address(this).balance; swapTokensForETH(third_part); uint256 swapped_bnb = address(this).balance.sub(originalBalance); (bool success, ) = marketingWallet.call{value: swapped_bnb}(""); require(success, "Swap and liquify failed"); // capture the contract's current BNB balance. // this is so that we can capture exactly the amount of BNB that the // swap creates, and not make the liquidity event include any BNB that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for BNB swapTokensForETH(fist_part); // how much BNB did we just swap into? uint256 BnbSwapped = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(second_part, BnbSwapped); emit SwapAndLiquify(fist_part, BnbSwapped, second_part); } function sendBnbLeftoverToMarketing() public { uint256 swapped_bnb = address(this).balance; (bool success, ) = marketingWallet.call{value: swapped_bnb}(""); require(success, "Swap and liquify failed"); } function buyWithLeftoverBNB(uint256 amount) external onlyOwner() { // buy back with BNB leftover from SwapAndLiquify to increase price // see "SSL- 03 | Contract gains non-withdrawable BNB via the swapAndLiquifyfunction" // from Safemoon Certik Audit address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); _approve(address(this), address(uniswapV2Router), amount); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens( amount, path, address(this), block.timestamp ); } function swapTokensForETH(uint256 tokenAmount) private { // generate the uniswap pair path of token -> WBNB address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BNB path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios /* "to" account changed to address(this) to mitigate major centralization issue in Safemoon's contract. See "SSL-04 | Centralized risk in addLiquidity" from the Certik audit of Safemoon. */ _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); emit AddLiquidityETH(tokenAmount, ethAmount); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { /* Removed: ".....else if (!_isExcluded[sender] && !_isExcluded[recipient]) {{ _transferStandard(sender, recipient, amount); }....." See "SSL-02 | Redundant code" from the Certik audit of Safemoon */ if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { Values memory values = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rBurn = values.tBurn.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(values.rAmount); _rOwned[recipient] = _rOwned[recipient].add(values.rTransferAmount); _takeLiquidity(values.tLiquidity); _takeDev(values.tCharity); _reflectFee(values.rFee, rBurn, values.tFee, values.tBurn); emit Transfer(sender, recipient, values.tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { Values memory values = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rBurn = values.tBurn.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(values.rAmount); _tOwned[recipient] = _tOwned[recipient].add(values.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(values.rTransferAmount); _takeLiquidity(values.tLiquidity); _takeDev(values.tCharity); _reflectFee(values.rFee, rBurn, values.tFee, values.tBurn); emit Transfer(sender, recipient, values.tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { Values memory values = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rBurn = values.tBurn.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(values.rAmount); _rOwned[recipient] = _rOwned[recipient].add(values.rTransferAmount); _takeLiquidity(values.tLiquidity); _takeDev(values.tCharity); _reflectFee(values.rFee, rBurn, values.tFee, values.tBurn); emit Transfer(sender, recipient, values.tTransferAmount); } //New UniSwap router version? //No problem, just change it! function setRouterAddress(address newRouter) external onlyOwner() { IUniswapV2Router02 _uniswapV2newRouter = IUniswapV2Router02(newRouter); //v2 router --> 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2newRouter.factory()) .createPair(address(this), _uniswapV2newRouter.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2newRouter; } function setCharityWallet(address payable newWallet) external onlyOwner() { // in case the charity wallet needs to be updated charityWallet = newWallet; } function setMarketingWallet(address payable newWallet) external onlyOwner() { // in case the marketing wallet needs to be updated marketingWallet = newWallet; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"}],"name":"AddLiquidityETH","type":"event"},{"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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"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":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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","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":"_taxFee","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyWithLeftoverBNB","outputs":[],"stateMutability":"nonpayable","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":"excludeFromFee","outputs":[],"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":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"owner","outputs":[{"internalType":"address","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":"removeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendBnbLeftoverToMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalBurn","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
6080604052600880546001600160a01b031990811661dead1790915560098054909116733cbe589143a73964118b938966be3c57a9d6c1ba17905569152d02c7e14af6800000600a8190556000190619600b55686c6b935b8bbd400000600c5564e8d4a51000600d55600260108190556011556000601281905560135560046014819055601555600e60168190556017556019805460ff60a81b1916600160a81b179055348015620000b057600080fd5b506000620000bd62000396565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b54600260006200011862000396565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018f57600080fd5b505afa158015620001a4573d6000803e3d6000fd5b505050506040513d6020811015620001bb57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200020c57600080fd5b505afa15801562000221573d6000803e3d6000fd5b505050506040513d60208110156200023857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200028b57600080fd5b505af1158015620002a0573d6000803e3d6000fd5b505050506040513d6020811015620002b757600080fd5b5051601980546001600160a01b03199081166001600160a01b039384161790915560188054909116918316919091179055600160056000620002f86200039a565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200034262000396565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a350620003a9565b3390565b6000546001600160a01b031690565b61322480620003b96000396000f3fe6080604052600436106102765760003560e01c80635d098b381161014f578063a457c2d7116100c1578063d543dbeb1161007a578063d543dbeb14610902578063dd62ed3e1461092c578063e28550ab14610967578063ea2f0b371461097c578063f2fde38b146109af578063f6b20c3b146109e25761027d565b8063a457c2d7146107fb578063a9059cbb14610834578063af41063b1461086d578063c0b0fda214610897578063c49b9a80146108ac578063cea26958146108d85761027d565b80637d1db4a5116101135780637d1db4a51461073557806388f820201461074a5780638da5cb5b1461077d5780638ee88c531461079257806395d89b41146107bc5780639d2d9618146107d15761027d565b80635d098b38146106905780636bc87c3a146106c357806370a08231146106d8578063715018a61461070b5780637a836136146107205761027d565b806339509351116101e8578063437823ec116101ac578063437823ec1461059b5780634549b039146105ce57806349bd5a5e146106005780634a74bb021461061557806352390c021461062a5780635342acb41461065d5761027d565b806339509351146104f05780633b124fe7146105295780633c9f861d1461053e57806340f8007a1461055357806341cb87fc146105685761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632d8381191461043557806330563bd71461045f578063313ce567146104925780633685d419146104bd5761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109f7565b005b3480156102ba57600080fd5b506102c3610a54565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610a76565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610a94565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610a9a565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610aa9565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610aaf565b34801561044157600080fd5b5061039a6004803603602081101561045857600080fd5b5035610b36565b34801561046b57600080fd5b506102ac6004803603602081101561048257600080fd5b50356001600160a01b0316610b98565b34801561049e57600080fd5b506104a7610c12565b6040805160ff9092168252519081900360200190f35b3480156104c957600080fd5b506102ac600480360360208110156104e057600080fd5b50356001600160a01b0316610c17565b3480156104fc57600080fd5b506103716004803603604081101561051357600080fd5b506001600160a01b038135169060200135610dcf565b34801561053557600080fd5b5061039a610e1d565b34801561054a57600080fd5b5061039a610e23565b34801561055f57600080fd5b5061039a610e29565b34801561057457600080fd5b506102ac6004803603602081101561058b57600080fd5b50356001600160a01b0316610e2f565b3480156105a757600080fd5b506102ac600480360360208110156105be57600080fd5b50356001600160a01b0316611019565b3480156105da57600080fd5b5061039a600480360360408110156105f157600080fd5b50803590602001351515611095565b34801561060c57600080fd5b506103c161112c565b34801561062157600080fd5b5061037161113b565b34801561063657600080fd5b506102ac6004803603602081101561064d57600080fd5b50356001600160a01b031661114b565b34801561066957600080fd5b506103716004803603602081101561068057600080fd5b50356001600160a01b03166112d1565b34801561069c57600080fd5b506102ac600480360360208110156106b357600080fd5b50356001600160a01b03166112ef565b3480156106cf57600080fd5b5061039a611369565b3480156106e457600080fd5b5061039a600480360360208110156106fb57600080fd5b50356001600160a01b031661136f565b34801561071757600080fd5b506102ac6113d1565b34801561072c57600080fd5b506102ac611473565b34801561074157600080fd5b5061039a611519565b34801561075657600080fd5b506103716004803603602081101561076d57600080fd5b50356001600160a01b031661151f565b34801561078957600080fd5b506103c161153d565b34801561079e57600080fd5b506102ac600480360360208110156107b557600080fd5b503561154c565b3480156107c857600080fd5b506102c36115a9565b3480156107dd57600080fd5b506102ac600480360360208110156107f457600080fd5b50356115c7565b34801561080757600080fd5b506103716004803603604081101561081e57600080fd5b506001600160a01b0381351690602001356117d2565b34801561084057600080fd5b506103716004803603604081101561085757600080fd5b506001600160a01b03813516906020013561183a565b34801561087957600080fd5b506102ac6004803603602081101561089057600080fd5b503561184e565b3480156108a357600080fd5b5061039a6118ab565b3480156108b857600080fd5b506102ac600480360360208110156108cf57600080fd5b503515156118b1565b3480156108e457600080fd5b506102ac600480360360208110156108fb57600080fd5b503561195c565b34801561090e57600080fd5b506102ac6004803603602081101561092557600080fd5b50356119b9565b34801561093857600080fd5b5061039a6004803603604081101561094f57600080fd5b506001600160a01b0381358116916020013516611a37565b34801561097357600080fd5b506102ac611a62565b34801561098857600080fd5b506102ac6004803603602081101561099f57600080fd5b50356001600160a01b0316611ac4565b3480156109bb57600080fd5b506102ac600480360360208110156109d257600080fd5b50356001600160a01b0316611b3d565b3480156109ee57600080fd5b506102ac611c35565b6109ff611c95565b6000546001600160a01b03908116911614610a4f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601055565b6040805180820190915260088152674669726553616c6560c01b602082015290565b6000610a8a610a83611c95565b8484611c99565b5060015b92915050565b600e5490565b6018546001600160a01b031681565b600a5490565b6000610abc848484611d85565b610b2c84610ac8611c95565b610b27856040518060600160405280602881526020016130cb602891396001600160a01b038a16600090815260046020526040812090610b06611c95565b6001600160a01b031681526020810191909152604001600020549190611fa8565b611c99565b5060019392505050565b6000600b54821115610b795760405162461bcd60e51b815260040180806020018281038252602a81526020018061307b602a913960400191505060405180910390fd5b6000610b8361203f565b9050610b8f8382612062565b9150505b919050565b610ba0611c95565b6000546001600160a01b03908116911614610bf0576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600890565b610c1f611c95565b6000546001600160a01b03908116911614610c6f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610cd3576040805162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd08195e18db1d59195960621b604482015290519081900360640190fd5b60005b600754811015610dcb57816001600160a01b031660078281548110610cf757fe5b6000918252602090912001546001600160a01b03161415610dc357600780546000198101908110610d2457fe5b600091825260209091200154600780546001600160a01b039092169183908110610d4a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff191690556007805480610d9c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610dcb565b600101610cd6565b5050565b6000610a8a610ddc611c95565b84610b278560046000610ded611c95565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906120ab565b60105481565b600f5490565b60125481565b610e37611c95565b6000546001600160a01b03908116911614610e87576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d6020811015610eef57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015610f3f57600080fd5b505afa158015610f53573d6000803e3d6000fd5b505050506040513d6020811015610f6957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b5051601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b611021611c95565b6000546001600160a01b03908116911614611071576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600a548311156110ee576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161110e576110fb612fbd565b61110484612105565b519150610a8e9050565b611116612fbd565b61111f84612105565b602001519150610a8e9050565b6019546001600160a01b031681565b601954600160a81b900460ff1681565b611153611c95565b6000546001600160a01b039081169116146111a3576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611211576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260409020541561126b576001600160a01b03811660009081526002602052604090205461125190610b36565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b6112f7611c95565b6000546001600160a01b03908116911614611347576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60145481565b6001600160a01b03811660009081526006602052604081205460ff16156113af57506001600160a01b038116600090815260036020526040902054610b93565b6001600160a01b038216600090815260026020526040902054610a8e90610b36565b6113d9611c95565b6000546001600160a01b03908116911614611429576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60095460405147916000916001600160a01b039091169083908381818185875af1925050503d80600081146114c4576040519150601f19603f3d011682016040523d82523d6000602084013e6114c9565b606091505b5050905080610dcb576040805162461bcd60e51b815260206004820152601760248201527614ddd85c08185b99081b1a5c5d5a599e4819985a5b1959604a1b604482015290519081900360640190fd5b600c5481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b611554611c95565b6000546001600160a01b039081169116146115a4576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601455565b6040805180820190915260048152634649524560e01b602082015290565b6115cf611c95565b6000546001600160a01b0390811691161461161f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561168357600080fd5b505afa158015611697573d6000803e3d6000fd5b505050506040513d60208110156116ad57600080fd5b5051815182906000906116bc57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116ea57fe5b6001600160a01b0392831660209182029290920101526018546117109130911684611c99565b60185460405163b6f9de9560e01b815260048101848152306044830181905242606484018190526080602485019081528651608486015286516001600160a01b039096169563b6f9de95958995899594939092909160a401906020808801910280838360005b8381101561178e578181015183820152602001611776565b5050505090500195505050505050600060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050505050565b6000610a8a6117df611c95565b84610b27856040518060600160405280602581526020016131a86025913960046000611809611c95565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611fa8565b6000610a8a611847611c95565b8484611d85565b611856611c95565b6000546001600160a01b039081169116146118a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601255565b60165481565b6118b9611c95565b6000546001600160a01b03908116911614611909576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611964611c95565b6000546001600160a01b039081169116146119b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601655565b6119c1611c95565b6000546001600160a01b03908116911614611a11576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611a316064611a2b83600a546121a490919063ffffffff16565b90612062565b600c5550565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b611a6a611c95565b6000546001600160a01b03908116911614611aba576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611ac26121fd565b565b611acc611c95565b6000546001600160a01b03908116911614611b1c576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b611b45611c95565b6000546001600160a01b03908116911614611b95576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b038116611bda5760405162461bcd60e51b81526004018080602001828103825260268152602001806130a56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611c3d611c95565b6000546001600160a01b03908116911614611c8d576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611ac2612217565b3390565b6001600160a01b038316611cde5760405162461bcd60e51b81526004018080602001828103825260248152602001806130576024913960400191505060405180910390fd5b6001600160a01b038216611d235760405162461bcd60e51b81526004018080602001828103825260228152602001806131cd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611dca5760405162461bcd60e51b81526004018080602001828103825260258152602001806130326025913960400191505060405180910390fd5b6001600160a01b038216611e0f5760405162461bcd60e51b81526004018080602001828103825260238152602001806131856023913960400191505060405180910390fd5b60008111611e4e5760405162461bcd60e51b815260040180806020018281038252602981526020018061315c6029913960400191505060405180910390fd5b611e5661153d565b6001600160a01b0316836001600160a01b031614158015611e905750611e7a61153d565b6001600160a01b0316826001600160a01b031614155b15611ed657600c54811115611ed65760405162461bcd60e51b81526004018080602001828103825260288152602001806130f36028913960400191505060405180910390fd5b6000611ee13061136f565b9050600c548110611ef15750600c545b600d5481108015908190611f0f5750601954600160a01b900460ff16155b8015611f2957506019546001600160a01b03868116911614155b8015611f3e5750601954600160a81b900460ff165b15611f5157600d549150611f5182612275565b6001600160a01b03851660009081526005602052604090205460019060ff1680611f9357506001600160a01b03851660009081526005602052604090205460ff165b15611f9c575060005b6117ca868686846123f5565b600081848411156120375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ffc578181015183820152602001611fe4565b50505050905090810190601f1680156120295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061204c612517565b909250905061205b8282612062565b9250505090565b60006120a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061267a565b9392505050565b6000828201838110156120a4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61210d612fbd565b612115613002565b61211e836126df565b9050612128612fbd565b600080600061215287866020015187606001518860800151896040015161214d61203f565b61274c565b9186526020808701919091526040808701929092528651606080880191909152908701516080808801919091529087015160a087015286015160c0860152949094015160e08401525090949350505050565b6000826121b357506000610a8e565b828202828482816121c057fe5b04146120a45760405162461bcd60e51b815260040180806020018281038252602181526020018061311b6021913960400191505060405180910390fd5b601154601055601554601455601354601255601754601655565b6010541580156122275750601454155b80156122335750601254155b801561223f5750601654155b1561224957611ac2565b601080546011556014805460155560128054601355601680546017556000938490559183905582905555565b6019805460ff60a01b1916600160a01b1790556000612295826004612062565b905060006122a4836004612062565b905060006122bc836122b686856127c0565b906127c0565b9050476122c882612802565b60006122d447836127c0565b6009546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612326576040519150601f19603f3d011682016040523d82523d6000602084013e61232b565b606091505b505090508061237b576040805162461bcd60e51b815260206004820152601760248201527614ddd85c08185b99081b1a5c5d5a599e4819985a5b1959604a1b604482015290519081900360640190fd5b4761238587612802565b600061239147836127c0565b905061239d8782612994565b604080518981526020810183905280820189905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506019805460ff60a01b1916905550505050505050565b8061240257612402612217565b6001600160a01b03841660009081526006602052604090205460ff16801561244357506001600160a01b03831660009081526006602052604090205460ff16155b1561245857612453848484612a87565b612504565b6001600160a01b03841660009081526006602052604090205460ff1615801561249957506001600160a01b03831660009081526006602052604090205460ff165b156124a957612453848484612bf1565b6001600160a01b03841660009081526006602052604090205460ff1680156124e957506001600160a01b03831660009081526006602052604090205460ff165b156124f957612453848484612cc2565b612504848484612d53565b80612511576125116121fd565b50505050565b600b54600a546000918291825b6007548110156126485782600260006007848154811061254057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125a5575081600360006007848154811061257e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125bc57600b54600a5494509450505050612676565b6125fc60026000600784815481106125d057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127c0565b925061263e600360006007848154811061261257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127c0565b9150600101612524565b50600a54600b5461265891612062565b82101561267057600b54600a54935093505050612676565b90925090505b9091565b600081836126c95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ffc578181015183820152602001611fe4565b5060008385816126d557fe5b0495945050505050565b6126e7613002565b6126ef613002565b6126f883612db3565b602082015261270683612dcf565b608082015261271483612deb565b604082015261272283612e07565b6060820181905260808201516020830151612744926122b691829088906127c0565b815292915050565b600080808061275b8a866121a4565b9050600061276987876121a4565b905060006127778b886121a4565b905060006127858b896121a4565b905060006127938b8a6121a4565b905060006127a9856122b6848187818c8b6127c0565b959f959e50929c50939a5050505050505050505050565b60006120a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa8565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061283057fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561288457600080fd5b505afa158015612898573d6000803e3d6000fd5b505050506040513d60208110156128ae57600080fd5b50518151829060019081106128bf57fe5b6001600160a01b0392831660209182029290920101526018546128e59130911684611c99565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561296b578181015183820152602001612953565b505050509050019650505050505050600060405180830381600087803b1580156117b657600080fd5b6018546129ac9030906001600160a01b031684611c99565b6018546040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a482015290516001600160a01b039092169163f305d71991849160c480830192606092919082900301818588803b158015612a1b57600080fd5b505af1158015612a2f573d6000803e3d6000fd5b50505050506040513d6060811015612a4657600080fd5b5050604080518381526020810183905281517fbb14a27693a8b59614dd6d3f97cb7f9665f64b670edb7276a4e7356442b5dd0a929181900390910190a15050565b612a8f612fbd565b612a9882612105565b90506000612aa461203f565b90506000612abf828460e001516121a490919063ffffffff16565b6001600160a01b038716600090815260036020526040902054909150612ae590856127c0565b6001600160a01b0387166000908152600360209081526040808320939093558551600290915291902054612b18916127c0565b6001600160a01b0380881660009081526002602090815260408083209490945586015191881681529190912054612b4e916120ab565b6001600160a01b03861660009081526002602052604090205560a0830151612b7590612e23565b612b828360c00151612eac565b612b9a83604001518285608001518660e00151612f6b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85606001516040518082815260200191505060405180910390a3505050505050565b612bf9612fbd565b612c0282612105565b90506000612c0e61203f565b90506000612c29828460e001516121a490919063ffffffff16565b83516001600160a01b038816600090815260026020526040902054919250612c5191906127c0565b6001600160a01b0380881660009081526002602090815260408083209490945560608701519289168252600390529190912054612c8d916120ab565b6001600160a01b03861660009081526003602090815260408083209390935585810151600290915291902054612b4e916120ab565b612cca612fbd565b612cd382612105565b90506000612cdf61203f565b90506000612cfa828460e001516121a490919063ffffffff16565b6001600160a01b038716600090815260036020526040902054909150612d2090856127c0565b6001600160a01b0387166000908152600360209081526040808320939093558551600290915291902054612c51916127c0565b612d5b612fbd565b612d6482612105565b90506000612d7061203f565b90506000612d8b828460e001516121a490919063ffffffff16565b83516001600160a01b038816600090815260026020526040902054919250612b1891906127c0565b6000610a8e6064611a2b601054856121a490919063ffffffff16565b6000610a8e6064611a2b601254856121a490919063ffffffff16565b6000610a8e6064611a2b601654856121a490919063ffffffff16565b6000610a8e6064611a2b601454856121a490919063ffffffff16565b6000612e2d61203f565b90506000612e3b83836121a4565b30600090815260026020526040902054909150612e5890826120ab565b3060009081526002602090815260408083209390935560069052205460ff1615612ea75730600090815260036020526040902054612e9690846120ab565b306000908152600360205260409020555b505050565b6000612eb661203f565b90506000612ec483836121a4565b6008546001600160a01b0316600090815260026020526040902054909150612eec90826120ab565b600880546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615612ea7576008546001600160a01b0316600090815260036020526040902054612f4b90846120ab565b6008546001600160a01b0316600090815260036020526040902055505050565b612f84836122b686600b546127c090919063ffffffff16565b600b55600e54612f9490836120ab565b600e55600f54612fa490826120ab565b600f55600a54612fb490826127c0565b600a5550505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a20617070726f766520746f20746865207a65726f2061646472657373a264697066735822122025b5337acd5c2ddd143c397d55a33a565587b1a3c312ee3f14ed725402bba82164736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80635d098b381161014f578063a457c2d7116100c1578063d543dbeb1161007a578063d543dbeb14610902578063dd62ed3e1461092c578063e28550ab14610967578063ea2f0b371461097c578063f2fde38b146109af578063f6b20c3b146109e25761027d565b8063a457c2d7146107fb578063a9059cbb14610834578063af41063b1461086d578063c0b0fda214610897578063c49b9a80146108ac578063cea26958146108d85761027d565b80637d1db4a5116101135780637d1db4a51461073557806388f820201461074a5780638da5cb5b1461077d5780638ee88c531461079257806395d89b41146107bc5780639d2d9618146107d15761027d565b80635d098b38146106905780636bc87c3a146106c357806370a08231146106d8578063715018a61461070b5780637a836136146107205761027d565b806339509351116101e8578063437823ec116101ac578063437823ec1461059b5780634549b039146105ce57806349bd5a5e146106005780634a74bb021461061557806352390c021461062a5780635342acb41461065d5761027d565b806339509351146104f05780633b124fe7146105295780633c9f861d1461053e57806340f8007a1461055357806341cb87fc146105685761027d565b806318160ddd1161023a57806318160ddd146103dd57806323b872dd146103f25780632d8381191461043557806330563bd71461045f578063313ce567146104925780633685d419146104bd5761027d565b8063061c82d01461028257806306fdde03146102ae578063095ea7b31461033857806313114a9d146103855780631694505e146103ac5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102ac600480360360208110156102a557600080fd5b50356109f7565b005b3480156102ba57600080fd5b506102c3610a54565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fd5781810151838201526020016102e5565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103716004803603604081101561035b57600080fd5b506001600160a01b038135169060200135610a76565b604080519115158252519081900360200190f35b34801561039157600080fd5b5061039a610a94565b60408051918252519081900360200190f35b3480156103b857600080fd5b506103c1610a9a565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b5061039a610aa9565b3480156103fe57600080fd5b506103716004803603606081101561041557600080fd5b506001600160a01b03813581169160208101359091169060400135610aaf565b34801561044157600080fd5b5061039a6004803603602081101561045857600080fd5b5035610b36565b34801561046b57600080fd5b506102ac6004803603602081101561048257600080fd5b50356001600160a01b0316610b98565b34801561049e57600080fd5b506104a7610c12565b6040805160ff9092168252519081900360200190f35b3480156104c957600080fd5b506102ac600480360360208110156104e057600080fd5b50356001600160a01b0316610c17565b3480156104fc57600080fd5b506103716004803603604081101561051357600080fd5b506001600160a01b038135169060200135610dcf565b34801561053557600080fd5b5061039a610e1d565b34801561054a57600080fd5b5061039a610e23565b34801561055f57600080fd5b5061039a610e29565b34801561057457600080fd5b506102ac6004803603602081101561058b57600080fd5b50356001600160a01b0316610e2f565b3480156105a757600080fd5b506102ac600480360360208110156105be57600080fd5b50356001600160a01b0316611019565b3480156105da57600080fd5b5061039a600480360360408110156105f157600080fd5b50803590602001351515611095565b34801561060c57600080fd5b506103c161112c565b34801561062157600080fd5b5061037161113b565b34801561063657600080fd5b506102ac6004803603602081101561064d57600080fd5b50356001600160a01b031661114b565b34801561066957600080fd5b506103716004803603602081101561068057600080fd5b50356001600160a01b03166112d1565b34801561069c57600080fd5b506102ac600480360360208110156106b357600080fd5b50356001600160a01b03166112ef565b3480156106cf57600080fd5b5061039a611369565b3480156106e457600080fd5b5061039a600480360360208110156106fb57600080fd5b50356001600160a01b031661136f565b34801561071757600080fd5b506102ac6113d1565b34801561072c57600080fd5b506102ac611473565b34801561074157600080fd5b5061039a611519565b34801561075657600080fd5b506103716004803603602081101561076d57600080fd5b50356001600160a01b031661151f565b34801561078957600080fd5b506103c161153d565b34801561079e57600080fd5b506102ac600480360360208110156107b557600080fd5b503561154c565b3480156107c857600080fd5b506102c36115a9565b3480156107dd57600080fd5b506102ac600480360360208110156107f457600080fd5b50356115c7565b34801561080757600080fd5b506103716004803603604081101561081e57600080fd5b506001600160a01b0381351690602001356117d2565b34801561084057600080fd5b506103716004803603604081101561085757600080fd5b506001600160a01b03813516906020013561183a565b34801561087957600080fd5b506102ac6004803603602081101561089057600080fd5b503561184e565b3480156108a357600080fd5b5061039a6118ab565b3480156108b857600080fd5b506102ac600480360360208110156108cf57600080fd5b503515156118b1565b3480156108e457600080fd5b506102ac600480360360208110156108fb57600080fd5b503561195c565b34801561090e57600080fd5b506102ac6004803603602081101561092557600080fd5b50356119b9565b34801561093857600080fd5b5061039a6004803603604081101561094f57600080fd5b506001600160a01b0381358116916020013516611a37565b34801561097357600080fd5b506102ac611a62565b34801561098857600080fd5b506102ac6004803603602081101561099f57600080fd5b50356001600160a01b0316611ac4565b3480156109bb57600080fd5b506102ac600480360360208110156109d257600080fd5b50356001600160a01b0316611b3d565b3480156109ee57600080fd5b506102ac611c35565b6109ff611c95565b6000546001600160a01b03908116911614610a4f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601055565b6040805180820190915260088152674669726553616c6560c01b602082015290565b6000610a8a610a83611c95565b8484611c99565b5060015b92915050565b600e5490565b6018546001600160a01b031681565b600a5490565b6000610abc848484611d85565b610b2c84610ac8611c95565b610b27856040518060600160405280602881526020016130cb602891396001600160a01b038a16600090815260046020526040812090610b06611c95565b6001600160a01b031681526020810191909152604001600020549190611fa8565b611c99565b5060019392505050565b6000600b54821115610b795760405162461bcd60e51b815260040180806020018281038252602a81526020018061307b602a913960400191505060405180910390fd5b6000610b8361203f565b9050610b8f8382612062565b9150505b919050565b610ba0611c95565b6000546001600160a01b03908116911614610bf0576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600890565b610c1f611c95565b6000546001600160a01b03908116911614610c6f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610cd3576040805162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd08195e18db1d59195960621b604482015290519081900360640190fd5b60005b600754811015610dcb57816001600160a01b031660078281548110610cf757fe5b6000918252602090912001546001600160a01b03161415610dc357600780546000198101908110610d2457fe5b600091825260209091200154600780546001600160a01b039092169183908110610d4a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff191690556007805480610d9c57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610dcb565b600101610cd6565b5050565b6000610a8a610ddc611c95565b84610b278560046000610ded611c95565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906120ab565b60105481565b600f5490565b60125481565b610e37611c95565b6000546001600160a01b03908116911614610e87576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d6020811015610eef57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015610f3f57600080fd5b505afa158015610f53573d6000803e3d6000fd5b505050506040513d6020811015610f6957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b5051601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b611021611c95565b6000546001600160a01b03908116911614611071576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600a548311156110ee576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161110e576110fb612fbd565b61110484612105565b519150610a8e9050565b611116612fbd565b61111f84612105565b602001519150610a8e9050565b6019546001600160a01b031681565b601954600160a81b900460ff1681565b611153611c95565b6000546001600160a01b039081169116146111a3576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615611211576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260409020541561126b576001600160a01b03811660009081526002602052604090205461125190610b36565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b6112f7611c95565b6000546001600160a01b03908116911614611347576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60145481565b6001600160a01b03811660009081526006602052604081205460ff16156113af57506001600160a01b038116600090815260036020526040902054610b93565b6001600160a01b038216600090815260026020526040902054610a8e90610b36565b6113d9611c95565b6000546001600160a01b03908116911614611429576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60095460405147916000916001600160a01b039091169083908381818185875af1925050503d80600081146114c4576040519150601f19603f3d011682016040523d82523d6000602084013e6114c9565b606091505b5050905080610dcb576040805162461bcd60e51b815260206004820152601760248201527614ddd85c08185b99081b1a5c5d5a599e4819985a5b1959604a1b604482015290519081900360640190fd5b600c5481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b611554611c95565b6000546001600160a01b039081169116146115a4576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601455565b6040805180820190915260048152634649524560e01b602082015290565b6115cf611c95565b6000546001600160a01b0390811691161461161f576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803683375050601854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561168357600080fd5b505afa158015611697573d6000803e3d6000fd5b505050506040513d60208110156116ad57600080fd5b5051815182906000906116bc57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116ea57fe5b6001600160a01b0392831660209182029290920101526018546117109130911684611c99565b60185460405163b6f9de9560e01b815260048101848152306044830181905242606484018190526080602485019081528651608486015286516001600160a01b039096169563b6f9de95958995899594939092909160a401906020808801910280838360005b8381101561178e578181015183820152602001611776565b5050505090500195505050505050600060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050505050565b6000610a8a6117df611c95565b84610b27856040518060600160405280602581526020016131a86025913960046000611809611c95565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611fa8565b6000610a8a611847611c95565b8484611d85565b611856611c95565b6000546001600160a01b039081169116146118a6576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601255565b60165481565b6118b9611c95565b6000546001600160a01b03908116911614611909576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611964611c95565b6000546001600160a01b039081169116146119b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b601655565b6119c1611c95565b6000546001600160a01b03908116911614611a11576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611a316064611a2b83600a546121a490919063ffffffff16565b90612062565b600c5550565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b611a6a611c95565b6000546001600160a01b03908116911614611aba576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611ac26121fd565b565b611acc611c95565b6000546001600160a01b03908116911614611b1c576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b611b45611c95565b6000546001600160a01b03908116911614611b95576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b6001600160a01b038116611bda5760405162461bcd60e51b81526004018080602001828103825260268152602001806130a56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611c3d611c95565b6000546001600160a01b03908116911614611c8d576040805162461bcd60e51b8152602060048201819052602482015260008051602061313c833981519152604482015290519081900360640190fd5b611ac2612217565b3390565b6001600160a01b038316611cde5760405162461bcd60e51b81526004018080602001828103825260248152602001806130576024913960400191505060405180910390fd5b6001600160a01b038216611d235760405162461bcd60e51b81526004018080602001828103825260228152602001806131cd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611dca5760405162461bcd60e51b81526004018080602001828103825260258152602001806130326025913960400191505060405180910390fd5b6001600160a01b038216611e0f5760405162461bcd60e51b81526004018080602001828103825260238152602001806131856023913960400191505060405180910390fd5b60008111611e4e5760405162461bcd60e51b815260040180806020018281038252602981526020018061315c6029913960400191505060405180910390fd5b611e5661153d565b6001600160a01b0316836001600160a01b031614158015611e905750611e7a61153d565b6001600160a01b0316826001600160a01b031614155b15611ed657600c54811115611ed65760405162461bcd60e51b81526004018080602001828103825260288152602001806130f36028913960400191505060405180910390fd5b6000611ee13061136f565b9050600c548110611ef15750600c545b600d5481108015908190611f0f5750601954600160a01b900460ff16155b8015611f2957506019546001600160a01b03868116911614155b8015611f3e5750601954600160a81b900460ff165b15611f5157600d549150611f5182612275565b6001600160a01b03851660009081526005602052604090205460019060ff1680611f9357506001600160a01b03851660009081526005602052604090205460ff165b15611f9c575060005b6117ca868686846123f5565b600081848411156120375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ffc578181015183820152602001611fe4565b50505050905090810190601f1680156120295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061204c612517565b909250905061205b8282612062565b9250505090565b60006120a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061267a565b9392505050565b6000828201838110156120a4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61210d612fbd565b612115613002565b61211e836126df565b9050612128612fbd565b600080600061215287866020015187606001518860800151896040015161214d61203f565b61274c565b9186526020808701919091526040808701929092528651606080880191909152908701516080808801919091529087015160a087015286015160c0860152949094015160e08401525090949350505050565b6000826121b357506000610a8e565b828202828482816121c057fe5b04146120a45760405162461bcd60e51b815260040180806020018281038252602181526020018061311b6021913960400191505060405180910390fd5b601154601055601554601455601354601255601754601655565b6010541580156122275750601454155b80156122335750601254155b801561223f5750601654155b1561224957611ac2565b601080546011556014805460155560128054601355601680546017556000938490559183905582905555565b6019805460ff60a01b1916600160a01b1790556000612295826004612062565b905060006122a4836004612062565b905060006122bc836122b686856127c0565b906127c0565b9050476122c882612802565b60006122d447836127c0565b6009546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612326576040519150601f19603f3d011682016040523d82523d6000602084013e61232b565b606091505b505090508061237b576040805162461bcd60e51b815260206004820152601760248201527614ddd85c08185b99081b1a5c5d5a599e4819985a5b1959604a1b604482015290519081900360640190fd5b4761238587612802565b600061239147836127c0565b905061239d8782612994565b604080518981526020810183905280820189905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506019805460ff60a01b1916905550505050505050565b8061240257612402612217565b6001600160a01b03841660009081526006602052604090205460ff16801561244357506001600160a01b03831660009081526006602052604090205460ff16155b1561245857612453848484612a87565b612504565b6001600160a01b03841660009081526006602052604090205460ff1615801561249957506001600160a01b03831660009081526006602052604090205460ff165b156124a957612453848484612bf1565b6001600160a01b03841660009081526006602052604090205460ff1680156124e957506001600160a01b03831660009081526006602052604090205460ff165b156124f957612453848484612cc2565b612504848484612d53565b80612511576125116121fd565b50505050565b600b54600a546000918291825b6007548110156126485782600260006007848154811061254057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125a5575081600360006007848154811061257e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125bc57600b54600a5494509450505050612676565b6125fc60026000600784815481106125d057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127c0565b925061263e600360006007848154811061261257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127c0565b9150600101612524565b50600a54600b5461265891612062565b82101561267057600b54600a54935093505050612676565b90925090505b9091565b600081836126c95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ffc578181015183820152602001611fe4565b5060008385816126d557fe5b0495945050505050565b6126e7613002565b6126ef613002565b6126f883612db3565b602082015261270683612dcf565b608082015261271483612deb565b604082015261272283612e07565b6060820181905260808201516020830151612744926122b691829088906127c0565b815292915050565b600080808061275b8a866121a4565b9050600061276987876121a4565b905060006127778b886121a4565b905060006127858b896121a4565b905060006127938b8a6121a4565b905060006127a9856122b6848187818c8b6127c0565b959f959e50929c50939a5050505050505050505050565b60006120a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa8565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061283057fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561288457600080fd5b505afa158015612898573d6000803e3d6000fd5b505050506040513d60208110156128ae57600080fd5b50518151829060019081106128bf57fe5b6001600160a01b0392831660209182029290920101526018546128e59130911684611c99565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561296b578181015183820152602001612953565b505050509050019650505050505050600060405180830381600087803b1580156117b657600080fd5b6018546129ac9030906001600160a01b031684611c99565b6018546040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a482015290516001600160a01b039092169163f305d71991849160c480830192606092919082900301818588803b158015612a1b57600080fd5b505af1158015612a2f573d6000803e3d6000fd5b50505050506040513d6060811015612a4657600080fd5b5050604080518381526020810183905281517fbb14a27693a8b59614dd6d3f97cb7f9665f64b670edb7276a4e7356442b5dd0a929181900390910190a15050565b612a8f612fbd565b612a9882612105565b90506000612aa461203f565b90506000612abf828460e001516121a490919063ffffffff16565b6001600160a01b038716600090815260036020526040902054909150612ae590856127c0565b6001600160a01b0387166000908152600360209081526040808320939093558551600290915291902054612b18916127c0565b6001600160a01b0380881660009081526002602090815260408083209490945586015191881681529190912054612b4e916120ab565b6001600160a01b03861660009081526002602052604090205560a0830151612b7590612e23565b612b828360c00151612eac565b612b9a83604001518285608001518660e00151612f6b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85606001516040518082815260200191505060405180910390a3505050505050565b612bf9612fbd565b612c0282612105565b90506000612c0e61203f565b90506000612c29828460e001516121a490919063ffffffff16565b83516001600160a01b038816600090815260026020526040902054919250612c5191906127c0565b6001600160a01b0380881660009081526002602090815260408083209490945560608701519289168252600390529190912054612c8d916120ab565b6001600160a01b03861660009081526003602090815260408083209390935585810151600290915291902054612b4e916120ab565b612cca612fbd565b612cd382612105565b90506000612cdf61203f565b90506000612cfa828460e001516121a490919063ffffffff16565b6001600160a01b038716600090815260036020526040902054909150612d2090856127c0565b6001600160a01b0387166000908152600360209081526040808320939093558551600290915291902054612c51916127c0565b612d5b612fbd565b612d6482612105565b90506000612d7061203f565b90506000612d8b828460e001516121a490919063ffffffff16565b83516001600160a01b038816600090815260026020526040902054919250612b1891906127c0565b6000610a8e6064611a2b601054856121a490919063ffffffff16565b6000610a8e6064611a2b601254856121a490919063ffffffff16565b6000610a8e6064611a2b601654856121a490919063ffffffff16565b6000610a8e6064611a2b601454856121a490919063ffffffff16565b6000612e2d61203f565b90506000612e3b83836121a4565b30600090815260026020526040902054909150612e5890826120ab565b3060009081526002602090815260408083209390935560069052205460ff1615612ea75730600090815260036020526040902054612e9690846120ab565b306000908152600360205260409020555b505050565b6000612eb661203f565b90506000612ec483836121a4565b6008546001600160a01b0316600090815260026020526040902054909150612eec90826120ab565b600880546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff1615612ea7576008546001600160a01b0316600090815260036020526040902054612f4b90846120ab565b6008546001600160a01b0316600090815260036020526040902055505050565b612f84836122b686600b546127c090919063ffffffff16565b600b55600e54612f9490836120ab565b600e55600f54612fa490826120ab565b600f55600a54612fb490826127c0565b600a5550505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a20617070726f766520746f20746865207a65726f2061646472657373a264697066735822122025b5337acd5c2ddd143c397d55a33a565587b1a3c312ee3f14ed725402bba82164736f6c634300060c0033
Deployed Bytecode Sourcemap
27781:25637:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36428:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36428:98:0;;:::i;:::-;;30817:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31802:193;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31802:193:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33301:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29457:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;29457:41:0;;;;;;;;;;;;;;31094:95;;;;;;;;;;;;;:::i;32003:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32003:446:0;;;;;;;;;;;;;;;;;:::i;33971:322::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33971:322:0;;:::i;53018:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53018:177:0;-1:-1:-1;;;;;53018:177:0;;:::i;31003:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34757:636;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34757:636:0;-1:-1:-1;;;;;34757:636:0;;:::i;32457:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32457:300:0;;;;;;;;:::i;29091:26::-;;;;;;;;;;;;;:::i;33396:88::-;;;;;;;;;;;;;:::i;29174:30::-;;;;;;;;;;;;;:::i;52499:511::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52499:511:0;-1:-1:-1;;;;;52499:511:0;;:::i;36191:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36191:111:0;-1:-1:-1;;;;;36191:111:0;;:::i;33492:471::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33492:471:0;;;;;;;;;:::i;29505:28::-;;;;;;;;;;;;;:::i;29570:40::-;;;;;;;;;;;;;:::i;34301:448::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34301:448:0;-1:-1:-1;;;;;34301:448:0;;:::i;43201:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43201:124:0;-1:-1:-1;;;;;43201:124:0;;:::i;53203:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53203:206:0;-1:-1:-1;;;;;53203:206:0;;:::i;29269:32::-;;;;;;;;;;;;;:::i;31197:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31197:198:0;-1:-1:-1;;;;;31197:198:0;;:::i;17785:148::-;;;;;;;;;;;;;:::i;46908:235::-;;;;;;;;;;;;;:::i;28718:65::-;;;;;;;;;;;;;:::i;33173:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33173:120:0;-1:-1:-1;;;;;33173:120:0;;:::i;17143:79::-;;;;;;;;;;;;;:::i;36766:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36766:122:0;;:::i;30908:87::-;;;;;;;;;;;;;:::i;47151:670::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47151:670:0;;:::i;32765:400::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32765:400:0;;;;;;;;:::i;31403:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31403:199:0;;;;;;;;:::i;36534:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36534:114:0;;:::i;29370:28::-;;;;;;;;;;;;;:::i;37042:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37042:171:0;;;;:::i;36656:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36656:102:0;;:::i;36896:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36896:138:0;;:::i;31610:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31610:184:0;;;;;;;;;;:::i;42426:78::-;;;;;;;;;;;;;:::i;36310:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36310:110:0;-1:-1:-1;;;;;36310:110:0;;:::i;18088:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18088:281:0;-1:-1:-1;;;;;18088:281:0;;:::i;42342:76::-;;;;;;;;;;;;;:::i;36428:98::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;36502:7:::1;:16:::0;36428:98::o;30817:83::-;30887:5;;;;;;;;;;;;-1:-1:-1;;;30887:5:0;;;;30817:83;:::o;31802:193::-;31904:4;31926:39;31935:12;:10;:12::i;:::-;31949:7;31958:6;31926:8;:39::i;:::-;-1:-1:-1;31983:4:0;31802:193;;;;;:::o;33301:87::-;33370:10;;33301:87;:::o;29457:41::-;;;-1:-1:-1;;;;;29457:41:0;;:::o;31094:95::-;31174:7;;31094:95;:::o;32003:446::-;32135:4;32152:36;32162:6;32170:9;32181:6;32152:9;:36::i;:::-;32199:220;32222:6;32243:12;:10;:12::i;:::-;32270:138;32326:6;32270:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32270:19:0;;;;;;:11;:19;;;;;;32290:12;:10;:12::i;:::-;-1:-1:-1;;;;;32270:33:0;;;;;;;;;;;;-1:-1:-1;32270:33:0;;;:138;:37;:138::i;:::-;32199:8;:220::i;:::-;-1:-1:-1;32437:4:0;32003:446;;;;;:::o;33971:322::-;34065:7;34123;;34112;:18;;34090:110;;;;-1:-1:-1;;;34090:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34211:19;34233:10;:8;:10::i;:::-;34211:32;-1:-1:-1;34261:24:0;:7;34211:32;34261:11;:24::i;:::-;34254:31;;;33971:322;;;;:::o;53018:177::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;53162:13:::1;:25:::0;;-1:-1:-1;;;;;;53162:25:0::1;-1:-1:-1::0;;;;;53162:25:0;;;::::1;::::0;;;::::1;::::0;;53018:177::o;31003:83::-;28434:1;31003:83;:::o;34757:636::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35003:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34995:53;;;::::0;;-1:-1:-1;;;34995:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34995:53:0;;;;;;;;;;;;;::::1;;35064:9;35059:327;35083:9;:16:::0;35079:20;::::1;35059:327;;;35141:7;-1:-1:-1::0;;;;;35125:23:0::1;:9;35135:1;35125:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35125:12:0::1;:23;35121:254;;;35184:9;35194:16:::0;;-1:-1:-1;;35194:20:0;;;35184:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;35169:9:::1;:12:::0;;-1:-1:-1;;;;;35184:31:0;;::::1;::::0;35179:1;;35169:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;35169:46:0::1;-1:-1:-1::0;;;;;35169:46:0;;::::1;;::::0;;35234:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35273:11:::1;:20:::0;;;;:28;;-1:-1:-1;;35273:28:0::1;::::0;;35320:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35320:15:0;;;;;-1:-1:-1;;;;;;35320:15:0::1;::::0;;;;;35354:5:::1;;35121:254;35101:3;;35059:327;;;;34757:636:::0;:::o;32457:300::-;32572:4;32594:133;32617:12;:10;:12::i;:::-;32644:7;32666:50;32705:10;32666:11;:25;32678:12;:10;:12::i;:::-;-1:-1:-1;;;;;32666:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32666:25:0;;;:34;;;;;;;;;;;:38;:50::i;29091:26::-;;;;:::o;33396:88::-;33465:11;;33396:88;:::o;29174:30::-;;;;:::o;52499:511::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;52576:38:::1;52636:9;52576:70;;52803:19;-1:-1:-1::0;;;;;52803:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52803:29:0;52874:26:::1;::::0;;-1:-1:-1;;;52874:26:0;;;;-1:-1:-1;;;;;52785:73:0;;::::1;::::0;::::1;::::0;52867:4:::1;::::0;52874:24;;::::1;::::0;::::1;::::0;:26:::1;::::0;;::::1;::::0;52803:29:::1;::::0;52874:26;;;;;;;;:24;:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52874:26:0;52785:116:::1;::::0;;-1:-1:-1;;;;;;52785:116:0::1;::::0;;;;;;-1:-1:-1;;;;;52785:116:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;52874:26:::1;::::0;52785:116;;;;;;;-1:-1:-1;52785:116:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52785:116:0;52769:13:::1;:132:::0;;-1:-1:-1;;;;;52769:132:0;;::::1;-1:-1:-1::0;;;;;;52769:132:0;;::::1;;::::0;;;52965:15:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;52499:511:0:o;36191:111::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36260:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36260:34:0::1;36290:4;36260:34;::::0;;36191:111::o;33492:471::-;33610:7;33654;;33643;:18;;33635:62;;;;;-1:-1:-1;;;33635:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33713:17;33708:248;;33747:20;;:::i;:::-;33770:19;33781:7;33770:10;:19::i;:::-;33811:14;;-1:-1:-1;33804:21:0;;-1:-1:-1;33804:21:0;33708:248;33858:20;;:::i;:::-;33881:19;33892:7;33881:10;:19::i;:::-;33922:22;;;;-1:-1:-1;33915:29:0;;-1:-1:-1;33915:29:0;29505:28;;;-1:-1:-1;;;;;29505:28:0;;:::o;29570:40::-;;;-1:-1:-1;;;29570:40:0;;;;;:::o;34301:448::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34498:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34497:21;34489:61;;;::::0;;-1:-1:-1;;;34489:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;34565:16:0;::::1;34584:1;34565:16:::0;;;:7:::1;:16;::::0;;;;;:20;34561:109:::1;;-1:-1:-1::0;;;;;34641:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34621:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34602:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34561:109:::1;-1:-1:-1::0;;;;;34680:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34680:27:0::1;34703:4;34680:27:::0;;::::1;::::0;;;34718:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34718:23:0::1;::::0;;::::1;::::0;;34301:448::o;43201:124::-;-1:-1:-1;;;;;43290:27:0;43266:4;43290:27;;;:18;:27;;;;;;;;;43201:124::o;53203:206::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;53374:15:::1;:27:::0;;-1:-1:-1;;;;;;53374:27:0::1;-1:-1:-1::0;;;;;53374:27:0;;;::::1;::::0;;;::::1;::::0;;53203:206::o;29269:32::-;;;;:::o;31197:198::-;-1:-1:-1;;;;;31287:20:0;;31263:7;31287:20;;;:11;:20;;;;;;;;31283:49;;;-1:-1:-1;;;;;;31316:16:0;;;;;;:7;:16;;;;;;31309:23;;31283:49;-1:-1:-1;;;;;31370:16:0;;;;;;:7;:16;;;;;;31350:37;;:19;:37::i;17785:148::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;17892:1:::1;17876:6:::0;;17855:40:::1;::::0;-1:-1:-1;;;;;17876:6:0;;::::1;::::0;17855:40:::1;::::0;17892:1;;17855:40:::1;17923:1;17906:19:::0;;-1:-1:-1;;;;;;17906:19:0::1;::::0;;17785:148::o;46908:235::-;47037:15;;:44;;46986:21;;46964:19;;-1:-1:-1;;;;;47037:15:0;;;;46986:21;;46964:19;47037:44;46964:19;47037:44;46986:21;47037:15;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47018:63;;;47100:7;47092:43;;;;;-1:-1:-1;;;47092:43:0;;;;;;;;;;;;-1:-1:-1;;;47092:43:0;;;;;;;;;;;;;;28718:65;;;;:::o;33173:120::-;-1:-1:-1;;;;;33265:20:0;33241:4;33265:20;;;:11;:20;;;;;;;;;33173:120::o;17143:79::-;17181:7;17208:6;-1:-1:-1;;;;;17208:6:0;17143:79;:::o;36766:122::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;36852:13:::1;:28:::0;36766:122::o;30908:87::-;30980:7;;;;;;;;;;;;-1:-1:-1;;;30980:7:0;;;;30908:87;:::o;47151:670::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;47462:16:::1;::::0;;47476:1:::1;47462:16:::0;;;47438:21:::1;47462:16:::0;;::::1;::::0;;47438:21;47462:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;47499:15:0::1;::::0;:22:::1;::::0;;-1:-1:-1;;;47499:22:0;;;;47438:40;;-1:-1:-1;;;;;;47499:15:0;;::::1;::::0;:20:::1;::::0;-1:-1:-1;47499:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47499:22:0;47489:7;;:4;;47494:1:::1;::::0;47489:7:::1;;;;;;;;;:32;-1:-1:-1::0;;;;;47489:32:0::1;;;-1:-1:-1::0;;;;;47489:32:0::1;;;::::0;::::1;47550:4;47532;47537:1;47532:7;;;;;;;;-1:-1:-1::0;;;;;47532:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;47600:15:::1;::::0;47568:57:::1;::::0;47585:4:::1;::::0;47600:15:::1;47618:6:::0;47568:8:::1;:57::i;:::-;47638:15;::::0;:175:::1;::::0;-1:-1:-1;;;47638:175:0;;::::1;::::0;::::1;::::0;;;47767:4:::1;47638:175:::0;;;;;;47787:15:::1;47638:175:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47638:15:0;;::::1;::::0;:66:::1;::::0;47719:6;;47740:4;;47767;47787:15;47638:175;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15:::1;:175;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17425:1;47151:670:::0;:::o;32765:400::-;32885:4;32907:228;32930:12;:10;:12::i;:::-;32957:7;32979:145;33036:15;32979:145;;;;;;;;;;;;;;;;;:11;:25;32991:12;:10;:12::i;:::-;-1:-1:-1;;;;;32979:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32979:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;31403:199::-;31508:4;31530:42;31540:12;:10;:12::i;:::-;31554:9;31565:6;31530:9;:42::i;36534:114::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;36616:11:::1;:24:::0;36534:114::o;29370:28::-;;;;:::o;37042:171::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;37119:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;37119:32:0;::::1;-1:-1:-1::0;;;;37119:32:0;;::::1;::::0;;;::::1;::::0;;;37167:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;37042:171:::0;:::o;36656:102::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;36732:8:::1;:18:::0;36656:102::o;36896:138::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;36990:36:::1;37020:5;36990:25;37002:12;36990:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:36::i;:::-;36975:12;:51:::0;-1:-1:-1;36896:138:0:o;31610:184::-;-1:-1:-1;;;;;31759:18:0;;;31727:7;31759:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31610:184::o;42426:78::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;42481:15:::1;:13;:15::i;:::-;42426:78::o:0;36310:110::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36377:27:0::1;36407:5;36377:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36377:35:0::1;::::0;;36310:110::o;18088:281::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18191:22:0;::::1;18169:110;;;;-1:-1:-1::0;;;18169:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18316:6;::::0;;18295:38:::1;::::0;-1:-1:-1;;;;;18295:38:0;;::::1;::::0;18316:6;::::1;::::0;18295:38:::1;::::0;::::1;18344:6;:17:::0;;-1:-1:-1;;;;;;18344:17:0::1;-1:-1:-1::0;;;;;18344:17:0;;;::::1;::::0;;;::::1;::::0;;18088:281::o;42342:76::-;17365:12;:10;:12::i;:::-;17355:6;;-1:-1:-1;;;;;17355:6:0;;;:22;;;17347:67;;;;;-1:-1:-1;;;17347:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17347:67:0;;;;;;;;;;;;;;;42396:14:::1;:12;:14::i;9147:98::-:0;9227:10;9147:98;:::o;43333:371::-;-1:-1:-1;;;;;43460:19:0;;43452:68;;;;-1:-1:-1;;;43452:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43539:21:0;;43531:68;;;;-1:-1:-1;;;43531:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43612:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43664:32;;;;;;;;;;;;;;;;;43333:371;;;:::o;43712:1836::-;-1:-1:-1;;;;;43834:18:0;;43826:68;;;;-1:-1:-1;;;43826:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43913:16:0;;43905:64;;;;-1:-1:-1;;;43905:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43997:1;43988:6;:10;43980:64;;;;-1:-1:-1;;;43980:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44067:7;:5;:7::i;:::-;-1:-1:-1;;;;;44059:15:0;:4;-1:-1:-1;;;;;44059:15:0;;;:32;;;;;44084:7;:5;:7::i;:::-;-1:-1:-1;;;;;44078:13:0;:2;-1:-1:-1;;;;;44078:13:0;;;44059:32;44055:175;;;44142:12;;44132:6;:22;;44106:124;;;;-1:-1:-1;;;44106:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44525:28;44556:24;44574:4;44556:9;:24::i;:::-;44525:55;;44621:12;;44597:20;:36;44593:104;;-1:-1:-1;44673:12:0;;44593:104;44773:29;;44749:53;;;;;;;44831;;-1:-1:-1;44868:16:0;;-1:-1:-1;;;44868:16:0;;;;44867:17;44831:53;:91;;;;-1:-1:-1;44909:13:0;;-1:-1:-1;;;;;44901:21:0;;;44909:13;;44901:21;;44831:91;:129;;;;-1:-1:-1;44939:21:0;;-1:-1:-1;;;44939:21:0;;;;44831:129;44813:318;;;45010:29;;44987:52;;45083:36;45098:20;45083:14;:36::i;:::-;-1:-1:-1;;;;;45324:24:0;;45204:12;45324:24;;;:18;:24;;;;;;45219:4;;45324:24;;;:50;;-1:-1:-1;;;;;;45352:22:0;;;;;;:18;:22;;;;;;;;45324:50;45320:98;;;-1:-1:-1;45401:5:0;45320:98;45499:41;45514:4;45520:2;45524:6;45532:7;45499:14;:41::i;4729:226::-;4849:7;4885:12;4877:6;;;;4869:29;;;;-1:-1:-1;;;4869:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4921:5:0;;;4729:226::o;40209:164::-;40251:7;40272:15;40289;40308:19;:17;:19::i;:::-;40271:56;;-1:-1:-1;40271:56:0;-1:-1:-1;40345:20:0;40271:56;;40345:11;:20::i;:::-;40338:27;;;;40209:164;:::o;6145:132::-;6203:7;6230:39;6234:1;6237;6230:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6223:46;6145:132;-1:-1:-1;;;6145:132:0:o;3842:181::-;3900:7;3932:5;;;3956:6;;;;3948:46;;;;;-1:-1:-1;;;3948:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;38056:836;38115:13;;:::i;:::-;38141:22;;:::i;:::-;38166:20;38178:7;38166:11;:20::i;:::-;38141:45;;38197:20;;:::i;:::-;38229:15;38246:23;38271:12;38300:216;38330:7;38356;:12;;;38387:7;:18;;;38424:7;:16;;;38459:7;:13;;;38491:10;:8;:10::i;:::-;38300:11;:216::i;:::-;38527:24;;;38562:22;;;;:40;;;;38613:11;;;;:18;;;;38667:23;;38642:22;;;;:48;;;;38715:12;;;;38701:11;;;;:26;;;;38758:18;;;;38738:17;;;:38;38805:16;;;38787:15;;;:34;38847:13;;;;;38832:12;;;:28;-1:-1:-1;38527:24:0;;38056:836;-1:-1:-1;;;;38056:836:0:o;5206:471::-;5264:7;5509:6;5505:47;;-1:-1:-1;5539:1:0;5532:8;;5505:47;5576:5;;;5580:1;5576;:5;:1;5600:5;;;;;:10;5592:56;;;;-1:-1:-1;;;5592:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42986:207;43040:15;;43030:7;:25;43082:21;;43066:13;:37;43128:19;;43114:11;:33;43169:16;;43158:8;:27;42986:207::o;42512:466::-;42573:7;;:12;:47;;;;-1:-1:-1;42602:13:0;;:18;42573:47;:80;;;;-1:-1:-1;42637:11:0;;:16;42573:80;:110;;;;-1:-1:-1;42670:8:0;;:13;42573:110;42555:147;;;42695:7;;42555:147;42732:7;;;42714:15;:25;42774:13;;;42750:21;:37;42820:11;;;42798:19;:33;42861:8;;;42842:16;:27;-1:-1:-1;42882:11:0;;;;42904:17;;;;42932:15;;;42958:12;42512:466::o;45556:1344::-;29972:16;:23;;-1:-1:-1;;;;29972:23:0;-1:-1:-1;;;29972:23:0;;;;45713:27:::1;:20:::0;45738:1:::1;45713:24;:27::i;:::-;45693:47:::0;-1:-1:-1;45751:19:0::1;45773:27;:20:::0;45798:1:::1;45773:24;:27::i;:::-;45751:49:::0;-1:-1:-1;45811:18:0::1;45845:52;45887:9:::0;45845:37:::1;:20:::0;45751:49;45845:24:::1;:37::i;:::-;:41:::0;::::1;:52::i;:::-;45811:86:::0;-1:-1:-1;45957:21:0::1;45989:28;45811:86:::0;45989:16:::1;:28::i;:::-;46028:19;46050:42;:21;46076:15:::0;46050:25:::1;:42::i;:::-;46122:15;::::0;:44:::1;::::0;46028:64;;-1:-1:-1;46104:12:0::1;::::0;-1:-1:-1;;;;;46122:15:0;;::::1;::::0;46028:64;;46104:12;46122:44;46104:12;46122:44;46028:64;46122:15;:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46103:63;;;46185:7;46177:43;;;::::0;;-1:-1:-1;;;46177:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46177:43:0;;;;;;;;;;;;;::::1;;46521:21;46587:27;46604:9:::0;46587:16:::1;:27::i;:::-;46675:18;46696:41;:21;46722:14:::0;46696:25:::1;:41::i;:::-;46675:62;;46787:37;46800:11;46813:10;46787:12;:37::i;:::-;46842:50;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;30018:16:0;:24;;-1:-1:-1;;;;30018:24:0;;;-1:-1:-1;;;;;;;45556:1344:0:o;49317:1010::-;49775:7;49770:28;;49784:14;:12;:14::i;:::-;-1:-1:-1;;;;;49815:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49839:22:0;;;;;;:11;:22;;;;;;;;49838:23;49815:46;49811:467;;;49878:48;49900:6;49908:9;49919:6;49878:21;:48::i;:::-;49811:467;;;-1:-1:-1;;;;;49949:19:0;;;;;;:11;:19;;;;;;;;49948:20;:46;;;;-1:-1:-1;;;;;;49972:22:0;;;;;;:11;:22;;;;;;;;49948:46;49944:334;;;50011:46;50031:6;50039:9;50050:6;50011:19;:46::i;49944:334::-;-1:-1:-1;;;;;50079:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;50102:22:0;;;;;;:11;:22;;;;;;;;50079:45;50075:203;;;50141:48;50163:6;50171:9;50182:6;50141:21;:48::i;50075:203::-;50222:44;50240:6;50248:9;50259:6;50222:17;:44::i;:::-;50295:7;50290:29;;50304:15;:13;:15::i;:::-;49317:1010;;;;:::o;40381:605::-;40479:7;;40515;;40432;;;;;40533:338;40557:9;:16;40553:20;;40533:338;;;40641:7;40617;:21;40625:9;40635:1;40625:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40625:12:0;40617:21;;;;;;;;;;;;;:31;;:83;;;40693:7;40669;:21;40677:9;40687:1;40677:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40677:12:0;40669:21;;;;;;;;;;;;;:31;40617:83;40595:146;;;40724:7;;40733;;40716:25;;;;;;;;;40595:146;40766:34;40778:7;:21;40786:9;40796:1;40786:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40786:12:0;40778:21;;;;;;;;;;;;;40766:7;;:11;:34::i;:::-;40756:44;;40825:34;40837:7;:21;40845:9;40855:1;40845:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40845:12:0;40837:21;;;;;;;;;;;;;40825:7;;:11;:34::i;:::-;40815:44;-1:-1:-1;40575:3:0;;40533:338;;;-1:-1:-1;40907:7:0;;40895;;:20;;:11;:20::i;:::-;40885:7;:30;40881:61;;;40925:7;;40934;;40917:25;;;;;;;;40881:61;40961:7;;-1:-1:-1;40970:7:0;-1:-1:-1;40381:605:0;;;:::o;6765:379::-;6885:7;6987:12;6980:5;6972:28;;;;-1:-1:-1;;;6972:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7011:9;7027:1;7023;:5;;;;;;;6765:379;-1:-1:-1;;;;;6765:379:0:o;38900:546::-;38987:14;;:::i;:::-;39019:22;;:::i;:::-;39067:24;39083:7;39067:15;:24::i;:::-;39052:12;;;:39;39121:28;39141:7;39121:19;:28::i;:::-;39102:16;;;:47;39176:25;39193:7;39176:16;:25::i;:::-;39160:13;;;:41;39233:30;39255:7;39233:21;:30::i;:::-;39212:18;;;:51;;;39396:16;;;;39326:12;;;;39300:113;;:77;;;;:7;;:25;:39::i;:113::-;39274:139;;;38900:546;-1:-1:-1;;38900:546:0:o;39454:747::-;39704:7;;;;39801:24;:7;39813:11;39801;:24::i;:::-;39783:42;-1:-1:-1;39836:13:0;39852:22;:5;39862:11;39852:9;:22::i;:::-;39836:38;-1:-1:-1;39885:12:0;39900:21;:4;39909:11;39900:8;:21::i;:::-;39885:36;-1:-1:-1;39932:18:0;39953:27;:10;39968:11;39953:14;:27::i;:::-;39932:48;-1:-1:-1;39991:16:0;40010:25;:8;40023:11;40010:12;:25::i;:::-;39991:44;-1:-1:-1;40046:23:0;40085:58;40137:5;40085:47;39991:44;40085:47;40107:10;40085:47;:7;40097:4;40085:11;:17::i;:58::-;40162:7;;;;-1:-1:-1;40188:4:0;;-1:-1:-1;39454:747:0;;-1:-1:-1;;;;;;;;;;;39454:747:0:o;4298:136::-;4356:7;4383:43;4387:1;4390;4383:43;;;;;;;;;;;;;;;;;:3;:43::i;47829:589::-;47979:16;;;47993:1;47979:16;;;47955:21;47979:16;;;;;47955:21;47979:16;;;;;;;;;;-1:-1:-1;47979:16:0;47955:40;;48024:4;48006;48011:1;48006:7;;;;;;;;-1:-1:-1;;;;;48006:23:0;;;:7;;;;;;;;;;:23;;;;48050:15;;:22;;;-1:-1:-1;;;48050:22:0;;;;:15;;;;;:20;;:22;;;;;48006:7;;48050:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48050:22:0;48040:7;;:4;;48045:1;;48040:7;;;;;;-1:-1:-1;;;;;48040:32:0;;;:7;;;;;;;;;:32;48117:15;;48085:62;;48102:4;;48117:15;48135:11;48085:8;:62::i;:::-;48186:15;;:224;;-1:-1:-1;;;48186:224:0;;;;;;;;:15;:224;;;;;;48364:4;48186:224;;;;;;48384:15;48186:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48186:15:0;;;;:66;;48267:11;;48337:4;;48364;48384:15;48186:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48426:810;48842:15;;48810:62;;48827:4;;-1:-1:-1;;;;;48842:15:0;48860:11;48810:8;:62::i;:::-;48915:15;;:258;;;-1:-1:-1;;;48915:258:0;;48987:4;48915:258;;;;;;;;;;;;:15;:258;;;;;;;;;;;;;;49147:15;48915:258;;;;;;-1:-1:-1;;;;;48915:15:0;;;;:31;;48954:9;;48915:258;;;;;;;;;;;;;;48954:9;48915:15;:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48915:258:0;49189:39;;;;;48915:258;49189:39;;;;;;;;;;;;;;;;;;48426:810;;:::o;51717:704::-;51853:20;;:::i;:::-;51876:19;51887:7;51876:10;:19::i;:::-;51853:42;;51908:19;51930:10;:8;:10::i;:::-;51908:32;;51951:13;51967:29;51984:11;51967:6;:12;;;:16;;:29;;;;:::i;:::-;-1:-1:-1;;;;;52027:15:0;;;;;;:7;:15;;;;;;51951:45;;-1:-1:-1;52027:28:0;;52047:7;52027:19;:28::i;:::-;-1:-1:-1;;;;;52009:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52104:14;;52084:7;:15;;;;;;;:35;;:19;:35::i;:::-;-1:-1:-1;;;;;52066:15:0;;;;;;;:7;:15;;;;;;;;:53;;;;52174:22;;;52151:18;;;;;;;;;;:46;;:22;:46::i;:::-;-1:-1:-1;;;;;52130:18:0;;;;;;:7;:18;;;;;:67;52223:17;;;;52208:33;;:14;:33::i;:::-;52252:25;52261:6;:15;;;52252:8;:25::i;:::-;52288:58;52300:6;:11;;;52313:5;52320:6;:11;;;52333:6;:12;;;52288:11;:58::i;:::-;52379:9;-1:-1:-1;;;;;52362:51:0;52371:6;-1:-1:-1;;;;;52362:51:0;;52390:6;:22;;;52362:51;;;;;;;;;;;;;;;;;;51717:704;;;;;;:::o;50986:723::-;51120:20;;:::i;:::-;51143:19;51154:7;51143:10;:19::i;:::-;51120:42;;51175:19;51197:10;:8;:10::i;:::-;51175:32;;51218:13;51234:29;51251:11;51234:6;:12;;;:16;;:29;;;;:::i;:::-;51314:14;;-1:-1:-1;;;;;51294:15:0;;51314:14;51294:15;;;:7;:15;;;;;;51218:45;;-1:-1:-1;51294:35:0;;:15;:19;:35::i;:::-;-1:-1:-1;;;;;51276:15:0;;;;;;;:7;:15;;;;;;;;:53;;;;51384:22;;;;51361:18;;;;;:7;:18;;;;;;;:46;;:22;:46::i;:::-;-1:-1:-1;;;;;51340:18:0;;;;;;:7;:18;;;;;;;;:67;;;;51462:22;;;;51439:7;:18;;;;;;;:46;;:22;:46::i;35401:782::-;35537:20;;:::i;:::-;35560:19;35571:7;35560:10;:19::i;:::-;35537:42;;35592:19;35614:10;:8;:10::i;:::-;35592:32;;35635:13;35651:29;35668:11;35651:6;:12;;;:16;;:29;;;;:::i;:::-;-1:-1:-1;;;;;35711:15:0;;;;;;:7;:15;;;;;;35635:45;;-1:-1:-1;35711:28:0;;35731:7;35711:19;:28::i;:::-;-1:-1:-1;;;;;35693:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35788:14;;35768:7;:15;;;;;;;:35;;:19;:35::i;50335:643::-;50467:20;;:::i;:::-;50490:19;50501:7;50490:10;:19::i;:::-;50467:42;;50522:19;50544:10;:8;:10::i;:::-;50522:32;;50565:13;50581:29;50598:11;50581:6;:12;;;:16;;:29;;;;:::i;:::-;50661:14;;-1:-1:-1;;;;;50641:15:0;;50661:14;50641:15;;;:7;:15;;;;;;50565:45;;-1:-1:-1;50641:35:0;;:15;:19;:35::i;41704:130::-;41768:7;41795:31;41820:5;41795:20;41807:7;;41795;:11;;:20;;;;:::i;41842:170::-;41937:7;41969:35;41998:5;41969:24;41981:11;;41969:7;:11;;:24;;;;:::i;42020:132::-;42085:7;42112:32;42138:5;42112:21;42124:8;;42112:7;:11;;:21;;;;:::i;42160:174::-;42257:7;42289:37;42320:5;42289:26;42301:13;;42289:7;:11;;:26;;;;:::i;40994:355::-;41057:19;41079:10;:8;:10::i;:::-;41057:32;-1:-1:-1;41100:18:0;41121:27;:10;41057:32;41121:14;:27::i;:::-;41200:4;41184:22;;;;:7;:22;;;;;;41100:48;;-1:-1:-1;41184:38:0;;41100:48;41184:26;:38::i;:::-;41175:4;41159:22;;;;:7;:22;;;;;;;;:63;;;;41237:11;:26;;;;;;41233:108;;;41319:4;41303:22;;;;:7;:22;;;;;;:38;;41330:10;41303:26;:38::i;:::-;41294:4;41278:22;;;;:7;:22;;;;;:63;41233:108;40994:355;;;:::o;41357:339::-;41412:19;41434:10;:8;:10::i;:::-;41412:32;-1:-1:-1;41455:16:0;41474:25;:8;41412:32;41474:12;:25::i;:::-;41543:13;;-1:-1:-1;;;;;41543:13:0;41535:22;;;;:7;:22;;;;;;41455:44;;-1:-1:-1;41535:36:0;;41455:44;41535:26;:36::i;:::-;41518:13;;;-1:-1:-1;;;;;41518:13:0;;;41510:22;;;;:7;:22;;;;;;;;:61;;;;41598:13;;;;;41586:26;;:11;:26;;;;;;;41582:106;;;41660:13;;-1:-1:-1;;;;;41660:13:0;41652:22;;;;:7;:22;;;;;;:36;;41679:8;41652:26;:36::i;:::-;41635:13;;-1:-1:-1;;;;;41635:13:0;41627:22;;;;:7;:22;;;;;:61;41357:339;;;:::o;37315:317::-;37466:28;37488:5;37466:17;37478:4;37466:7;;:11;;:17;;;;:::i;:28::-;37456:7;:38;37518:10;;:20;;37533:4;37518:14;:20::i;:::-;37505:10;:33;37563:11;;:22;;37579:5;37563:15;:22::i;:::-;37549:11;:36;37606:7;;:18;;37618:5;37606:11;:18::i;:::-;37596:7;:28;-1:-1:-1;;;;37315:317:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://25b5337acd5c2ddd143c397d55a33a565587b1a3c312ee3f14ed725402bba821
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.