Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000,000 SHRX
Holders
643
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
337,201,541,439,284.549205312057832903 SHRXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHIRA_X
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-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 0 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // 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 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 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 SHIRA_X is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "SHIRA X"; string private _symbol = "SHRX"; uint8 private _decimals = 18; uint256 public _taxFee = 3; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 3; uint256 private _previousLiquidityFee = _liquidityFee; uint public _donationFee = 3; address public donationWallet = 0xE8507928d4894c6F4a36EF8347f93D818D186868; uint256 public _marketingFee = 4; address public marketingWallet = 0x9B6431bF85e3205fdD6c6f7FCAD67563d058e729; uint256 private _previousmarketingFee = _marketingFee; uint256 private _previousdonationFee = _donationFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 public _maxTxAmount = 1000000000000000000 * 10**18; uint256 private numTokensSellToAddToLiquidity = 1000000000000000000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _tOwned[account]; _tOwned[account] = accountBalance - amount; _tTotal -= amount; emit Transfer(account, address(0), amount); } function burn(address account, uint256 amount) public onlyOwner{ _burn(account,amount); } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(account != 0x10ED43C718714eb63d5aA57B78B54704E256024E, 'We can not exclude Pancake router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //to recieve 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 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function 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 removeAllFee() private { _taxFee = 0; _liquidityFee = 0; _donationFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = 3; _liquidityFee = 3; _donationFee = 3; _marketingFee = 4; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } //Calculate burn amount and marketing amount uint256 donationAmt = amount.mul(_donationFee).div(100); uint256 marketingAmt = amount.mul(_marketingFee).div(100); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, (amount.sub(donationAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, (amount.sub(donationAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, (amount.sub(donationAmt).sub(marketingAmt))); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, (amount.sub(donationAmt).sub(marketingAmt))); } else { _transferStandard(sender, recipient, (amount.sub(donationAmt).sub(marketingAmt))); } //Temporarily remove fees to transfer to burn address and marketing wallet _taxFee = 0; _liquidityFee = 0; //Send transfers to burn and marketing wallet _transferStandard(sender, donationWallet, donationAmt); _transferStandard(sender, marketingWallet, marketingAmt); //Restore tax and liquidity fees _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } //Call this function after finalizing the presale function enableAllFees() external onlyOwner() { _taxFee = 3; _previousTaxFee = _taxFee; _liquidityFee = 3; _previousLiquidityFee = _liquidityFee; _donationFee = 3; _previousdonationFee =_donationFee; _marketingFee = 4; _previousmarketingFee = _marketingFee; inSwapAndLiquify = true; emit SwapAndLiquifyEnabledUpdated(true); } function disableAllFees() external onlyOwner() { _taxFee = 0; _previousTaxFee = _taxFee; _liquidityFee = 0; _previousLiquidityFee = _liquidityFee; _donationFee = 0; _previousdonationFee =_donationFee; _marketingFee = 0; _previousmarketingFee = _marketingFee; inSwapAndLiquify = false; emit SwapAndLiquifyEnabledUpdated(false); } function setmarketingWallet(address newWallet) external onlyOwner() { marketingWallet = newWallet; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { require(maxTxPercent > 10, "Cannot set transaction amount less than 10 percent!"); _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_donationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","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
60c06040526ec097ce7bc90715b34b9f1000000000600955600954600019816200002557fe5b0660001903600a556040518060400160405280600781526020017f5348495241205800000000000000000000000000000000000000000000000000815250600c90805190602001906200007a929190620006ce565b506040518060400160405280600481526020017f5348525800000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c8929190620006ce565b506012600e60006101000a81548160ff021916908360ff1602179055506003600f55600f546010556003601155601154601255600360135573e8507928d4894c6f4a36ef8347f93d818d186868601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004601555739b6431bf85e3205fdd6c6f7fcad67563d058e729601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506015546017556013546018556000601960016101000a81548160ff0219169083151502179055506ec097ce7bc90715b34b9f1000000000601a556ec097ce7bc90715b34b9f1000000000601b553480156200020957600080fd5b5060006200021c6200069d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002d16200069d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036f57600080fd5b505afa15801562000384573d6000803e3d6000fd5b505050506040513d60208110156200039b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040f57600080fd5b505afa15801562000424573d6000803e3d6000fd5b505050506040513d60208110156200043b57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004b657600080fd5b505af1158015620004cb573d6000803e3d6000fd5b505050506040513d6020811015620004e257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060016006600062000576620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200062f6200069d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a35062000774565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200071157805160ff191683800117855562000742565b8280016001018555821562000742579182015b828111156200074157825182559160200191906001019062000724565b5b50905062000751919062000755565b5090565b5b808211156200077057600081600090555060010162000756565b5090565b60805160601c60a05160601c615704620007bc600039806119985280613428525080610f9252806145285280614614528061463b5280614746528061476d52506157046000f3fe6080604052600436106102605760003560e01c806370a0823111610144578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e14610d1c578063e7b94df414610da1578063ea2f0b3714610de2578063f2fde38b14610e33578063faf38f6214610e84578063ffc7863514610eaf57610267565b8063a9059cbb14610bcd578063b6c5232414610c3e578063c49b9a8014610c69578063d543dbeb14610ca6578063dd46706414610ce157610267565b806388f820201161010857806388f82020146109b25780638da5cb5b14610a1957806395d89b4114610a5a5780639dc29fac14610aea578063a457c2d714610b45578063a69df4b514610bb657610267565b806370a08231146108b3578063715018a614610918578063741af87f1461092f57806375f0a874146109465780637d1db4a51461098757610267565b80633685d419116101dd5780634549b039116101a15780634549b0391461070757806349bd5a5e146107625780634a74bb02146107a357806352390c02146107d05780635342acb4146108215780636bc87c3a1461088857610267565b80633685d4191461058e57806339509351146105df5780633b124fe7146106505780633bd5d1731461067b578063437823ec146106b657610267565b80632246117311610224578063224611731461040457806322976e0d1461045557806323b872dd146104805780632d83811914610511578063313ce5671461056057610267565b806306fdde031461026c578063095ea7b3146102fc57806313114a9d1461036d5780631694505e1461039857806318160ddd146103d957610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610ec6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f68565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b50610382610f86565b6040518082815260200191505060405180910390f35b3480156103a457600080fd5b506103ad610f90565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e557600080fd5b506103ee610fb4565b6040518082815260200191505060405180910390f35b34801561041057600080fd5b506104536004803603602081101561042757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fbe565b005b34801561046157600080fd5b5061046a6110ca565b6040518082815260200191505060405180910390f35b34801561048c57600080fd5b506104f9600480360360608110156104a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d0565b60405180821515815260200191505060405180910390f35b34801561051d57600080fd5b5061054a6004803603602081101561053457600080fd5b81019080803590602001909291905050506111a9565b6040518082815260200191505060405180910390f35b34801561056c57600080fd5b506105756111d1565b604051808260ff16815260200191505060405180910390f35b34801561059a57600080fd5b506105dd600480360360208110156105b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e8565b005b3480156105eb57600080fd5b506106386004803603604081101561060257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611572565b60405180821515815260200191505060405180910390f35b34801561065c57600080fd5b50610665611625565b6040518082815260200191505060405180910390f35b34801561068757600080fd5b506106b46004803603602081101561069e57600080fd5b810190808035906020019092919050505061162b565b005b3480156106c257600080fd5b50610705600480360360208110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117bc565b005b34801561071357600080fd5b5061074c6004803603604081101561072a57600080fd5b81019080803590602001909291908035151590602001909291905050506118df565b6040518082815260200191505060405180910390f35b34801561076e57600080fd5b50610777611996565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107af57600080fd5b506107b86119ba565b60405180821515815260200191505060405180910390f35b3480156107dc57600080fd5b5061081f600480360360208110156107f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119cd565b005b34801561082d57600080fd5b506108706004803603602081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d80565b60405180821515815260200191505060405180910390f35b34801561089457600080fd5b5061089d611dd6565b6040518082815260200191505060405180910390f35b3480156108bf57600080fd5b50610902600480360360208110156108d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddc565b6040518082815260200191505060405180910390f35b34801561092457600080fd5b5061092d611ec7565b005b34801561093b57600080fd5b5061094461204d565b005b34801561095257600080fd5b5061095b6121b0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099357600080fd5b5061099c6121d6565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b50610a01600480360360208110156109d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121dc565b60405180821515815260200191505060405180910390f35b348015610a2557600080fd5b50610a2e612232565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f61225b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aaf578082015181840152602081019050610a94565b50505050905090810190601f168015610adc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610af657600080fd5b50610b4360048036036040811015610b0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122fd565b005b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123d3565b60405180821515815260200191505060405180910390f35b348015610bc257600080fd5b50610bcb6124a0565b005b348015610bd957600080fd5b50610c2660048036036040811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126bd565b60405180821515815260200191505060405180910390f35b348015610c4a57600080fd5b50610c536126db565b6040518082815260200191505060405180910390f35b348015610c7557600080fd5b50610ca460048036036020811015610c8c57600080fd5b810190808035151590602001909291905050506126e5565b005b348015610cb257600080fd5b50610cdf60048036036020811015610cc957600080fd5b8101908080359060200190929190505050612803565b005b348015610ced57600080fd5b50610d1a60048036036020811015610d0457600080fd5b8101908080359060200190929190505050612955565b005b348015610d2857600080fd5b50610d8b60048036036040811015610d3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b46565b6040518082815260200191505060405180910390f35b348015610dad57600080fd5b50610db6612bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dee57600080fd5b50610e3160048036036020811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bf3565b005b348015610e3f57600080fd5b50610e8260048036036020811015610e5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d16565b005b348015610e9057600080fd5b50610e99612f21565b6040518082815260200191505060405180910390f35b348015610ebb57600080fd5b50610ec4612f27565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905090565b6000610f7c610f7561308a565b8484613092565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b610fc661308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60006110dd848484613289565b61119e846110e961308a565b6111998560405180606001604052806028815260200161557e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114f61308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b59092919063ffffffff16565b613092565b600190509392505050565b6000806111b4613575565b90506111c981846135a090919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6111f061308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60088054905081101561156e578173ffffffffffffffffffffffffffffffffffffffff16600882815481106113a357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611561576008600160088054905003815481106113ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061143757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061152757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561156e565b8080600101915050611372565b5050565b600061161b61157f61308a565b84611616856005600061159061308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b613092565b6001905092915050565b600f5481565b600061163561308a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061565b602c913960400191505060405180910390fd5b60006116e583613672565b5050505050905061173e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061179681600a546136ce90919063ffffffff16565b600a819055506117b183600b546135ea90919063ffffffff16565b600b81905550505050565b6117c461308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161197957600061196984613672565b5050505050905080915050611990565b600061198484613672565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960019054906101000a900460ff1681565b6119d561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156396022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cc257611c7e600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a9565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e7757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ec2565b611ebf600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a9565b90505b919050565b611ecf61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61205561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600f81905550600f546010819055506000601181905550601154601281905550600060138190555060135460188190555060006015819055506015546017819055506000601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600060405180821515815260200191505060405180910390a1565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122f35780601f106122c8576101008083540402835291602001916122f3565b820191906000526020600020905b8154815290600101906020018083116122d657829003601f168201915b5050505050905090565b61230561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6123cf8282613718565b5050565b60006124966123e061308a565b84612491856040518060600160405280602581526020016156aa602591396005600061240a61308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b59092919063ffffffff16565b613092565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612546576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156876023913960400191505060405180910390fd5b60025442116125bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203020646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006126d16126ca61308a565b8484613289565b6001905092915050565b6000600254905090565b6126ed61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61280b61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a8111612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061552a6033913960400191505060405180910390fd5b61294c606461293e836009546138af90919063ffffffff16565b6135a090919063ffffffff16565b601a8190555050565b61295d61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612bfb61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612d1e61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ba6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b612f2f61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6003600f81905550600f546010819055506003601181905550601154601281905550600360138190555060135460188190555060046015819055506015546017819055506001601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405180821515815260200191505060405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613118576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156156024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154e06022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155f06025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154976023913960400191505060405180910390fd5b600081116133ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155a66029913960400191505060405180910390fd5b60006133f930611ddc565b90506000601b54821015905080801561341f5750601960009054906101000a900460ff16155b801561347757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561348f5750601960019054906101000a900460ff165b156134a357601b5491506134a282613935565b5b6134ae858585613a17565b5050505050565b6000838311158290613562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352757808201518184015260208101905061350c565b50505050905090810190601f1680156135545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613582614053565b9150915061359981836135a090919063ffffffff16565b9250505090565b60006135e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142e4565b905092915050565b600080828401905083811015613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136898a6143aa565b92509250925060008060006136a78d86866136a2613575565b614404565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061371083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155cf6021913960400191505060405180910390fd5b6137aa8260008361448d565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818103600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b6000808314156138c2576000905061392f565b60008284029050828482816138d357fe5b041461392a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061555d6021913960400191505060405180910390fd5b809150505b92915050565b6001601960006101000a81548160ff02191690831515021790555060006139666002836135a090919063ffffffff16565b9050600061397d82846136ce90919063ffffffff16565b9050600047905061398d83614492565b60006139a282476136ce90919063ffffffff16565b90506139ae8382614740565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960006101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ab85750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613aca57613ac5614891565b613b26565b601a54811115613b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155026028913960400191505060405180910390fd5b5b6000613b506064613b42601354856138af90919063ffffffff16565b6135a090919063ffffffff16565b90506000613b7c6064613b6e601554866138af90919063ffffffff16565b6135a090919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c215750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5a57613c558585613c5084613c4287896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b6148b3565b613f21565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613cfd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d3657613d318585613d2c84613d1e87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614b13565b613f20565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dda5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e1357613e0e8585613e0984613dfb87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614d73565b613f1f565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613eb55750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613eee57613ee98585613ee484613ed687896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614f3e565b613f1e565b613f1d8585613f1884613f0a87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614d73565b5b5b5b5b6000600f819055506000601181905550613f5e85601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614d73565b613f8b85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614d73565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061403e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561404c5761404b615233565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156142a75782600360006008848154811061408657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061416d575081600460006008848154811061410557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561418457600a54600954945094505050506142e0565b61420d600360006008848154811061419857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846136ce90919063ffffffff16565b9250614298600460006008848154811061422357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836136ce90919063ffffffff16565b91508080600101915050614067565b506142bf600954600a546135a090919063ffffffff16565b8210156142d757600a546009549350935050506142e0565b81819350935050505b9091565b60008083118290614390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561435557808201518184015260208101905061433a565b50505050905090810190601f1680156143825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161439c57fe5b049050809150509392505050565b6000806000806143b985615255565b905060006143c686615286565b905060006143ef826143e1858a6136ce90919063ffffffff16565b6136ce90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061441d85896138af90919063ffffffff16565b9050600061443486896138af90919063ffffffff16565b9050600061444b87896138af90919063ffffffff16565b905060006144748261446685876136ce90919063ffffffff16565b6136ce90919063ffffffff16565b9050838184965096509650505050509450945094915050565b505050565b6060600267ffffffffffffffff811180156144ac57600080fd5b506040519080825280602002602001820160405280156144db5781602001602082028036833780820191505090505b50905030816000815181106144ec57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561458c57600080fd5b505afa1580156145a0573d6000803e3d6000fd5b505050506040513d60208110156145b657600080fd5b8101908080519060200190929190505050816001815181106145d457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614639307f000000000000000000000000000000000000000000000000000000000000000084613092565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156146fb5780820151818401526020810190506146e0565b505050509050019650505050505050600060405180830381600087803b15801561472457600080fd5b505af1158015614738573d6000803e3d6000fd5b505050505050565b61476b307f000000000000000000000000000000000000000000000000000000000000000084613092565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806147b5612232565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561483a57600080fd5b505af115801561484e573d6000803e3d6000fd5b50505050506040513d606081101561486557600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b6000806000806000806148c587613672565b95509550955095509550955061492387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149b886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a99816152b7565b614aa3848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b2587613672565b955095509550955095509550614b8386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cad85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cf9816152b7565b614d03848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614d8587613672565b955095509550955095509550614de386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e7885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ec4816152b7565b614ece848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614f5087613672565b955095509550955095509550614fae87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061504386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150d883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061516d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151b9816152b7565b6151c3848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6003600f81905550600360118190555060036013819055506004601581905550565b600061527f6064615271600f54856138af90919063ffffffff16565b6135a090919063ffffffff16565b9050919050565b60006152b060646152a2601154856138af90919063ffffffff16565b6135a090919063ffffffff16565b9050919050565b60006152c1613575565b905060006152d882846138af90919063ffffffff16565b905061532c81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156154575761541383600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61547182600a546136ce90919063ffffffff16565b600a8190555061548c81600b546135ea90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c657373207468616e2031302070657263656e7421536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122061b5ce481260a22828eda2841b7d2a426cf803a43bc1ffde7f065c7cd8b459c764736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102605760003560e01c806370a0823111610144578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e14610d1c578063e7b94df414610da1578063ea2f0b3714610de2578063f2fde38b14610e33578063faf38f6214610e84578063ffc7863514610eaf57610267565b8063a9059cbb14610bcd578063b6c5232414610c3e578063c49b9a8014610c69578063d543dbeb14610ca6578063dd46706414610ce157610267565b806388f820201161010857806388f82020146109b25780638da5cb5b14610a1957806395d89b4114610a5a5780639dc29fac14610aea578063a457c2d714610b45578063a69df4b514610bb657610267565b806370a08231146108b3578063715018a614610918578063741af87f1461092f57806375f0a874146109465780637d1db4a51461098757610267565b80633685d419116101dd5780634549b039116101a15780634549b0391461070757806349bd5a5e146107625780634a74bb02146107a357806352390c02146107d05780635342acb4146108215780636bc87c3a1461088857610267565b80633685d4191461058e57806339509351146105df5780633b124fe7146106505780633bd5d1731461067b578063437823ec146106b657610267565b80632246117311610224578063224611731461040457806322976e0d1461045557806323b872dd146104805780632d83811914610511578063313ce5671461056057610267565b806306fdde031461026c578063095ea7b3146102fc57806313114a9d1461036d5780631694505e1461039857806318160ddd146103d957610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610ec6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f68565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b50610382610f86565b6040518082815260200191505060405180910390f35b3480156103a457600080fd5b506103ad610f90565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e557600080fd5b506103ee610fb4565b6040518082815260200191505060405180910390f35b34801561041057600080fd5b506104536004803603602081101561042757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fbe565b005b34801561046157600080fd5b5061046a6110ca565b6040518082815260200191505060405180910390f35b34801561048c57600080fd5b506104f9600480360360608110156104a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d0565b60405180821515815260200191505060405180910390f35b34801561051d57600080fd5b5061054a6004803603602081101561053457600080fd5b81019080803590602001909291905050506111a9565b6040518082815260200191505060405180910390f35b34801561056c57600080fd5b506105756111d1565b604051808260ff16815260200191505060405180910390f35b34801561059a57600080fd5b506105dd600480360360208110156105b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e8565b005b3480156105eb57600080fd5b506106386004803603604081101561060257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611572565b60405180821515815260200191505060405180910390f35b34801561065c57600080fd5b50610665611625565b6040518082815260200191505060405180910390f35b34801561068757600080fd5b506106b46004803603602081101561069e57600080fd5b810190808035906020019092919050505061162b565b005b3480156106c257600080fd5b50610705600480360360208110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117bc565b005b34801561071357600080fd5b5061074c6004803603604081101561072a57600080fd5b81019080803590602001909291908035151590602001909291905050506118df565b6040518082815260200191505060405180910390f35b34801561076e57600080fd5b50610777611996565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107af57600080fd5b506107b86119ba565b60405180821515815260200191505060405180910390f35b3480156107dc57600080fd5b5061081f600480360360208110156107f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119cd565b005b34801561082d57600080fd5b506108706004803603602081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d80565b60405180821515815260200191505060405180910390f35b34801561089457600080fd5b5061089d611dd6565b6040518082815260200191505060405180910390f35b3480156108bf57600080fd5b50610902600480360360208110156108d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddc565b6040518082815260200191505060405180910390f35b34801561092457600080fd5b5061092d611ec7565b005b34801561093b57600080fd5b5061094461204d565b005b34801561095257600080fd5b5061095b6121b0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099357600080fd5b5061099c6121d6565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b50610a01600480360360208110156109d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121dc565b60405180821515815260200191505060405180910390f35b348015610a2557600080fd5b50610a2e612232565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6657600080fd5b50610a6f61225b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aaf578082015181840152602081019050610a94565b50505050905090810190601f168015610adc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610af657600080fd5b50610b4360048036036040811015610b0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122fd565b005b348015610b5157600080fd5b50610b9e60048036036040811015610b6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123d3565b60405180821515815260200191505060405180910390f35b348015610bc257600080fd5b50610bcb6124a0565b005b348015610bd957600080fd5b50610c2660048036036040811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126bd565b60405180821515815260200191505060405180910390f35b348015610c4a57600080fd5b50610c536126db565b6040518082815260200191505060405180910390f35b348015610c7557600080fd5b50610ca460048036036020811015610c8c57600080fd5b810190808035151590602001909291905050506126e5565b005b348015610cb257600080fd5b50610cdf60048036036020811015610cc957600080fd5b8101908080359060200190929190505050612803565b005b348015610ced57600080fd5b50610d1a60048036036020811015610d0457600080fd5b8101908080359060200190929190505050612955565b005b348015610d2857600080fd5b50610d8b60048036036040811015610d3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b46565b6040518082815260200191505060405180910390f35b348015610dad57600080fd5b50610db6612bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dee57600080fd5b50610e3160048036036020811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bf3565b005b348015610e3f57600080fd5b50610e8260048036036020811015610e5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d16565b005b348015610e9057600080fd5b50610e99612f21565b6040518082815260200191505060405180910390f35b348015610ebb57600080fd5b50610ec4612f27565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905090565b6000610f7c610f7561308a565b8484613092565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b610fc661308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60006110dd848484613289565b61119e846110e961308a565b6111998560405180606001604052806028815260200161557e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114f61308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b59092919063ffffffff16565b613092565b600190509392505050565b6000806111b4613575565b90506111c981846135a090919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6111f061308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60088054905081101561156e578173ffffffffffffffffffffffffffffffffffffffff16600882815481106113a357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611561576008600160088054905003815481106113ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061143757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061152757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561156e565b8080600101915050611372565b5050565b600061161b61157f61308a565b84611616856005600061159061308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b613092565b6001905092915050565b600f5481565b600061163561308a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061565b602c913960400191505060405180910390fd5b60006116e583613672565b5050505050905061173e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061179681600a546136ce90919063ffffffff16565b600a819055506117b183600b546135ea90919063ffffffff16565b600b81905550505050565b6117c461308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161197957600061196984613672565b5050505050905080915050611990565b600061198484613672565b50505050915050809150505b92915050565b7f0000000000000000000000003f46178cf1a559d9d35d66cdd73722044aba6a6d81565b601960019054906101000a900460ff1681565b6119d561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156396022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cc257611c7e600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a9565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e7757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ec2565b611ebf600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a9565b90505b919050565b611ecf61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61205561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612115576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600f81905550600f546010819055506000601181905550601154601281905550600060138190555060135460188190555060006015819055506015546017819055506000601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600060405180821515815260200191505060405180910390a1565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122f35780601f106122c8576101008083540402835291602001916122f3565b820191906000526020600020905b8154815290600101906020018083116122d657829003601f168201915b5050505050905090565b61230561308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6123cf8282613718565b5050565b60006124966123e061308a565b84612491856040518060600160405280602581526020016156aa602591396005600061240a61308a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b59092919063ffffffff16565b613092565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612546576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156876023913960400191505060405180910390fd5b60025442116125bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203020646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006126d16126ca61308a565b8484613289565b6001905092915050565b6000600254905090565b6126ed61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61280b61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a8111612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061552a6033913960400191505060405180910390fd5b61294c606461293e836009546138af90919063ffffffff16565b6135a090919063ffffffff16565b601a8190555050565b61295d61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612bfb61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612d1e61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ba6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b612f2f61308a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6003600f81905550600f546010819055506003601181905550601154601281905550600360138190555060135460188190555060046015819055506015546017819055506001601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405180821515815260200191505060405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613118576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156156024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154e06022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155f06025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154976023913960400191505060405180910390fd5b600081116133ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806155a66029913960400191505060405180910390fd5b60006133f930611ddc565b90506000601b54821015905080801561341f5750601960009054906101000a900460ff16155b801561347757507f0000000000000000000000003f46178cf1a559d9d35d66cdd73722044aba6a6d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561348f5750601960019054906101000a900460ff165b156134a357601b5491506134a282613935565b5b6134ae858585613a17565b5050505050565b6000838311158290613562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352757808201518184015260208101905061350c565b50505050905090810190601f1680156135545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613582614053565b9150915061359981836135a090919063ffffffff16565b9250505090565b60006135e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142e4565b905092915050565b600080828401905083811015613668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136898a6143aa565b92509250925060008060006136a78d86866136a2613575565b614404565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061371083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155cf6021913960400191505060405180910390fd5b6137aa8260008361448d565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818103600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b6000808314156138c2576000905061392f565b60008284029050828482816138d357fe5b041461392a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061555d6021913960400191505060405180910390fd5b809150505b92915050565b6001601960006101000a81548160ff02191690831515021790555060006139666002836135a090919063ffffffff16565b9050600061397d82846136ce90919063ffffffff16565b9050600047905061398d83614492565b60006139a282476136ce90919063ffffffff16565b90506139ae8382614740565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960006101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ab85750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613aca57613ac5614891565b613b26565b601a54811115613b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155026028913960400191505060405180910390fd5b5b6000613b506064613b42601354856138af90919063ffffffff16565b6135a090919063ffffffff16565b90506000613b7c6064613b6e601554866138af90919063ffffffff16565b6135a090919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c215750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5a57613c558585613c5084613c4287896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b6148b3565b613f21565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613cfd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d3657613d318585613d2c84613d1e87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614b13565b613f20565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dda5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e1357613e0e8585613e0984613dfb87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614d73565b613f1f565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613eb55750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613eee57613ee98585613ee484613ed687896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614f3e565b613f1e565b613f1d8585613f1884613f0a87896136ce90919063ffffffff16565b6136ce90919063ffffffff16565b614d73565b5b5b5b5b6000600f819055506000601181905550613f5e85601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614d73565b613f8b85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614d73565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061403e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561404c5761404b615233565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156142a75782600360006008848154811061408657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061416d575081600460006008848154811061410557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561418457600a54600954945094505050506142e0565b61420d600360006008848154811061419857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846136ce90919063ffffffff16565b9250614298600460006008848154811061422357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836136ce90919063ffffffff16565b91508080600101915050614067565b506142bf600954600a546135a090919063ffffffff16565b8210156142d757600a546009549350935050506142e0565b81819350935050505b9091565b60008083118290614390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561435557808201518184015260208101905061433a565b50505050905090810190601f1680156143825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161439c57fe5b049050809150509392505050565b6000806000806143b985615255565b905060006143c686615286565b905060006143ef826143e1858a6136ce90919063ffffffff16565b6136ce90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061441d85896138af90919063ffffffff16565b9050600061443486896138af90919063ffffffff16565b9050600061444b87896138af90919063ffffffff16565b905060006144748261446685876136ce90919063ffffffff16565b6136ce90919063ffffffff16565b9050838184965096509650505050509450945094915050565b505050565b6060600267ffffffffffffffff811180156144ac57600080fd5b506040519080825280602002602001820160405280156144db5781602001602082028036833780820191505090505b50905030816000815181106144ec57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561458c57600080fd5b505afa1580156145a0573d6000803e3d6000fd5b505050506040513d60208110156145b657600080fd5b8101908080519060200190929190505050816001815181106145d457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614639307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613092565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156146fb5780820151818401526020810190506146e0565b505050509050019650505050505050600060405180830381600087803b15801561472457600080fd5b505af1158015614738573d6000803e3d6000fd5b505050505050565b61476b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613092565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806147b5612232565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561483a57600080fd5b505af115801561484e573d6000803e3d6000fd5b50505050506040513d606081101561486557600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b6000806000806000806148c587613672565b95509550955095509550955061492387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149b886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a4d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a99816152b7565b614aa3848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614b2587613672565b955095509550955095509550614b8386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c1883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cad85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cf9816152b7565b614d03848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614d8587613672565b955095509550955095509550614de386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e7885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ec4816152b7565b614ece848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614f5087613672565b955095509550955095509550614fae87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061504386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ce90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150d883600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061516d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151b9816152b7565b6151c3848361545c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6003600f81905550600360118190555060036013819055506004601581905550565b600061527f6064615271600f54856138af90919063ffffffff16565b6135a090919063ffffffff16565b9050919050565b60006152b060646152a2601154856138af90919063ffffffff16565b6135a090919063ffffffff16565b9050919050565b60006152c1613575565b905060006152d882846138af90919063ffffffff16565b905061532c81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156154575761541383600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ea90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61547182600a546136ce90919063ffffffff16565b600a8190555061548c81600b546135ea90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c657373207468616e2031302070657263656e7421536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122061b5ce481260a22828eda2841b7d2a426cf803a43bc1ffde7f065c7cd8b459c764736f6c634300060c0033
Deployed Bytecode Sourcemap
25574:20575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28464:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29907:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31028:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26909:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29272:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45588:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26662:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30076:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31952:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28650:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32590:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30397:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26356:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31123:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44425:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31508:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26967:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27046:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32138:444;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36956:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26443:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29375:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16221:148;;;;;;;;;;;;;:::i;:::-;;45153:423;;;;;;;;;;;;;:::i;:::-;;26701:75;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27096:58;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30900:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15571:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28555:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29161:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30623:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17231:296;;;;;;;;;;;;;:::i;:::-;;29581:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16776:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45975:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45713:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16941:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29756:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26579:74;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44548:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16524:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26544:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44725:420;;;;;;;;;;;;;:::i;:::-;;28464:83;28501:13;28534:5;28527:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28464:83;:::o;29907:161::-;29982:4;29999:39;30008:12;:10;:12::i;:::-;30022:7;30031:6;29999:8;:39::i;:::-;30056:4;30049:11;;29907:161;;;;:::o;31028:87::-;31070:7;31097:10;;31090:17;;31028:87;:::o;26909:51::-;;;:::o;29272:95::-;29325:7;29352;;29345:14;;29272:95;:::o;45588:114::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45685:9:::1;45667:15;;:27;;;;;;;;;;;;;;;;;;45588:114:::0;:::o;26662:32::-;;;;:::o;30076:313::-;30174:4;30191:36;30201:6;30209:9;30220:6;30191:9;:36::i;:::-;30238:121;30247:6;30255:12;:10;:12::i;:::-;30269:89;30307:6;30269:89;;;;;;;;;;;;;;;;;:11;:19;30281:6;30269:19;;;;;;;;;;;;;;;:33;30289:12;:10;:12::i;:::-;30269:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30238:8;:121::i;:::-;30377:4;30370:11;;30076:313;;;;;:::o;31952:178::-;32018:7;32047:19;32070:10;:8;:10::i;:::-;32047:33;;32098:24;32110:11;32098:7;:11;;:24;;;;:::i;:::-;32091:31;;;31952:178;;;:::o;28650:83::-;28691:5;28716:9;;;;;;;;;;;28709:16;;28650:83;:::o;32590:479::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32672:11:::1;:20;32684:7;32672:20;;;;;;;;;;;;;;;;;;;;;;;;;32664:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32740:9;32735:327;32759:9;:16;;;;32755:1;:20;32735:327;;;32817:7;32801:23;;:9;32811:1;32801:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32797:254;;;32860:9;32889:1;32870:9;:16;;;;:20;32860:31;;;;;;;;;;;;;;;;;;;;;;;;;32845:9;32855:1;32845:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32929:1;32910:7;:16;32918:7;32910:16;;;;;;;;;;;;;;;:20;;;;32972:5;32949:11;:20;32961:7;32949:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32996:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33030:5;;32797:254;32777:3;;;;;;;32735:327;;;;32590:479:::0;:::o;30397:218::-;30485:4;30502:83;30511:12;:10;:12::i;:::-;30525:7;30534:50;30573:10;30534:11;:25;30546:12;:10;:12::i;:::-;30534:25;;;;;;;;;;;;;;;:34;30560:7;30534:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30502:8;:83::i;:::-;30603:4;30596:11;;30397:218;;;;:::o;26356:26::-;;;;:::o;31123:377::-;31175:14;31192:12;:10;:12::i;:::-;31175:29;;31224:11;:19;31236:6;31224:19;;;;;;;;;;;;;;;;;;;;;;;;;31223:20;31215:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:15;31328:19;31339:7;31328:10;:19::i;:::-;31303:44;;;;;;;31376:28;31396:7;31376;:15;31384:6;31376:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31358:7;:15;31366:6;31358:15;;;;;;;;;;;;;;;:46;;;;31425:20;31437:7;31425;;:11;;:20;;;;:::i;:::-;31415:7;:30;;;;31469:23;31484:7;31469:10;;:14;;:23;;;;:::i;:::-;31456:10;:36;;;;31123:377;;;:::o;44425:111::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44524:4:::1;44494:18;:27;44513:7;44494:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44425:111:::0;:::o;31508:436::-;31598:7;31637;;31626;:18;;31618:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31696:17;31691:246;;31731:15;31755:19;31766:7;31755:10;:19::i;:::-;31730:44;;;;;;;31796:7;31789:14;;;;;31691:246;31838:23;31869:19;31880:7;31869:10;:19::i;:::-;31836:52;;;;;;;31910:15;31903:22;;;31508:436;;;;;:::o;26967:38::-;;;:::o;27046:41::-;;;;;;;;;;;;;:::o;32138:444::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32231:42:::1;32220:53;;:7;:53;;;;32212:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32332:11;:20;32344:7;32332:20;;;;;;;;;;;;;;;;;;;;;;;;;32331:21;32323:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32417:1;32398:7;:16;32406:7;32398:16;;;;;;;;;;;;;;;;:20;32395:108;;;32454:37;32474:7;:16;32482:7;32474:16;;;;;;;;;;;;;;;;32454:19;:37::i;:::-;32435:7;:16;32443:7;32435:16;;;;;;;;;;;;;;;:56;;;;32395:108;32536:4;32513:11;:20;32525:7;32513:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;32551:9;32566:7;32551:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32138:444:::0;:::o;36956:123::-;37020:4;37044:18;:27;37063:7;37044:27;;;;;;;;;;;;;;;;;;;;;;;;;37037:34;;36956:123;;;:::o;26443:32::-;;;;:::o;29375:198::-;29441:7;29465:11;:20;29477:7;29465:20;;;;;;;;;;;;;;;;;;;;;;;;;29461:49;;;29494:7;:16;29502:7;29494:16;;;;;;;;;;;;;;;;29487:23;;;;29461:49;29528:37;29548:7;:16;29556:7;29548:16;;;;;;;;;;;;;;;;29528:19;:37::i;:::-;29521:44;;29375:198;;;;:::o;16221:148::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16328:1:::1;16291:40;;16312:6;::::0;::::1;;;;;;;;16291:40;;;;;;;;;;;;16359:1;16342:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16221:148::o:0;45153:423::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45221:1:::1;45211:7;:11;;;;45251:7;;45233:15;:25;;;;45285:1;45269:13;:17;;;;45321:13;;45297:21;:37;;;;45360:1;45345:12;:16;;;;45394:12;;45372:20;:34;;;;45433:1;45417:13;:17;;;;45469:13;;45445:21;:37;;;;45512:5;45493:16;;:24;;;;;;;;;;;;;;;;;;45533:35;45562:5;45533:35;;;;;;;;;;;;;;;;;;;;45153:423::o:0;26701:75::-;;;;;;;;;;;;;:::o;27096:58::-;;;;:::o;30900:120::-;30968:4;30992:11;:20;31004:7;30992:20;;;;;;;;;;;;;;;;;;;;;;;;;30985:27;;30900:120;;;:::o;15571:79::-;15609:7;15636:6;;;;;;;;;;;15629:13;;15571:79;:::o;28555:87::-;28594:13;28627:7;28620:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28555:87;:::o;29161:103::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29235:21:::1;29241:7;29249:6;29235:5;:21::i;:::-;29161:103:::0;;:::o;30623:269::-;30716:4;30733:129;30742:12;:10;:12::i;:::-;30756:7;30765:96;30804:15;30765:96;;;;;;;;;;;;;;;;;:11;:25;30777:12;:10;:12::i;:::-;30765:25;;;;;;;;;;;;;;;:34;30791:7;30765:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30733:8;:129::i;:::-;30880:4;30873:11;;30623:269;;;;:::o;17231:296::-;17301:10;17283:28;;:14;;;;;;;;;;;:28;;;17275:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17376:9;;17370:3;:15;17362:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17467:14;;;;;;;;;;;17438:44;;17459:6;;;;;;;;;;17438:44;;;;;;;;;;;;17502:14;;;;;;;;;;;17493:6;;:23;;;;;;;;;;;;;;;;;;17231:296::o;29581:167::-;29659:4;29676:42;29686:12;:10;:12::i;:::-;29700:9;29711:6;29676:9;:42::i;:::-;29736:4;29729:11;;29581:167;;;;:::o;16776:89::-;16821:7;16848:9;;16841:16;;16776:89;:::o;45975:171::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46076:8:::1;46052:21;;:32;;;;;;;;;;;;;;;;;;46100:38;46129:8;46100:38;;;;;;;;;;;;;;;;;;;;45975:171:::0;:::o;45713:254::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45815:2:::1;45800:12;:17;45792:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45899:60;45943:5;45899:25;45911:12;45899:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;45884:12;:75;;;;45713:254:::0;:::o;16941:214::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17022:6:::1;::::0;::::1;;;;;;;;17005:14;;:23;;;;;;;;;;;;;;;;;;17056:1;17039:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17087:4;17081:3;:10;17069:9;:22;;;;17144:1;17107:40;;17128:6;::::0;::::1;;;;;;;;17107:40;;;;;;;;;;;;16941:214:::0;:::o;29756:143::-;29837:7;29864:11;:18;29876:5;29864:18;;;;;;;;;;;;;;;:27;29883:7;29864:27;;;;;;;;;;;;;;;;29857:34;;29756:143;;;;:::o;26579:74::-;;;;;;;;;;;;;:::o;44548:110::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44645:5:::1;44615:18;:27;44634:7;44615:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44548:110:::0;:::o;16524:244::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16633:1:::1;16613:22;;:8;:22;;;;16605:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16723:8;16694:38;;16715:6;::::0;::::1;;;;;;;;16694:38;;;;;;;;;;;;16752:8;16743:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16524:244:::0;:::o;26544:28::-;;;;:::o;44725:420::-;15793:12;:10;:12::i;:::-;15783:22;;:6;;;;;;;;;;:22;;;15775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44792:1:::1;44782:7;:11;;;;44822:7;;44804:15;:25;;;;44856:1;44840:13;:17;;;;44892:13;;44868:21;:37;;;;44931:1;44916:12;:16;;;;44965:12;;44943:20;:34;;;;45004:1;44988:13;:17;;;;45040:13;;45016:21;:37;;;;45083:4;45064:16;;:23;;;;;;;;;;;;;;;;;;45103:34;45132:4;45103:34;;;;;;;;;;;;;;;;;;;;44725:420::o:0;7979:106::-;8032:15;8067:10;8060:17;;7979:106;:::o;37087:337::-;37197:1;37180:19;;:5;:19;;;;37172:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37278:1;37259:21;;:7;:21;;;;37251:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37362:6;37332:11;:18;37344:5;37332:18;;;;;;;;;;;;;;;:27;37351:7;37332:27;;;;;;;;;;;;;;;:36;;;;37400:7;37384:32;;37393:5;37384:32;;;37409:6;37384:32;;;;;;;;;;;;;;;;;;37087:337;;;:::o;37432:1234::-;37570:1;37554:18;;:4;:18;;;;37546:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37647:1;37633:16;;:2;:16;;;;37625:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37717:1;37708:6;:10;37700:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38059:28;38090:24;38108:4;38090:9;:24::i;:::-;38059:55;;38133:24;38184:29;;38160:20;:53;;38133:80;;38242:19;:53;;;;;38279:16;;;;;;;;;;;38278:17;38242:53;:91;;;;;38320:13;38312:21;;:4;:21;;;;38242:91;:129;;;;;38350:21;;;;;;;;;;;38242:129;38224:318;;;38421:29;;38398:52;;38494:36;38509:20;38494:14;:36::i;:::-;38224:318;38628:30;38643:4;38648:2;38651:6;38628:14;:30::i;:::-;37432:1234;;;;;:::o;4389:192::-;4475:7;4508:1;4503;:6;;4511:12;4495:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4535:9;4551:1;4547;:5;4535:17;;4572:1;4565:8;;;4389:192;;;;;:::o;35190:163::-;35231:7;35252:15;35269;35288:19;:17;:19::i;:::-;35251:56;;;;35325:20;35337:7;35325;:11;;:20;;;;:::i;:::-;35318:27;;;;35190:163;:::o;5787:132::-;5845:7;5872:39;5876:1;5879;5872:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5865:46;;5787:132;;;;:::o;3486:181::-;3544:7;3564:9;3580:1;3576;:5;3564:17;;3605:1;3600;:6;;3592:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3658:1;3651:8;;;3486:181;;;;:::o;33988:419::-;34047:7;34056;34065;34074;34083;34092;34113:23;34138:12;34152:18;34174:20;34186:7;34174:11;:20::i;:::-;34112:82;;;;;;34206:15;34223:23;34248:12;34264:50;34276:7;34285:4;34291:10;34303;:8;:10::i;:::-;34264:11;:50::i;:::-;34205:109;;;;;;34333:7;34342:15;34359:4;34365:15;34382:4;34388:10;34325:74;;;;;;;;;;;;;;;;;;33988:419;;;;;;;:::o;3950:136::-;4008:7;4035:43;4039:1;4042;4035:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4028:50;;3950:136;;;;:::o;28742:413::-;28845:1;28826:21;;:7;:21;;;;28818:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28898:49;28919:7;28936:1;28940:6;28898:20;:49::i;:::-;28960:22;28985:7;:16;28993:7;28985:16;;;;;;;;;;;;;;;;28960:41;;29058:6;29041:14;:23;29022:7;:16;29030:7;29022:16;;;;;;;;;;;;;;;:42;;;;29086:6;29075:7;;:17;;;;;;;;;;;29136:1;29110:37;;29119:7;29110:37;;;29140:6;29110:37;;;;;;;;;;;;;;;;;;28742:413;;;:::o;4840:471::-;4898:7;5148:1;5143;:6;5139:47;;;5173:1;5166:8;;;;5139:47;5198:9;5214:1;5210;:5;5198:17;;5243:1;5238;5234;:5;;;;;;:10;5226:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5302:1;5295:8;;;4840:471;;;;;:::o;38674:985::-;27563:4;27544:16;;:23;;;;;;;;;;;;;;;;;;38810:12:::1;38825:27;38850:1;38825:20;:24;;:27;;;;:::i;:::-;38810:42;;38863:17;38883:30;38908:4;38883:20;:24;;:30;;;;:::i;:::-;38863:50;;39191:22;39216:21;39191:46;;39282:22;39299:4;39282:16;:22::i;:::-;39435:18;39456:41;39482:14;39456:21;:25;;:41;;;;:::i;:::-;39435:62;;39547:35;39560:9;39571:10;39547:12;:35::i;:::-;39608:43;39623:4;39629:10;39641:9;39608:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27578:1;;;;27609:5:::0;27590:16;;:24;;;;;;;;;;;;;;;;;;38674:985;:::o;40858:1881::-;40955:18;:26;40974:6;40955:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40985:18;:29;41004:9;40985:29;;;;;;;;;;;;;;;;;;;;;;;;;40955:59;40952:220;;;41030:14;:12;:14::i;:::-;40952:220;;;41103:12;;41093:6;:22;;41085:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40952:220;41246:19;41268:33;41297:3;41268:24;41279:12;;41268:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41246:55;;41312:20;41335:34;41365:3;41335:25;41346:13;;41335:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41312:57;;41386:11;:19;41398:6;41386:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41410:11;:22;41422:9;41410:22;;;;;;;;;;;;;;;;;;;;;;;;;41409:23;41386:46;41382:782;;;41449:85;41471:6;41479:9;41491:41;41519:12;41491:23;41502:11;41491:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;41449:21;:85::i;:::-;41382:782;;;41557:11;:19;41569:6;41557:19;;;;;;;;;;;;;;;;;;;;;;;;;41556:20;:46;;;;;41580:11;:22;41592:9;41580:22;;;;;;;;;;;;;;;;;;;;;;;;;41556:46;41552:612;;;41619:83;41639:6;41647:9;41659:41;41687:12;41659:23;41670:11;41659:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;41619:19;:83::i;:::-;41552:612;;;41725:11;:19;41737:6;41725:19;;;;;;;;;;;;;;;;;;;;;;;;;41724:20;:47;;;;;41749:11;:22;41761:9;41749:22;;;;;;;;;;;;;;;;;;;;;;;;;41748:23;41724:47;41720:444;;;41788:81;41806:6;41814:9;41826:41;41854:12;41826:23;41837:11;41826:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;41788:17;:81::i;:::-;41720:444;;;41891:11;:19;41903:6;41891:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41914:11;:22;41926:9;41914:22;;;;;;;;;;;;;;;;;;;;;;;;;41891:45;41887:277;;;41953:85;41975:6;41983:9;41995:41;42023:12;41995:23;42006:11;41995:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;41953:21;:85::i;:::-;41887:277;;;42071:81;42089:6;42097:9;42109:41;42137:12;42109:23;42120:11;42109:6;:10;;:23;;;;:::i;:::-;:27;;:41;;;;:::i;:::-;42071:17;:81::i;:::-;41887:277;41720:444;41552:612;41382:782;42278:1;42268:7;:11;;;;42306:1;42290:13;:17;;;;42375:54;42393:6;42401:14;;;;;;;;;;;42417:11;42375:17;:54::i;:::-;42440:56;42458:6;42466:15;;;;;;;;;;;42483:12;42440:17;:56::i;:::-;42561:15;;42551:7;:25;;;;42603:21;;42587:13;:37;;;;42642:18;:26;42661:6;42642:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;42672:18;:29;42691:9;42672:29;;;;;;;;;;;;;;;;;;;;;;;;;42642:59;42639:92;;;42716:15;:13;:15::i;:::-;42639:92;40858:1881;;;;;:::o;35361:561::-;35411:7;35420;35440:15;35458:7;;35440:25;;35476:15;35494:7;;35476:25;;35523:9;35518:289;35542:9;:16;;;;35538:1;:20;35518:289;;;35608:7;35584;:21;35592:9;35602:1;35592:12;;;;;;;;;;;;;;;;;;;;;;;;;35584:21;;;;;;;;;;;;;;;;:31;:66;;;;35643:7;35619;:21;35627:9;35637:1;35627:12;;;;;;;;;;;;;;;;;;;;;;;;;35619:21;;;;;;;;;;;;;;;;:31;35584:66;35580:97;;;35660:7;;35669;;35652:25;;;;;;;;;35580:97;35702:34;35714:7;:21;35722:9;35732:1;35722:12;;;;;;;;;;;;;;;;;;;;;;;;;35714:21;;;;;;;;;;;;;;;;35702:7;:11;;:34;;;;:::i;:::-;35692:44;;35761:34;35773:7;:21;35781:9;35791:1;35781:12;;;;;;;;;;;;;;;;;;;;;;;;;35773:21;;;;;;;;;;;;;;;;35761:7;:11;;:34;;;;:::i;:::-;35751:44;;35560:3;;;;;;;35518:289;;;;35831:20;35843:7;;35831;;:11;;:20;;;;:::i;:::-;35821:7;:30;35817:61;;;35861:7;;35870;;35853:25;;;;;;;;35817:61;35897:7;35906;35889:25;;;;;;35361:561;;;:::o;6415:278::-;6501:7;6533:1;6529;:5;6536:12;6521:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6560:9;6576:1;6572;:5;;;;;;6560:17;;6684:1;6677:8;;;6415:278;;;;;:::o;34415:330::-;34475:7;34484;34493;34513:12;34528:24;34544:7;34528:15;:24::i;:::-;34513:39;;34563:18;34584:30;34606:7;34584:21;:30::i;:::-;34563:51;;34625:23;34651:33;34673:10;34651:17;34663:4;34651:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34625:59;;34703:15;34720:4;34726:10;34695:42;;;;;;;;;34415:330;;;;;:::o;34753:429::-;34868:7;34877;34886;34906:15;34924:24;34936:11;34924:7;:11;;:24;;;;:::i;:::-;34906:42;;34959:12;34974:21;34983:11;34974:4;:8;;:21;;;;:::i;:::-;34959:36;;35006:18;35027:27;35042:11;35027:10;:14;;:27;;;;:::i;:::-;35006:48;;35065:23;35091:33;35113:10;35091:17;35103:4;35091:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;35065:59;;35143:7;35152:15;35169:4;35135:39;;;;;;;;;;34753:429;;;;;;;;:::o;17535:92::-;;;;:::o;39667:589::-;39793:21;39831:1;39817:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39793:40;;39862:4;39844;39849:1;39844:7;;;;;;;;;;;;;:23;;;;;;;;;;;39888:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39878:4;39883:1;39878:7;;;;;;;;;;;;;:32;;;;;;;;;;;39923:62;39940:4;39955:15;39973:11;39923:8;:62::i;:::-;40024:15;:66;;;40105:11;40131:1;40175:4;40202;40222:15;40024:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39667:589;;:::o;40264:513::-;40412:62;40429:4;40444:15;40462:11;40412:8;:62::i;:::-;40517:15;:31;;;40556:9;40589:4;40609:11;40635:1;40678;40721:7;:5;:7::i;:::-;40743:15;40517:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40264:513;;:::o;36641:145::-;36694:1;36684:7;:11;;;;36722:1;36706:13;:17;;;;36749:1;36734:12;:16;;;;36777:1;36761:13;:17;;;;36641:145::o;43851:566::-;43954:15;43971:23;43996:12;44010:23;44035:12;44049:18;44071:19;44082:7;44071:10;:19::i;:::-;43953:137;;;;;;;;;;;;44119:28;44139:7;44119;:15;44127:6;44119:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44101:7;:15;44109:6;44101:15;;;;;;;;;;;;;;;:46;;;;44176:28;44196:7;44176;:15;44184:6;44176:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44158:7;:15;44166:6;44158:15;;;;;;;;;;;;;;;:46;;;;44236:39;44259:15;44236:7;:18;44244:9;44236:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44215:7;:18;44223:9;44215:18;;;;;;;;;;;;;;;:60;;;;44289:26;44304:10;44289:14;:26::i;:::-;44326:23;44338:4;44344;44326:11;:23::i;:::-;44382:9;44365:44;;44374:6;44365:44;;;44393:15;44365:44;;;;;;;;;;;;;;;;;;43851:566;;;;;;;;;:::o;43257:586::-;43358:15;43375:23;43400:12;43414:23;43439:12;43453:18;43475:19;43486:7;43475:10;:19::i;:::-;43357:137;;;;;;;;;;;;43523:28;43543:7;43523;:15;43531:6;43523:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43505:7;:15;43513:6;43505:15;;;;;;;;;;;;;;;:46;;;;43583:39;43606:15;43583:7;:18;43591:9;43583:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43562:7;:18;43570:9;43562:18;;;;;;;;;;;;;;;:60;;;;43654:39;43677:15;43654:7;:18;43662:9;43654:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43633:7;:18;43641:9;43633:18;;;;;;;;;;;;;;;:60;;;;43715:26;43730:10;43715:14;:26::i;:::-;43752:23;43764:4;43770;43752:11;:23::i;:::-;43808:9;43791:44;;43800:6;43791:44;;;43819:15;43791:44;;;;;;;;;;;;;;;;;;43257:586;;;;;;;;;:::o;42747:502::-;42846:15;42863:23;42888:12;42902:23;42927:12;42941:18;42963:19;42974:7;42963:10;:19::i;:::-;42845:137;;;;;;;;;;;;43011:28;43031:7;43011;:15;43019:6;43011:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42993:7;:15;43001:6;42993:15;;;;;;;;;;;;;;;:46;;;;43071:39;43094:15;43071:7;:18;43079:9;43071:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43050:7;:18;43058:9;43050:18;;;;;;;;;;;;;;;:60;;;;43121:26;43136:10;43121:14;:26::i;:::-;43158:23;43170:4;43176;43158:11;:23::i;:::-;43214:9;43197:44;;43206:6;43197:44;;;43225:15;43197:44;;;;;;;;;;;;;;;;;;42747:502;;;;;;;;;:::o;33077:642::-;33180:15;33197:23;33222:12;33236:23;33261:12;33275:18;33297:19;33308:7;33297:10;:19::i;:::-;33179:137;;;;;;;;;;;;33345:28;33365:7;33345;:15;33353:6;33345:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33327:7;:15;33335:6;33327:15;;;;;;;;;;;;;;;:46;;;;33402:28;33422:7;33402;:15;33410:6;33402:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33384:7;:15;33392:6;33384:15;;;;;;;;;;;;;;;:46;;;;33462:39;33485:15;33462:7;:18;33470:9;33462:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33441:7;:18;33449:9;33441:18;;;;;;;;;;;;;;;:60;;;;33533:39;33556:15;33533:7;:18;33541:9;33533:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33512:7;:18;33520:9;33512:18;;;;;;;;;;;;;;;:60;;;;33591:26;33606:10;33591:14;:26::i;:::-;33628:23;33640:4;33646;33628:11;:23::i;:::-;33684:9;33667:44;;33676:6;33667:44;;;33695:15;33667:44;;;;;;;;;;;;;;;;;;33077:642;;;;;;;;;:::o;36798:146::-;36852:1;36842:7;:11;;;;36880:1;36864:13;:17;;;;36907:1;36892:12;:16;;;;36935:1;36919:13;:17;;;;36798:146::o;36301:154::-;36365:7;36392:55;36431:5;36392:20;36404:7;;36392;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36385:62;;36301:154;;;:::o;36463:166::-;36533:7;36560:61;36605:5;36560:26;36572:13;;36560:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;36553:68;;36463:166;;;:::o;35934:355::-;35997:19;36020:10;:8;:10::i;:::-;35997:33;;36041:18;36062:27;36077:11;36062:10;:14;;:27;;;;:::i;:::-;36041:48;;36125:38;36152:10;36125:7;:22;36141:4;36125:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36100:7;:22;36116:4;36100:22;;;;;;;;;;;;;;;:63;;;;36177:11;:26;36197:4;36177:26;;;;;;;;;;;;;;;;;;;;;;;;;36174:107;;;36243:38;36270:10;36243:7;:22;36259:4;36243:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36218:7;:22;36234:4;36218:22;;;;;;;;;;;;;;;:63;;;;36174:107;35934:355;;;:::o;33833:147::-;33911:17;33923:4;33911:7;;:11;;:17;;;;:::i;:::-;33901:7;:27;;;;33952:20;33967:4;33952:10;;:14;;:20;;;;:::i;:::-;33939:10;:33;;;;33833:147;;:::o
Swarm Source
ipfs://61b5ce481260a22828eda2841b7d2a426cf803a43bc1ffde7f065c7cd8b459c7
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.