ERC-20
Overview
Max Total Supply
100,000,000,000,000,000 G.O.A.T
Holders
876
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoatToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-10 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract GoatToken is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) public _firstBuyTime; mapping (address => bool) private _isExcludedFromFee; address payable public marketing; address payable private _burnPool = 0x0000000000000000000000000000000000000000; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**15 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "G.O.A.T Token"; string private _symbol = "G.O.A.T"; uint8 private _decimals = 9; uint256 public _taxBuyFee = 2; uint256 public _taxSellFee = 2; uint256 public _taxTransferFee = 2; uint256 private _operationsFee = 0; //adjusted on the go uint256 private _liquidityFee = 0; //adjusted on the go uint256 private _taxFee = 0; //adjusted on the go uint256 private _burnFee = 0; //adjusted on the go uint256 public _marketingBuyFee = 4; uint256 public _marketingSellFee = 4; uint256 public _marketingTransferFee = 0; uint256 public _liquidityBuyFee = 2; uint256 public _liquiditySellFee = 2; uint256 public _liquidityTransferFee = 0; uint256 public _burnBuyFee = 2; uint256 public _burnSellFee = 2; uint256 public _burnTransferFee = 2; uint256 public _pendingLiquidityFees = 0; uint256 public _antiWhaleSellMultiplicator = 30; // div by 10 uint256 public _dayTraderMultiplicator = 20; // div by 10 IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxWalletHolding = 3 * 10**15 * 10**9; uint256 public _maxSell = 900 * 10**12 * 10**9; uint256 public _antiWhaleSellThreshold = 25 * 10**18; // in ETH wei uint256 private numTokensSellToAddToLiquidity = 150 * 10**12 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor (address payable _marketing) public { marketing = _marketing; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_burnPool] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { 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 totalFees() public view returns (uint256) { return _tFeeTotal; } 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); } //this can be called externally by deployer to immediately process accumulated fees accordingly (distribute to treasury & liquidity) function manualSwapAndLiquify() public onlyOwner() { uint256 contractTokenBalance = balanceOf(address(this)); swapAndLiquify(contractTokenBalance); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTax(uint256 _taxType, uint _taxSize) external onlyOwner() { if (_taxType == 1) { _taxSellFee = _taxSize; } else if (_taxType == 2) { _taxBuyFee = _taxSize; } else if (_taxType == 3) { _taxTransferFee = _taxSize; } else if (_taxType == 4) { _marketingBuyFee = _taxSize; } else if (_taxType == 5) { _marketingSellFee = _taxSize; } else if (_taxType == 6) { _marketingTransferFee = _taxSize; } else if (_taxType == 7) { _burnBuyFee = _taxSize; } else if (_taxType == 8) { _burnSellFee = _taxSize; } else if (_taxType == 9) { _burnTransferFee = _taxSize; } else if (_taxType == 10) { _liquidityBuyFee = _taxSize; } else if (_taxType == 11) { _liquiditySellFee = _taxSize; } else if (_taxType == 12) { _liquidityTransferFee = _taxSize; } else if (_taxType == 13) { _antiWhaleSellMultiplicator = _taxSize; } else if (_taxType == 14) { _dayTraderMultiplicator = _taxSize; } } function setMaxWalletHolding(uint256 maxHolding) external onlyOwner() { _maxWalletHolding = maxHolding; } function setMaxSell(uint256 maxSell) external onlyOwner() { _maxSell = maxSell; } function setAntiWhaleSellThreshold(uint256 maxSellThreshold) external onlyOwner() { _antiWhaleSellThreshold = maxSellThreshold; } function setSwapAndLiquifyEnabled(bool _enabled, uint256 _numTokensMin) public onlyOwner { swapAndLiquifyEnabled = _enabled; numTokensSellToAddToLiquidity = _numTokensMin; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to receive ETH from uniswapV2Router when swaping receive() external payable {} 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) { uint256[4] memory tValues = _getTValuesArray(tAmount); uint256[3] memory rValues = _getRValuesArray(tAmount, tValues[1], tValues[2], tValues[3]); return (rValues[0], rValues[1], rValues[2], tValues[0], tValues[1], tValues[2], tValues[3]); } function _getTValuesArray(uint256 tAmount) private view returns (uint256[4] memory val) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tOperations = calculateOperationsFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tOperations); return [tTransferAmount, tFee, tLiquidity, tOperations]; } function _getRValuesArray(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tOperations) private view returns (uint256[3] memory val) { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(tLiquidity.mul(currentRate)).sub(tOperations.mul(currentRate)); 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; 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); _pendingLiquidityFees = _pendingLiquidityFees.add(tLiquidity); } function _takeOperations(uint256 tOperations) private { uint256 currentRate = _getRate(); uint256 tBurn = 0; if (_operationsFee > 0) { tBurn = _burnFee.mul(tOperations).div(_operationsFee); emit Transfer(address(this), address(0), tBurn); } uint256 rOperations = tOperations.sub(tBurn).mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rOperations); _rOwned[_burnPool] = _rOwned[_burnPool].add(tBurn.mul(currentRate)); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateOperationsFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_operationsFee).div( 10**2 ); } function removeAllFee() private { _taxFee = 0; _liquidityFee = 0; _operationsFee = 0; _burnFee = 0; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //depending on type of transfer (buy, sell, or p2p tokens transfer) different taxes & fees are applied bool isTransferBuy = from == uniswapV2Pair; bool isTransferSell = to == uniswapV2Pair; if (!isTransferBuy && !isTransferSell) { _operationsFee = _marketingTransferFee.add(_burnTransferFee); _liquidityFee = _liquidityTransferFee; _taxFee = _taxTransferFee; _burnFee = _burnTransferFee; } else if (isTransferBuy) { _operationsFee = _marketingBuyFee.add(_burnBuyFee); _liquidityFee = _liquidityBuyFee; _taxFee = _taxBuyFee; _burnFee = _burnBuyFee; if (_firstBuyTime[to] == 0) _firstBuyTime[to] = block.timestamp; } else if (isTransferSell) { uint tax_multiplicator = 10; _operationsFee = _marketingSellFee.add(_burnSellFee); _liquidityFee = _liquiditySellFee; _taxFee = _taxSellFee; _burnFee = _burnSellFee; //preventing sale when selling more than 0.9% of supply if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ require(amount < _maxSell, "Max sell exceeds limit"); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uint[] memory sale_output_estimate = uniswapV2Router.getAmountsOut(amount, path); if (sale_output_estimate[1] >= _antiWhaleSellThreshold) { //increasing taxes (x3) when sell is larger than 25eth (adjustable) tax_multiplicator = _antiWhaleSellMultiplicator; } else if (_firstBuyTime[from] != 0 && (_firstBuyTime[from] + (24 hours) > block.timestamp) ) { //doubling sell tax when user is selling within 24 hrs (Day Trader Tax) tax_multiplicator = _dayTraderMultiplicator; } } _operationsFee = _operationsFee.mul(tax_multiplicator).div(10); _liquidityFee = _liquidityFee.mul(tax_multiplicator).div(10); _taxFee = _taxFee.mul(tax_multiplicator).div(10); _burnFee = _burnFee.mul(tax_multiplicator).div(10); } //transfer amount, it will take tax, liquidity & treasury fees _tokenTransfer(from,to,amount,takeFee); removeAllFee(); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 liquidityPart = 0; if (_pendingLiquidityFees < contractTokenBalance) liquidityPart = _pendingLiquidityFees; uint256 distributionPart = contractTokenBalance.sub(liquidityPart); uint256 liquidityHalfPart = liquidityPart.div(2); uint256 liquidityHalfTokenPart = liquidityPart.sub(liquidityHalfPart); //now swapping half of the liquidity part + all of the distribution part into ETH uint256 totalETHSwap = liquidityHalfPart.add(distributionPart); uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(totalETHSwap); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 liquidityBalance = liquidityHalfPart.mul(newBalance).div(totalETHSwap); // add liquidity to uniswap if (liquidityHalfTokenPart > 0 && liquidityBalance > 0) addLiquidity(liquidityHalfTokenPart, liquidityBalance); emit SwapAndLiquify(liquidityHalfPart, liquidityBalance, liquidityHalfPart); newBalance = address(this).balance; marketing.sendValue(newBalance); _pendingLiquidityFees = 0; } 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, 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, 0, marketing, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); _transferStandard(sender, recipient, amount); if (!_isExcludedFromFee[recipient] && (recipient != uniswapV2Pair)) require(balanceOf(recipient) < _maxWalletHolding, "Max Wallet holding limit exceeded"); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tOperations) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeOperations(tOperations); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"}],"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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_antiWhaleSellMultiplicator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_antiWhaleSellThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dayTraderMultiplicator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_firstBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTransferFee","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":"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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","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":"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":[{"internalType":"uint256","name":"maxSellThreshold","type":"uint256"}],"name":"setAntiWhaleSellThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHolding","type":"uint256"}],"name":"setMaxWalletHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_numTokensMin","type":"uint256"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxType","type":"uint256"},{"internalType":"uint256","name":"_taxSize","type":"uint256"}],"name":"setTax","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e4000000600a55600a54600019816200006357fe5b0660001903600b556040518060400160405280600d81526020017f472e4f2e412e5420546f6b656e00000000000000000000000000000000000000815250600d9080519060200190620000b892919062000799565b506040518060400160405280600781526020017f472e4f2e412e5400000000000000000000000000000000000000000000000000815250600e90805190602001906200010692919062000799565b506009600f60006101000a81548160ff021916908360ff16021790555060026010556002601155600260125560006013556000601455600060155560006016556004601755600460185560006019556002601a556002601b556000601c556002601d556002601e556002601f556000602055601e60215560146022556001602360016101000a81548160ff0219169083151502179055506a027b46536c66c8e300000060245569be951906eba2aa80000060255568015af1d78b58c40000602655691fc3842bd1f071c00000602755348015620001e257600080fd5b50604051620053b6380380620053b6833981810160405260208110156200020857600080fd5b810190808051906020019092919050505060006200022b6200076860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b5460036000620003216200076860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bf57600080fd5b505afa158015620003d4573d6000803e3d6000fd5b505050506040513d6020811015620003eb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200045f57600080fd5b505afa15801562000474573d6000803e3d6000fd5b505050506040513d60208110156200048b57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200050657600080fd5b505af11580156200051b573d6000803e3d6000fd5b505050506040513d60208110156200053257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160076000620005c66200077060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006f96200076860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a350506200083f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007dc57805160ff19168380011785556200080d565b828001600101855582156200080d579182015b828111156200080c578251825591602001919060010190620007ef565b5b5090506200081c919062000820565b5090565b5b808211156200083b57600081600090555060010162000821565b5090565b60805160601c60a05160601c614b16620008a0600039806115b55280612b965280612cc15280612d145280613a0552508061114c528061307b52806131655280613e375280613f235280613f4a5280614055528061407c5250614b166000f3fe6080604052600436106103035760003560e01c8063733b864f11610190578063cd4f852d116100dc578063e799eb2611610095578063ef998cf01161006f578063ef998cf014610f98578063f2fde38b14610fd3578063f499133514611024578063fa156a661461104f5761030a565b8063e799eb2614610ee1578063ea2f0b3714610f0c578063ed8992cc14610f5d5761030a565b8063cd4f852d14610d75578063dac1138014610da0578063dd46706414610dcb578063dd62ed3e14610e06578063e125460214610e8b578063e3624bba14610eb65761030a565b806395d89b4111610149578063a69df4b511610123578063a69df4b514610c97578063a9059cbb14610cae578063a93a0fd014610d1f578063b6c5232414610d4a5761030a565b806395d89b4114610b31578063a457c2d714610bc1578063a639c05c14610c325761030a565b8063733b864f14610a2d5780637881fc2714610a445780637b29f1bc14610a6f57806382ee8f4c14610a9a578063866435c514610ac55780638da5cb5b14610af05761030a565b8063395093511161024f5780635342acb4116102085780636b73fc9a116101e25780636b73fc9a1461093f5780636f60efbc1461096a57806370a08231146109b1578063715018a614610a165761030a565b80635342acb414610868578063667f6526146108cf5780636a61e7e3146109145761030a565b806339509351146106a2578063437823ec146107135780634549b0391461076457806349bd5a5e146107bf5780634a74bb02146108005780634fb2343a1461082d5761030a565b806318a19400116102bc578063243299ba11610296578063243299ba146105b95780632d3e474a146105e45780632d83811914610625578063313ce567146106745761030a565b806318a19400146104d25780631944ada3146104fd57806323b872dd146105285761030a565b806306fdde031461030f5780630773d31d1461039f578063095ea7b3146103ca57806313114a9d1461043b5780631694505e1461046657806318160ddd146104a75761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461107a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610364578082015181840152602081019050610349565b50505050905090810190601f1680156103915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ab57600080fd5b506103b461111c565b6040518082815260200191505060405180910390f35b3480156103d657600080fd5b50610423600480360360408110156103ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561044757600080fd5b50610450611140565b6040518082815260200191505060405180910390f35b34801561047257600080fd5b5061047b61114a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b357600080fd5b506104bc61116e565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b506104e7611178565b6040518082815260200191505060405180910390f35b34801561050957600080fd5b5061051261117e565b6040518082815260200191505060405180910390f35b34801561053457600080fd5b506105a16004803603606081101561054b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611184565b60405180821515815260200191505060405180910390f35b3480156105c557600080fd5b506105ce61125d565b6040518082815260200191505060405180910390f35b3480156105f057600080fd5b506105f9611263565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063157600080fd5b5061065e6004803603602081101561064857600080fd5b8101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b34801561068057600080fd5b5061068961130d565b604051808260ff16815260200191505060405180910390f35b3480156106ae57600080fd5b506106fb600480360360408110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611324565b60405180821515815260200191505060405180910390f35b34801561071f57600080fd5b506107626004803603602081101561073657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d7565b005b34801561077057600080fd5b506107a96004803603604081101561078757600080fd5b81019080803590602001909291908035151590602001909291905050506114fa565b6040518082815260200191505060405180910390f35b3480156107cb57600080fd5b506107d46115b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080c57600080fd5b506108156115d7565b60405180821515815260200191505060405180910390f35b34801561083957600080fd5b506108666004803603602081101561085057600080fd5b81019080803590602001909291905050506115ea565b005b34801561087457600080fd5b506108b76004803603602081101561088b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116bc565b60405180821515815260200191505060405180910390f35b3480156108db57600080fd5b50610912600480360360408110156108f257600080fd5b810190808035906020019092919080359060200190929190505050611712565b005b34801561092057600080fd5b5061092961190d565b6040518082815260200191505060405180910390f35b34801561094b57600080fd5b50610954611913565b6040518082815260200191505060405180910390f35b34801561097657600080fd5b506109af6004803603604081101561098d57600080fd5b8101908080351515906020019092919080359060200190929190505050611919565b005b3480156109bd57600080fd5b50610a00600480360360208110156109d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a3f565b6040518082815260200191505060405180910390f35b348015610a2257600080fd5b50610a2b611a90565b005b348015610a3957600080fd5b50610a42611c16565b005b348015610a5057600080fd5b50610a59611cf7565b6040518082815260200191505060405180910390f35b348015610a7b57600080fd5b50610a84611cfd565b6040518082815260200191505060405180910390f35b348015610aa657600080fd5b50610aaf611d03565b6040518082815260200191505060405180910390f35b348015610ad157600080fd5b50610ada611d09565b6040518082815260200191505060405180910390f35b348015610afc57600080fd5b50610b05611d0f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3d57600080fd5b50610b46611d38565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b86578082015181840152602081019050610b6b565b50505050905090810190601f168015610bb35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bcd57600080fd5b50610c1a60048036036040811015610be457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dda565b60405180821515815260200191505060405180910390f35b348015610c3e57600080fd5b50610c8160048036036020811015610c5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea7565b6040518082815260200191505060405180910390f35b348015610ca357600080fd5b50610cac611ebf565b005b348015610cba57600080fd5b50610d0760048036036040811015610cd157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120dc565b60405180821515815260200191505060405180910390f35b348015610d2b57600080fd5b50610d346120fa565b6040518082815260200191505060405180910390f35b348015610d5657600080fd5b50610d5f612100565b6040518082815260200191505060405180910390f35b348015610d8157600080fd5b50610d8a61210a565b6040518082815260200191505060405180910390f35b348015610dac57600080fd5b50610db5612110565b6040518082815260200191505060405180910390f35b348015610dd757600080fd5b50610e0460048036036020811015610dee57600080fd5b8101908080359060200190929190505050612116565b005b348015610e1257600080fd5b50610e7560048036036040811015610e2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612307565b6040518082815260200191505060405180910390f35b348015610e9757600080fd5b50610ea061238e565b6040518082815260200191505060405180910390f35b348015610ec257600080fd5b50610ecb612394565b6040518082815260200191505060405180910390f35b348015610eed57600080fd5b50610ef661239a565b6040518082815260200191505060405180910390f35b348015610f1857600080fd5b50610f5b60048036036020811015610f2f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123a0565b005b348015610f6957600080fd5b50610f9660048036036020811015610f8057600080fd5b81019080803590602001909291905050506124c3565b005b348015610fa457600080fd5b50610fd160048036036020811015610fbb57600080fd5b8101908080359060200190929190505050612595565b005b348015610fdf57600080fd5b5061102260048036036020811015610ff657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612667565b005b34801561103057600080fd5b50611039612872565b6040518082815260200191505060405180910390f35b34801561105b57600080fd5b50611064612878565b6040518082815260200191505060405180910390f35b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111125780601f106110e757610100808354040283529160200191611112565b820191906000526020600020905b8154815290600101906020018083116110f557829003601f168201915b5050505050905090565b60255481565b600061113661112f61287e565b8484612886565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b601e5481565b60195481565b6000611191848484612a7d565b6112528461119d61287e565b61124d856040518060600160405280602881526020016149de60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120361287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134979092919063ffffffff16565b612886565b600190509392505050565b60225481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b548211156112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614911602a913960400191505060405180910390fd5b60006112f0613557565b9050611305818461358290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b60006113cd61133161287e565b846113c8856005600061134261287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b612886565b6001905092915050565b6113df61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161159557600061158484613654565b5050505050509050809150506115ad565b60006115a084613654565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b602360019054906101000a900460ff1681565b6115f261287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060248190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61171a61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018214156117ef5780601181905550611909565b60028214156118045780601081905550611908565b60038214156118195780601281905550611907565b600482141561182e5780601781905550611906565b60058214156118435780601881905550611905565b60068214156118585780601981905550611904565b600782141561186d5780601d81905550611903565b60088214156118825780601e81905550611902565b60098214156118975780601f81905550611901565b600a8214156118ac5780601a81905550611900565b600b8214156118c15780601b819055506118ff565b600c8214156118d65780601c819055506118fe565b600d8214156118eb57806021819055506118fd565b600e8214156118fc57806022819055505b5b5b5b5b5b5b5b5b5b5b5b5b5b5050565b60215481565b601d5481565b61192161287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81602360016101000a81548160ff021916908315150217905550806027819055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598260405180821515815260200191505060405180910390a15050565b6000611a89600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b9050919050565b611a9861287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c1e61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611ce930611a3f565b9050611cf481613754565b50565b601c5481565b60105481565b60265481565b60205481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dd05780601f10611da557610100808354040283529160200191611dd0565b820191906000526020600020905b815481529060010190602001808311611db357829003601f168201915b5050505050905090565b6000611e9d611de761287e565b84611e9885604051806060016040528060258152602001614a9b6025913960056000611e1161287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134979092919063ffffffff16565b612886565b6001905092915050565b60066020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a786023913960400191505060405180910390fd5b6002544211611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120f06120e961287e565b8484612a7d565b6001905092915050565b60175481565b6000600254905090565b60115481565b601b5481565b61211e61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601a5481565b60185481565b601f5481565b6123a861287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612468576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6124cb61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060268190555050565b61259d61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060258190555050565b61266f61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061493b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60245481565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614a546024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149616022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a2f6025913960400191505060405180910390fd5b60008111612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614a066029913960400191505060405180910390fd5b6000612b6730611a3f565b905060006027548210159050808015612b8d5750602360009054906101000a900460ff16155b8015612be557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfd5750602360019054906101000a900460ff165b15612c0c57612c0b82613754565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cb35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbd57600090505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905081158015612d6f575080155b15612db157612d8b601f546019546135cc90919063ffffffff16565b601381905550601c54601481905550601254601581905550601f54601681905550613479565b8115612e8157612dce601d546017546135cc90919063ffffffff16565b601381905550601a54601481905550601054601581905550601d546016819055506000600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7c5742600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613478565b8015613477576000600a9050612ea4601e546018546135cc90919063ffffffff16565b601381905550601b54601481905550601154601581905550601e54601681905550600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f695750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133bd576025548710612fe5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d61782073656c6c2065786365656473206c696d69740000000000000000000081525060200191505060405180910390fd5b6060600267ffffffffffffffff81118015612fff57600080fd5b5060405190808252806020026020018201604052801561302e5781602001602082028036833780820191505090505b509050308160008151811061303f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130df57600080fd5b505afa1580156130f3573d6000803e3d6000fd5b505050506040513d602081101561310957600080fd5b81019080805190602001909291905050508160018151811061312757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f8a846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156131f95780820151818401526020810190506131de565b50505050905001935050505060006040518083038186803b15801561321d57600080fd5b505afa158015613231573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561325b57600080fd5b810190808051604051939291908464010000000082111561327b57600080fd5b8382019150602082018581111561329157600080fd5b82518660208202830111640100000000821117156132ae57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156132e55780820151818401526020810190506132ca565b5050505090500160405250505090506026548160018151811061330457fe5b60200260200101511061331b5760215492506133ba565b6000600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156133ae57504262015180600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156133b95760225492505b5b50505b6133e5600a6133d78360135461390f90919063ffffffff16565b61358290919063ffffffff16565b601381905550613413600a6134058360145461390f90919063ffffffff16565b61358290919063ffffffff16565b601481905550613441600a6134338360155461390f90919063ffffffff16565b61358290919063ffffffff16565b60158190555061346f600a6134618360165461390f90919063ffffffff16565b61358290919063ffffffff16565b601681905550505b5b5b61348588888886613995565b61348d613ac2565b5050505050505050565b6000838311158290613544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135095780820151818401526020810190506134ee565b50505050905090810190601f1680156135365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613564613ae4565b9150915061357b818361358290919063ffffffff16565b9250505090565b60006135c483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b31565b905092915050565b60008082840190508381101561364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060006136676148cc565b61367089613bf7565b905061367a6148ee565b6136b98a8360016004811061368b57fe5b60200201518460026004811061369d57fe5b6020020151856003600481106136af57fe5b6020020151613c8d565b9050806000600381106136c857fe5b6020020151816001600381106136da57fe5b6020020151826002600381106136ec57fe5b6020020151846000600481106136fe57fe5b60200201518560016004811061371057fe5b60200201518660026004811061372257fe5b60200201518760036004811061373457fe5b602002015198509850985098509850985098505050919395979092949650565b6001602360006101000a81548160ff02191690831515021790555060008160205410156137815760205490505b60006137968284613d5790919063ffffffff16565b905060006137ae60028461358290919063ffffffff16565b905060006137c58285613d5790919063ffffffff16565b905060006137dc84846135cc90919063ffffffff16565b905060004790506137ec82613da1565b60006138018247613d5790919063ffffffff16565b9050600061382a8461381c848961390f90919063ffffffff16565b61358290919063ffffffff16565b905060008511801561383c5750600081115b1561384c5761384b858261404f565b5b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828860405180848152602001838152602001828152602001935050505060405180910390a14791506138e182600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166141bb90919063ffffffff16565b600060208190555050505050505050506000602360006101000a81548160ff02191690831515021790555050565b600080831415613922576000905061398f565b600082840290508284828161393357fe5b041461398a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149bd6021913960400191505060405180910390fd5b809150505b92915050565b806139a3576139a2613ac2565b5b6139ae8484846142f5565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a5457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613abc57602454613a6584611a3f565b10613abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ac06021913960400191505060405180910390fd5b5b50505050565b6000601581905550600060148190555060006013819055506000601681905550565b6000806000600b5490506000600a549050613b0c600a54600b5461358290919063ffffffff16565b821015613b2457600b54600a54935093505050613b2d565b81819350935050505b9091565b60008083118290613bdd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ba2578082015181840152602081019050613b87565b50505050905090810190601f168015613bcf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613be957fe5b049050809150509392505050565b613bff6148cc565b6000613c0a836144ce565b90506000613c17846144ff565b90506000613c2485614530565b90506000613c5f82613c5185613c43888b613d5790919063ffffffff16565b613d5790919063ffffffff16565b613d5790919063ffffffff16565b9050604051806080016040528082815260200185815260200184815260200183815250945050505050919050565b613c956148ee565b6000613c9f613557565b90506000613cb6828861390f90919063ffffffff16565b90506000613ccd838861390f90919063ffffffff16565b90506000613d2c613ce7858861390f90919063ffffffff16565b613d1e613cfd878b61390f90919063ffffffff16565b613d108688613d5790919063ffffffff16565b613d5790919063ffffffff16565b613d5790919063ffffffff16565b9050604051806060016040528084815260200182815260200183815250945050505050949350505050565b6000613d9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613497565b905092915050565b6060600267ffffffffffffffff81118015613dbb57600080fd5b50604051908082528060200260200182016040528015613dea5781602001602082028036833780820191505090505b5090503081600081518110613dfb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e9b57600080fd5b505afa158015613eaf573d6000803e3d6000fd5b505050506040513d6020811015613ec557600080fd5b810190808051906020019092919050505081600181518110613ee357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f48307f000000000000000000000000000000000000000000000000000000000000000084612886565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561400a578082015181840152602081019050613fef565b505050509050019650505050505050600060405180830381600087803b15801561403357600080fd5b505af1158015614047573d6000803e3d6000fd5b505050505050565b61407a307f000000000000000000000000000000000000000000000000000000000000000084612886565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561416457600080fd5b505af1158015614178573d6000803e3d6000fd5b50505050506040513d606081101561418f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b80471015614231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114614291576040519150601f19603f3d011682016040523d82523d6000602084013e614296565b606091505b50509050806142f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614983603a913960400191505060405180910390fd5b505050565b600080600080600080600061430988613654565b965096509650965096509650965061436987600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5790919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fe86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444a82614561565b61445381614639565b61445d8584614892565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b60006144f860646144ea6015548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b6000614529606461451b6014548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b600061455a606461454c6013548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b600061456b613557565b90506000614582828461390f90919063ffffffff16565b90506145d681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061462e836020546135cc90919063ffffffff16565b602081905550505050565b6000614643613557565b905060008060135411156146e35761467a60135461466c8560165461390f90919063ffffffff16565b61358290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061470a836146fc8487613d5790919063ffffffff16565b61390f90919063ffffffff16565b905061475e81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148276147b7848461390f90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6148a782600b54613d5790919063ffffffff16565b600b819055506148c281600c546135cc90919063ffffffff16565b600c819055505050565b6040518060800160405280600490602082028036833780820191505090505090565b604051806060016040528060039060208202803683378082019150509050509056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4d61782057616c6c657420686f6c64696e67206c696d6974206578636565646564a26469706673582212208c6c87eeda24130aaaead94b3e48a54843da9a409be0de40231f88f3d106705964736f6c634300060c003300000000000000000000000018f3e0c9f3bdd2e79e3eeeb1bcd8e6bb9702095f
Deployed Bytecode
0x6080604052600436106103035760003560e01c8063733b864f11610190578063cd4f852d116100dc578063e799eb2611610095578063ef998cf01161006f578063ef998cf014610f98578063f2fde38b14610fd3578063f499133514611024578063fa156a661461104f5761030a565b8063e799eb2614610ee1578063ea2f0b3714610f0c578063ed8992cc14610f5d5761030a565b8063cd4f852d14610d75578063dac1138014610da0578063dd46706414610dcb578063dd62ed3e14610e06578063e125460214610e8b578063e3624bba14610eb65761030a565b806395d89b4111610149578063a69df4b511610123578063a69df4b514610c97578063a9059cbb14610cae578063a93a0fd014610d1f578063b6c5232414610d4a5761030a565b806395d89b4114610b31578063a457c2d714610bc1578063a639c05c14610c325761030a565b8063733b864f14610a2d5780637881fc2714610a445780637b29f1bc14610a6f57806382ee8f4c14610a9a578063866435c514610ac55780638da5cb5b14610af05761030a565b8063395093511161024f5780635342acb4116102085780636b73fc9a116101e25780636b73fc9a1461093f5780636f60efbc1461096a57806370a08231146109b1578063715018a614610a165761030a565b80635342acb414610868578063667f6526146108cf5780636a61e7e3146109145761030a565b806339509351146106a2578063437823ec146107135780634549b0391461076457806349bd5a5e146107bf5780634a74bb02146108005780634fb2343a1461082d5761030a565b806318a19400116102bc578063243299ba11610296578063243299ba146105b95780632d3e474a146105e45780632d83811914610625578063313ce567146106745761030a565b806318a19400146104d25780631944ada3146104fd57806323b872dd146105285761030a565b806306fdde031461030f5780630773d31d1461039f578063095ea7b3146103ca57806313114a9d1461043b5780631694505e1461046657806318160ddd146104a75761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461107a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610364578082015181840152602081019050610349565b50505050905090810190601f1680156103915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ab57600080fd5b506103b461111c565b6040518082815260200191505060405180910390f35b3480156103d657600080fd5b50610423600480360360408110156103ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561044757600080fd5b50610450611140565b6040518082815260200191505060405180910390f35b34801561047257600080fd5b5061047b61114a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b357600080fd5b506104bc61116e565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b506104e7611178565b6040518082815260200191505060405180910390f35b34801561050957600080fd5b5061051261117e565b6040518082815260200191505060405180910390f35b34801561053457600080fd5b506105a16004803603606081101561054b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611184565b60405180821515815260200191505060405180910390f35b3480156105c557600080fd5b506105ce61125d565b6040518082815260200191505060405180910390f35b3480156105f057600080fd5b506105f9611263565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063157600080fd5b5061065e6004803603602081101561064857600080fd5b8101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b34801561068057600080fd5b5061068961130d565b604051808260ff16815260200191505060405180910390f35b3480156106ae57600080fd5b506106fb600480360360408110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611324565b60405180821515815260200191505060405180910390f35b34801561071f57600080fd5b506107626004803603602081101561073657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d7565b005b34801561077057600080fd5b506107a96004803603604081101561078757600080fd5b81019080803590602001909291908035151590602001909291905050506114fa565b6040518082815260200191505060405180910390f35b3480156107cb57600080fd5b506107d46115b3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080c57600080fd5b506108156115d7565b60405180821515815260200191505060405180910390f35b34801561083957600080fd5b506108666004803603602081101561085057600080fd5b81019080803590602001909291905050506115ea565b005b34801561087457600080fd5b506108b76004803603602081101561088b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116bc565b60405180821515815260200191505060405180910390f35b3480156108db57600080fd5b50610912600480360360408110156108f257600080fd5b810190808035906020019092919080359060200190929190505050611712565b005b34801561092057600080fd5b5061092961190d565b6040518082815260200191505060405180910390f35b34801561094b57600080fd5b50610954611913565b6040518082815260200191505060405180910390f35b34801561097657600080fd5b506109af6004803603604081101561098d57600080fd5b8101908080351515906020019092919080359060200190929190505050611919565b005b3480156109bd57600080fd5b50610a00600480360360208110156109d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a3f565b6040518082815260200191505060405180910390f35b348015610a2257600080fd5b50610a2b611a90565b005b348015610a3957600080fd5b50610a42611c16565b005b348015610a5057600080fd5b50610a59611cf7565b6040518082815260200191505060405180910390f35b348015610a7b57600080fd5b50610a84611cfd565b6040518082815260200191505060405180910390f35b348015610aa657600080fd5b50610aaf611d03565b6040518082815260200191505060405180910390f35b348015610ad157600080fd5b50610ada611d09565b6040518082815260200191505060405180910390f35b348015610afc57600080fd5b50610b05611d0f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3d57600080fd5b50610b46611d38565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b86578082015181840152602081019050610b6b565b50505050905090810190601f168015610bb35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bcd57600080fd5b50610c1a60048036036040811015610be457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dda565b60405180821515815260200191505060405180910390f35b348015610c3e57600080fd5b50610c8160048036036020811015610c5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea7565b6040518082815260200191505060405180910390f35b348015610ca357600080fd5b50610cac611ebf565b005b348015610cba57600080fd5b50610d0760048036036040811015610cd157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120dc565b60405180821515815260200191505060405180910390f35b348015610d2b57600080fd5b50610d346120fa565b6040518082815260200191505060405180910390f35b348015610d5657600080fd5b50610d5f612100565b6040518082815260200191505060405180910390f35b348015610d8157600080fd5b50610d8a61210a565b6040518082815260200191505060405180910390f35b348015610dac57600080fd5b50610db5612110565b6040518082815260200191505060405180910390f35b348015610dd757600080fd5b50610e0460048036036020811015610dee57600080fd5b8101908080359060200190929190505050612116565b005b348015610e1257600080fd5b50610e7560048036036040811015610e2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612307565b6040518082815260200191505060405180910390f35b348015610e9757600080fd5b50610ea061238e565b6040518082815260200191505060405180910390f35b348015610ec257600080fd5b50610ecb612394565b6040518082815260200191505060405180910390f35b348015610eed57600080fd5b50610ef661239a565b6040518082815260200191505060405180910390f35b348015610f1857600080fd5b50610f5b60048036036020811015610f2f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123a0565b005b348015610f6957600080fd5b50610f9660048036036020811015610f8057600080fd5b81019080803590602001909291905050506124c3565b005b348015610fa457600080fd5b50610fd160048036036020811015610fbb57600080fd5b8101908080359060200190929190505050612595565b005b348015610fdf57600080fd5b5061102260048036036020811015610ff657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612667565b005b34801561103057600080fd5b50611039612872565b6040518082815260200191505060405180910390f35b34801561105b57600080fd5b50611064612878565b6040518082815260200191505060405180910390f35b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111125780601f106110e757610100808354040283529160200191611112565b820191906000526020600020905b8154815290600101906020018083116110f557829003601f168201915b5050505050905090565b60255481565b600061113661112f61287e565b8484612886565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b601e5481565b60195481565b6000611191848484612a7d565b6112528461119d61287e565b61124d856040518060600160405280602881526020016149de60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120361287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134979092919063ffffffff16565b612886565b600190509392505050565b60225481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b548211156112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614911602a913960400191505060405180910390fd5b60006112f0613557565b9050611305818461358290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b60006113cd61133161287e565b846113c8856005600061134261287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b612886565b6001905092915050565b6113df61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161159557600061158484613654565b5050505050509050809150506115ad565b60006115a084613654565b5050505050915050809150505b92915050565b7f0000000000000000000000004cedf45d496e5bc36beda9197b0edc4957d9808081565b602360019054906101000a900460ff1681565b6115f261287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060248190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61171a61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018214156117ef5780601181905550611909565b60028214156118045780601081905550611908565b60038214156118195780601281905550611907565b600482141561182e5780601781905550611906565b60058214156118435780601881905550611905565b60068214156118585780601981905550611904565b600782141561186d5780601d81905550611903565b60088214156118825780601e81905550611902565b60098214156118975780601f81905550611901565b600a8214156118ac5780601a81905550611900565b600b8214156118c15780601b819055506118ff565b600c8214156118d65780601c819055506118fe565b600d8214156118eb57806021819055506118fd565b600e8214156118fc57806022819055505b5b5b5b5b5b5b5b5b5b5b5b5b5b5050565b60215481565b601d5481565b61192161287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81602360016101000a81548160ff021916908315150217905550806027819055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598260405180821515815260200191505060405180910390a15050565b6000611a89600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611289565b9050919050565b611a9861287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c1e61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611ce930611a3f565b9050611cf481613754565b50565b601c5481565b60105481565b60265481565b60205481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dd05780601f10611da557610100808354040283529160200191611dd0565b820191906000526020600020905b815481529060010190602001808311611db357829003601f168201915b5050505050905090565b6000611e9d611de761287e565b84611e9885604051806060016040528060258152602001614a9b6025913960056000611e1161287e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134979092919063ffffffff16565b612886565b6001905092915050565b60066020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a786023913960400191505060405180910390fd5b6002544211611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120f06120e961287e565b8484612a7d565b6001905092915050565b60175481565b6000600254905090565b60115481565b601b5481565b61211e61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601a5481565b60185481565b601f5481565b6123a861287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612468576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6124cb61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060268190555050565b61259d61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060258190555050565b61266f61287e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061493b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60245481565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614a546024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149616022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a2f6025913960400191505060405180910390fd5b60008111612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614a066029913960400191505060405180910390fd5b6000612b6730611a3f565b905060006027548210159050808015612b8d5750602360009054906101000a900460ff16155b8015612be557507f0000000000000000000000004cedf45d496e5bc36beda9197b0edc4957d9808073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfd5750602360019054906101000a900460ff165b15612c0c57612c0b82613754565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cb35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbd57600090505b60007f0000000000000000000000004cedf45d496e5bc36beda9197b0edc4957d9808073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000004cedf45d496e5bc36beda9197b0edc4957d9808073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905081158015612d6f575080155b15612db157612d8b601f546019546135cc90919063ffffffff16565b601381905550601c54601481905550601254601581905550601f54601681905550613479565b8115612e8157612dce601d546017546135cc90919063ffffffff16565b601381905550601a54601481905550601054601581905550601d546016819055506000600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7c5742600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613478565b8015613477576000600a9050612ea4601e546018546135cc90919063ffffffff16565b601381905550601b54601481905550601154601581905550601e54601681905550600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f695750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133bd576025548710612fe5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d61782073656c6c2065786365656473206c696d69740000000000000000000081525060200191505060405180910390fd5b6060600267ffffffffffffffff81118015612fff57600080fd5b5060405190808252806020026020018201604052801561302e5781602001602082028036833780820191505090505b509050308160008151811061303f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130df57600080fd5b505afa1580156130f3573d6000803e3d6000fd5b505050506040513d602081101561310957600080fd5b81019080805190602001909291905050508160018151811061312757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060607f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f8a846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156131f95780820151818401526020810190506131de565b50505050905001935050505060006040518083038186803b15801561321d57600080fd5b505afa158015613231573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561325b57600080fd5b810190808051604051939291908464010000000082111561327b57600080fd5b8382019150602082018581111561329157600080fd5b82518660208202830111640100000000821117156132ae57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156132e55780820151818401526020810190506132ca565b5050505090500160405250505090506026548160018151811061330457fe5b60200260200101511061331b5760215492506133ba565b6000600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156133ae57504262015180600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b156133b95760225492505b5b50505b6133e5600a6133d78360135461390f90919063ffffffff16565b61358290919063ffffffff16565b601381905550613413600a6134058360145461390f90919063ffffffff16565b61358290919063ffffffff16565b601481905550613441600a6134338360155461390f90919063ffffffff16565b61358290919063ffffffff16565b60158190555061346f600a6134618360165461390f90919063ffffffff16565b61358290919063ffffffff16565b601681905550505b5b5b61348588888886613995565b61348d613ac2565b5050505050505050565b6000838311158290613544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135095780820151818401526020810190506134ee565b50505050905090810190601f1680156135365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613564613ae4565b9150915061357b818361358290919063ffffffff16565b9250505090565b60006135c483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b31565b905092915050565b60008082840190508381101561364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060006136676148cc565b61367089613bf7565b905061367a6148ee565b6136b98a8360016004811061368b57fe5b60200201518460026004811061369d57fe5b6020020151856003600481106136af57fe5b6020020151613c8d565b9050806000600381106136c857fe5b6020020151816001600381106136da57fe5b6020020151826002600381106136ec57fe5b6020020151846000600481106136fe57fe5b60200201518560016004811061371057fe5b60200201518660026004811061372257fe5b60200201518760036004811061373457fe5b602002015198509850985098509850985098505050919395979092949650565b6001602360006101000a81548160ff02191690831515021790555060008160205410156137815760205490505b60006137968284613d5790919063ffffffff16565b905060006137ae60028461358290919063ffffffff16565b905060006137c58285613d5790919063ffffffff16565b905060006137dc84846135cc90919063ffffffff16565b905060004790506137ec82613da1565b60006138018247613d5790919063ffffffff16565b9050600061382a8461381c848961390f90919063ffffffff16565b61358290919063ffffffff16565b905060008511801561383c5750600081115b1561384c5761384b858261404f565b5b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828860405180848152602001838152602001828152602001935050505060405180910390a14791506138e182600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166141bb90919063ffffffff16565b600060208190555050505050505050506000602360006101000a81548160ff02191690831515021790555050565b600080831415613922576000905061398f565b600082840290508284828161393357fe5b041461398a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149bd6021913960400191505060405180910390fd5b809150505b92915050565b806139a3576139a2613ac2565b5b6139ae8484846142f5565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a5457507f0000000000000000000000004cedf45d496e5bc36beda9197b0edc4957d9808073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613abc57602454613a6584611a3f565b10613abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ac06021913960400191505060405180910390fd5b5b50505050565b6000601581905550600060148190555060006013819055506000601681905550565b6000806000600b5490506000600a549050613b0c600a54600b5461358290919063ffffffff16565b821015613b2457600b54600a54935093505050613b2d565b81819350935050505b9091565b60008083118290613bdd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ba2578082015181840152602081019050613b87565b50505050905090810190601f168015613bcf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613be957fe5b049050809150509392505050565b613bff6148cc565b6000613c0a836144ce565b90506000613c17846144ff565b90506000613c2485614530565b90506000613c5f82613c5185613c43888b613d5790919063ffffffff16565b613d5790919063ffffffff16565b613d5790919063ffffffff16565b9050604051806080016040528082815260200185815260200184815260200183815250945050505050919050565b613c956148ee565b6000613c9f613557565b90506000613cb6828861390f90919063ffffffff16565b90506000613ccd838861390f90919063ffffffff16565b90506000613d2c613ce7858861390f90919063ffffffff16565b613d1e613cfd878b61390f90919063ffffffff16565b613d108688613d5790919063ffffffff16565b613d5790919063ffffffff16565b613d5790919063ffffffff16565b9050604051806060016040528084815260200182815260200183815250945050505050949350505050565b6000613d9983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613497565b905092915050565b6060600267ffffffffffffffff81118015613dbb57600080fd5b50604051908082528060200260200182016040528015613dea5781602001602082028036833780820191505090505b5090503081600081518110613dfb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e9b57600080fd5b505afa158015613eaf573d6000803e3d6000fd5b505050506040513d6020811015613ec557600080fd5b810190808051906020019092919050505081600181518110613ee357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f48307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612886565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561400a578082015181840152602081019050613fef565b505050509050019650505050505050600060405180830381600087803b15801561403357600080fd5b505af1158015614047573d6000803e3d6000fd5b505050505050565b61407a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612886565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561416457600080fd5b505af1158015614178573d6000803e3d6000fd5b50505050506040513d606081101561418f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b80471015614231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114614291576040519150601f19603f3d011682016040523d82523d6000602084013e614296565b606091505b50509050806142f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614983603a913960400191505060405180910390fd5b505050565b600080600080600080600061430988613654565b965096509650965096509650965061436987600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5790919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143fe86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444a82614561565b61445381614639565b61445d8584614892565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b60006144f860646144ea6015548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b6000614529606461451b6014548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b600061455a606461454c6013548561390f90919063ffffffff16565b61358290919063ffffffff16565b9050919050565b600061456b613557565b90506000614582828461390f90919063ffffffff16565b90506145d681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061462e836020546135cc90919063ffffffff16565b602081905550505050565b6000614643613557565b905060008060135411156146e35761467a60135461466c8560165461390f90919063ffffffff16565b61358290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061470a836146fc8487613d5790919063ffffffff16565b61390f90919063ffffffff16565b905061475e81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148276147b7848461390f90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135cc90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6148a782600b54613d5790919063ffffffff16565b600b819055506148c281600c546135cc90919063ffffffff16565b600c819055505050565b6040518060800160405280600490602082028036833780820191505090505090565b604051806060016040528060039060208202803683378082019150509050509056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4d61782057616c6c657420686f6c64696e67206c696d6974206578636565646564a26469706673582212208c6c87eeda24130aaaead94b3e48a54843da9a409be0de40231f88f3d106705964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000018f3e0c9f3bdd2e79e3eeeb1bcd8e6bb9702095f
-----Decoded View---------------
Arg [0] : _marketing (address): 0x18f3E0c9F3Bdd2e79e3Eeeb1bcD8E6bb9702095F
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000018f3e0c9f3bdd2e79e3eeeb1bcd8e6bb9702095f
Deployed Bytecode Sourcemap
25610:18983:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28819:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27637:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29671:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30664:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27395:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29096:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27132:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26912:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29840:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27330:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26034:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31205:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29005:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30161:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31784:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30759:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27453:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27528:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33236:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37387:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32021:1207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27263:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27095:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33617:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29199:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16209:148;;;;;;;;;;;;;:::i;:::-;;31604:172;;;;;;;;;;;;;:::i;:::-;;27046:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26475:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27690:52;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27214:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15566:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28910:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30387:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25917:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17215:293;;;;;;;;;;;;;:::i;:::-;;29345:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26827:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16764:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26511:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27003:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16929:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29520:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26961:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26869:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27170:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31903:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33466:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33363:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16512:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27577:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26548:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28819:83;28856:13;28889:5;28882:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28819:83;:::o;27637:46::-;;;;:::o;29671:161::-;29746:4;29763:39;29772:12;:10;:12::i;:::-;29786:7;29795:6;29763:8;:39::i;:::-;29820:4;29813:11;;29671:161;;;;:::o;30664:87::-;30706:7;30733:10;;30726:17;;30664:87;:::o;27395:51::-;;;:::o;29096:95::-;29149:7;29176;;29169:14;;29096:95;:::o;27132:31::-;;;;:::o;26912:40::-;;;;:::o;29840:313::-;29938:4;29955:36;29965:6;29973:9;29984:6;29955:9;:36::i;:::-;30002:121;30011:6;30019:12;:10;:12::i;:::-;30033:89;30071:6;30033:89;;;;;;;;;;;;;;;;;:11;:19;30045:6;30033:19;;;;;;;;;;;;;;;:33;30053:12;:10;:12::i;:::-;30033:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30002:8;:121::i;:::-;30141:4;30134:11;;29840:313;;;;;:::o;27330:43::-;;;;:::o;26034:32::-;;;;;;;;;;;;;:::o;31205:253::-;31271:7;31310;;31299;:18;;31291:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31375:19;31398:10;:8;:10::i;:::-;31375:33;;31426:24;31438:11;31426:7;:11;;:24;;;;:::i;:::-;31419:31;;;31205:253;;;:::o;29005:83::-;29046:5;29071:9;;;;;;;;;;;29064:16;;29005:83;:::o;30161:218::-;30249:4;30266:83;30275:12;:10;:12::i;:::-;30289:7;30298:50;30337:10;30298:11;:25;30310:12;:10;:12::i;:::-;30298:25;;;;;;;;;;;;;;;:34;30324:7;30298:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30266:8;:83::i;:::-;30367:4;30360:11;;30161:218;;;;:::o;31784:111::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31883:4:::1;31853:18;:27;31872:7;31853:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31784:111:::0;:::o;30759:438::-;30849:7;30888;;30877;:18;;30869:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30947:17;30942:248;;30982:15;31007:19;31018:7;31007:10;:19::i;:::-;30981:45;;;;;;;;31048:7;31041:14;;;;;30942:248;31090:23;31122:19;31133:7;31122:10;:19::i;:::-;31088:53;;;;;;;;31163:15;31156:22;;;30759:438;;;;;:::o;27453:38::-;;;:::o;27528:40::-;;;;;;;;;;;;;:::o;33236:119::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33337:10:::1;33317:17;:30;;;;33236:119:::0;:::o;37387:123::-;37451:4;37475:18;:27;37494:7;37475:27;;;;;;;;;;;;;;;;;;;;;;;;;37468:34;;37387:123;;;:::o;32021:1207::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32116:1:::1;32104:8;:13;32100:1121;;;32144:8;32130:11;:22;;;;32100:1121;;;32191:1;32179:8;:13;32175:1046;;;32218:8;32205:10;:21;;;;32175:1046;;;32265:1;32253:8;:13;32249:972;;;32297:8;32279:15;:26;;;;32249:972;;;32344:1;32332:8;:13;32328:893;;;32377:8;32358:16;:27;;;;32328:893;;;32424:1;32412:8;:13;32408:813;;;32458:8;32438:17;:28;;;;32408:813;;;32505:1;32493:8;:13;32489:732;;;32543:8;32519:21;:32;;;;32489:732;;;32590:1;32578:8;:13;32574:647;;;32618:8;32604:11;:22;;;;32574:647;;;32665:1;32653:8;:13;32649:572;;;32694:8;32679:12;:23;;;;32649:572;;;32741:1;32729:8;:13;32725:496;;;32774:8;32755:16;:27;;;;32725:496;;;32821:2;32809:8;:14;32805:416;;;32855:8;32836:16;:27;;;;32805:416;;;32902:2;32890:8;:14;32886:335;;;32937:8;32917:17;:28;;;;32886:335;;;32984:2;32972:8;:14;32968:253;;;33023:8;32999:21;:32;;;;32968:253;;;33070:2;33058:8;:14;33054:167;;;33115:8;33085:27;:38;;;;33054:167;;;33162:2;33150:8;:14;33146:75;;;33203:8;33177:23;:34;;;;33146:75;33054:167;32968:253;32886:335;32805:416;32725:496;32649:572;32574:647;32489:732;32408:813;32328:893;32249:972;32175:1046;32100:1121;32021:1207:::0;;:::o;27263:47::-;;;;:::o;27095:30::-;;;;:::o;33617:250::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33741:8:::1;33717:21;;:32;;;;;;;;;;;;;;;;;;33792:13;33760:29;:45;;;;33821:38;33850:8;33821:38;;;;;;;;;;;;;;;;;;;;33617:250:::0;;:::o;29199:138::-;29265:7;29292:37;29312:7;:16;29320:7;29312:16;;;;;;;;;;;;;;;;29292:19;:37::i;:::-;29285:44;;29199:138;;;:::o;16209:148::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16316:1:::1;16279:40;;16300:6;::::0;::::1;;;;;;;;16279:40;;;;;;;;;;;;16347:1;16330:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16209:148::o:0;31604:172::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31666:28:::1;31697:24;31715:4;31697:9;:24::i;:::-;31666:55;;31732:36;31747:20;31732:14;:36::i;:::-;15848:1;31604:172::o:0;27046:40::-;;;;:::o;26475:29::-;;;;:::o;27690:52::-;;;;:::o;27214:40::-;;;;:::o;15566:79::-;15604:7;15631:6;;;;;;;;;;;15624:13;;15566:79;:::o;28910:87::-;28949:13;28982:7;28975:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28910:87;:::o;30387:269::-;30480:4;30497:129;30506:12;:10;:12::i;:::-;30520:7;30529:96;30568:15;30529:96;;;;;;;;;;;;;;;;;:11;:25;30541:12;:10;:12::i;:::-;30529:25;;;;;;;;;;;;;;;:34;30555:7;30529:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30497:8;:129::i;:::-;30644:4;30637:11;;30387:269;;;;:::o;25917:49::-;;;;;;;;;;;;;;;;;:::o;17215:293::-;17285:10;17267:28;;:14;;;;;;;;;;;:28;;;17259:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17360:9;;17354:3;:15;17346:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17451:14;;;;;;;;;;;17422:44;;17443:6;;;;;;;;;;17422:44;;;;;;;;;;;;17486:14;;;;;;;;;;;17477:6;;:23;;;;;;;;;;;;;;;;;;17215:293::o;29345:167::-;29423:4;29440:42;29450:12;:10;:12::i;:::-;29464:9;29475:6;29440:9;:42::i;:::-;29500:4;29493:11;;29345:167;;;;:::o;26827:35::-;;;;:::o;16764:89::-;16809:7;16836:9;;16829:16;;16764:89;:::o;26511:30::-;;;;:::o;27003:36::-;;;;:::o;16929:214::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17010:6:::1;::::0;::::1;;;;;;;;16993:14;;:23;;;;;;;;;;;;;;;;;;17044:1;17027:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17075:4;17069:3;:10;17057:9;:22;;;;17132:1;17095:40;;17116:6;::::0;::::1;;;;;;;;17095:40;;;;;;;;;;;;16929:214:::0;:::o;29520:143::-;29601:7;29628:11;:18;29640:5;29628:18;;;;;;;;;;;;;;;:27;29647:7;29628:27;;;;;;;;;;;;;;;;29621:34;;29520:143;;;;:::o;26961:35::-;;;;:::o;26869:36::-;;;;:::o;27170:35::-;;;;:::o;31903:110::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32000:5:::1;31970:18;:27;31989:7;31970:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31903:110:::0;:::o;33466:143::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33585:16:::1;33559:23;:42;;;;33466:143:::0;:::o;33363:95::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33443:7:::1;33432:8;:18;;;;33363:95:::0;:::o;16512:244::-;15788:12;:10;:12::i;:::-;15778:22;;:6;;;;;;;;;;:22;;;15770:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16621:1:::1;16601:22;;:8;:22;;;;16593:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16711:8;16682:38;;16703:6;::::0;::::1;;;;;;;;16682:38;;;;;;;;;;;;16740:8;16731:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16512:244:::0;:::o;27577:53::-;;;;:::o;26548:34::-;;;;:::o;7974:106::-;8027:15;8062:10;8055:17;;7974:106;:::o;37518:337::-;37628:1;37611:19;;:5;:19;;;;37603:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37709:1;37690:21;;:7;:21;;;;37682:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37793:6;37763:11;:18;37775:5;37763:18;;;;;;;;;;;;;;;:27;37782:7;37763:27;;;;;;;;;;;;;;;:36;;;;37831:7;37815:32;;37824:5;37815:32;;;37840:6;37815:32;;;;;;;;;;;;;;;;;;37518:337;;;:::o;37863:3397::-;38001:1;37985:18;;:4;:18;;;;37977:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38073:1;38064:6;:10;38056:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38131:28;38162:24;38180:4;38162:9;:24::i;:::-;38131:55;;38199:24;38250:29;;38226:20;:53;;38199:80;;38308:19;:53;;;;;38345:16;;;;;;;;;;;38344:17;38308:53;:91;;;;;38386:13;38378:21;;:4;:21;;;;38308:91;:129;;;;;38416:21;;;;;;;;;;;38308:129;38290:222;;;38464:36;38479:20;38464:14;:36::i;:::-;38290:222;38585:12;38600:4;38585:19;;38704:18;:24;38723:4;38704:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;38732:18;:22;38751:2;38732:22;;;;;;;;;;;;;;;;;;;;;;;;;38704:50;38701:96;;;38780:5;38770:15;;38701:96;38921:18;38950:13;38942:21;;:4;:21;;;38921:42;;38974:19;39002:13;38996:19;;:2;:19;;;38974:41;;39033:13;39032:14;:33;;;;;39051:14;39050:15;39032:33;39028:2077;;;39097:43;39123:16;;39097:21;;:25;;:43;;;;:::i;:::-;39080:14;:60;;;;39169:21;;39153:13;:37;;;;39213:15;;39203:7;:25;;;;39252:16;;39241:8;:27;;;;39028:2077;;;39299:13;39295:1810;;;39344:33;39365:11;;39344:16;;:20;;:33;;;;:::i;:::-;39327:14;:50;;;;39406:16;;39390:13;:32;;;;39445:10;;39435:7;:20;;;;39479:11;;39468:8;:22;;;;39528:1;39507:13;:17;39521:2;39507:17;;;;;;;;;;;;;;;;:22;39503:63;;;39551:15;39531:13;:17;39545:2;39531:17;;;;;;;;;;;;;;;:35;;;;39503:63;39295:1810;;;39597:14;39593:1512;;;39626:22;39651:2;39626:27;;39683:35;39705:12;;39683:17;;:21;;:35;;;;:::i;:::-;39666:14;:52;;;;39747:17;;39731:13;:33;;;;39787:11;;39777:7;:21;;;;39822:12;;39811:8;:23;;;;39920:18;:24;39939:4;39920:24;;;;;;;;;;;;;;;;;;;;;;;;;39919:25;:52;;;;;39949:18;:22;39968:2;39949:22;;;;;;;;;;;;;;;;;;;;;;;;;39948:23;39919:52;39916:904;;;40006:8;;39997:6;:17;39989:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40060:21;40098:1;40084:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40060:40;;40135:4;40117;40122:1;40117:7;;;;;;;;;;;;;:23;;;;;;;;;;;40167:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40157:4;40162:1;40157:7;;;;;;;;;;;;;:32;;;;;;;;;;;40206:34;40243:15;:29;;;40273:6;40281:4;40243:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40206:80;;40336:23;;40309:20;40330:1;40309:23;;;;;;;;;;;;;;:50;40305:502;;40485:27;;40465:47;;40305:502;;;40578:1;40555:13;:19;40569:4;40555:19;;;;;;;;;;;;;;;;:24;;:80;;;;;40619:15;40607:8;40584:13;:19;40598:4;40584:19;;;;;;;;;;;;;;;;:32;:50;40555:80;40551:256;;;40766:23;;40746:43;;40551:256;40305:502;39916:904;;;40851:45;40893:2;40851:37;40870:17;40851:14;;:18;;:37;;;;:::i;:::-;:41;;:45;;;;:::i;:::-;40834:14;:62;;;;40925:44;40966:2;40925:36;40943:17;40925:13;;:17;;:36;;;;:::i;:::-;:40;;:44;;;;:::i;:::-;40909:13;:60;;;;40992:38;41027:2;40992:30;41004:17;40992:7;;:11;;:30;;;;:::i;:::-;:34;;:38;;;;:::i;:::-;40982:7;:48;;;;41054:39;41090:2;41054:31;41067:17;41054:8;;:12;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;41043:8;:50;;;;39593:1512;;39295:1810;39028:2077;41189:38;41204:4;41209:2;41212:6;41219:7;41189:14;:38::i;:::-;41238:14;:12;:14::i;:::-;37863:3397;;;;;;;;:::o;4384:192::-;4470:7;4503:1;4498;:6;;4506:12;4490:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4530:9;4546:1;4542;:5;4530:17;;4567:1;4560:8;;;4384:192;;;;;:::o;35434:163::-;35475:7;35496:15;35513;35532:19;:17;:19::i;:::-;35495:56;;;;35569:20;35581:7;35569;:11;;:20;;;;:::i;:::-;35562:27;;;;35434:163;:::o;5782:132::-;5840:7;5867:39;5871:1;5874;5867:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5860:46;;5782:132;;;;:::o;3481:181::-;3539:7;3559:9;3575:1;3571;:5;3559:17;;3600:1;3595;:6;;3587:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:1;3646:8;;;3481:181;;;;:::o;34124:396::-;34183:7;34192;34201;34210;34219;34228;34237;34257:25;;:::i;:::-;34285;34302:7;34285:16;:25::i;:::-;34257:53;;34321:25;;:::i;:::-;34349:61;34366:7;34375;34383:1;34375:10;;;;;;;;;;;34387:7;34395:1;34387:10;;;;;;;;;;;34399:7;34407:1;34399:10;;;;;;;;;;;34349:16;:61::i;:::-;34321:89;;34429:7;34437:1;34429:10;;;;;;;;;;;34441:7;34449:1;34441:10;;;;;;;;;;;34453:7;34461:1;34453:10;;;;;;;;;;;34465:7;34473:1;34465:10;;;;;;;;;;;34477:7;34485:1;34477:10;;;;;;;;;;;34489:7;34497:1;34489:10;;;;;;;;;;;34501:7;34509:1;34501:10;;;;;;;;;;;34421:91;;;;;;;;;;;;;;;;34124:396;;;;;;;;;:::o;41268:1269::-;28150:4;28131:16;;:23;;;;;;;;;;;;;;;;;;41353:21:::1;41417:20;41393:21;;:44;41389:87;;;41455:21;;41439:37;;41389:87;41487:24;41514:39;41539:13;41514:20;:24;;:39;;;;:::i;:::-;41487:66;;41564:25;41592:20;41610:1;41592:13;:17;;:20;;;;:::i;:::-;41564:48;;41623:30;41656:36;41674:17;41656:13;:17;;:36;;;;:::i;:::-;41623:69;;41796:20;41819:39;41841:16;41819:17;:21;;:39;;;;:::i;:::-;41796:62;;41871:22;41896:21;41871:46;;41962:30;41979:12;41962:16;:30::i;:::-;42005:18;42026:41;42052:14;42026:21;:25;;:41;;;;:::i;:::-;42005:62;;42078:24;42105:51;42143:12;42105:33;42127:10;42105:17;:21;;:33;;;;:::i;:::-;:37;;:51;;;;:::i;:::-;42078:78;;42235:1;42210:22;:26;:50;;;;;42259:1;42240:16;:20;42210:50;42206:110;;;42262:54;42275:22;42299:16;42262:12;:54::i;:::-;42206:110;42332:70;42347:17;42366:16;42384:17;42332:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42428:21;42415:34;;42460:31;42480:10;42460:9;;;;;;;;;;;:19;;;;:31;;;;:::i;:::-;42528:1;42504:21;:25;;;;28165:1;;;;;;;;28196:5:::0;28177:16;;:24;;;;;;;;;;;;;;;;;;41268:1269;:::o;4835:471::-;4893:7;5143:1;5138;:6;5134:47;;;5168:1;5161:8;;;;5134:47;5193:9;5209:1;5205;:5;5193:17;;5238:1;5233;5229;:5;;;;;;:10;5221:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5297:1;5290:8;;;4835:471;;;;;:::o;43656:362::-;43767:7;43763:27;;43776:14;:12;:14::i;:::-;43763:27;43801:44;43819:6;43827:9;43838:6;43801:17;:44::i;:::-;43861:18;:29;43880:9;43861:29;;;;;;;;;;;;;;;;;;;;;;;;;43860:30;:62;;;;;43908:13;43895:26;;:9;:26;;;;43860:62;43856:154;;;43955:17;;43932:20;43942:9;43932;:20::i;:::-;:40;43924:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43856:154;43656:362;;;;:::o;37237:142::-;37290:1;37280:7;:11;;;;37318:1;37302:13;:17;;;;37347:1;37330:14;:18;;;;37370:1;37359:8;:12;;;;37237:142::o;35605:256::-;35655:7;35664;35684:15;35702:7;;35684:25;;35720:15;35738:7;;35720:25;;35770:20;35782:7;;35770;;:11;;:20;;;;:::i;:::-;35760:7;:30;35756:61;;;35800:7;;35809;;35792:25;;;;;;;;35756:61;35836:7;35845;35828:25;;;;;;35605:256;;;:::o;6410:278::-;6496:7;6528:1;6524;:5;6531:12;6516:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6555:9;6571:1;6567;:5;;;;;;6555:17;;6679:1;6672:8;;;6410:278;;;;;:::o;34528:425::-;34593:21;;:::i;:::-;34627:12;34642:24;34658:7;34642:15;:24::i;:::-;34627:39;;34677:18;34698:30;34720:7;34698:21;:30::i;:::-;34677:51;;34739:19;34761:31;34784:7;34761:22;:31::i;:::-;34739:53;;34803:23;34829:50;34867:11;34829:33;34851:10;34829:17;34841:4;34829:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:50;;;;:::i;:::-;34803:76;;34890:55;;;;;;;;34898:15;34890:55;;;;34915:4;34890:55;;;;34921:10;34890:55;;;;34933:11;34890:55;;;;;;;;;34528:425;;;:::o;34961:465::-;35081:21;;:::i;:::-;35115:19;35137:10;:8;:10::i;:::-;35115:32;;35158:15;35176:24;35188:11;35176:7;:11;;:24;;;;:::i;:::-;35158:42;;35211:12;35226:21;35235:11;35226:4;:8;;:21;;;;:::i;:::-;35211:36;;35258:23;35284:84;35339:28;35355:11;35339;:15;;:28;;;;:::i;:::-;35284:50;35306:27;35321:11;35306:10;:14;;:27;;;;:::i;:::-;35284:17;35296:4;35284:7;:11;;:17;;;;:::i;:::-;:21;;:50;;;;:::i;:::-;:54;;:84;;;;:::i;:::-;35258:110;;35379:39;;;;;;;;35387:7;35379:39;;;;35396:15;35379:39;;;;35413:4;35379:39;;;;;;;;;34961:465;;;;;;:::o;3945:136::-;4003:7;4030:43;4034:1;4037;4030:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4023:50;;3945:136;;;;:::o;42545:561::-;42671:21;42709:1;42695:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42671:40;;42740:4;42722;42727:1;42722:7;;;;;;;;;;;;;:23;;;;;;;;;;;42766:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42756:4;42761:1;42756:7;;;;;;;;;;;;;:32;;;;;;;;;;;42801:62;42818:4;42833:15;42851:11;42801:8;:62::i;:::-;42902:15;:66;;;42983:11;43009:1;43025:4;43052;43072:15;42902:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42545:561;;:::o;43114:461::-;43262:62;43279:4;43294:15;43312:11;43262:8;:62::i;:::-;43367:15;:31;;;43406:9;43439:4;43459:11;43485:1;43501;43517:9;;;;;;;;;;;43541:15;43367:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43114:461;;:::o;10565:397::-;10680:6;10655:21;:31;;10647:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10812:12;10830:9;:14;;10853:6;10830:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10811:54;;;10884:7;10876:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10565:397;;;:::o;44026:562::-;44125:15;44142:23;44167:12;44181:23;44206:12;44220:18;44240:19;44263;44274:7;44263:10;:19::i;:::-;44124:158;;;;;;;;;;;;;;44311:28;44331:7;44311;:15;44319:6;44311:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44293:7;:15;44301:6;44293:15;;;;;;;;;;;;;;;:46;;;;44371:39;44394:15;44371:7;:18;44379:9;44371:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44350:7;:18;44358:9;44350:18;;;;;;;;;;;;;;;:60;;;;44421:26;44436:10;44421:14;:26::i;:::-;44458:28;44474:11;44458:15;:28::i;:::-;44497:23;44509:4;44515;44497:11;:23::i;:::-;44553:9;44536:44;;44545:6;44536:44;;;44564:15;44536:44;;;;;;;;;;;;;;;;;;44026:562;;;;;;;;;;:::o;36725:154::-;36789:7;36816:55;36855:5;36816:20;36828:7;;36816;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36809:62;;36725:154;;;:::o;36887:166::-;36957:7;36984:61;37029:5;36984:26;36996:13;;36984:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;36977:68;;36887:166;;;:::o;37061:168::-;37132:7;37159:62;37205:5;37159:27;37171:14;;37159:7;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;37152:69;;37061:168;;;:::o;35869:309::-;35932:19;35955:10;:8;:10::i;:::-;35932:33;;35976:18;35997:27;36012:11;35997:10;:14;;:27;;;;:::i;:::-;35976:48;;36060:38;36087:10;36060:7;:22;36076:4;36060:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36035:7;:22;36051:4;36035:22;;;;;;;;;;;;;;;:63;;;;36133:37;36159:10;36133:21;;:25;;:37;;;;:::i;:::-;36109:21;:61;;;;35869:309;;;:::o;36186:531::-;36251:19;36274:10;:8;:10::i;:::-;36251:33;;36295:13;36344:1;36327:14;;:18;36323:162;;;36368:45;36398:14;;36368:25;36381:11;36368:8;;:12;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;36360:53;;36463:1;36431:42;;36448:4;36431:42;;;36467:5;36431:42;;;;;;;;;;;;;;;;;;36323:162;36495:19;36517:39;36544:11;36517:22;36533:5;36517:11;:15;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;36495:61;;36592:39;36619:11;36592:7;:22;36608:4;36592:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;36567:7;:22;36583:4;36567:22;;;;;;;;;;;;;;;:64;;;;36663:46;36686:22;36696:11;36686:5;:9;;:22;;;;:::i;:::-;36663:7;:18;36671:9;;;;;;;;;;;36663:18;;;;;;;;;;;;;;;;:22;;:46;;;;:::i;:::-;36642:7;:18;36650:9;;;;;;;;;;;36642:18;;;;;;;;;;;;;;;:67;;;;36186:531;;;;:::o;33969:147::-;34047:17;34059:4;34047:7;;:11;;:17;;;;:::i;:::-;34037:7;:27;;;;34088:20;34103:4;34088:10;;:14;;:20;;;;:::i;:::-;34075:10;:33;;;;33969:147;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://8c6c87eeda24130aaaead94b3e48a54843da9a409be0de40231f88f3d1067059
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.