ERC-20
Overview
Max Total Supply
1,000,000,000 Dress
Holders
107
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
935,265.052707033354682975 DressValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GWToken
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; 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); } 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 Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev 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); } } } } // 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 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 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 GWToken is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; 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 = 1000000000 * (10**18); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "TheDress"; string private _symbol = "Dress"; uint8 private _decimals = 18; uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private _burnFee; uint256 private _previousBurnFee = _burnFee; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _marketingFee; uint256 private _previousMarketingFee = _marketingFee; address payable public marketingWallet = payable(0xCdE09b30195afCD4Ba504F8E852D3ABb70Be6E57);// Add marketing wallet here uint256 public sellTaxFee = 0; uint256 public sellBurnFee = 0; uint256 public sellLiquidityFee = 1; uint256 public sellMarketingFee = 1; uint256 public buyTaxFee = 0; uint256 public buyBurnFee = 0; uint256 public buyLiquidityFee = 1; uint256 public buyMarketingFee = 1; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public numTokensSellToAddToLiquidity = 500000 * 10**18; uint256 public _maxTxAmount = 1000000000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Eth uniswap router address //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xF491e7B69E4244ad4002BC14e878a34207E38c29); // 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[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _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 totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } 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); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0 && _burnFee==0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousBurnFee = _burnFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingFee = _previousMarketingFee; } 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(amount > 0, "Transfer amount must be greater than zero"); if (to == uniswapV2Pair) { _liquidityFee = sellLiquidityFee; _marketingFee = sellMarketingFee; _taxFee = sellTaxFee; _burnFee = sellBurnFee; } if (from == uniswapV2Pair) { _liquidityFee = buyLiquidityFee; _marketingFee = buyMarketingFee; _taxFee = buyTaxFee; _burnFee = buyBurnFee; } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled && _marketingFee > 0 && _liquidityFee > 0 ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity and send bnb to marketing wallet swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 liquidityTokens = contractTokenBalance.mul(_liquidityFee).div(_liquidityFee.add(_marketingFee)); // split the contract balance into halves uint256 half = liquidityTokens.div(2); uint256 otherHalf = liquidityTokens.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); swapTokensForEth(contractTokenBalance.sub(liquidityTokens)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // 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, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, 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."); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ removeAllFee(); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = takeBurn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_burnFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tBurn = tAmount.div(100).mul(_burnFee); uint256 rBurn = tBurn.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rBurn); tTransferAmount = tTransferAmount.sub(tBurn); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); emit Transfer(sender, deadAddress, tBurn); return(tTransferAmount, rTransferAmount); } function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_marketingFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tMarketing = tAmount.div(100).mul(_marketingFee); uint256 rMarketing = tMarketing.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rMarketing); tTransferAmount = tTransferAmount.sub(tMarketing); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); emit Transfer(sender, address(this), tMarketing); return(tTransferAmount, rTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function setMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function setBuyFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { require(taxFee.add(liquidityFee).add(marketingFee).add(burnFee) <= 19, "tax too high"); buyTaxFee = taxFee; buyLiquidityFee = liquidityFee; buyMarketingFee = marketingFee; buyBurnFee = burnFee; } function setSellFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { require(taxFee.add(liquidityFee).add(marketingFee).add(burnFee) <= 19, "tax too high"); sellTaxFee = taxFee; sellLiquidityFee = liquidityFee; sellMarketingFee = marketingFee; sellBurnFee = burnFee; } function setNumTokensSellToAddToLiquidity(uint256 newAmount) external onlyOwner() { numTokensSellToAddToLiquidity = newAmount; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; require(_maxTxAmount > totalSupply().div(200), "value too low"); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","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":"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":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000805460ff60a81b1916600160a81b1790556b033b2e3c9fd0803ce80000006007819055620000379060001962000462565b620000459060001962000485565b60085560405180604001604052806008815260200167546865447265737360c01b815250600a908162000079919062000552565b50604080518082019091526005815264447265737360d81b6020820152600b90620000a5908262000552565b50600c805460ff19166012908117909155600d54600e55600f546010556011549055601380546001600160a01b031990811661dead179091556014546015556016805490911673cde09b30195afcd4ba504f8e852d3abb70be6e5717905560006017819055601881905560016019819055601a819055601b829055601c91909155601d819055601e556969e10de76676d08000006021556b033b2e3c9fd0803ce80000006022553480156200015957600080fd5b50620001653362000412565b600854600160006200017f6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022191906200061e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029591906200061e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030991906200061e565b602080546001600160a01b03199081166001600160a01b0393841617909155601f8054909116918316919091179055600160046000620003516000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556016549091168152600490925280822080548416600190811790915530835291208054909216179055620003bb6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200040391815260200190565b60405180910390a35062000650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000826200048057634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620004a757634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004d857607f821691505b602082108103620004f957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054d57600081815260208120601f850160051c81016020861015620005285750805b601f850160051c820191505b81811015620005495782815560010162000534565b5050505b505050565b81516001600160401b038111156200056e576200056e620004ad565b62000586816200057f8454620004c3565b84620004ff565b602080601f831160018114620005be5760008415620005a55750858301515b600019600386901b1c1916600185901b17855562000549565b600085815260208120601f198616915b82811015620005ef57888601518255948401946001909101908401620005ce565b50858210156200060e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200063157600080fd5b81516001600160a01b03811681146200064957600080fd5b9392505050565b6128f480620006606000396000f3fe6080604052600436106102765760003560e01c80637bce5a041161014f578063afee32a9116100c1578063ec28438a1161007a578063ec28438a14610788578063f0f165af146107a8578063f11a24d3146107c8578063f2fde38b146107de578063f6374342146107fe578063f8a25a941461081457600080fd5b8063afee32a9146106b6578063c49b9a80146106d6578063d12a7688146106f6578063dd62ed3e1461070c578063e71dc3f514610752578063ea2f0b371461076857600080fd5b8063941fa5cd11610113578063941fa5cd1461061557806395d89b411461062b5780639d854b6314610640578063a457c2d714610660578063a9059cbb14610680578063adb873bd146106a057600080fd5b80637bce5a041461057c5780637d1db4a51461059257806388f82020146105a85780638da5cb5b146105e157806392136913146105ff57600080fd5b80633bd5d173116101e857806352390c02116101ac57806352390c02146104ae5780635342acb4146104ce5780635d098b381461050757806370a0823114610527578063715018a61461054757806375f0a8741461055c57600080fd5b80633bd5d1731461040d578063437823ec1461042d5780634549b0391461044d57806349bd5a5e1461046d5780634a74bb021461048d57600080fd5b806323b872dd1161023a57806323b872dd1461034957806327c8f835146103695780632d83811914610389578063313ce567146103a95780633685d419146103cb57806339509351146103ed57600080fd5b806306fdde0314610282578063095ea7b3146102ad57806313114a9d146102dd5780631694505e146102fc57806318160ddd1461033457600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761082a565b6040516102a49190612477565b60405180910390f35b3480156102b957600080fd5b506102cd6102c83660046124da565b6108bc565b60405190151581526020016102a4565b3480156102e957600080fd5b506009545b6040519081526020016102a4565b34801561030857600080fd5b50601f5461031c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561034057600080fd5b506007546102ee565b34801561035557600080fd5b506102cd610364366004612506565b6108d3565b34801561037557600080fd5b5060135461031c906001600160a01b031681565b34801561039557600080fd5b506102ee6103a4366004612547565b61093c565b3480156103b557600080fd5b50600c5460405160ff90911681526020016102a4565b3480156103d757600080fd5b506103eb6103e6366004612560565b6109c5565b005b3480156103f957600080fd5b506102cd6104083660046124da565b610b29565b34801561041957600080fd5b506103eb610428366004612547565b610b5f565b34801561043957600080fd5b506103eb610448366004612560565b610c49565b34801561045957600080fd5b506102ee610468366004612592565b610c75565b34801561047957600080fd5b5060205461031c906001600160a01b031681565b34801561049957600080fd5b506000546102cd90600160a81b900460ff1681565b3480156104ba57600080fd5b506103eb6104c9366004612560565b610d02565b3480156104da57600080fd5b506102cd6104e9366004612560565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561051357600080fd5b506103eb610522366004612560565b610e03565b34801561053357600080fd5b506102ee610542366004612560565b610e2d565b34801561055357600080fd5b506103eb610e8c565b34801561056857600080fd5b5060165461031c906001600160a01b031681565b34801561058857600080fd5b506102ee601e5481565b34801561059e57600080fd5b506102ee60225481565b3480156105b457600080fd5b506102cd6105c3366004612560565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105ed57600080fd5b506000546001600160a01b031661031c565b34801561060b57600080fd5b506102ee601a5481565b34801561062157600080fd5b506102ee601b5481565b34801561063757600080fd5b50610297610ea0565b34801561064c57600080fd5b506103eb61065b3660046125be565b610eaf565b34801561066c57600080fd5b506102cd61067b3660046124da565b610f01565b34801561068c57600080fd5b506102cd61069b3660046124da565b610f50565b3480156106ac57600080fd5b506102ee60185481565b3480156106c257600080fd5b506103eb6106d13660046125be565b610f5d565b3480156106e257600080fd5b506103eb6106f13660046125f0565b610fa9565b34801561070257600080fd5b506102ee60215481565b34801561071857600080fd5b506102ee61072736600461260b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075e57600080fd5b506102ee601c5481565b34801561077457600080fd5b506103eb610783366004612560565b611009565b34801561079457600080fd5b506103eb6107a3366004612547565b611032565b3480156107b457600080fd5b506103eb6107c3366004612547565b611096565b3480156107d457600080fd5b506102ee601d5481565b3480156107ea57600080fd5b506103eb6107f9366004612560565b6110a3565b34801561080a57600080fd5b506102ee60195481565b34801561082057600080fd5b506102ee60175481565b6060600a805461083990612644565b80601f016020809104026020016040519081016040528092919081815260200182805461086590612644565b80156108b25780601f10610887576101008083540402835291602001916108b2565b820191906000526020600020905b81548152906001019060200180831161089557829003601f168201915b5050505050905090565b60006108c9338484611119565b5060015b92915050565b60006108e084848461123d565b610932843361092d85604051806060016040528060288152602001612852602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906113fc565b611119565b5060019392505050565b60006008548211156109a85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109b2611436565b90506109be8382611459565b9392505050565b6109cd61149b565b6001600160a01b03811660009081526005602052604090205460ff16610a055760405162461bcd60e51b815260040161099f9061267e565b60005b600654811015610b2557816001600160a01b031660068281548110610a2f57610a2f6126b5565b6000918252602090912001546001600160a01b031603610b135760068054610a59906001906126e1565b81548110610a6957610a696126b5565b600091825260209091200154600680546001600160a01b039092169183908110610a9557610a956126b5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610aed57610aed6126f4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b1d8161270a565b915050610a08565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108c991859061092d90866114f5565b3360008181526005602052604090205460ff1615610bd45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099f565b6000610bdf83611554565b505050506001600160a01b038416600090815260016020526040902054919250610c0b919050826115a3565b6001600160a01b038316600090815260016020526040902055600854610c3190826115a3565b600855600954610c4190846114f5565b600955505050565b610c5161149b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610cc95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099f565b81610ce8576000610cd984611554565b509395506108cd945050505050565b6000610cf384611554565b509295506108cd945050505050565b610d0a61149b565b6001600160a01b03811660009081526005602052604090205460ff1615610d435760405162461bcd60e51b815260040161099f9061267e565b6001600160a01b03811660009081526001602052604090205415610d9d576001600160a01b038116600090815260016020526040902054610d839061093c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b610e0b61149b565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e6a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108cd9061093c565b610e9461149b565b610e9e60006115e5565b565b6060600b805461083990612644565b610eb761149b565b6013610ecf82610ec9858189896114f5565b906114f5565b1115610eed5760405162461bcd60e51b815260040161099f90612723565b601793909355601991909155601a55601855565b60006108c9338461092d8560405180606001604052806025815260200161289a602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906113fc565b60006108c933848461123d565b610f6561149b565b6013610f7782610ec9858189896114f5565b1115610f955760405162461bcd60e51b815260040161099f90612723565b601b93909355601d91909155601e55601c55565b610fb161149b565b60008054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ffe90831515815260200190565b60405180910390a150565b61101161149b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b61103a61149b565b602281905561105360c861104d60075490565b90611459565b602254116110935760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161099f565b50565b61109e61149b565b602155565b6110ab61149b565b6001600160a01b0381166111105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099f565b611093816115e5565b6001600160a01b03831661117b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099f565b6001600160a01b0382166111dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099f565b600081116113035760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099f565b6020546001600160a01b039081169083160361133257601954600f55601a54601455601754600d556018546011555b6020546001600160a01b039081169084160361136157601d54600f55601e54601455601b54600d55601c546011555b600061136c30610e2d565b6021549091508110801590819061138d5750600054600160a01b900460ff16155b80156113a657506020546001600160a01b038581169116145b80156113bb5750600054600160a81b900460ff165b80156113c957506000601454115b80156113d757506000600f54115b156113ea5760215491506113ea82611635565b6113f585858561174d565b5050505050565b600081848411156114205760405162461bcd60e51b815260040161099f9190612477565b50600061142d84866126e1565b95945050505050565b6000806000611443611a42565b90925090506114528282611459565b9250505090565b60006109be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bc4565b6000546001600160a01b03163314610e9e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099f565b6000806115028385612749565b9050838110156109be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099f565b600080600080600080600080600061156b8a611bf2565b92509250925060008060006115898d8686611584611436565b611c34565b919f909e50909c50959a5093985091965092945050505050565b60006109be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805460ff60a01b1916600160a01b178155601454600f5461166a9161165c91906114f5565b600f5461104d908590611c84565b90506000611679826002611459565b9050600061168783836115a3565b90504761169383611d06565b600061169f47836115a3565b90506116ab8382611e60565b6116bd6116b887876115a3565b611d06565b6016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116f6573d6000803e3d6000fd5b5060408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506000805460ff60a01b1916905550505050565b6001600160a01b03831660009081526004602052604090205460ff168061178c57506001600160a01b03821660009081526004602052604090205460ff165b1561179e57611799611f0d565b611801565b6022548111156118015760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099f565b6020546001600160a01b0384811691161480159061182d57506020546001600160a01b03838116911614155b1561183a5761183a611f0d565b6001600160a01b03831660009081526005602052604090205460ff16801561187b57506001600160a01b03821660009081526005602052604090205460ff16155b156118905761188b838383611f69565b61198e565b6001600160a01b03831660009081526005602052604090205460ff161580156118d157506001600160a01b03821660009081526005602052604090205460ff165b156118e15761188b83838361207d565b6001600160a01b03831660009081526005602052604090205460ff1615801561192357506001600160a01b03821660009081526005602052604090205460ff16155b156119335761188b838383612126565b6001600160a01b03831660009081526005602052604090205460ff16801561197357506001600160a01b03821660009081526005602052604090205460ff165b156119835761188b838383612189565b61198e838383612126565b6001600160a01b03831660009081526004602052604090205460ff16806119cd57506001600160a01b03821660009081526004602052604090205460ff165b156119ef576119ef600e54600d55601054600f55601254601155601554601455565b6020546001600160a01b03848116911614801590611a1b57506020546001600160a01b03838116911614155b15611a3d57611a3d600e54600d55601054600f55601254601155601554601455565b505050565b6008546007546000918291825b600654811015611b9457826001600060068481548110611a7157611a716126b5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611adc5750816002600060068481548110611ab557611ab56126b5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611af257600854600754945094505050509091565b611b386001600060068481548110611b0c57611b0c6126b5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115a3565b9250611b806002600060068481548110611b5457611b546126b5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115a3565b915080611b8c8161270a565b915050611a4f565b50600754600854611ba491611459565b821015611bbb576008546007549350935050509091565b90939092509050565b60008183611be55760405162461bcd60e51b815260040161099f9190612477565b50600061142d848661275c565b600080600080611c01856121fc565b90506000611c0e86612218565b90506000611c2682611c2089866115a3565b906115a3565b979296509094509092505050565b6000808080611c438886611c84565b90506000611c518887611c84565b90506000611c5f8888611c84565b90506000611c7182611c2086866115a3565b939b939a50919850919650505050505050565b600082600003611c96575060006108cd565b6000611ca2838561277e565b905082611caf858361275c565b146109be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d3b57611d3b6126b5565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db89190612795565b81600181518110611dcb57611dcb6126b5565b6001600160a01b039283166020918202929092010152601f54611df19130911684611119565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e2a9085906000908690309042906004016127b2565b600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b505050505050565b601f54611e789030906001600160a01b031684611119565b601f5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611ee8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113f59190612823565b600d54158015611f1d5750600f54155b8015611f295750601454155b8015611f355750601154155b15611f3c57565b600d8054600e55600f80546010556011805460125560148054601555600093849055918390559082905555565b600080600080600080611f7b87611554565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611fad90886115a3565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611fdc90876115a3565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461200b90866114f5565b6001600160a01b03891660009081526001602052604090205561202d81612234565b61203784836122bc565b876001600160a01b0316896001600160a01b031660008051602061287a8339815191528560405161206a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061208f87611554565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506120c190876115a3565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546120f790846114f5565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461200b90866114f5565b60008060008060008061213887611554565b9550955095509550955095506121508984878a6122e0565b955092506121608984878a6123c8565b6001600160a01b038b16600090815260016020526040902054909650909350611fdc90876115a3565b60008060008060008061219b87611554565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506121cd90886115a3565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546120c190876115a3565b60006108cd606461104d600d5485611c8490919063ffffffff16565b60006108cd606461104d600f5485611c8490919063ffffffff16565b600061223e611436565b9050600061224c8383611c84565b3060009081526001602052604090205490915061226990826114f5565b3060009081526001602090815260408083209390935560059052205460ff1615611a3d57306000908152600260205260409020546122a790846114f5565b30600090815260026020526040902055505050565b6008546122c990836115a3565b6008556009546122d990826114f5565b6009555050565b6000806011546000036122f75750839050826123bf565b6011546000906123129061230c866064611459565b90611c84565b90506000612328612321611436565b8390611c84565b905061233486826115a3565b955061234087836115a3565b6013546001600160a01b031660009081526001602052604090205490975061236890826114f5565b601380546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061287a83398151915291015b60405180910390a386869350935050505b94509492505050565b6000806014546000036123df5750839050826123bf565b6014546000906123f49061230c866064611459565b90506000612403612321611436565b905061240f86826115a3565b955061241b87836115a3565b3060009081526001602052604090205490975061243890826114f5565b30600081815260016020526040908190209290925590516001600160a01b038a169060008051602061287a833981519152906123ae9086815260200190565b600060208083528351808285015260005b818110156124a457858101830151858201604001528201612488565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461109357600080fd5b600080604083850312156124ed57600080fd5b82356124f8816124c5565b946020939093013593505050565b60008060006060848603121561251b57600080fd5b8335612526816124c5565b92506020840135612536816124c5565b929592945050506040919091013590565b60006020828403121561255957600080fd5b5035919050565b60006020828403121561257257600080fd5b81356109be816124c5565b8035801515811461258d57600080fd5b919050565b600080604083850312156125a557600080fd5b823591506125b56020840161257d565b90509250929050565b600080600080608085870312156125d457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561260257600080fd5b6109be8261257d565b6000806040838503121561261e57600080fd5b8235612629816124c5565b91506020830135612639816124c5565b809150509250929050565b600181811c9082168061265857607f821691505b60208210810361267857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108cd576108cd6126cb565b634e487b7160e01b600052603160045260246000fd5b60006001820161271c5761271c6126cb565b5060010190565b6020808252600c908201526b0e8c2f040e8dede40d0d2ced60a31b604082015260600190565b808201808211156108cd576108cd6126cb565b60008261277957634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108cd576108cd6126cb565b6000602082840312156127a757600080fd5b81516109be816124c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128025784516001600160a01b0316835293830193918301916001016127dd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561283857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae49e821e955193b40e171ba1ebb90585075be2008e0eafe76bf6d40ce3d134264736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80637bce5a041161014f578063afee32a9116100c1578063ec28438a1161007a578063ec28438a14610788578063f0f165af146107a8578063f11a24d3146107c8578063f2fde38b146107de578063f6374342146107fe578063f8a25a941461081457600080fd5b8063afee32a9146106b6578063c49b9a80146106d6578063d12a7688146106f6578063dd62ed3e1461070c578063e71dc3f514610752578063ea2f0b371461076857600080fd5b8063941fa5cd11610113578063941fa5cd1461061557806395d89b411461062b5780639d854b6314610640578063a457c2d714610660578063a9059cbb14610680578063adb873bd146106a057600080fd5b80637bce5a041461057c5780637d1db4a51461059257806388f82020146105a85780638da5cb5b146105e157806392136913146105ff57600080fd5b80633bd5d173116101e857806352390c02116101ac57806352390c02146104ae5780635342acb4146104ce5780635d098b381461050757806370a0823114610527578063715018a61461054757806375f0a8741461055c57600080fd5b80633bd5d1731461040d578063437823ec1461042d5780634549b0391461044d57806349bd5a5e1461046d5780634a74bb021461048d57600080fd5b806323b872dd1161023a57806323b872dd1461034957806327c8f835146103695780632d83811914610389578063313ce567146103a95780633685d419146103cb57806339509351146103ed57600080fd5b806306fdde0314610282578063095ea7b3146102ad57806313114a9d146102dd5780631694505e146102fc57806318160ddd1461033457600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761082a565b6040516102a49190612477565b60405180910390f35b3480156102b957600080fd5b506102cd6102c83660046124da565b6108bc565b60405190151581526020016102a4565b3480156102e957600080fd5b506009545b6040519081526020016102a4565b34801561030857600080fd5b50601f5461031c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561034057600080fd5b506007546102ee565b34801561035557600080fd5b506102cd610364366004612506565b6108d3565b34801561037557600080fd5b5060135461031c906001600160a01b031681565b34801561039557600080fd5b506102ee6103a4366004612547565b61093c565b3480156103b557600080fd5b50600c5460405160ff90911681526020016102a4565b3480156103d757600080fd5b506103eb6103e6366004612560565b6109c5565b005b3480156103f957600080fd5b506102cd6104083660046124da565b610b29565b34801561041957600080fd5b506103eb610428366004612547565b610b5f565b34801561043957600080fd5b506103eb610448366004612560565b610c49565b34801561045957600080fd5b506102ee610468366004612592565b610c75565b34801561047957600080fd5b5060205461031c906001600160a01b031681565b34801561049957600080fd5b506000546102cd90600160a81b900460ff1681565b3480156104ba57600080fd5b506103eb6104c9366004612560565b610d02565b3480156104da57600080fd5b506102cd6104e9366004612560565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561051357600080fd5b506103eb610522366004612560565b610e03565b34801561053357600080fd5b506102ee610542366004612560565b610e2d565b34801561055357600080fd5b506103eb610e8c565b34801561056857600080fd5b5060165461031c906001600160a01b031681565b34801561058857600080fd5b506102ee601e5481565b34801561059e57600080fd5b506102ee60225481565b3480156105b457600080fd5b506102cd6105c3366004612560565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105ed57600080fd5b506000546001600160a01b031661031c565b34801561060b57600080fd5b506102ee601a5481565b34801561062157600080fd5b506102ee601b5481565b34801561063757600080fd5b50610297610ea0565b34801561064c57600080fd5b506103eb61065b3660046125be565b610eaf565b34801561066c57600080fd5b506102cd61067b3660046124da565b610f01565b34801561068c57600080fd5b506102cd61069b3660046124da565b610f50565b3480156106ac57600080fd5b506102ee60185481565b3480156106c257600080fd5b506103eb6106d13660046125be565b610f5d565b3480156106e257600080fd5b506103eb6106f13660046125f0565b610fa9565b34801561070257600080fd5b506102ee60215481565b34801561071857600080fd5b506102ee61072736600461260b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075e57600080fd5b506102ee601c5481565b34801561077457600080fd5b506103eb610783366004612560565b611009565b34801561079457600080fd5b506103eb6107a3366004612547565b611032565b3480156107b457600080fd5b506103eb6107c3366004612547565b611096565b3480156107d457600080fd5b506102ee601d5481565b3480156107ea57600080fd5b506103eb6107f9366004612560565b6110a3565b34801561080a57600080fd5b506102ee60195481565b34801561082057600080fd5b506102ee60175481565b6060600a805461083990612644565b80601f016020809104026020016040519081016040528092919081815260200182805461086590612644565b80156108b25780601f10610887576101008083540402835291602001916108b2565b820191906000526020600020905b81548152906001019060200180831161089557829003601f168201915b5050505050905090565b60006108c9338484611119565b5060015b92915050565b60006108e084848461123d565b610932843361092d85604051806060016040528060288152602001612852602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906113fc565b611119565b5060019392505050565b60006008548211156109a85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006109b2611436565b90506109be8382611459565b9392505050565b6109cd61149b565b6001600160a01b03811660009081526005602052604090205460ff16610a055760405162461bcd60e51b815260040161099f9061267e565b60005b600654811015610b2557816001600160a01b031660068281548110610a2f57610a2f6126b5565b6000918252602090912001546001600160a01b031603610b135760068054610a59906001906126e1565b81548110610a6957610a696126b5565b600091825260209091200154600680546001600160a01b039092169183908110610a9557610a956126b5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610aed57610aed6126f4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b1d8161270a565b915050610a08565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108c991859061092d90866114f5565b3360008181526005602052604090205460ff1615610bd45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099f565b6000610bdf83611554565b505050506001600160a01b038416600090815260016020526040902054919250610c0b919050826115a3565b6001600160a01b038316600090815260016020526040902055600854610c3190826115a3565b600855600954610c4190846114f5565b600955505050565b610c5161149b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600754831115610cc95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099f565b81610ce8576000610cd984611554565b509395506108cd945050505050565b6000610cf384611554565b509295506108cd945050505050565b610d0a61149b565b6001600160a01b03811660009081526005602052604090205460ff1615610d435760405162461bcd60e51b815260040161099f9061267e565b6001600160a01b03811660009081526001602052604090205415610d9d576001600160a01b038116600090815260016020526040902054610d839061093c565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b610e0b61149b565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e6a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108cd9061093c565b610e9461149b565b610e9e60006115e5565b565b6060600b805461083990612644565b610eb761149b565b6013610ecf82610ec9858189896114f5565b906114f5565b1115610eed5760405162461bcd60e51b815260040161099f90612723565b601793909355601991909155601a55601855565b60006108c9338461092d8560405180606001604052806025815260200161289a602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906113fc565b60006108c933848461123d565b610f6561149b565b6013610f7782610ec9858189896114f5565b1115610f955760405162461bcd60e51b815260040161099f90612723565b601b93909355601d91909155601e55601c55565b610fb161149b565b60008054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ffe90831515815260200190565b60405180910390a150565b61101161149b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b61103a61149b565b602281905561105360c861104d60075490565b90611459565b602254116110935760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b604482015260640161099f565b50565b61109e61149b565b602155565b6110ab61149b565b6001600160a01b0381166111105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099f565b611093816115e5565b6001600160a01b03831661117b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099f565b6001600160a01b0382166111dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099f565b600081116113035760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099f565b6020546001600160a01b039081169083160361133257601954600f55601a54601455601754600d556018546011555b6020546001600160a01b039081169084160361136157601d54600f55601e54601455601b54600d55601c546011555b600061136c30610e2d565b6021549091508110801590819061138d5750600054600160a01b900460ff16155b80156113a657506020546001600160a01b038581169116145b80156113bb5750600054600160a81b900460ff165b80156113c957506000601454115b80156113d757506000600f54115b156113ea5760215491506113ea82611635565b6113f585858561174d565b5050505050565b600081848411156114205760405162461bcd60e51b815260040161099f9190612477565b50600061142d84866126e1565b95945050505050565b6000806000611443611a42565b90925090506114528282611459565b9250505090565b60006109be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bc4565b6000546001600160a01b03163314610e9e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099f565b6000806115028385612749565b9050838110156109be5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099f565b600080600080600080600080600061156b8a611bf2565b92509250925060008060006115898d8686611584611436565b611c34565b919f909e50909c50959a5093985091965092945050505050565b60006109be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805460ff60a01b1916600160a01b178155601454600f5461166a9161165c91906114f5565b600f5461104d908590611c84565b90506000611679826002611459565b9050600061168783836115a3565b90504761169383611d06565b600061169f47836115a3565b90506116ab8382611e60565b6116bd6116b887876115a3565b611d06565b6016546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116f6573d6000803e3d6000fd5b5060408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506000805460ff60a01b1916905550505050565b6001600160a01b03831660009081526004602052604090205460ff168061178c57506001600160a01b03821660009081526004602052604090205460ff165b1561179e57611799611f0d565b611801565b6022548111156118015760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099f565b6020546001600160a01b0384811691161480159061182d57506020546001600160a01b03838116911614155b1561183a5761183a611f0d565b6001600160a01b03831660009081526005602052604090205460ff16801561187b57506001600160a01b03821660009081526005602052604090205460ff16155b156118905761188b838383611f69565b61198e565b6001600160a01b03831660009081526005602052604090205460ff161580156118d157506001600160a01b03821660009081526005602052604090205460ff165b156118e15761188b83838361207d565b6001600160a01b03831660009081526005602052604090205460ff1615801561192357506001600160a01b03821660009081526005602052604090205460ff16155b156119335761188b838383612126565b6001600160a01b03831660009081526005602052604090205460ff16801561197357506001600160a01b03821660009081526005602052604090205460ff165b156119835761188b838383612189565b61198e838383612126565b6001600160a01b03831660009081526004602052604090205460ff16806119cd57506001600160a01b03821660009081526004602052604090205460ff165b156119ef576119ef600e54600d55601054600f55601254601155601554601455565b6020546001600160a01b03848116911614801590611a1b57506020546001600160a01b03838116911614155b15611a3d57611a3d600e54600d55601054600f55601254601155601554601455565b505050565b6008546007546000918291825b600654811015611b9457826001600060068481548110611a7157611a716126b5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611adc5750816002600060068481548110611ab557611ab56126b5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611af257600854600754945094505050509091565b611b386001600060068481548110611b0c57611b0c6126b5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115a3565b9250611b806002600060068481548110611b5457611b546126b5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115a3565b915080611b8c8161270a565b915050611a4f565b50600754600854611ba491611459565b821015611bbb576008546007549350935050509091565b90939092509050565b60008183611be55760405162461bcd60e51b815260040161099f9190612477565b50600061142d848661275c565b600080600080611c01856121fc565b90506000611c0e86612218565b90506000611c2682611c2089866115a3565b906115a3565b979296509094509092505050565b6000808080611c438886611c84565b90506000611c518887611c84565b90506000611c5f8888611c84565b90506000611c7182611c2086866115a3565b939b939a50919850919650505050505050565b600082600003611c96575060006108cd565b6000611ca2838561277e565b905082611caf858361275c565b146109be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d3b57611d3b6126b5565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db89190612795565b81600181518110611dcb57611dcb6126b5565b6001600160a01b039283166020918202929092010152601f54611df19130911684611119565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e2a9085906000908690309042906004016127b2565b600060405180830381600087803b158015611e4457600080fd5b505af1158015611e58573d6000803e3d6000fd5b505050505050565b601f54611e789030906001600160a01b031684611119565b601f5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611ee8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113f59190612823565b600d54158015611f1d5750600f54155b8015611f295750601454155b8015611f355750601154155b15611f3c57565b600d8054600e55600f80546010556011805460125560148054601555600093849055918390559082905555565b600080600080600080611f7b87611554565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150611fad90886115a3565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054611fdc90876115a3565b6001600160a01b03808b1660009081526001602052604080822093909355908a168152205461200b90866114f5565b6001600160a01b03891660009081526001602052604090205561202d81612234565b61203784836122bc565b876001600160a01b0316896001600160a01b031660008051602061287a8339815191528560405161206a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061208f87611554565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506120c190876115a3565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546120f790846114f5565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461200b90866114f5565b60008060008060008061213887611554565b9550955095509550955095506121508984878a6122e0565b955092506121608984878a6123c8565b6001600160a01b038b16600090815260016020526040902054909650909350611fdc90876115a3565b60008060008060008061219b87611554565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506121cd90886115a3565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546120c190876115a3565b60006108cd606461104d600d5485611c8490919063ffffffff16565b60006108cd606461104d600f5485611c8490919063ffffffff16565b600061223e611436565b9050600061224c8383611c84565b3060009081526001602052604090205490915061226990826114f5565b3060009081526001602090815260408083209390935560059052205460ff1615611a3d57306000908152600260205260409020546122a790846114f5565b30600090815260026020526040902055505050565b6008546122c990836115a3565b6008556009546122d990826114f5565b6009555050565b6000806011546000036122f75750839050826123bf565b6011546000906123129061230c866064611459565b90611c84565b90506000612328612321611436565b8390611c84565b905061233486826115a3565b955061234087836115a3565b6013546001600160a01b031660009081526001602052604090205490975061236890826114f5565b601380546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908b169160008051602061287a83398151915291015b60405180910390a386869350935050505b94509492505050565b6000806014546000036123df5750839050826123bf565b6014546000906123f49061230c866064611459565b90506000612403612321611436565b905061240f86826115a3565b955061241b87836115a3565b3060009081526001602052604090205490975061243890826114f5565b30600081815260016020526040908190209290925590516001600160a01b038a169060008051602061287a833981519152906123ae9086815260200190565b600060208083528351808285015260005b818110156124a457858101830151858201604001528201612488565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461109357600080fd5b600080604083850312156124ed57600080fd5b82356124f8816124c5565b946020939093013593505050565b60008060006060848603121561251b57600080fd5b8335612526816124c5565b92506020840135612536816124c5565b929592945050506040919091013590565b60006020828403121561255957600080fd5b5035919050565b60006020828403121561257257600080fd5b81356109be816124c5565b8035801515811461258d57600080fd5b919050565b600080604083850312156125a557600080fd5b823591506125b56020840161257d565b90509250929050565b600080600080608085870312156125d457600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561260257600080fd5b6109be8261257d565b6000806040838503121561261e57600080fd5b8235612629816124c5565b91506020830135612639816124c5565b809150509250929050565b600181811c9082168061265857607f821691505b60208210810361267857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108cd576108cd6126cb565b634e487b7160e01b600052603160045260246000fd5b60006001820161271c5761271c6126cb565b5060010190565b6020808252600c908201526b0e8c2f040e8dede40d0d2ced60a31b604082015260600190565b808201808211156108cd576108cd6126cb565b60008261277957634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108cd576108cd6126cb565b6000602082840312156127a757600080fd5b81516109be816124c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128025784516001600160a01b0316835293830193918301916001016127dd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561283857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae49e821e955193b40e171ba1ebb90585075be2008e0eafe76bf6d40ce3d134264736f6c63430008120033
Deployed Bytecode Sourcemap
24511:22188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27724:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28636:161;;;;;;;;;;-1:-1:-1;28636:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;28636:161:0;1023:187:1;29757:87:0;;;;;;;;;;-1:-1:-1;29826:10:0;;29757:87;;;1361:25:1;;;1349:2;1334:18;29757:87:0;1215:177:1;26234:42:0;;;;;;;;;;-1:-1:-1;26234:42:0;;;;-1:-1:-1;;;;;26234:42:0;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;26234:42:0;1397:230:1;28001:95:0;;;;;;;;;;-1:-1:-1;28081:7:0;;28001:95;;28805:313;;;;;;;;;;-1:-1:-1;28805:313:0;;;;;:::i;:::-;;:::i;25610:71::-;;;;;;;;;;-1:-1:-1;25610:71:0;;;;-1:-1:-1;;;;;25610:71:0;;;30681:253;;;;;;;;;;-1:-1:-1;30681:253:0;;;;;:::i;:::-;;:::i;27910:83::-;;;;;;;;;;-1:-1:-1;27976:9:0;;27910:83;;27976:9;;;;2628:36:1;;2616:2;2601:18;27910:83:0;2486:184:1;31283:479:0;;;;;;;;;;-1:-1:-1;31283:479:0;;;;;:::i;:::-;;:::i;:::-;;29126:218;;;;;;;;;;-1:-1:-1;29126:218:0;;;;;:::i;:::-;;:::i;29852:377::-;;;;;;;;;;-1:-1:-1;29852:377:0;;;;;:::i;:::-;;:::i;45056:111::-;;;;;;;;;;-1:-1:-1;45056:111:0;;;;;:::i;:::-;;:::i;30237:436::-;;;;;;;;;;-1:-1:-1;30237:436:0;;;;;:::i;:::-;;:::i;26283:29::-;;;;;;;;;;-1:-1:-1;26283:29:0;;;;-1:-1:-1;;;;;26283:29:0;;;24658:40;;;;;;;;;;-1:-1:-1;24658:40:0;;;;-1:-1:-1;;;24658:40:0;;;;;;30942:333;;;;;;;;;;-1:-1:-1;30942:333:0;;;;;:::i;:::-;;:::i;44804:123::-;;;;;;;;;;-1:-1:-1;44804:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;44892:27:0;44868:4;44892:27;;;:18;:27;;;;;;;;;44804:123;45178:122;;;;;;;;;;-1:-1:-1;45178:122:0;;;;;:::i;:::-;;:::i;28104:198::-;;;;;;;;;;-1:-1:-1;28104:198:0;;;;;:::i;:::-;;:::i;4749:103::-;;;;;;;;;;;;;:::i;25786:92::-;;;;;;;;;;-1:-1:-1;25786:92:0;;;;-1:-1:-1;;;;;25786:92:0;;;26191:34;;;;;;;;;;;;;;;;26390:49;;;;;;;;;;;;;;;;29629:120;;;;;;;;;;-1:-1:-1;29629:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29721:20:0;29697:4;29721:20;;;:11;:20;;;;;;;;;29629:120;4108:87;;;;;;;;;;-1:-1:-1;4154:7:0;4181:6;-1:-1:-1;;;;;4181:6:0;4108:87;;26030:35;;;;;;;;;;;;;;;;26079:28;;;;;;;;;;;;;;;;27815:87;;;;;;;;;;;;;:::i;45690:376::-;;;;;;;;;;-1:-1:-1;45690:376:0;;;;;:::i;:::-;;:::i;29352:269::-;;;;;;;;;;-1:-1:-1;29352:269:0;;;;;:::i;:::-;;:::i;28310:167::-;;;;;;;;;;-1:-1:-1;28310:167:0;;;;;:::i;:::-;;:::i;25951:30::-;;;;;;;;;;;;;;;;45311:371;;;;;;;;;;-1:-1:-1;45311:371:0;;;;;:::i;:::-;;:::i;46426:171::-;;;;;;;;;;-1:-1:-1;46426:171:0;;;;;:::i;:::-;;:::i;26321:62::-;;;;;;;;;;;;;;;;28485:143;;;;;;;;;;-1:-1:-1;28485:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;28593:18:0;;;28566:7;28593:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28485:143;26114:29;;;;;;;;;;;;;;;;44938:110;;;;;;;;;;-1:-1:-1;44938:110:0;;;;;:::i;:::-;;:::i;46230:185::-;;;;;;;;;;-1:-1:-1;46230:185:0;;;;;:::i;:::-;;:::i;46077:142::-;;;;;;;;;;-1:-1:-1;46077:142:0;;;;;:::i;:::-;;:::i;26150:34::-;;;;;;;;;;;;;;;;5007:201;;;;;;;;;;-1:-1:-1;5007:201:0;;;;;:::i;:::-;;:::i;25988:35::-;;;;;;;;;;;;;;;;25915:29;;;;;;;;;;;;;;;;27724:83;27761:13;27794:5;27787:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27724:83;:::o;28636:161::-;28711:4;28728:39;2764:10;28751:7;28760:6;28728:8;:39::i;:::-;-1:-1:-1;28785:4:0;28636:161;;;;;:::o;28805:313::-;28903:4;28920:36;28930:6;28938:9;28949:6;28920:9;:36::i;:::-;28967:121;28976:6;2764:10;28998:89;29036:6;28998:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28998:19:0;;;;;;:11;:19;;;;;;;;2764:10;28998:33;;;;;;;;;;:37;:89::i;:::-;28967:8;:121::i;:::-;-1:-1:-1;29106:4:0;28805:313;;;;;:::o;30681:253::-;30747:7;30786;;30775;:18;;30767:73;;;;-1:-1:-1;;;30767:73:0;;5384:2:1;30767:73:0;;;5366:21:1;5423:2;5403:18;;;5396:30;5462:34;5442:18;;;5435:62;-1:-1:-1;;;5513:18:1;;;5506:40;5563:19;;30767:73:0;;;;;;;;;30851:19;30874:10;:8;:10::i;:::-;30851:33;-1:-1:-1;30902:24:0;:7;30851:33;30902:11;:24::i;:::-;30895:31;30681:253;-1:-1:-1;;;30681:253:0:o;31283:479::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;31365:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31357:60;;;;-1:-1:-1::0;;;31357:60:0::1;;;;;;;:::i;:::-;31433:9;31428:327;31452:9;:16:::0;31448:20;::::1;31428:327;;;31510:7;-1:-1:-1::0;;;;;31494:23:0::1;:9;31504:1;31494:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31494:12:0::1;:23:::0;31490:254:::1;;31553:9;31563:16:::0;;:20:::1;::::0;31582:1:::1;::::0;31563:20:::1;:::i;:::-;31553:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31538:9:::1;:12:::0;;-1:-1:-1;;;;;31553:31:0;;::::1;::::0;31548:1;;31538:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31538:46:0::1;-1:-1:-1::0;;;;;31538:46:0;;::::1;;::::0;;31603:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31642:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31642:28:0::1;::::0;;31689:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31689:15:0;;;;;-1:-1:-1;;;;;;31689:15:0::1;::::0;;;;;31428:327:::1;31283:479:::0;:::o;31490:254::-:1;31470:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31428:327;;;;31283:479:::0;:::o;29126:218::-;2764:10;29214:4;29263:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29263:34:0;;;;;;;;;;29214:4;;29231:83;;29254:7;;29263:50;;29302:10;29263:38;:50::i;29852:377::-;2764:10;29904:14;29953:19;;;:11;:19;;;;;;;;29952:20;29944:77;;;;-1:-1:-1;;;29944:77:0;;6820:2:1;29944:77:0;;;6802:21:1;6859:2;6839:18;;;6832:30;6898:34;6878:18;;;6871:62;-1:-1:-1;;;6949:18:1;;;6942:42;7001:19;;29944:77:0;6618:408:1;29944:77:0;30033:15;30057:19;30068:7;30057:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30105:15:0;;;;;;:7;:15;;;;;;30032:44;;-1:-1:-1;30105:28:0;;:15;-1:-1:-1;30032:44:0;30105:19;:28::i;:::-;-1:-1:-1;;;;;30087:15:0;;;;;;:7;:15;;;;;:46;30154:7;;:20;;30166:7;30154:11;:20::i;:::-;30144:7;:30;30198:10;;:23;;30213:7;30198:14;:23::i;:::-;30185:10;:36;-1:-1:-1;;;29852:377:0:o;45056:111::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;45125:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;45125:34:0::1;45155:4;45125:34;::::0;;45056:111::o;30237:436::-;30327:7;30366;;30355;:18;;30347:62;;;;-1:-1:-1;;;30347:62:0;;7233:2:1;30347:62:0;;;7215:21:1;7272:2;7252:18;;;7245:30;7311:33;7291:18;;;7284:61;7362:18;;30347:62:0;7031:355:1;30347:62:0;30425:17;30420:246;;30460:15;30484:19;30495:7;30484:10;:19::i;:::-;-1:-1:-1;30459:44:0;;-1:-1:-1;30518:14:0;;-1:-1:-1;;;;;30518:14:0;30420:246;30567:23;30598:19;30609:7;30598:10;:19::i;:::-;-1:-1:-1;30565:52:0;;-1:-1:-1;30632:22:0;;-1:-1:-1;;;;;30632:22:0;30942:333;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;31025:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31024:21;31016:61;;;;-1:-1:-1::0;;;31016:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31091:16:0;::::1;31110:1;31091:16:::0;;;:7:::1;:16;::::0;;;;;:20;31088:108:::1;;-1:-1:-1::0;;;;;31167:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31147:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31128:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31088:108:::1;-1:-1:-1::0;;;;;31206:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31206:27:0::1;31229:4;31206:27:::0;;::::1;::::0;;;31244:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31244:23:0::1;::::0;;::::1;::::0;;30942:333::o;45178:122::-;3994:13;:11;:13::i;:::-;45265:15:::1;:27:::0;;-1:-1:-1;;;;;;45265:27:0::1;-1:-1:-1::0;;;;;45265:27:0;;;::::1;::::0;;;::::1;::::0;;45178:122::o;28104:198::-;-1:-1:-1;;;;;28194:20:0;;28170:7;28194:20;;;:11;:20;;;;;;;;28190:49;;;-1:-1:-1;;;;;;28223:16:0;;;;;:7;:16;;;;;;;28104:198::o;28190:49::-;-1:-1:-1;;;;;28277:16:0;;;;;;:7;:16;;;;;;28257:37;;:19;:37::i;4749:103::-;3994:13;:11;:13::i;:::-;4814:30:::1;4841:1;4814:18;:30::i;:::-;4749:103::o:0;27815:87::-;27854:13;27887:7;27880:14;;;;;:::i;45690:376::-;3994:13;:11;:13::i;:::-;45893:2:::1;45834:55;45881:7:::0;45834:42:::1;45863:12:::0;45834:42;:6;45845:12;45834:10:::1;:24::i;:::-;:28:::0;::::1;:42::i;:55::-;:61;;45826:86;;;;-1:-1:-1::0;;;45826:86:0::1;;;;;;;:::i;:::-;45923:10;:19:::0;;;;45953:16:::1;:31:::0;;;;45995:16:::1;:31:::0;46037:11:::1;:21:::0;45690:376::o;29352:269::-;29445:4;29462:129;2764:10;29485:7;29494:96;29533:15;29494:96;;;;;;;;;;;;;;;;;2764:10;29494:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29494:34:0;;;;;;;;;;;;:38;:96::i;28310:167::-;28388:4;28405:42;2764:10;28429:9;28440:6;28405:9;:42::i;45311:371::-;3994:13;:11;:13::i;:::-;45513:2:::1;45454:55;45501:7:::0;45454:42:::1;45483:12:::0;45454:42;:6;45465:12;45454:10:::1;:24::i;:55::-;:61;;45446:86;;;;-1:-1:-1::0;;;45446:86:0::1;;;;;;;:::i;:::-;45543:9;:18:::0;;;;45572:15:::1;:30:::0;;;;45613:15:::1;:30:::0;45654:10:::1;:20:::0;45311:371::o;46426:171::-;3994:13;:11;:13::i;:::-;46503:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;46503:32:0::1;-1:-1:-1::0;;;;46503:32:0;;::::1;;::::0;;46551:38:::1;::::0;::::1;::::0;::::1;::::0;46527:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;46551:38:0::1;;;;;;;;46426:171:::0;:::o;44938:110::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;45005:27:0::1;45035:5;45005:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;45005:35:0::1;::::0;;44938:110::o;46230:185::-;3994:13;:11;:13::i;:::-;46307:12:::1;:26:::0;;;46367:22:::1;46385:3;46367:13;28081:7:::0;;;28001:95;46367:13:::1;:17:::0;::::1;:22::i;:::-;46352:12;;:37;46344:63;;;::::0;-1:-1:-1;;;46344:63:0;;7934:2:1;46344:63:0::1;::::0;::::1;7916:21:1::0;7973:2;7953:18;;;7946:30;-1:-1:-1;;;7992:18:1;;;7985:43;8045:18;;46344:63:0::1;7732:337:1::0;46344:63:0::1;46230:185:::0;:::o;46077:142::-;3994:13;:11;:13::i;:::-;46170:29:::1;:41:::0;46077:142::o;5007:201::-;3994:13;:11;:13::i;:::-;-1:-1:-1;;;;;5096:22:0;::::1;5088:73;;;::::0;-1:-1:-1;;;5088:73:0;;8276:2:1;5088:73:0::1;::::0;::::1;8258:21:1::0;8315:2;8295:18;;;8288:30;8354:34;8334:18;;;8327:62;-1:-1:-1;;;8405:18:1;;;8398:36;8451:19;;5088:73:0::1;8074:402:1::0;5088:73:0::1;5172:28;5191:8;5172:18;:28::i;35868:337::-:0;-1:-1:-1;;;;;35961:19:0;;35953:68;;;;-1:-1:-1;;;35953:68:0;;8683:2:1;35953:68:0;;;8665:21:1;8722:2;8702:18;;;8695:30;8761:34;8741:18;;;8734:62;-1:-1:-1;;;8812:18:1;;;8805:34;8856:19;;35953:68:0;8481:400:1;35953:68:0;-1:-1:-1;;;;;36040:21:0;;36032:68;;;;-1:-1:-1;;;36032:68:0;;9088:2:1;36032:68:0;;;9070:21:1;9127:2;9107:18;;;9100:30;9166:34;9146:18;;;9139:62;-1:-1:-1;;;9217:18:1;;;9210:32;9259:19;;36032:68:0;8886:398:1;36032:68:0;-1:-1:-1;;;;;36113:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36165:32;;1361:25:1;;;36165:32:0;;1334:18:1;36165:32:0;;;;;;;35868:337;;;:::o;36213:1664::-;-1:-1:-1;;;;;36335:18:0;;36327:68;;;;-1:-1:-1;;;36327:68:0;;9491:2:1;36327:68:0;;;9473:21:1;9530:2;9510:18;;;9503:30;9569:34;9549:18;;;9542:62;-1:-1:-1;;;9620:18:1;;;9613:35;9665:19;;36327:68:0;9289:401:1;36327:68:0;36423:1;36414:6;:10;36406:64;;;;-1:-1:-1;;;36406:64:0;;9897:2:1;36406:64:0;;;9879:21:1;9936:2;9916:18;;;9909:30;9975:34;9955:18;;;9948:62;-1:-1:-1;;;10026:18:1;;;10019:39;10075:19;;36406:64:0;9695:405:1;36406:64:0;36493:13;;-1:-1:-1;;;;;36493:13:0;;;36487:19;;;;36483:203;;36539:16;;36523:13;:32;36586:16;;36570:13;:32;36627:10;;36617:7;:20;36663:11;;36652:8;:22;36483:203;36710:13;;-1:-1:-1;;;;;36710:13:0;;;36702:21;;;;36698:201;;36756:15;;36740:13;:31;36802:15;;36786:13;:31;36842:9;;36832:7;:19;36877:10;;-1:-1:-1;36866:21:0;36698:201;37193:28;37224:24;37242:4;37224:9;:24::i;:::-;37318:29;;37193:55;;-1:-1:-1;37294:53:0;;;;;;;37376;;-1:-1:-1;37413:16:0;;-1:-1:-1;;;37413:16:0;;;;37412:17;37376:53;:89;;;;-1:-1:-1;37452:13:0;;-1:-1:-1;;;;;37446:19:0;;;37452:13;;37446:19;37376:89;:127;;;;-1:-1:-1;37482:21:0;;-1:-1:-1;;;37482:21:0;;;;37376:127;:161;;;;;37536:1;37520:13;;:17;37376:161;:195;;;;;37570:1;37554:13;;:17;37376:195;37358:417;;;37621:29;;37598:52;;37727:36;37742:20;37727:14;:36::i;:::-;37839:30;37854:4;37859:2;37862:6;37839:14;:30::i;:::-;36316:1561;;36213:1664;;;:::o;6835:192::-;6921:7;6957:12;6949:6;;;;6941:29;;;;-1:-1:-1;;;6941:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6981:9:0;6993:5;6997:1;6993;:5;:::i;:::-;6981:17;6835:192;-1:-1:-1;;;;;6835:192:0:o;33777:163::-;33818:7;33839:15;33856;33875:19;:17;:19::i;:::-;33838:56;;-1:-1:-1;33838:56:0;-1:-1:-1;33912:20:0;33838:56;;33912:11;:20::i;:::-;33905:27;;;;33777:163;:::o;8233:132::-;8291:7;8318:39;8322:1;8325;8318:39;;;;;;;;;;;;;;;;;:3;:39::i;4273:132::-;4154:7;4181:6;-1:-1:-1;;;;;4181:6:0;2764:10;4337:23;4329:68;;;;-1:-1:-1;;;4329:68:0;;10307:2:1;4329:68:0;;;10289:21:1;;;10326:18;;;10319:30;10385:34;10365:18;;;10358:62;10437:18;;4329:68:0;10105:356:1;5932:181:0;5990:7;;6022:5;6026:1;6022;:5;:::i;:::-;6010:17;;6051:1;6046;:6;;6038:46;;;;-1:-1:-1;;;6038:46:0;;10798:2:1;6038:46:0;;;10780:21:1;10837:2;10817:18;;;10810:30;10876:29;10856:18;;;10849:57;10923:18;;6038:46:0;10596:351:1;32575:419:0;32634:7;32643;32652;32661;32670;32679;32700:23;32725:12;32739:18;32761:20;32773:7;32761:11;:20::i;:::-;32699:82;;;;;;32793:15;32810:23;32835:12;32851:50;32863:7;32872:4;32878:10;32890;:8;:10::i;:::-;32851:11;:50::i;:::-;32792:109;;;;-1:-1:-1;32792:109:0;;-1:-1:-1;32952:15:0;;-1:-1:-1;32969:4:0;;-1:-1:-1;32975:10:0;;-1:-1:-1;32575:419:0;;-1:-1:-1;;;;;32575:419:0:o;6396:136::-;6454:7;6481:43;6485:1;6488;6481:43;;;;;;;;;;;;;;;;;:3;:43::i;5368:191::-;5442:16;5461:6;;-1:-1:-1;;;;;5478:17:0;;;-1:-1:-1;;;;;;5478:17:0;;;;;;5511:40;;5461:6;;;;;;;5511:40;;5442:16;5511:40;5431:128;5368:191;:::o;37885:1218::-;26744:16;:23;;-1:-1:-1;;;;26744:23:0;-1:-1:-1;;;26744:23:0;;;:16;38058:13;38040::::1;::::0;37996:77:::1;::::0;38040:32:::1;::::0;:13;:17:::1;:32::i;:::-;38021:13;::::0;37996:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;37970:103:::0;-1:-1:-1;38135:12:0::1;38150:22;37970:103:::0;38170:1:::1;38150:19;:22::i;:::-;38135:37:::0;-1:-1:-1;38183:17:0::1;38203:25;:15:::0;38135:37;38203:19:::1;:25::i;:::-;38183:45:::0;-1:-1:-1;38531:21:0::1;38597:22;38614:4:::0;38597:16:::1;:22::i;:::-;38750:18;38771:41;:21;38797:14:::0;38771:25:::1;:41::i;:::-;38750:62;;38862:35;38875:9;38886:10;38862:12;:35::i;:::-;38910:59;38927:41;:20:::0;38952:15;38927:24:::1;:41::i;:::-;38910:16;:59::i;:::-;38980:15;::::0;:47:::1;::::0;-1:-1:-1;;;;;38980:15:0;;::::1;::::0;39005:21:::1;38980:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;39005:21;38980:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;39052:43:0::1;::::0;;11154:25:1;;;11210:2;11195:18;;11188:34;;;11238:18;;;11231:34;;;39052:43:0::1;::::0;11142:2:1;11127:18;39052:43:0::1;;;;;;;-1:-1:-1::0;;26809:5:0;26790:24;;-1:-1:-1;;;;26790:24:0;;;-1:-1:-1;;;;37885:1218:0:o;40306:1313::-;-1:-1:-1;;;;;40408:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40438:29:0;;;;;;:18;:29;;;;;;;;40408:59;40405:245;;;40494:14;:12;:14::i;:::-;40405:245;;;40579:12;;40569:6;:22;;40561:75;;;;-1:-1:-1;;;40561:75:0;;11478:2:1;40561:75:0;;;11460:21:1;11517:2;11497:18;;;11490:30;11556:34;11536:18;;;11529:62;-1:-1:-1;;;11607:18:1;;;11600:38;11655:19;;40561:75:0;11276:404:1;40561:75:0;40675:13;;-1:-1:-1;;;;;40665:23:0;;;40675:13;;40665:23;;;;:53;;-1:-1:-1;40705:13:0;;-1:-1:-1;;;;;40692:26:0;;;40705:13;;40692:26;;40665:53;40662:98;;;40734:14;:12;:14::i;:::-;-1:-1:-1;;;;;40776:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40800:22:0;;;;;;:11;:22;;;;;;;;40799:23;40776:46;40772:597;;;40839:48;40861:6;40869:9;40880:6;40839:21;:48::i;:::-;40772:597;;;-1:-1:-1;;;;;40910:19:0;;;;;;:11;:19;;;;;;;;40909:20;:46;;;;-1:-1:-1;;;;;;40933:22:0;;;;;;:11;:22;;;;;;;;40909:46;40905:464;;;40972:46;40992:6;41000:9;41011:6;40972:19;:46::i;40905:464::-;-1:-1:-1;;;;;41041:19:0;;;;;;:11;:19;;;;;;;;41040:20;:47;;;;-1:-1:-1;;;;;;41065:22:0;;;;;;:11;:22;;;;;;;;41064:23;41040:47;41036:333;;;41104:44;41122:6;41130:9;41141:6;41104:17;:44::i;41036:333::-;-1:-1:-1;;;;;41170:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41193:22:0;;;;;;:11;:22;;;;;;;;41170:45;41166:203;;;41232:48;41254:6;41262:9;41273:6;41232:21;:48::i;41166:203::-;41313:44;41331:6;41339:9;41350:6;41313:17;:44::i;:::-;-1:-1:-1;;;;;41391:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;41421:29:0;;;;;;:18;:29;;;;;;;;41391:59;41388:115;;;41476:15;35706;;35696:7;:25;35747:21;;35731:13;:37;35789:16;;35778:8;:27;35831:21;;35815:13;:37;35653:207;41476:15;41526:13;;-1:-1:-1;;;;;41516:23:0;;;41526:13;;41516:23;;;;:53;;-1:-1:-1;41556:13:0;;-1:-1:-1;;;;;41543:26:0;;;41556:13;;41543:26;;41516:53;41513:99;;;41585:15;35706;;35696:7;:25;35747:21;;35731:13;:37;35789:16;;35778:8;:27;35831:21;;35815:13;:37;35653:207;41585:15;40306:1313;;;:::o;33948:561::-;34045:7;;34081;;33998;;;;;34105:289;34129:9;:16;34125:20;;34105:289;;;34195:7;34171;:21;34179:9;34189:1;34179:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34179:12:0;34171:21;;;;;;;;;;;;;:31;;:66;;;34230:7;34206;:21;34214:9;34224:1;34214:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34214:12:0;34206:21;;;;;;;;;;;;;:31;34171:66;34167:97;;;34247:7;;34256;;34239:25;;;;;;;33948:561;;:::o;34167:97::-;34289:34;34301:7;:21;34309:9;34319:1;34309:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34309:12:0;34301:21;;;;;;;;;;;;;34289:7;;:11;:34::i;:::-;34279:44;;34348:34;34360:7;:21;34368:9;34378:1;34368:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34368:12:0;34360:21;;;;;;;;;;;;;34348:7;;:11;:34::i;:::-;34338:44;-1:-1:-1;34147:3:0;;;;:::i;:::-;;;;34105:289;;;-1:-1:-1;34430:7:0;;34418;;:20;;:11;:20::i;:::-;34408:7;:30;34404:61;;;34448:7;;34457;;34440:25;;;;;;33948:561;;:::o;34404:61::-;34484:7;;34493;;-1:-1:-1;33948:561:0;-1:-1:-1;33948:561:0:o;8861:278::-;8947:7;8982:12;8975:5;8967:28;;;;-1:-1:-1;;;8967:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9006:9:0;9018:5;9022:1;9018;:5;:::i;33002:330::-;33062:7;33071;33080;33100:12;33115:24;33131:7;33115:15;:24::i;:::-;33100:39;;33150:18;33171:30;33193:7;33171:21;:30::i;:::-;33150:51;-1:-1:-1;33212:23:0;33238:33;33150:51;33238:17;:7;33250:4;33238:11;:17::i;:::-;:21;;:33::i;:::-;33212:59;33307:4;;-1:-1:-1;33313:10:0;;-1:-1:-1;33002:330:0;;-1:-1:-1;;;33002:330:0:o;33340:429::-;33455:7;;;;33511:24;:7;33523:11;33511;:24::i;:::-;33493:42;-1:-1:-1;33546:12:0;33561:21;:4;33570:11;33561:8;:21::i;:::-;33546:36;-1:-1:-1;33593:18:0;33614:27;:10;33629:11;33614:14;:27::i;:::-;33593:48;-1:-1:-1;33652:23:0;33678:33;33593:48;33678:17;:7;33690:4;33678:11;:17::i;:33::-;33730:7;;;;-1:-1:-1;33756:4:0;;-1:-1:-1;33340:429:0;;-1:-1:-1;;;;;;;33340:429:0:o;7286:471::-;7344:7;7589:1;7594;7589:6;7585:47;;-1:-1:-1;7619:1:0;7612:8;;7585:47;7644:9;7656:5;7660:1;7656;:5;:::i;:::-;7644:17;-1:-1:-1;7689:1:0;7680:5;7684:1;7644:17;7680:5;:::i;:::-;:10;7672:56;;;;-1:-1:-1;;;7672:56:0;;12282:2:1;7672:56:0;;;12264:21:1;12321:2;12301:18;;;12294:30;12360:34;12340:18;;;12333:62;-1:-1:-1;;;12411:18:1;;;12404:31;12452:19;;7672:56:0;12080:397:1;39111:589:0;39261:16;;;39275:1;39261:16;;;;;;;;39237:21;;39261:16;;;;;;;;;;-1:-1:-1;39261:16:0;39237:40;;39306:4;39288;39293:1;39288:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39288:23:0;;;:7;;;;;;;;;;:23;;;;39332:15;;:22;;;-1:-1:-1;;;39332:22:0;;;;:15;;;;;:20;;:22;;;;;39288:7;;39332:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39322:4;39327:1;39322:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39322:32:0;;;:7;;;;;;;;;:32;39399:15;;39367:62;;39384:4;;39399:15;39417:11;39367:8;:62::i;:::-;39468:15;;:224;;-1:-1:-1;;;39468:224:0;;-1:-1:-1;;;;;39468:15:0;;;;:66;;:224;;39549:11;;39468:15;;39619:4;;39646;;39666:15;;39468:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39166:534;39111:589;:::o;39708:517::-;39888:15;;39856:62;;39873:4;;-1:-1:-1;;;;;39888:15:0;39906:11;39856:8;:62::i;:::-;39961:15;;40165:11;;39961:256;;-1:-1:-1;;;39961:256:0;;40033:4;39961:256;;;14196:34:1;14246:18;;;14239:34;;;39961:15:0;14289:18:1;;;14282:34;;;14332:18;;;14325:34;-1:-1:-1;;;;;40165:11:0;;;14375:19:1;;;14368:44;40191:15:0;14428:19:1;;;14421:35;39961:15:0;;;:31;;40000:9;;14130:19:1;;39961:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35222:420::-;35268:7;;:12;:34;;;;-1:-1:-1;35284:13:0;;:18;35268:34;:54;;;;-1:-1:-1;35306:13:0;;:16;35268:54;:69;;;;-1:-1:-1;35326:8:0;;:11;35268:69;35265:81;;;35222:420::o;35265:81::-;35383:7;;;35365:15;:25;35425:13;;;35401:21;:37;35468:8;;;35449:16;:27;35511:13;;;35487:21;:37;-1:-1:-1;35544:11:0;;;;35566:17;;;;35594;;;;35622:12;35222:420::o;44231:565::-;44334:15;44351:23;44376:12;44390:23;44415:12;44429:18;44451:19;44462:7;44451:10;:19::i;:::-;-1:-1:-1;;;;;44499:15:0;;;;;;:7;:15;;;;;;44333:137;;-1:-1:-1;44333:137:0;;-1:-1:-1;44333:137:0;;-1:-1:-1;44333:137:0;-1:-1:-1;44333:137:0;-1:-1:-1;44333:137:0;-1:-1:-1;44499:28:0;;44519:7;44499:19;:28::i;:::-;-1:-1:-1;;;;;44481:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44556:7;:15;;;;:28;;44576:7;44556:19;:28::i;:::-;-1:-1:-1;;;;;44538:15:0;;;;;;;:7;:15;;;;;;:46;;;;44616:18;;;;;;;:39;;44639:15;44616:22;:39::i;:::-;-1:-1:-1;;;;;44595:18:0;;;;;;:7;:18;;;;;:60;44668:26;44683:10;44668:14;:26::i;:::-;44705:23;44717:4;44723;44705:11;:23::i;:::-;44761:9;-1:-1:-1;;;;;44744:44:0;44753:6;-1:-1:-1;;;;;44744:44:0;-1:-1:-1;;;;;;;;;;;44772:15:0;44744:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;44744:44:0;;;;;;;;44322:474;;;;;;44231:565;;;:::o;43638:585::-;43739:15;43756:23;43781:12;43795:23;43820:12;43834:18;43856:19;43867:7;43856:10;:19::i;:::-;-1:-1:-1;;;;;43904:15:0;;;;;;:7;:15;;;;;;43738:137;;-1:-1:-1;43738:137:0;;-1:-1:-1;43738:137:0;;-1:-1:-1;43738:137:0;-1:-1:-1;43738:137:0;-1:-1:-1;43738:137:0;-1:-1:-1;43904:28:0;;43738:137;43904:19;:28::i;:::-;-1:-1:-1;;;;;43886:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43964:18;;;;;:7;:18;;;;;:39;;43987:15;43964:22;:39::i;:::-;-1:-1:-1;;;;;43943:18:0;;;;;;:7;:18;;;;;;;;:60;;;;44035:7;:18;;;;:39;;44058:15;44035:22;:39::i;41627:721::-;41726:15;41743:23;41768:12;41782:23;41807:12;41821:18;41843:19;41854:7;41843:10;:19::i;:::-;41725:137;;;;;;;;;;;;41910:59;41919:6;41927:15;41944;41961:7;41910:8;:59::i;:::-;41873:96;-1:-1:-1;41873:96:0;-1:-1:-1;42017:64:0;42031:6;41873:96;;42073:7;42017:13;:64::i;:::-;-1:-1:-1;;;;;42110:15:0;;;;;;:7;:15;;;;;;41980:101;;-1:-1:-1;41980:101:0;;-1:-1:-1;42110:28:0;;42130:7;42110:19;:28::i;31770:642::-;31873:15;31890:23;31915:12;31929:23;31954:12;31968:18;31990:19;32001:7;31990:10;:19::i;:::-;-1:-1:-1;;;;;32038:15:0;;;;;;:7;:15;;;;;;31872:137;;-1:-1:-1;31872:137:0;;-1:-1:-1;31872:137:0;;-1:-1:-1;31872:137:0;-1:-1:-1;31872:137:0;-1:-1:-1;31872:137:0;-1:-1:-1;32038:28:0;;32058:7;32038:19;:28::i;:::-;-1:-1:-1;;;;;32020:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32095:7;:15;;;;:28;;32115:7;32095:19;:28::i;35060:154::-;35124:7;35151:55;35190:5;35151:20;35163:7;;35151;:11;;:20;;;;:::i;34883:166::-;34953:7;34980:61;35025:5;34980:26;34992:13;;34980:7;:11;;:26;;;;:::i;34520:355::-;34583:19;34606:10;:8;:10::i;:::-;34583:33;-1:-1:-1;34627:18:0;34648:27;:10;34583:33;34648:14;:27::i;:::-;34727:4;34711:22;;;;:7;:22;;;;;;34627:48;;-1:-1:-1;34711:38:0;;34627:48;34711:26;:38::i;:::-;34702:4;34686:22;;;;:7;:22;;;;;;;;:63;;;;34763:11;:26;;;;;;34760:107;;;34845:4;34829:22;;;;:7;:22;;;;;;:38;;34856:10;34829:26;:38::i;:::-;34820:4;34804:22;;;;:7;:22;;;;;:63;34572:303;;34520:355;:::o;32420:147::-;32498:7;;:17;;32510:4;32498:11;:17::i;:::-;32488:7;:27;32539:10;;:20;;32554:4;32539:14;:20::i;:::-;32526:10;:33;-1:-1:-1;;32420:147:0:o;42358:604::-;42481:7;42490;42513:8;;42523:1;42513:11;42510:62;;-1:-1:-1;42536:15:0;;-1:-1:-1;42553:15:0;42529:40;;42510:62;42619:8;;42582:13;;42598:30;;:16;:7;42610:3;42598:11;:16::i;:::-;:20;;:30::i;:::-;42582:46;;42639:13;42655:21;42665:10;:8;:10::i;:::-;42655:5;;:9;:21::i;:::-;42639:37;-1:-1:-1;42705:26:0;:15;42639:37;42705:19;:26::i;:::-;42687:44;-1:-1:-1;42760:26:0;:15;42780:5;42760:19;:26::i;:::-;42828:11;;-1:-1:-1;;;;;42828:11:0;42820:20;;;;:7;:20;;;;;;42742:44;;-1:-1:-1;42820:31:0;;42845:5;42820:24;:31::i;:::-;42805:11;;;-1:-1:-1;;;;;42805:11:0;;;42797:20;;;;:7;:20;;;;;;;;;:54;;;;42884:11;;42867:36;;1361:25:1;;;42884:11:0;;;;42867:36;;;;-1:-1:-1;;;;;;;;;;;42867:36:0;1334:18:1;42867:36:0;;;;;;;;42921:15;42938;42914:40;;;;;;42358:604;;;;;;;;:::o;42970:660::-;43098:7;43107;43130:13;;43145:1;43130:16;43127:67;;-1:-1:-1;43158:15:0;;-1:-1:-1;43175:15:0;43151:40;;43127:67;43246:13;;43204:18;;43225:35;;:16;:7;43237:3;43225:11;:16::i;:35::-;43204:56;;43271:18;43292:26;43307:10;:8;:10::i;43292:26::-;43271:47;-1:-1:-1;43347:31:0;:15;43271:47;43347:19;:31::i;:::-;43329:49;-1:-1:-1;43407:31:0;:15;43427:10;43407:19;:31::i;:::-;43490:4;43474:22;;;;:7;:22;;;;;;43389:49;;-1:-1:-1;43474:38:0;;43501:10;43474:26;:38::i;:::-;43465:4;43449:22;;;;:7;:22;;;;;;;:63;;;;43528:43;;-1:-1:-1;;;;;43528:43:0;;;-1:-1:-1;;;;;;;;;;;43528:43:0;;;43560:10;1361:25:1;;1349:2;1334:18;;1215:177;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2301:180::-;2360:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:52;;;2429:1;2426;2419:12;2381:52;-1:-1:-1;2452:23:1;;2301:180;-1:-1:-1;2301:180:1:o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3021:60;2927:160;;;:::o;3092:248::-;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3270:9;3257:23;3247:33;;3299:35;3330:2;3319:9;3315:18;3299:35;:::i;:::-;3289:45;;3092:248;;;;;:::o;3829:385::-;3915:6;3923;3931;3939;3992:3;3980:9;3971:7;3967:23;3963:33;3960:53;;;4009:1;4006;3999:12;3960:53;-1:-1:-1;;4032:23:1;;;4102:2;4087:18;;4074:32;;-1:-1:-1;4153:2:1;4138:18;;4125:32;;4204:2;4189:18;4176:32;;-1:-1:-1;3829:385:1;-1:-1:-1;3829:385:1:o;4219:180::-;4275:6;4328:2;4316:9;4307:7;4303:23;4299:32;4296:52;;;4344:1;4341;4334:12;4296:52;4367:26;4383:9;4367:26;:::i;4404:388::-;4472:6;4480;4533:2;4521:9;4512:7;4508:23;4504:32;4501:52;;;4549:1;4546;4539:12;4501:52;4588:9;4575:23;4607:31;4632:5;4607:31;:::i;:::-;4657:5;-1:-1:-1;4714:2:1;4699:18;;4686:32;4727:33;4686:32;4727:33;:::i;:::-;4779:7;4769:17;;;4404:388;;;;;:::o;4797:380::-;4876:1;4872:12;;;;4919;;;4940:61;;4994:4;4986:6;4982:17;4972:27;;4940:61;5047:2;5039:6;5036:14;5016:18;5013:38;5010:161;;5093:10;5088:3;5084:20;5081:1;5074:31;5128:4;5125:1;5118:15;5156:4;5153:1;5146:15;5010:161;;4797:380;;;:::o;5593:351::-;5795:2;5777:21;;;5834:2;5814:18;;;5807:30;5873:29;5868:2;5853:18;;5846:57;5935:2;5920:18;;5593:351::o;5949:127::-;6010:10;6005:3;6001:20;5998:1;5991:31;6041:4;6038:1;6031:15;6065:4;6062:1;6055:15;6081:127;6142:10;6137:3;6133:20;6130:1;6123:31;6173:4;6170:1;6163:15;6197:4;6194:1;6187:15;6213:128;6280:9;;;6301:11;;;6298:37;;;6315:18;;:::i;6346:127::-;6407:10;6402:3;6398:20;6395:1;6388:31;6438:4;6435:1;6428:15;6462:4;6459:1;6452:15;6478:135;6517:3;6538:17;;;6535:43;;6558:18;;:::i;:::-;-1:-1:-1;6605:1:1;6594:13;;6478:135::o;7391:336::-;7593:2;7575:21;;;7632:2;7612:18;;;7605:30;-1:-1:-1;;;7666:2:1;7651:18;;7644:42;7718:2;7703:18;;7391:336::o;10466:125::-;10531:9;;;10552:10;;;10549:36;;;10565:18;;:::i;11685:217::-;11725:1;11751;11741:132;;11795:10;11790:3;11786:20;11783:1;11776:31;11830:4;11827:1;11820:15;11858:4;11855:1;11848:15;11741:132;-1:-1:-1;11887:9:1;;11685:217::o;11907:168::-;11980:9;;;12011;;12028:15;;;12022:22;;12008:37;11998:71;;12049:18;;:::i;12614:251::-;12684:6;12737:2;12725:9;12716:7;12712:23;12708:32;12705:52;;;12753:1;12750;12743:12;12705:52;12785:9;12779:16;12804:31;12829:5;12804:31;:::i;12870:980::-;13132:4;13180:3;13169:9;13165:19;13211:6;13200:9;13193:25;13237:2;13275:6;13270:2;13259:9;13255:18;13248:34;13318:3;13313:2;13302:9;13298:18;13291:31;13342:6;13377;13371:13;13408:6;13400;13393:22;13446:3;13435:9;13431:19;13424:26;;13485:2;13477:6;13473:15;13459:29;;13506:1;13516:195;13530:6;13527:1;13524:13;13516:195;;;13595:13;;-1:-1:-1;;;;;13591:39:1;13579:52;;13686:15;;;;13651:12;;;;13627:1;13545:9;13516:195;;;-1:-1:-1;;;;;;;13767:32:1;;;;13762:2;13747:18;;13740:60;-1:-1:-1;;;13831:3:1;13816:19;13809:35;13728:3;12870:980;-1:-1:-1;;;12870:980:1:o;14467:306::-;14555:6;14563;14571;14624:2;14612:9;14603:7;14599:23;14595:32;14592:52;;;14640:1;14637;14630:12;14592:52;14669:9;14663:16;14653:26;;14719:2;14708:9;14704:18;14698:25;14688:35;;14763:2;14752:9;14748:18;14742:25;14732:35;;14467:306;;;;;:::o
Swarm Source
ipfs://ae49e821e955193b40e171ba1ebb90585075be2008e0eafe76bf6d40ce3d1342
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.