ERC-20
Overview
Max Total Supply
999,394,999,262.36598556 SHIBASAISHO
Holders
5
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,209,473.900833374 SHIBASAISHOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHIBASAISHO
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-10 */ pragma solidity ^0.8.14; /* ShibaSaishō: The leader of doge meme culture https://t.me/ShibaSaisho https://twitter.com/ShibaSaisho https://shibasaisho.com/ */ // 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) { 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; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { 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, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SHIBASAISHO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; struct RValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; } struct TValuesStruct { uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } struct ValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } 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; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1 * 10**12 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectionFeeTotal; uint256 private _tBurnFeeTotal; string private _name = unicode"ShibaSaishō"; string private _symbol = "SHIBASAISHO"; uint8 private _decimals = 9; uint256 public _reflectionFee = 1; uint256 public _burnFee = 1; uint256 public _marketingTokenFee = 1; uint256 public _marketingETHFee = 1; address public marketingTokenFeeWallet = 0xBFf81C70b20f908890F1610912C231D077854aC8; address public marketingETHFeeWallet = 0xBFf81C70b20f908890F1610912C231D077854aC8; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inMarketingEthSwap = false; bool public _marketingConverttoETH = true; bool public _tradingEnabled = false; uint256 public _maxTxAmount = 2 * 10**10 * 10**9;//2% maxTxAmount uint256 public _maxWallet = 2 * 10**10 * 10**9;//2% maxWallet uint256 private _numTokensSwapToETHForMarketing = 2 * 10**7 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); modifier lockTheSwap { inMarketingEthSwap = true; _; inMarketingEthSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2 // 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 view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view 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, "ERC20: 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, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionFees() public view returns (uint256) { return _tReflectionFeeTotal; } function totalBurnFees() public view returns (uint256) { return _tBurnFeeTotal; } /** * @dev Returns the Number of tokens in contract that are needed to be reached before swapping to ETH and sending to Marketing Wallet. . */ function numTokensSwapToETHForMarketing() public view returns (uint256) { return _numTokensSwapToETHForMarketing; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { uint256 rAmount = _getValues(tAmount).rAmount; return rAmount; } else { uint256 rTransferAmount = _getValues(tAmount).rTransferAmount; return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account already excluded"); require(_excluded.length < 100, "Excluded list is too long"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _distributeFee(uint256 rReflectionFee, uint256 rBurnFee, uint256 rmarketingTokenFee, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee) private { _rTotal = _rTotal.sub(rReflectionFee).sub(rBurnFee); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee); _tTotal = _tTotal.sub(tBurnFee); _tBurnFeeTotal = _tBurnFeeTotal.add(tBurnFee); _rOwned[marketingTokenFeeWallet] = _rOwned[marketingTokenFeeWallet].add(rmarketingTokenFee); if (_isExcluded[marketingTokenFeeWallet]) { _tOwned[marketingTokenFeeWallet] = _tOwned[marketingTokenFeeWallet].add(tmarketingTokenFee); } } function _getValues(uint256 tAmount) private view returns (ValuesStruct memory) { TValuesStruct memory tvs = _getTValues(tAmount); RValuesStruct memory rvs = _getRValues(tAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee, _getRate()); return ValuesStruct( rvs.rAmount, rvs.rTransferAmount, rvs.rReflectionFee, rvs.rBurnFee, rvs.rmarketingTokenFee, rvs.rMarketingETHFee, tvs.tTransferAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee ); } function _getTValues(uint256 tAmount) private view returns (TValuesStruct memory) { uint256 tReflectionFee = calculateReflectionFee(tAmount); uint256 tBurnFee = calculateBurnFee(tAmount); uint256 tmarketingTokenFee = calculatemarketingTokenFee(tAmount); uint256 tMarketingETHFee = calculateMarketingETHFee(tAmount); uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tBurnFee).sub(tmarketingTokenFee).sub(tMarketingETHFee); return TValuesStruct(tTransferAmount, tReflectionFee, tBurnFee, tmarketingTokenFee, tMarketingETHFee); } function _getRValues(uint256 tAmount, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee, uint256 tMarketingETHFee, uint256 currentRate) private pure returns (RValuesStruct memory) { uint256 rAmount = tAmount.mul(currentRate); uint256 rReflectionFee = tReflectionFee.mul(currentRate); uint256 rBurnFee = tBurnFee.mul(currentRate); uint256 rmarketingTokenFee = tmarketingTokenFee.mul(currentRate); uint256 rMarketingETHFee = tMarketingETHFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rMarketingETHFee).sub(rBurnFee).sub(rmarketingTokenFee); return RValuesStruct(rAmount, rTransferAmount, rReflectionFee, rBurnFee, rmarketingTokenFee, rMarketingETHFee); } 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 _takeMarketingETHFee(uint256 rMarketingETHFee, uint256 tMarketingETHFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingETHFee); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingETHFee); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function calculatemarketingTokenFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingTokenFee).div( 10**2 ); } function calculateMarketingETHFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingETHFee).div( 10**2 ); } function removeAllFee() private { _reflectionFee = 0; _marketingETHFee = 0; _burnFee = 0; _marketingTokenFee = 0; } function restoreAllFee() private { _reflectionFee = 1; _marketingETHFee = 1; _marketingTokenFee = 1; _burnFee = 1; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // block trading until owner has added liquidity and enabled trading if(!_tradingEnabled && from != owner()) { revert("Trading not yet enabled!"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swaptoEth lock? // also, don't get caught in a circular liquidity event. // also, don't SwapMarketingAndSendETH if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= _numTokensSwapToETHForMarketing; if ( overMinTokenBalance && !inMarketingEthSwap && from != uniswapV2Pair && _marketingConverttoETH ) { contractTokenBalance = _numTokensSwapToETHForMarketing; //Perform a Swap of Token for ETH Portion of Marketing Fees swapMarketingAndSendEth(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapMarketingAndSendEth(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth 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 ETH path, marketingETHFeeWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } ValuesStruct memory vs = _getValues(amount); _takeMarketingETHFee(vs.rMarketingETHFee, vs.tMarketingETHFee); _distributeFee(vs.rReflectionFee, vs.rBurnFee, vs.rmarketingTokenFee, vs.tReflectionFee, vs.tBurnFee, vs.tmarketingTokenFee); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, vs); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, vs); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, vs); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, vs); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferToExcluded(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function enableAllFees() external onlyOwner() { _reflectionFee = 1; _burnFee = 1; _marketingTokenFee = 1; _marketingETHFee = 1; _marketingConverttoETH = true; } function disableAllFees() external onlyOwner() { _reflectionFee = 0; _burnFee = 0; _marketingTokenFee = 0; _marketingETHFee = 0; _marketingConverttoETH = false; } function lockTokens(address newWallet) external onlyOwner() { marketingETHFeeWallet = newWallet; } function setMarketingTokenWallet(address newWallet) external onlyOwner() { marketingTokenFeeWallet = newWallet; } function setMaxTxAmount(uint256 maxAmountInTokensWithDecimals) external onlyOwner() { require(maxAmountInTokensWithDecimals > 420 * 10**13 * 10**9, "Cannot set transaction amount less than 1 percent of initial Total Supply!"); _maxTxAmount = maxAmountInTokensWithDecimals; } function enableTrading() public onlyOwner { require(!_tradingEnabled, "Trading already enabled!"); _tradingEnabled = true; } function setmarketingConverttoETH(bool _enabled) public onlyOwner { _marketingConverttoETH = _enabled; } // Number of Tokens to Accrue before Selling To Add to Marketing function setnumTokensSwapToETHForMarketing(uint256 tokenAmount) external onlyOwner() { _numTokensSwapToETHForMarketing = tokenAmount; } /** * @dev Function to recover any ETH sent to Contract by Mistake. */ function recoverETHFromContract(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } /** * @dev Function to recover any ERC20 Tokens sent to Contract by Mistake. */ function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":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":"_marketingConverttoETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingETHFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokenFee","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":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"lockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingETHFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSwapToETHForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"recoverETHFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmountInTokensWithDecimals","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setmarketingConverttoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setnumTokensSwapToETHForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionFees","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
60c0604052683635c9adc5dea0000060098190556200002190600019620003b2565b6200002f90600019620003d5565b600a5560408051808201909152600c81526b53686962615361697368c58d60a01b6020820152600d90620000649082620004a2565b5060408051808201909152600b81526a534849424153414953484f60a81b6020820152600e90620000969082620004a2565b50600f805460ff191660091790556001601081905560118190556012819055601355601480546001600160a01b03191673bff81c70b20f908890f1610912c231d077854ac8179055601580546001600160b81b031916750100bff81c70b20f908890f1610912c231d077854ac81790556801158e460913d00000601681905560175566470de4df8200006018553480156200013057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff91906200056e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027391906200056e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e791906200056e565b6001600160a01b0390811660a0528116608052600160066000620003136000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092529020805490911660011790556200035b3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620003a391815260200190565b60405180910390a350620005a0565b600082620003d057634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620003f757634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200042857607f821691505b6020821081036200044957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049d57600081815260208120601f850160051c81016020861015620004785750805b601f850160051c820191505b81811015620004995782815560010162000484565b5050505b505050565b81516001600160401b03811115620004be57620004be620003fd565b620004d681620004cf845462000413565b846200044f565b602080601f8311600181146200050e5760008415620004f55750858301515b600019600386901b1c1916600185901b17855562000499565b600085815260208120601f198616915b828110156200053f578886015182559484019460019091019084016200051e565b50858210156200055e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200058157600080fd5b81516001600160a01b03811681146200059957600080fd5b9392505050565b60805160a051612ab3620005e2600039600081816104c501526116fe015260008181610370015281816119dc01528181611a950152611ad40152612ab36000f3fe6080604052600436106102815760003560e01c806376b851ca1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b37146107b5578063ec0c9d4d146107d5578063ec28438a146107f5578063f2fde38b14610815578063f709594514610835578063ffc786351461085657600080fd5b8063adbede72146106ee578063b8d36b5014610703578063c0b0fda214610723578063c5254f4014610739578063c730b8a414610759578063dd62ed3e1461076f57600080fd5b80638c8f8c04116101135780638c8f8c041461063b5780638da5cb5b1461065b5780638ff67c361461067957806395d89b4114610699578063a457c2d7146106ae578063a9059cbb146106ce57600080fd5b806376b851ca146105a05780637d1db4a5146105c157806382247ec0146105d757806388f82020146105ed5780638a8c523c1461062657600080fd5b80633206b4aa116101f357806352390c02116101ac57806352390c02146104e75780635342acb41461050757806370a082311461054057806370c668c814610560578063715018a614610576578063741af87f1461058b57600080fd5b80633206b4aa1461042857806338e2f22f1461043e5780633950935114610453578063437823ec146104735780634549b0391461049357806349bd5a5e146104b357600080fd5b80631694505e116102455780631694505e1461035e57806318160ddd1461039257806323b872dd146103b15780632d838119146103d1578063313ce567146103f1578063317653e01461041357600080fd5b806301ba031f1461028d57806306486014146102ca57806306fdde03146102ea578063095ea7b31461030c5780631270863d1461033c57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506014546102ad906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d657600080fd5b506015546102ad906001600160a01b031681565b3480156102f657600080fd5b506102ff61086b565b6040516102c191906126d8565b34801561031857600080fd5b5061032c61032736600461273e565b6108fd565b60405190151581526020016102c1565b34801561034857600080fd5b5061035c61035736600461276a565b610914565b005b34801561036a57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039e57600080fd5b506009545b6040519081526020016102c1565b3480156103bd57600080fd5b5061032c6103cc366004612787565b610969565b3480156103dd57600080fd5b506103a36103ec3660046127c8565b6109d2565b3480156103fd57600080fd5b50600f5460405160ff90911681526020016102c1565b34801561041f57600080fd5b50600c546103a3565b34801561043457600080fd5b506103a360105481565b34801561044a57600080fd5b506018546103a3565b34801561045f57600080fd5b5061032c61046e36600461273e565b610a56565b34801561047f57600080fd5b5061035c61048e36600461276a565b610a8c565b34801561049f57600080fd5b506103a36104ae3660046127ef565b610ada565b3480156104bf57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f357600080fd5b5061035c61050236600461276a565b610b60565b34801561051357600080fd5b5061032c61052236600461276a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054c57600080fd5b506103a361055b36600461276a565b610d7c565b34801561056c57600080fd5b506103a360125481565b34801561058257600080fd5b5061035c610ddb565b34801561059757600080fd5b5061035c610e4f565b3480156105ac57600080fd5b5060155461032c90600160a81b900460ff1681565b3480156105cd57600080fd5b506103a360165481565b3480156105e357600080fd5b506103a360175481565b3480156105f957600080fd5b5061032c61060836600461276a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063257600080fd5b5061035c610e9c565b34801561064757600080fd5b5061035c610656366004612787565b610f35565b34801561066757600080fd5b506000546001600160a01b03166102ad565b34801561068557600080fd5b5061035c61069436600461281f565b610fd8565b3480156106a557600080fd5b506102ff611020565b3480156106ba57600080fd5b5061032c6106c936600461273e565b61102f565b3480156106da57600080fd5b5061032c6106e936600461273e565b61107e565b3480156106fa57600080fd5b50600b546103a3565b34801561070f57600080fd5b5061035c61071e3660046127c8565b61108b565b34801561072f57600080fd5b506103a360115481565b34801561074557600080fd5b5061035c61075436600461276a565b611142565b34801561076557600080fd5b506103a360135481565b34801561077b57600080fd5b506103a361078a36600461283c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107c157600080fd5b5061035c6107d036600461276a565b61118e565b3480156107e157600080fd5b5061035c6107f03660046127c8565b6111d9565b34801561080157600080fd5b5061035c6108103660046127c8565b611208565b34801561082157600080fd5b5061035c61083036600461276a565b6112ca565b34801561084157600080fd5b5060155461032c90600160b01b900460ff1681565b34801561086257600080fd5b5061035c6113b4565b6060600d805461087a9061286a565b80601f01602080910402602001604051908101604052809291908181526020018280546108a69061286a565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b600061090a338484611407565b5060015b92915050565b6000546001600160a01b031633146109475760405162461bcd60e51b815260040161093e906128a4565b60405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600061097684848461152c565b6109c884336109c385604051806060016040528060288152602001612a31602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061176d565b611407565b5060019392505050565b6000600a54821115610a395760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161093e565b6000610a436117a7565b9050610a4f83826117ca565b9392505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161090a9185906109c3908661180c565b6000546001600160a01b03163314610ab65760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115610b2e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161093e565b81610b48576000610b3e8461186b565b51915061090e9050565b6000610b538461186b565b60200151915061090e9050565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610c015760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b606482015260840161093e565b6001600160a01b03811660009081526007602052604090205460ff1615610c6a5760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c7265616479206578636c756465640000000000000000604482015260640161093e565b600854606411610cbc5760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000604482015260640161093e565b6001600160a01b03811660009081526003602052604090205415610d16576001600160a01b038116600090815260036020526040902054610cfc906109d2565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff1615610db957506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461090e906109d2565b6000546001600160a01b03163314610e055760405162461bcd60e51b815260040161093e906128a4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161093e906128a4565b60006010819055601181905560128190556013556015805460ff60a81b19169055565b6000546001600160a01b03163314610ec65760405162461bcd60e51b815260040161093e906128a4565b601554600160b01b900460ff1615610f205760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161093e565b6015805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610f5f5760405162461bcd60e51b815260040161093e906128a4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd291906128d9565b50505050565b6000546001600160a01b031633146110025760405162461bcd60e51b815260040161093e906128a4565b60158054911515600160a81b0260ff60a81b19909216919091179055565b6060600e805461087a9061286a565b600061090a33846109c385604051806060016040528060258152602001612a59602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061176d565b600061090a33848461152c565b6000546001600160a01b031633146110b55760405162461bcd60e51b815260040161093e906128a4565b804710156111055760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e63650000000000000000604482015260640161093e565b600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561113e573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461116c5760405162461bcd60e51b815260040161093e906128a4565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b85760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146112035760405162461bcd60e51b815260040161093e906128a4565b601855565b6000546001600160a01b031633146112325760405162461bcd60e51b815260040161093e906128a4565b6a03796274caf64c7100000081116112c55760405162461bcd60e51b815260206004820152604a60248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560448201527f7373207468616e20312070657263656e74206f6620696e697469616c20546f74606482015269616c20537570706c792160b01b608482015260a40161093e565b601655565b6000546001600160a01b031633146112f45760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b0381166113595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113de5760405162461bcd60e51b815260040161093e906128a4565b60016010819055601181905560128190556013556015805460ff60a81b1916600160a81b179055565b6001600160a01b0383166114695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b6001600160a01b0382166114ca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115905760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161093e565b6001600160a01b0382166115f25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161093e565b600081116116545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161093e565b601554600160b01b900460ff1615801561167c57506000546001600160a01b03848116911614155b156116c95760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161093e565b60006116d430610d7c565b601854909150811080159081906116f55750601554600160a01b900460ff16155b801561173357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156117485750601554600160a81b900460ff165b1561175b57601854915061175b82611972565b611766858585611b59565b5050505050565b600081848411156117915760405162461bcd60e51b815260040161093e91906126d8565b50600061179e848661290c565b95945050505050565b60008060006117b4611e0e565b90925090506117c382826117ca565b9250505090565b6000610a4f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f90565b600080611819838561291f565b905083811015610a4f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161093e565b6118c860405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006118d383611fbe565b905060006118fc8483602001518460400151856060015186608001516118f76117a7565b61206e565b604080516101608101825282518152602080840151818301528284015182840152606080850151818401526080808601518185015260a09586015195840195909552865160c08401529086015160e083015291850151610100820152908401516101208201529201516101408301525092915050565b6015805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119ba576119ba612932565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190612948565b81600181518110611a6f57611a6f612932565b60200260200101906001600160a01b031690816001600160a01b031681525050611aba307f000000000000000000000000000000000000000000000000000000000000000084611407565b60155460405163791ac94760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263791ac94792611b16928792600092889291909116904290600401612965565b600060405180830381600087803b158015611b3057600080fd5b505af1158015611b44573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b6001600160a01b03831660009081526006602052604090205460ff1680611b9857506001600160a01b03821660009081526006602052604090205460ff165b15611bbb57611bb66000601081905560138190556011819055601255565b611c1e565b601654811115611c1e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161093e565b6000611c298261186b565b9050611c3e8160a0015182610140015161213a565b611c668160400151826060015183608001518460e001518561010001518661012001516121a6565b6001600160a01b03841660009081526007602052604090205460ff168015611ca757506001600160a01b03831660009081526007602052604090205460ff16155b15611cbd57611cb88484848461229a565b611db1565b6001600160a01b03841660009081526007602052604090205460ff16158015611cfe57506001600160a01b03831660009081526007602052604090205460ff165b15611d0e57611cb884848361238e565b6001600160a01b03841660009081526007602052604090205460ff16158015611d5057506001600160a01b03831660009081526007602052604090205460ff16155b15611d6057611cb884848361247d565b6001600160a01b03841660009081526007602052604090205460ff168015611da057506001600160a01b03831660009081526007602052604090205460ff165b15611db157611db1848484846124d7565b6001600160a01b03841660009081526006602052604090205460ff1680611df057506001600160a01b03831660009081526006602052604090205460ff165b15610fd257610fd26001601081905560138190556012819055601155565b600a546009546000918291825b600854811015611f6057826003600060088481548110611e3d57611e3d612932565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ea85750816004600060088481548110611e8157611e81612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ebe57600a54600954945094505050509091565b611f046003600060088481548110611ed857611ed8612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061259e565b9250611f4c6004600060088481548110611f2057611f20612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061259e565b915080611f58816129d6565b915050611e1b565b50600954600a54611f70916117ca565b821015611f8757600a546009549350935050509091565b90939092509050565b60008183611fb15760405162461bcd60e51b815260040161093e91906126d8565b50600061179e84866129ef565b611ff06040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000611ffb836125e0565b9050600061200884612602565b905060006120158561261e565b905060006120228661263a565b9050600061203e82612038858188818d8c61259e565b9061259e565b6040805160a081018252918252602082019690965294850193909352606084019190915260808301525092915050565b6120a76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006120b38884612656565b905060006120c18885612656565b905060006120cf8886612656565b905060006120dd8887612656565b905060006120eb8888612656565b9050600061210183612038868186818c8c61259e565b6040805160c08101825297885260208801919091528601949094526060850192909252608084015260a083015250979650505050505050565b30600090815260036020526040902054612154908361180c565b3060009081526003602090815260408083209390935560079052205460ff161561113e5730600090815260046020526040902054612192908261180c565b306000908152600460205260409020555050565b6121bf8561203888600a5461259e90919063ffffffff16565b600a55600b546121cf908461180c565b600b556009546121df908361259e565b600955600c546121ef908361180c565b600c556014546001600160a01b0316600090815260036020526040902054612217908561180c565b601480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615612292576014546001600160a01b0316600090815260046020526040902054612276908261180c565b6014546001600160a01b03166000908152600460205260409020555b505050505050565b6001600160a01b0384166000908152600460205260409020546122bd908361259e565b6001600160a01b03851660009081526004602090815260408083209390935583516003909152919020546122f09161259e565b6001600160a01b03808616600090815260036020908152604080832094909455840151918616815291909120546123269161180c565b6001600160a01b03808516600081815260036020526040908190209390935560c084015192519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161238091815260200190565b60405180910390a350505050565b80516001600160a01b0384166000908152600360205260409020546123b29161259e565b6001600160a01b0380851660009081526003602090815260408083209490945560c085015192861682526004905291909120546123ee9161180c565b6001600160a01b038316600090815260046020908152604080832093909355838101516003909152919020546124239161180c565b6001600160a01b03808416600081815260036020526040908190209390935560c084015192519092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161151f91815260200190565b80516001600160a01b0384166000908152600360205260409020546124a19161259e565b6001600160a01b03808516600090815260036020908152604080832094909455840151918516815291909120546124239161180c565b6001600160a01b0384166000908152600460205260409020546124fa908361259e565b6001600160a01b038516600090815260046020908152604080832093909355835160039091529190205461252d9161259e565b6001600160a01b0380861660009081526003602090815260408083209490945560c085015192871682526004905291909120546125699161180c565b6001600160a01b038416600090815260046020908152604080832093909355838101516003909152919020546123269161180c565b6000610a4f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061176d565b600061090e60646125fc6010548561265690919063ffffffff16565b906117ca565b600061090e60646125fc6011548561265690919063ffffffff16565b600061090e60646125fc6012548561265690919063ffffffff16565b600061090e60646125fc6013548561265690919063ffffffff16565b6000826000036126685750600061090e565b60006126748385612a11565b90508261268185836129ef565b14610a4f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161093e565b600060208083528351808285015260005b81811015612705578581018301518582016040015282016126e9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273b57600080fd5b50565b6000806040838503121561275157600080fd5b823561275c81612726565b946020939093013593505050565b60006020828403121561277c57600080fd5b8135610a4f81612726565b60008060006060848603121561279c57600080fd5b83356127a781612726565b925060208401356127b781612726565b929592945050506040919091013590565b6000602082840312156127da57600080fd5b5035919050565b801515811461273b57600080fd5b6000806040838503121561280257600080fd5b823591506020830135612814816127e1565b809150509250929050565b60006020828403121561283157600080fd5b8135610a4f816127e1565b6000806040838503121561284f57600080fd5b823561285a81612726565b9150602083013561281481612726565b600181811c9082168061287e57607f821691505b60208210810361289e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156128eb57600080fd5b8151610a4f816127e1565b634e487b7160e01b600052601160045260246000fd5b8181038181111561090e5761090e6128f6565b8082018082111561090e5761090e6128f6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561295a57600080fd5b8151610a4f81612726565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129b55784516001600160a01b031683529383019391830191600101612990565b50506001600160a01b03969096166060850152505050608001529392505050565b6000600182016129e8576129e86128f6565b5060010190565b600082612a0c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2b57612a2b6128f6565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122079694e10cf145384955ebfd4d35bfc32c0084b6454d45883c2acc2e809de503164736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102815760003560e01c806376b851ca1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b37146107b5578063ec0c9d4d146107d5578063ec28438a146107f5578063f2fde38b14610815578063f709594514610835578063ffc786351461085657600080fd5b8063adbede72146106ee578063b8d36b5014610703578063c0b0fda214610723578063c5254f4014610739578063c730b8a414610759578063dd62ed3e1461076f57600080fd5b80638c8f8c04116101135780638c8f8c041461063b5780638da5cb5b1461065b5780638ff67c361461067957806395d89b4114610699578063a457c2d7146106ae578063a9059cbb146106ce57600080fd5b806376b851ca146105a05780637d1db4a5146105c157806382247ec0146105d757806388f82020146105ed5780638a8c523c1461062657600080fd5b80633206b4aa116101f357806352390c02116101ac57806352390c02146104e75780635342acb41461050757806370a082311461054057806370c668c814610560578063715018a614610576578063741af87f1461058b57600080fd5b80633206b4aa1461042857806338e2f22f1461043e5780633950935114610453578063437823ec146104735780634549b0391461049357806349bd5a5e146104b357600080fd5b80631694505e116102455780631694505e1461035e57806318160ddd1461039257806323b872dd146103b15780632d838119146103d1578063313ce567146103f1578063317653e01461041357600080fd5b806301ba031f1461028d57806306486014146102ca57806306fdde03146102ea578063095ea7b31461030c5780631270863d1461033c57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506014546102ad906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d657600080fd5b506015546102ad906001600160a01b031681565b3480156102f657600080fd5b506102ff61086b565b6040516102c191906126d8565b34801561031857600080fd5b5061032c61032736600461273e565b6108fd565b60405190151581526020016102c1565b34801561034857600080fd5b5061035c61035736600461276a565b610914565b005b34801561036a57600080fd5b506102ad7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561039e57600080fd5b506009545b6040519081526020016102c1565b3480156103bd57600080fd5b5061032c6103cc366004612787565b610969565b3480156103dd57600080fd5b506103a36103ec3660046127c8565b6109d2565b3480156103fd57600080fd5b50600f5460405160ff90911681526020016102c1565b34801561041f57600080fd5b50600c546103a3565b34801561043457600080fd5b506103a360105481565b34801561044a57600080fd5b506018546103a3565b34801561045f57600080fd5b5061032c61046e36600461273e565b610a56565b34801561047f57600080fd5b5061035c61048e36600461276a565b610a8c565b34801561049f57600080fd5b506103a36104ae3660046127ef565b610ada565b3480156104bf57600080fd5b506102ad7f00000000000000000000000041e47d20d5de2d606048a19d94cb9193072efc5681565b3480156104f357600080fd5b5061035c61050236600461276a565b610b60565b34801561051357600080fd5b5061032c61052236600461276a565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054c57600080fd5b506103a361055b36600461276a565b610d7c565b34801561056c57600080fd5b506103a360125481565b34801561058257600080fd5b5061035c610ddb565b34801561059757600080fd5b5061035c610e4f565b3480156105ac57600080fd5b5060155461032c90600160a81b900460ff1681565b3480156105cd57600080fd5b506103a360165481565b3480156105e357600080fd5b506103a360175481565b3480156105f957600080fd5b5061032c61060836600461276a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063257600080fd5b5061035c610e9c565b34801561064757600080fd5b5061035c610656366004612787565b610f35565b34801561066757600080fd5b506000546001600160a01b03166102ad565b34801561068557600080fd5b5061035c61069436600461281f565b610fd8565b3480156106a557600080fd5b506102ff611020565b3480156106ba57600080fd5b5061032c6106c936600461273e565b61102f565b3480156106da57600080fd5b5061032c6106e936600461273e565b61107e565b3480156106fa57600080fd5b50600b546103a3565b34801561070f57600080fd5b5061035c61071e3660046127c8565b61108b565b34801561072f57600080fd5b506103a360115481565b34801561074557600080fd5b5061035c61075436600461276a565b611142565b34801561076557600080fd5b506103a360135481565b34801561077b57600080fd5b506103a361078a36600461283c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107c157600080fd5b5061035c6107d036600461276a565b61118e565b3480156107e157600080fd5b5061035c6107f03660046127c8565b6111d9565b34801561080157600080fd5b5061035c6108103660046127c8565b611208565b34801561082157600080fd5b5061035c61083036600461276a565b6112ca565b34801561084157600080fd5b5060155461032c90600160b01b900460ff1681565b34801561086257600080fd5b5061035c6113b4565b6060600d805461087a9061286a565b80601f01602080910402602001604051908101604052809291908181526020018280546108a69061286a565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b600061090a338484611407565b5060015b92915050565b6000546001600160a01b031633146109475760405162461bcd60e51b815260040161093e906128a4565b60405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600061097684848461152c565b6109c884336109c385604051806060016040528060288152602001612a31602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061176d565b611407565b5060019392505050565b6000600a54821115610a395760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161093e565b6000610a436117a7565b9050610a4f83826117ca565b9392505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161090a9185906109c3908661180c565b6000546001600160a01b03163314610ab65760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115610b2e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161093e565b81610b48576000610b3e8461186b565b51915061090e9050565b6000610b538461186b565b60200151915061090e9050565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610c015760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b606482015260840161093e565b6001600160a01b03811660009081526007602052604090205460ff1615610c6a5760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c7265616479206578636c756465640000000000000000604482015260640161093e565b600854606411610cbc5760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000604482015260640161093e565b6001600160a01b03811660009081526003602052604090205415610d16576001600160a01b038116600090815260036020526040902054610cfc906109d2565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff1615610db957506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461090e906109d2565b6000546001600160a01b03163314610e055760405162461bcd60e51b815260040161093e906128a4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161093e906128a4565b60006010819055601181905560128190556013556015805460ff60a81b19169055565b6000546001600160a01b03163314610ec65760405162461bcd60e51b815260040161093e906128a4565b601554600160b01b900460ff1615610f205760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161093e565b6015805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610f5f5760405162461bcd60e51b815260040161093e906128a4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd291906128d9565b50505050565b6000546001600160a01b031633146110025760405162461bcd60e51b815260040161093e906128a4565b60158054911515600160a81b0260ff60a81b19909216919091179055565b6060600e805461087a9061286a565b600061090a33846109c385604051806060016040528060258152602001612a59602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061176d565b600061090a33848461152c565b6000546001600160a01b031633146110b55760405162461bcd60e51b815260040161093e906128a4565b804710156111055760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e63650000000000000000604482015260640161093e565b600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561113e573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461116c5760405162461bcd60e51b815260040161093e906128a4565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b85760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146112035760405162461bcd60e51b815260040161093e906128a4565b601855565b6000546001600160a01b031633146112325760405162461bcd60e51b815260040161093e906128a4565b6a03796274caf64c7100000081116112c55760405162461bcd60e51b815260206004820152604a60248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560448201527f7373207468616e20312070657263656e74206f6620696e697469616c20546f74606482015269616c20537570706c792160b01b608482015260a40161093e565b601655565b6000546001600160a01b031633146112f45760405162461bcd60e51b815260040161093e906128a4565b6001600160a01b0381166113595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113de5760405162461bcd60e51b815260040161093e906128a4565b60016010819055601181905560128190556013556015805460ff60a81b1916600160a81b179055565b6001600160a01b0383166114695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b6001600160a01b0382166114ca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115905760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161093e565b6001600160a01b0382166115f25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161093e565b600081116116545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161093e565b601554600160b01b900460ff1615801561167c57506000546001600160a01b03848116911614155b156116c95760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161093e565b60006116d430610d7c565b601854909150811080159081906116f55750601554600160a01b900460ff16155b801561173357507f00000000000000000000000041e47d20d5de2d606048a19d94cb9193072efc566001600160a01b0316856001600160a01b031614155b80156117485750601554600160a81b900460ff165b1561175b57601854915061175b82611972565b611766858585611b59565b5050505050565b600081848411156117915760405162461bcd60e51b815260040161093e91906126d8565b50600061179e848661290c565b95945050505050565b60008060006117b4611e0e565b90925090506117c382826117ca565b9250505090565b6000610a4f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f90565b600080611819838561291f565b905083811015610a4f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161093e565b6118c860405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006118d383611fbe565b905060006118fc8483602001518460400151856060015186608001516118f76117a7565b61206e565b604080516101608101825282518152602080840151818301528284015182840152606080850151818401526080808601518185015260a09586015195840195909552865160c08401529086015160e083015291850151610100820152908401516101208201529201516101408301525092915050565b6015805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119ba576119ba612932565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190612948565b81600181518110611a6f57611a6f612932565b60200260200101906001600160a01b031690816001600160a01b031681525050611aba307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611407565b60155460405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263791ac94792611b16928792600092889291909116904290600401612965565b600060405180830381600087803b158015611b3057600080fd5b505af1158015611b44573d6000803e3d6000fd5b50506015805460ff60a01b1916905550505050565b6001600160a01b03831660009081526006602052604090205460ff1680611b9857506001600160a01b03821660009081526006602052604090205460ff165b15611bbb57611bb66000601081905560138190556011819055601255565b611c1e565b601654811115611c1e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161093e565b6000611c298261186b565b9050611c3e8160a0015182610140015161213a565b611c668160400151826060015183608001518460e001518561010001518661012001516121a6565b6001600160a01b03841660009081526007602052604090205460ff168015611ca757506001600160a01b03831660009081526007602052604090205460ff16155b15611cbd57611cb88484848461229a565b611db1565b6001600160a01b03841660009081526007602052604090205460ff16158015611cfe57506001600160a01b03831660009081526007602052604090205460ff165b15611d0e57611cb884848361238e565b6001600160a01b03841660009081526007602052604090205460ff16158015611d5057506001600160a01b03831660009081526007602052604090205460ff16155b15611d6057611cb884848361247d565b6001600160a01b03841660009081526007602052604090205460ff168015611da057506001600160a01b03831660009081526007602052604090205460ff165b15611db157611db1848484846124d7565b6001600160a01b03841660009081526006602052604090205460ff1680611df057506001600160a01b03831660009081526006602052604090205460ff165b15610fd257610fd26001601081905560138190556012819055601155565b600a546009546000918291825b600854811015611f6057826003600060088481548110611e3d57611e3d612932565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ea85750816004600060088481548110611e8157611e81612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ebe57600a54600954945094505050509091565b611f046003600060088481548110611ed857611ed8612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061259e565b9250611f4c6004600060088481548110611f2057611f20612932565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061259e565b915080611f58816129d6565b915050611e1b565b50600954600a54611f70916117ca565b821015611f8757600a546009549350935050509091565b90939092509050565b60008183611fb15760405162461bcd60e51b815260040161093e91906126d8565b50600061179e84866129ef565b611ff06040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000611ffb836125e0565b9050600061200884612602565b905060006120158561261e565b905060006120228661263a565b9050600061203e82612038858188818d8c61259e565b9061259e565b6040805160a081018252918252602082019690965294850193909352606084019190915260808301525092915050565b6120a76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006120b38884612656565b905060006120c18885612656565b905060006120cf8886612656565b905060006120dd8887612656565b905060006120eb8888612656565b9050600061210183612038868186818c8c61259e565b6040805160c08101825297885260208801919091528601949094526060850192909252608084015260a083015250979650505050505050565b30600090815260036020526040902054612154908361180c565b3060009081526003602090815260408083209390935560079052205460ff161561113e5730600090815260046020526040902054612192908261180c565b306000908152600460205260409020555050565b6121bf8561203888600a5461259e90919063ffffffff16565b600a55600b546121cf908461180c565b600b556009546121df908361259e565b600955600c546121ef908361180c565b600c556014546001600160a01b0316600090815260036020526040902054612217908561180c565b601480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615612292576014546001600160a01b0316600090815260046020526040902054612276908261180c565b6014546001600160a01b03166000908152600460205260409020555b505050505050565b6001600160a01b0384166000908152600460205260409020546122bd908361259e565b6001600160a01b03851660009081526004602090815260408083209390935583516003909152919020546122f09161259e565b6001600160a01b03808616600090815260036020908152604080832094909455840151918616815291909120546123269161180c565b6001600160a01b03808516600081815260036020526040908190209390935560c084015192519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161238091815260200190565b60405180910390a350505050565b80516001600160a01b0384166000908152600360205260409020546123b29161259e565b6001600160a01b0380851660009081526003602090815260408083209490945560c085015192861682526004905291909120546123ee9161180c565b6001600160a01b038316600090815260046020908152604080832093909355838101516003909152919020546124239161180c565b6001600160a01b03808416600081815260036020526040908190209390935560c084015192519092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161151f91815260200190565b80516001600160a01b0384166000908152600360205260409020546124a19161259e565b6001600160a01b03808516600090815260036020908152604080832094909455840151918516815291909120546124239161180c565b6001600160a01b0384166000908152600460205260409020546124fa908361259e565b6001600160a01b038516600090815260046020908152604080832093909355835160039091529190205461252d9161259e565b6001600160a01b0380861660009081526003602090815260408083209490945560c085015192871682526004905291909120546125699161180c565b6001600160a01b038416600090815260046020908152604080832093909355838101516003909152919020546123269161180c565b6000610a4f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061176d565b600061090e60646125fc6010548561265690919063ffffffff16565b906117ca565b600061090e60646125fc6011548561265690919063ffffffff16565b600061090e60646125fc6012548561265690919063ffffffff16565b600061090e60646125fc6013548561265690919063ffffffff16565b6000826000036126685750600061090e565b60006126748385612a11565b90508261268185836129ef565b14610a4f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161093e565b600060208083528351808285015260005b81811015612705578581018301518582016040015282016126e9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273b57600080fd5b50565b6000806040838503121561275157600080fd5b823561275c81612726565b946020939093013593505050565b60006020828403121561277c57600080fd5b8135610a4f81612726565b60008060006060848603121561279c57600080fd5b83356127a781612726565b925060208401356127b781612726565b929592945050506040919091013590565b6000602082840312156127da57600080fd5b5035919050565b801515811461273b57600080fd5b6000806040838503121561280257600080fd5b823591506020830135612814816127e1565b809150509250929050565b60006020828403121561283157600080fd5b8135610a4f816127e1565b6000806040838503121561284f57600080fd5b823561285a81612726565b9150602083013561281481612726565b600181811c9082168061287e57607f821691505b60208210810361289e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156128eb57600080fd5b8151610a4f816127e1565b634e487b7160e01b600052601160045260246000fd5b8181038181111561090e5761090e6128f6565b8082018082111561090e5761090e6128f6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561295a57600080fd5b8151610a4f81612726565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129b55784516001600160a01b031683529383019391830191600101612990565b50506001600160a01b03969096166060850152505050608001529392505050565b6000600182016129e8576129e86128f6565b5060010190565b600082612a0c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2b57612a2b6128f6565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122079694e10cf145384955ebfd4d35bfc32c0084b6454d45883c2acc2e809de503164736f6c63430008100033
Deployed Bytecode Sourcemap
24949:19818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26767:83;;;;;;;;;;-1:-1:-1;26767:83:0;;;;-1:-1:-1;;;;;26767:83:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;26767:83:0;;;;;;;;26857:81;;;;;;;;;;-1:-1:-1;26857:81:0;;;;-1:-1:-1;;;;;26857:81:0;;;28290:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29202:161::-;;;;;;;;;;-1:-1:-1;29202:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;29202:161:0;1231:187:1;43126:112:0;;;;;;;;;;-1:-1:-1;43126:112:0;;;;;:::i;:::-;;:::i;:::-;;26947:51;;;;;;;;;;;;;;;28567:95;;;;;;;;;;-1:-1:-1;28647:7:0;;28567:95;;;2056:25:1;;;2044:2;2029:18;28567:95:0;1910:177:1;29371:313:0;;;;;;;;;;-1:-1:-1;29371:313:0;;;;;:::i;:::-;;:::i;31292:253::-;;;;;;;;;;-1:-1:-1;31292:253:0;;;;;:::i;:::-;;:::i;28476:83::-;;;;;;;;;;-1:-1:-1;28542:9:0;;28476:83;;28542:9;;;;2880:36:1;;2868:2;2853:18;28476:83:0;2738:184:1;30438:95:0;;;;;;;;;;-1:-1:-1;30511:14:0;;30438:95;;26599:33;;;;;;;;;;;;;;;;30701:129;;;;;;;;;;-1:-1:-1;30791:31:0;;30701:129;;29692:218;;;;;;;;;;-1:-1:-1;29692:218:0;;;;;:::i;:::-;;:::i;42451:111::-;;;;;;;;;;-1:-1:-1;42451:111:0;;;;;:::i;:::-;;:::i;30838:446::-;;;;;;;;;;-1:-1:-1;30838:446:0;;;;;:::i;:::-;;:::i;27005:38::-;;;;;;;;;;;;;;;31553:512;;;;;;;;;;-1:-1:-1;31553:512:0;;;;;:::i;:::-;;:::i;37024:123::-;;;;;;;;;;-1:-1:-1;37024:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;37112:27:0;37088:4;37112:27;;;:18;:27;;;;;;;;;37024:123;28670:198;;;;;;;;;;-1:-1:-1;28670:198:0;;;;;:::i;:::-;;:::i;26677:37::-;;;;;;;;;;;;;;;;16344:148;;;;;;;;;;;;;:::i;42906:212::-;;;;;;;;;;;;;:::i;27090:41::-;;;;;;;;;;-1:-1:-1;27090:41:0;;;;-1:-1:-1;;;27090:41:0;;;;;;27186:48;;;;;;;;;;;;;;;;27257:46;;;;;;;;;;;;;;;;30195:120;;;;;;;;;;-1:-1:-1;30195:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30287:20:0;30263:4;30287:20;;;:11;:20;;;;;;;;;30195:120;43686:147;;;;;;;;;;;;;:::i;44595:167::-;;;;;;;;;;-1:-1:-1;44595:167:0;;;;;:::i;:::-;;:::i;15708:79::-;;;;;;;;;;-1:-1:-1;15746:7:0;15773:6;-1:-1:-1;;;;;15773:6:0;15708:79;;43841:118;;;;;;;;;;-1:-1:-1;43841:118:0;;;;;:::i;:::-;;:::i;28381:87::-;;;;;;;;;;;;;:::i;29918:269::-;;;;;;;;;;-1:-1:-1;29918:269:0;;;;;:::i;:::-;;:::i;28876:167::-;;;;;;;;;;-1:-1:-1;28876:167:0;;;;;:::i;:::-;;:::i;30323:107::-;;;;;;;;;;-1:-1:-1;30402:20:0;;30323:107;;44278:206;;;;;;;;;;-1:-1:-1;44278:206:0;;;;;:::i;:::-;;:::i;26641:27::-;;;;;;;;;;;;;;;;43246:127;;;;;;;;;;-1:-1:-1;43246:127:0;;;;;:::i;:::-;;:::i;26723:35::-;;;;;;;;;;;;;;;;29051:143;;;;;;;;;;-1:-1:-1;29051:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29159:18:0;;;29132:7;29159:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29051:143;42570:110;;;;;;;;;;-1:-1:-1;42570:110:0;;;;;:::i;:::-;;:::i;44034:148::-;;;;;;;;;;-1:-1:-1;44034:148:0;;;;;:::i;:::-;;:::i;43381:297::-;;;;;;;;;;-1:-1:-1;43381:297:0;;;;;:::i;:::-;;:::i;16647:244::-;;;;;;;;;;-1:-1:-1;16647:244:0;;;;;:::i;:::-;;:::i;27138:35::-;;;;;;;;;;-1:-1:-1;27138:35:0;;;;-1:-1:-1;;;27138:35:0;;;;;;42688:210;;;;;;;;;;;;;:::i;28290:83::-;28327:13;28360:5;28353:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28290:83;:::o;29202:161::-;29277:4;29294:39;8210:10;29317:7;29326:6;29294:8;:39::i;:::-;-1:-1:-1;29351:4:0;29202:161;;;;;:::o;43126:112::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;;;;;;;;;43197:21:::1;:33:::0;;-1:-1:-1;;;;;;43197:33:0::1;-1:-1:-1::0;;;;;43197:33:0;;;::::1;::::0;;;::::1;::::0;;43126:112::o;29371:313::-;29469:4;29486:36;29496:6;29504:9;29515:6;29486:9;:36::i;:::-;29533:121;29542:6;8210:10;29564:89;29602:6;29564:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29564:19:0;;;;;;:11;:19;;;;;;;;8210:10;29564:33;;;;;;;;;;:37;:89::i;:::-;29533:8;:121::i;:::-;-1:-1:-1;29672:4:0;29371:313;;;;;:::o;31292:253::-;31358:7;31397;;31386;:18;;31378:73;;;;-1:-1:-1;;;31378:73:0;;4951:2:1;31378:73:0;;;4933:21:1;4990:2;4970:18;;;4963:30;5029:34;5009:18;;;5002:62;-1:-1:-1;;;5080:18:1;;;5073:40;5130:19;;31378:73:0;4749:406:1;31378:73:0;31462:19;31485:10;:8;:10::i;:::-;31462:33;-1:-1:-1;31513:24:0;:7;31462:33;31513:11;:24::i;:::-;31506:31;31292:253;-1:-1:-1;;;31292:253:0:o;29692:218::-;8210:10;29780:4;29829:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29829:34:0;;;;;;;;;;29780:4;;29797:83;;29820:7;;29829:50;;29868:10;29829:38;:50::i;42451:111::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42520:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;42520:34:0::1;42550:4;42520:34;::::0;;42451:111::o;30838:446::-;30928:7;30967;;30956;:18;;30948:62;;;;-1:-1:-1;;;30948:62:0;;5362:2:1;30948:62:0;;;5344:21:1;5401:2;5381:18;;;5374:30;5440:33;5420:18;;;5413:61;5491:18;;30948:62:0;5160:355:1;30948:62:0;31026:17;31021:256;;31060:15;31078:19;31089:7;31078:10;:19::i;:::-;:27;;-1:-1:-1;31120:14:0;;-1:-1:-1;31120:14:0;31021:256;31167:23;31193:19;31204:7;31193:10;:19::i;:::-;:35;;;;-1:-1:-1;31243:22:0;;-1:-1:-1;31243:22:0;31553:512;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31635:53:0;::::1;31646:42;31635:53:::0;31627:100:::1;;;::::0;-1:-1:-1;;;31627:100:0;;5722:2:1;31627:100:0::1;::::0;::::1;5704:21:1::0;5761:2;5741:18;;;5734:30;5800:34;5780:18;;;5773:62;-1:-1:-1;;;5851:18:1;;;5844:32;5893:19;;31627:100:0::1;5520:398:1::0;31627:100:0::1;-1:-1:-1::0;;;;;31747:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31746:21;31738:58;;;::::0;-1:-1:-1;;;31738:58:0;;6125:2:1;31738:58:0::1;::::0;::::1;6107:21:1::0;6164:2;6144:18;;;6137:30;6203:26;6183:18;;;6176:54;6247:18;;31738:58:0::1;5923:348:1::0;31738:58:0::1;31815:9;:16:::0;31834:3:::1;-1:-1:-1::0;31807:60:0::1;;;::::0;-1:-1:-1;;;31807:60:0;;6478:2:1;31807:60:0::1;::::0;::::1;6460:21:1::0;6517:2;6497:18;;;6490:30;6556:27;6536:18;;;6529:55;6601:18;;31807:60:0::1;6276:349:1::0;31807:60:0::1;-1:-1:-1::0;;;;;31881:16:0;::::1;31900:1;31881:16:::0;;;:7:::1;:16;::::0;;;;;:20;31878:108:::1;;-1:-1:-1::0;;;;;31957:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31937:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31878:108:::1;-1:-1:-1::0;;;;;31996:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31996:27:0::1;32019:4;31996:27:::0;;::::1;::::0;;;32034:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32034:23:0::1;::::0;;::::1;::::0;;31553:512::o;28670:198::-;-1:-1:-1;;;;;28760:20:0;;28736:7;28760:20;;;:11;:20;;;;;;;;28756:49;;;-1:-1:-1;;;;;;28789:16:0;;;;;:7;:16;;;;;;;28670:198::o;28756:49::-;-1:-1:-1;;;;;28843:16:0;;;;;;:7;:16;;;;;;28823:37;;:19;:37::i;16344:148::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;16451:1:::1;16435:6:::0;;16414:40:::1;::::0;-1:-1:-1;;;;;16435:6:0;;::::1;::::0;16414:40:::1;::::0;16451:1;;16414:40:::1;16482:1;16465:19:::0;;-1:-1:-1;;;;;;16465:19:0::1;::::0;;16344:148::o;42906:212::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;42981:1:::1;42964:14;:18:::0;;;42993:8:::1;:12:::0;;;43016:18:::1;:22:::0;;;43049:16:::1;:20:::0;43080:22:::1;:30:::0;;-1:-1:-1;;;;43080:30:0::1;::::0;;42906:212::o;43686:147::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;43748:15:::1;::::0;-1:-1:-1;;;43748:15:0;::::1;;;43747:16;43739:53;;;::::0;-1:-1:-1;;;43739:53:0;;6832:2:1;43739:53:0::1;::::0;::::1;6814:21:1::0;6871:2;6851:18;;;6844:30;6910:26;6890:18;;;6883:54;6954:18;;43739:53:0::1;6630:348:1::0;43739:53:0::1;43803:15;:22:::0;;-1:-1:-1;;;;43803:22:0::1;-1:-1:-1::0;;;43803:22:0::1;::::0;;43686:147::o;44595:167::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;44713:41:::1;::::0;-1:-1:-1;;;44713:41:0;;-1:-1:-1;;;;;7175:32:1;;;44713:41:0::1;::::0;::::1;7157:51:1::0;7224:18;;;7217:34;;;44713:27:0;::::1;::::0;::::1;::::0;7130:18:1;;44713:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44595:167:::0;;;:::o;43841:118::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;43918:22:::1;:33:::0;;;::::1;;-1:-1:-1::0;;;43918:33:0::1;-1:-1:-1::0;;;;43918:33:0;;::::1;::::0;;;::::1;::::0;;43841:118::o;28381:87::-;28420:13;28453:7;28446:14;;;;;:::i;29918:269::-;30011:4;30028:129;8210:10;30051:7;30060:96;30099:15;30060:96;;;;;;;;;;;;;;;;;8210:10;30060:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30060:34:0;;;;;;;;;;;;:38;:96::i;28876:167::-;28954:4;28971:42;8210:10;28995:9;29006:6;28971:9;:42::i;44278:206::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;44391:9:::1;44366:21;:34;;44358:71;;;::::0;-1:-1:-1;;;44358:71:0;;7714:2:1;44358:71:0::1;::::0;::::1;7696:21:1::0;7753:2;7733:18;;;7726:30;7792:26;7772:18;;;7765:54;7836:18;;44358:71:0::1;7512:348:1::0;44358:71:0::1;15746:7:::0;15773:6;;44440:36:::1;::::0;-1:-1:-1;;;;;15773:6:0;;;;44440:36;::::1;;;::::0;44466:9;;44440:36;15746:7;44440:36;44466:9;15773:6;44440:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44278:206:::0;:::o;43246:127::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;43330:23:::1;:35:::0;;-1:-1:-1;;;;;;43330:35:0::1;-1:-1:-1::0;;;;;43330:35:0;;;::::1;::::0;;;::::1;::::0;;43246:127::o;42570:110::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42637:27:0::1;42667:5;42637:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;42637:35:0::1;::::0;;42570:110::o;44034:148::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;44129:31:::1;:45:::0;44034:148::o;43381:297::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;43516:20:::1;43484:29;:52;43476:139;;;::::0;-1:-1:-1;;;43476:139:0;;8067:2:1;43476:139:0::1;::::0;::::1;8049:21:1::0;8106:2;8086:18;;;8079:30;8145:34;8125:18;;;8118:62;8216:34;8196:18;;;8189:62;-1:-1:-1;;;8267:19:1;;;8260:41;8318:19;;43476:139:0::1;7865:478:1::0;43476:139:0::1;43626:12;:44:::0;43381:297::o;16647:244::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16736:22:0;::::1;16728:73;;;::::0;-1:-1:-1;;;16728:73:0;;8550:2:1;16728:73:0::1;::::0;::::1;8532:21:1::0;8589:2;8569:18;;;8562:30;8628:34;8608:18;;;8601:62;-1:-1:-1;;;8679:18:1;;;8672:36;8725:19;;16728:73:0::1;8348:402:1::0;16728:73:0::1;16838:6;::::0;;16817:38:::1;::::0;-1:-1:-1;;;;;16817:38:0;;::::1;::::0;16838:6;::::1;::::0;16817:38:::1;::::0;::::1;16866:6;:17:::0;;-1:-1:-1;;;;;;16866:17:0::1;-1:-1:-1::0;;;;;16866:17:0;;;::::1;::::0;;;::::1;::::0;;16647:244::o;42688:210::-;15920:6;;-1:-1:-1;;;;;15920:6:0;8210:10;15920:22;15912:67;;;;-1:-1:-1;;;15912:67:0;;;;;;;:::i;:::-;42762:1:::1;42745:14;:18:::0;;;42774:8:::1;:12:::0;;;42797:18:::1;:22:::0;;;42830:16:::1;:20:::0;42861:22:::1;:29:::0;;-1:-1:-1;;;;42861:29:0::1;-1:-1:-1::0;;;42861:29:0::1;::::0;;42688:210::o;37155:329::-;-1:-1:-1;;;;;37248:19:0;;37240:68;;;;-1:-1:-1;;;37240:68:0;;8957:2:1;37240:68:0;;;8939:21:1;8996:2;8976:18;;;8969:30;9035:34;9015:18;;;9008:62;-1:-1:-1;;;9086:18:1;;;9079:34;9130:19;;37240:68:0;8755:400:1;37240:68:0;-1:-1:-1;;;;;37327:21:0;;37319:68;;;;-1:-1:-1;;;37319:68:0;;9362:2:1;37319:68:0;;;9344:21:1;9401:2;9381:18;;;9374:30;9440:34;9420:18;;;9413:62;-1:-1:-1;;;9491:18:1;;;9484:32;9533:19;;37319:68:0;9160:398:1;37319:68:0;-1:-1:-1;;;;;37392:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37444:32;;2056:25:1;;;37444:32:0;;2029:18:1;37444:32:0;;;;;;;;37155:329;;;:::o;37492:1489::-;-1:-1:-1;;;;;37614:18:0;;37606:68;;;;-1:-1:-1;;;37606:68:0;;9765:2:1;37606:68:0;;;9747:21:1;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:35;9939:19;;37606:68:0;9563:401:1;37606:68:0;-1:-1:-1;;;;;37693:16:0;;37685:64;;;;-1:-1:-1;;;37685:64:0;;10171:2:1;37685:64:0;;;10153:21:1;10210:2;10190:18;;;10183:30;10249:34;10229:18;;;10222:62;-1:-1:-1;;;10300:18:1;;;10293:33;10343:19;;37685:64:0;9969:399:1;37685:64:0;37777:1;37768:6;:10;37760:64;;;;-1:-1:-1;;;37760:64:0;;10575:2:1;37760:64:0;;;10557:21:1;10614:2;10594:18;;;10587:30;10653:34;10633:18;;;10626:62;-1:-1:-1;;;10704:18:1;;;10697:39;10753:19;;37760:64:0;10373:405:1;37760:64:0;37927:15;;-1:-1:-1;;;37927:15:0;;;;37926:16;:35;;;;-1:-1:-1;15746:7:0;15773:6;-1:-1:-1;;;;;37946:15:0;;;15773:6;;37946:15;;37926:35;37923:101;;;37978:34;;-1:-1:-1;;;37978:34:0;;10985:2:1;37978:34:0;;;10967:21:1;11024:2;11004:18;;;10997:30;11063:26;11043:18;;;11036:54;11107:18;;37978:34:0;10783:348:1;37923:101:0;38328:28;38359:24;38377:4;38359:9;:24::i;:::-;38445:31;;38328:55;;-1:-1:-1;38421:55:0;;;;;;;38505;;-1:-1:-1;38542:18:0;;-1:-1:-1;;;38542:18:0;;;;38541:19;38505:55;:93;;;;;38585:13;-1:-1:-1;;;;;38577:21:0;:4;-1:-1:-1;;;;;38577:21:0;;;38505:93;:132;;;;-1:-1:-1;38615:22:0;;-1:-1:-1;;;38615:22:0;;;;38505:132;38487:376;;;38687:31;;38664:54;;38806:45;38830:20;38806:23;:45::i;:::-;38941:30;38956:4;38961:2;38964:6;38941:14;:30::i;:::-;37595:1386;;37492:1489;;;:::o;4524:192::-;4610:7;4646:12;4638:6;;;;4630:29;;;;-1:-1:-1;;;4630:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4670:9:0;4682:5;4686:1;4682;:5;:::i;:::-;4670:17;4524:192;-1:-1:-1;;;;;4524:192:0:o;34950:163::-;34991:7;35012:15;35029;35048:19;:17;:19::i;:::-;35011:56;;-1:-1:-1;35011:56:0;-1:-1:-1;35085:20:0;35011:56;;35085:11;:20::i;:::-;35078:27;;;;34950:163;:::o;5922:132::-;5980:7;6007:39;6011:1;6014;6007:39;;;;;;;;;;;;;;;;;:3;:39::i;3621:181::-;3679:7;;3711:5;3715:1;3711;:5;:::i;:::-;3699:17;;3740:1;3735;:6;;3727:46;;;;-1:-1:-1;;;3727:46:0;;11733:2:1;3727:46:0;;;11715:21:1;11772:2;11752:18;;;11745:30;11811:29;11791:18;;;11784:57;11858:18;;3727:46:0;11531:351:1;32862:697:0;32921:19;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32921:19:0;32953:24;32980:20;32992:7;32980:11;:20::i;:::-;32953:47;;33011:24;33038:112;33050:7;33059:3;:18;;;33079:3;:12;;;33093:3;:22;;;33117:3;:20;;;33139:10;:8;:10::i;:::-;33038:11;:112::i;:::-;33170:381;;;;;;;;33197:11;;33170:381;;;33223:19;;;;33170:381;;;;33257:18;;;;33170:381;;;;;33290:12;;;;33170:381;;;;;33317:22;;;;33170:381;;;;;33354:20;;;;33170:381;;;;;;;33389:19;;33170:381;;;;33423:18;;;;33170:381;;;;33456:12;;;;33170:381;;;;33483:22;;;;33170:381;;;;33520:20;;;33170:381;;;;-1:-1:-1;33170:381:0;32862:697;-1:-1:-1;;32862:697:0:o;38990:616::-;27503:18;:25;;-1:-1:-1;;;;27503:25:0;-1:-1:-1;;;27503:25:0;;;39159:16:::1;::::0;;39173:1:::1;39159:16:::0;;;;;::::1;::::0;;-1:-1:-1;;39159:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39159:16:0::1;39135:40;;39204:4;39186;39191:1;39186:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;39186:23:0::1;;;-1:-1:-1::0;;;;;39186:23:0::1;;;::::0;::::1;39230:15;-1:-1:-1::0;;;;;39230:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39220:4;39225:1;39220:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;39220:32:0::1;;;-1:-1:-1::0;;;;;39220:32:0::1;;;::::0;::::1;39265:62;39282:4;39297:15;39315:11;39265:8;:62::i;:::-;39536:21;::::0;39366:232:::1;::::0;-1:-1:-1;;;39366:232:0;;-1:-1:-1;;;;;39366:15:0::1;:66:::0;::::1;::::0;::::1;::::0;:232:::1;::::0;39447:11;;39473:1:::1;::::0;39517:4;;39536:21;;;::::1;::::0;39572:15:::1;::::0;39366:232:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27551:18:0;:26;;-1:-1:-1;;;;27551:26:0;;;-1:-1:-1;;;;38990:616:0:o;39687:1222::-;-1:-1:-1;;;;;39784:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;39814:29:0;;;;;;:18;:29;;;;;;;;39784:59;39781:220;;;39859:14;36758:1;36741:14;:18;;;36770:16;:20;;;36801:8;:12;;;36824:18;:22;36698:156;39859:14;39781:220;;;39932:12;;39922:6;:22;;39914:75;;;;-1:-1:-1;;;39914:75:0;;13594:2:1;39914:75:0;;;13576:21:1;13633:2;13613:18;;;13606:30;13672:34;13652:18;;;13645:62;-1:-1:-1;;;13723:18:1;;;13716:38;13771:19;;39914:75:0;13392:404:1;39914:75:0;40013:22;40038:18;40049:6;40038:10;:18::i;:::-;40013:43;;40067:62;40088:2;:19;;;40109:2;:19;;;40067:20;:62::i;:::-;40140:124;40155:2;:17;;;40174:2;:11;;;40187:2;:21;;;40210:2;:17;;;40229:2;:11;;;40242:2;:21;;;40140:14;:124::i;:::-;-1:-1:-1;;;;;40281:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40305:22:0;;;;;;:11;:22;;;;;;;;40304:23;40281:46;40277:520;;;40344:52;40366:6;40374:9;40385:6;40393:2;40344:21;:52::i;:::-;40277:520;;;-1:-1:-1;;;;;40419:19:0;;;;;;:11;:19;;;;;;;;40418:20;:46;;;;-1:-1:-1;;;;;;40442:22:0;;;;;;:11;:22;;;;;;;;40418:46;40414:383;;;40481:42;40501:6;40509:9;40520:2;40481:19;:42::i;40414:383::-;-1:-1:-1;;;;;40546:19:0;;;;;;:11;:19;;;;;;;;40545:20;:47;;;;-1:-1:-1;;;;;;40570:22:0;;;;;;:11;:22;;;;;;;;40569:23;40545:47;40541:256;;;40609:40;40627:6;40635:9;40646:2;40609:17;:40::i;40541:256::-;-1:-1:-1;;;;;40671:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40694:22:0;;;;;;:11;:22;;;;;;;;40671:45;40667:130;;;40733:52;40755:6;40763:9;40774:6;40782:2;40733:21;:52::i;:::-;-1:-1:-1;;;;;40812:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40842:29:0;;;;;;:18;:29;;;;;;;;40812:59;40809:92;;;40886:15;36923:1;36906:14;:18;;;36935:16;:20;;;36966:18;:22;;;36999:8;:12;36862:154;35121:555;35218:7;;35254;;35171;;;;;35272:289;35296:9;:16;35292:20;;35272:289;;;35362:7;35338;:21;35346:9;35356:1;35346:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35346:12:0;35338:21;;;;;;;;;;;;;:31;;:66;;;35397:7;35373;:21;35381:9;35391:1;35381:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35381:12:0;35373:21;;;;;;;;;;;;;:31;35338:66;35334:97;;;35414:7;;35423;;35406:25;;;;;;;35121:555;;:::o;35334:97::-;35456:34;35468:7;:21;35476:9;35486:1;35476:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35476:12:0;35468:21;;;;;;;;;;;;;35456:7;;:11;:34::i;:::-;35446:44;;35515:34;35527:7;:21;35535:9;35545:1;35535:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35535:12:0;35527:21;;;;;;;;;;;;;35515:7;;:11;:34::i;:::-;35505:44;-1:-1:-1;35314:3:0;;;;:::i;:::-;;;;35272:289;;;-1:-1:-1;35597:7:0;;35585;;:20;;:11;:20::i;:::-;35575:7;:30;35571:61;;;35615:7;;35624;;35607:25;;;;;;35121:555;;:::o;35571:61::-;35651:7;;35660;;-1:-1:-1;35121:555:0;-1:-1:-1;35121:555:0:o;6550:278::-;6636:7;6671:12;6664:5;6656:28;;;;-1:-1:-1;;;6656:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6695:9:0;6707:5;6711:1;6707;:5;:::i;33567:594::-;33627:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33627:20:0;33660:22;33685:31;33708:7;33685:22;:31::i;:::-;33660:56;;33727:16;33746:25;33763:7;33746:16;:25::i;:::-;33727:44;;33782:26;33811:35;33838:7;33811:26;:35::i;:::-;33782:64;;33857:24;33884:33;33909:7;33884:24;:33::i;:::-;33857:60;-1:-1:-1;33928:23:0;33954:87;33857:60;33954:65;34000:18;33954:65;33986:8;33954:65;:7;33966:14;33954:11;:27::i;:::-;:31;;:41::i;:87::-;34059:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34059:94:0;33567:594;-1:-1:-1;;33567:594:0:o;34169:773::-;34346:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34346:20:0;34379:15;34397:24;:7;34409:11;34397;:24::i;:::-;34379:42;-1:-1:-1;34432:22:0;34457:31;:14;34476:11;34457:18;:31::i;:::-;34432:56;-1:-1:-1;34499:16:0;34518:25;:8;34531:11;34518:12;:25::i;:::-;34499:44;-1:-1:-1;34554:26:0;34583:35;:18;34606:11;34583:22;:35::i;:::-;34554:64;-1:-1:-1;34629:24:0;34656:33;:16;34677:11;34656:20;:33::i;:::-;34629:60;-1:-1:-1;34700:23:0;34726:87;34794:18;34726:63;34780:8;34726:63;34629:60;34726:63;:7;34738:14;34726:11;:27::i;:87::-;34831:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34831:103:0;34169:773;-1:-1:-1;;;;;;;34169:773:0:o;35684:302::-;35826:4;35810:22;;;;:7;:22;;;;;;:44;;35837:16;35810:26;:44::i;:::-;35801:4;35785:22;;;;:7;:22;;;;;;;;:69;;;;35868:11;:26;;;;;;35865:113;;;35950:4;35934:22;;;;:7;:22;;;;;;:44;;35961:16;35934:26;:44::i;:::-;35925:4;35909:22;;;;:7;:22;;;;;:69;35684:302;;:::o;32166:688::-;32359:41;32391:8;32359:27;32371:14;32359:7;;:11;;:27;;;;:::i;:41::-;32349:7;:51;32434:20;;:40;;32459:14;32434:24;:40::i;:::-;32411:20;:63;32495:7;;:21;;32507:8;32495:11;:21::i;:::-;32485:7;:31;32544:14;;:28;;32563:8;32544:18;:28::i;:::-;32527:14;:45;32628:23;;-1:-1:-1;;;;;32628:23:0;32620:32;;;;:7;:32;;;;;;:56;;32657:18;32620:36;:56::i;:::-;32593:23;;;-1:-1:-1;;;;;32593:23:0;;;32585:32;;;;:7;:32;;;;;;;;:91;;;;32703:23;;;;;32691:36;;:11;:36;;;;;;;32687:160;;;32787:23;;-1:-1:-1;;;;;32787:23:0;32779:32;;;;:7;:32;;;;;;:56;;32816:18;32779:36;:56::i;:::-;32752:23;;-1:-1:-1;;;;;32752:23:0;32744:32;;;;:7;:32;;;;;:91;32687:160;32166:688;;;;;;:::o;41607:377::-;-1:-1:-1;;;;;41751:15:0;;;;;;:7;:15;;;;;;:28;;41771:7;41751:19;:28::i;:::-;-1:-1:-1;;;;;41733:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41828:10;;41808:7;:15;;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41790:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;41894:18;;;41871;;;;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41850:18:0;;;;;;;:7;:18;;;;;;;:63;;;;41957:18;;;;41929:47;;41850:18;;41929:47;;;;;;;;2056:25:1;;2044:2;2029:18;;1910:177;41929:47:0;;;;;;;;41607:377;;;;:::o;41224:375::-;41369:10;;-1:-1:-1;;;;;41349:15:0;;41369:10;41349:15;;;:7;:15;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41331:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;41435:18;;;;41412;;;;;:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41391:18:0;;;;;;:7;:18;;;;;;;;:63;;;;41509:18;;;;41486:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41465:18:0;;;;;;;:7;:18;;;;;;;:63;;;;41572:18;;;;41544:47;;41465:18;;41544:47;;;;;;;;2056:25:1;;2044:2;2029:18;;1910:177;40917:299:0;41060:10;;-1:-1:-1;;;;;41040:15:0;;41060:10;41040:15;;;:7;:15;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41022:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;41126:18;;;41103;;;;;;;;;;:42;;:22;:42::i;41992:451::-;-1:-1:-1;;;;;42136:15:0;;;;;;:7;:15;;;;;;:28;;42156:7;42136:19;:28::i;:::-;-1:-1:-1;;;;;42118:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42213:10;;42193:7;:15;;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;42175:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;42279:18;;;;42256;;;;;:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;42235:18:0;;;;;;:7;:18;;;;;;;;:63;;;;42353:18;;;;42330:7;:18;;;;;;;:42;;:22;:42::i;4085:136::-;4143:7;4170:43;4174:1;4177;4170:43;;;;;;;;;;;;;;;;;:3;:43::i;35994:168::-;36065:7;36092:62;36138:5;36092:27;36104:14;;36092:7;:11;;:27;;;;:::i;:::-;:31;;:62::i;36170:156::-;36235:7;36262:56;36302:5;36262:21;36274:8;;36262:7;:11;;:21;;;;:::i;36334:176::-;36409:7;36436:66;36486:5;36436:31;36448:18;;36436:7;:11;;:31;;;;:::i;36518:172::-;36591:7;36618:64;36666:5;36618:29;36630:16;;36618:7;:11;;:29;;;;:::i;4975:471::-;5033:7;5278:1;5283;5278:6;5274:47;;-1:-1:-1;5308:1:0;5301:8;;5274:47;5333:9;5345:5;5349:1;5345;:5;:::i;:::-;5333:17;-1:-1:-1;5378:1:0;5369:5;5373:1;5333:17;5369:5;:::i;:::-;:10;5361:56;;;;-1:-1:-1;;;5361:56:0;;14538:2:1;5361:56:0;;;14520:21:1;14577:2;14557:18;;;14550:30;14616:34;14596:18;;;14589:62;-1:-1:-1;;;14667:18:1;;;14660:31;14708:19;;5361:56:0;14336:397:1;222:548;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;830:70;775:131;:::o;911:315::-;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;2092:456::-;2169:6;2177;2185;2238:2;2226:9;2217:7;2213:23;2209:32;2206:52;;;2254:1;2251;2244:12;2206:52;2293:9;2280:23;2312:31;2337:5;2312:31;:::i;:::-;2362:5;-1:-1:-1;2419:2:1;2404:18;;2391:32;2432:33;2391:32;2432:33;:::i;:::-;2092:456;;2484:7;;-1:-1:-1;;;2538:2:1;2523:18;;;;2510:32;;2092:456::o;2553:180::-;2612:6;2665:2;2653:9;2644:7;2640:23;2636:32;2633:52;;;2681:1;2678;2671:12;2633:52;-1:-1:-1;2704:23:1;;2553:180;-1:-1:-1;2553:180:1:o;2927:118::-;3013:5;3006:13;2999:21;2992:5;2989:32;2979:60;;3035:1;3032;3025:12;3050:309;3115:6;3123;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3228:9;3215:23;3205:33;;3288:2;3277:9;3273:18;3260:32;3301:28;3323:5;3301:28;:::i;:::-;3348:5;3338:15;;;3050:309;;;;;:::o;3364:241::-;3420:6;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:28;3569:5;3547:28;:::i;3610:388::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3794:9;3781:23;3813:31;3838:5;3813:31;:::i;:::-;3863:5;-1:-1:-1;3920:2:1;3905:18;;3892:32;3933:33;3892:32;3933:33;:::i;4003:380::-;4082:1;4078:12;;;;4125;;;4146:61;;4200:4;4192:6;4188:17;4178:27;;4146:61;4253:2;4245:6;4242:14;4222:18;4219:38;4216:161;;4299:10;4294:3;4290:20;4287:1;4280:31;4334:4;4331:1;4324:15;4362:4;4359:1;4352:15;4216:161;;4003:380;;;:::o;4388:356::-;4590:2;4572:21;;;4609:18;;;4602:30;4668:34;4663:2;4648:18;;4641:62;4735:2;4720:18;;4388:356::o;7262:245::-;7329:6;7382:2;7370:9;7361:7;7357:23;7353:32;7350:52;;;7398:1;7395;7388:12;7350:52;7430:9;7424:16;7449:28;7471:5;7449:28;:::i;11136:127::-;11197:10;11192:3;11188:20;11185:1;11178:31;11228:4;11225:1;11218:15;11252:4;11249:1;11242:15;11268:128;11335:9;;;11356:11;;;11353:37;;;11370:18;;:::i;11401:125::-;11466:9;;;11487:10;;;11484:36;;;11500:18;;:::i;12019:127::-;12080:10;12075:3;12071:20;12068:1;12061:31;12111:4;12108:1;12101:15;12135:4;12132:1;12125:15;12151:251;12221:6;12274:2;12262:9;12253:7;12249:23;12245:32;12242:52;;;12290:1;12287;12280:12;12242:52;12322:9;12316:16;12341:31;12366:5;12341:31;:::i;12407:980::-;12669:4;12717:3;12706:9;12702:19;12748:6;12737:9;12730:25;12774:2;12812:6;12807:2;12796:9;12792:18;12785:34;12855:3;12850:2;12839:9;12835:18;12828:31;12879:6;12914;12908:13;12945:6;12937;12930:22;12983:3;12972:9;12968:19;12961:26;;13022:2;13014:6;13010:15;12996:29;;13043:1;13053:195;13067:6;13064:1;13061:13;13053:195;;;13132:13;;-1:-1:-1;;;;;13128:39:1;13116:52;;13223:15;;;;13188:12;;;;13164:1;13082:9;13053:195;;;-1:-1:-1;;;;;;;13304:32:1;;;;13299:2;13284:18;;13277:60;-1:-1:-1;;;13368:3:1;13353:19;13346:35;13265:3;12407:980;-1:-1:-1;;;12407:980:1:o;13801:135::-;13840:3;13861:17;;;13858:43;;13881:18;;:::i;:::-;-1:-1:-1;13928:1:1;13917:13;;13801:135::o;13941:217::-;13981:1;14007;13997:132;;14051:10;14046:3;14042:20;14039:1;14032:31;14086:4;14083:1;14076:15;14114:4;14111:1;14104:15;13997:132;-1:-1:-1;14143:9:1;;13941:217::o;14163:168::-;14203:7;14269:1;14265;14261:6;14257:14;14254:1;14251:21;14246:1;14239:9;14232:17;14228:45;14225:71;;;14276:18;;:::i;:::-;-1:-1:-1;14316:9:1;;14163:168::o
Swarm Source
ipfs://79694e10cf145384955ebfd4d35bfc32c0084b6454d45883c2acc2e809de5031
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.