Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 $BITCONNECT
Holders
234
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
943.451752421370928297 $BITCONNECTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JackNichPikachuBinLaden69420
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-13 */ /** *Submitted for verification at Etherscan.io on 2023-07-31 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ 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 ); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ 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 = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract JackNichPikachuBinLaden69420 is ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public immutable revShareWallet; uint256 public maxTransactionAmount; uint256 public immutable swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => bool) blacklisted; uint256 public buyTotalFees; uint256 public buyRevShareFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellRevShareFee; uint256 public sellLiquidityFee; uint256 public tokensForRevShare; uint256 public tokensForLiquidity; // Exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // Store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor( address _revShareWallet ) ERC20("JackNichPikachuBinLaden69420", "$BITCONNECT") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //Uniswap V2 Router ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; // Creates the Uniswap Pair uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyRevShareFee = 8; // Lowered to 4% after launch uint256 _buyLiquidityFee = 2; // Lowered to 1% after launch uint256 _sellRevShareFee = 8; // Lowered to 4% after launch uint256 _sellLiquidityFee = 2; // Lowered to 1% after launch uint256 totalSupply = 1_000_000 * 1e18; // 1 Million maxTransactionAmount = 2_500 * 1e18; // 0.25% maxWallet = 2_500 * 1e18; // 0.25% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% buyRevShareFee = _buyRevShareFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyRevShareFee + buyLiquidityFee; sellRevShareFee = _sellRevShareFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellRevShareFee + sellLiquidityFee; revShareWallet = _revShareWallet; // Set as revShare wallet - Helper Contract // Exclude from paying fees or having max transaction amount if; is owner, is deployer, is dead address. excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, (totalSupply * 80) / 100); _mint( 0x561F33fBCB2999112f7406414e6d292097DBd8E7, (totalSupply * 20) / 100 ); //marketing wallet } receive() external payable {} // Will enable trading, once this is toggeled, it will not be able to be turned off. function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // Trigger this post launch once price is more stable. Made to avoid whales and snipers hogging supply. function updateLimitsAndFees() external onlyOwner { maxTransactionAmount = 10_000 * (10 ** 18); // 1% maxWallet = 25_000 * (10 ** 18); // 2.5% buyRevShareFee = 4; // 4% buyLiquidityFee = 1; // 1% buyTotalFees = 5; sellRevShareFee = 4; // 4% sellLiquidityFee = 1; // 1% sellTotalFees = 5; } function excludeFromMaxTransaction( address updAds, bool isEx ) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function isBlacklisted(address account) public view returns (bool) { return blacklisted[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blacklisted[from], "Sender blacklisted"); require(!blacklisted[to], "Receiver blacklisted"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // Buying if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } // Selling else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // If any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // Only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // Sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees; } // Buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } 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; ignore slippage 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 ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForRevShare; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance - initialETHBalance; uint256 ethForRevShare = (ethBalance * tokensForRevShare) / (totalTokensToSwap - (tokensForLiquidity / 2)); uint256 ethForLiquidity = ethBalance - ethForRevShare; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } tokensForLiquidity = 0; tokensForRevShare = 0; (success, ) = address(revShareWallet).call{ value: address(this).balance }(""); } // The helper contract will also be used to be able to call the 5 functions below. // Any functions that have to do with ETH or Tokens will be sent directly to the helper contract. // This means that the split of 80% to the team, and 20% to the holders is intact. modifier onlyHelper() { require( revShareWallet == _msgSender(), "Token: caller is not the Helper" ); _; } // @Helper - Callable by Helper contract in-case tokens get's stuck in the token contract. function withdrawStuckToken( address _token, address _to ) external onlyHelper { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_to, _contractBalance); } // @Helper - Callable by Helper contract in-case ETH get's stuck in the token contract. function withdrawStuckEth(address toAddr) external onlyHelper { (bool success, ) = toAddr.call{value: address(this).balance}(""); require(success); } // @Helper - Blacklist v3 pools; can unblacklist() down the road to suit project and community function blacklistLiquidityPool(address lpAddress) public onlyHelper { require( lpAddress != address(uniswapV2Pair) && lpAddress != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), "Cannot blacklist token's v2 router or v2 pool." ); blacklisted[lpAddress] = true; } // @Helper - Unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the road function unblacklist(address _addr) public onlyHelper { blacklisted[_addr] = false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_revShareWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","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":"updateLimitsAndFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040525f60085f6101000a81548160ff0219169083151502179055505f600860016101000a81548160ff02191690831515021790555034801562000044575f80fd5b50604051620056a3380380620056a383398181016040528101906200006a919062000abb565b6040518060400160405280601c81526020017f4a61636b4e69636850696b6163687542696e4c6164656e3639343230000000008152506040518060400160405280600b81526020017f24424954434f4e4e4543540000000000000000000000000000000000000000008152508160039081620000e7919062000d4f565b508060049081620000f9919062000d4f565b5050506200011c620001106200052e60201b60201c565b6200053560201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000147816001620005f860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001eb919062000abb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000251573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000277919062000abb565b6040518363ffffffff1660e01b81526004016200029692919062000e44565b6020604051808303815f875af1158015620002b3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d9919062000abb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032160a0516001620005f860201b60201c565b6200033660a0516001620006df60201b60201c565b5f600890505f600290505f600890505f600290505f69d3c21bcecceda1000000905068878678326eac90000060068190555068878678326eac9000006007819055506127106005826200038a919062000e9c565b62000396919062000f13565b60e0818152505084600b8190555083600c81905550600c54600b54620003bd919062000f4a565b600a8190555082600e8190555081600f81905550600f54600e54620003e3919062000f4a565b600d819055508673ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250506200043f620004316200077d60201b60201c565b6001620007a560201b60201c565b62000452306001620007a560201b60201c565b6200046761dead6001620007a560201b60201c565b620004896200047b6200077d60201b60201c565b6001620005f860201b60201c565b6200049c306001620005f860201b60201c565b620004b161dead6001620005f860201b60201c565b620004df336064605084620004c7919062000e9c565b620004d3919062000f13565b620008dc60201b60201c565b6200052173561f33fbcb2999112f7406414e6d292097dbd8e7606460148462000509919062000e9c565b62000515919062000f13565b620008dc60201b60201c565b50505050505050620010d3565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006086200052e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200062e6200077d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000687576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067e9062000fe2565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007b56200052e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007db6200077d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082b9062000fe2565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008d091906200101e565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200094d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009449062001087565b60405180910390fd5b620009605f838362000a4c60201b60201c565b8060025f82825462000973919062000f4a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620009c7919062000f4a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a2d9190620010b8565b60405180910390a362000a485f838362000a5160201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a858262000a5a565b9050919050565b62000a978162000a79565b811462000aa2575f80fd5b50565b5f8151905062000ab58162000a8c565b92915050565b5f6020828403121562000ad35762000ad262000a56565b5b5f62000ae28482850162000aa5565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b6757607f821691505b60208210810362000b7d5762000b7c62000b22565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000be17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ba4565b62000bed868362000ba4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c3762000c3162000c2b8462000c05565b62000c0e565b62000c05565b9050919050565b5f819050919050565b62000c528362000c17565b62000c6a62000c618262000c3e565b84845462000bb0565b825550505050565b5f90565b62000c8062000c72565b62000c8d81848462000c47565b505050565b5b8181101562000cb45762000ca85f8262000c76565b60018101905062000c93565b5050565b601f82111562000d035762000ccd8162000b83565b62000cd88462000b95565b8101602085101562000ce8578190505b62000d0062000cf78562000b95565b83018262000c92565b50505b505050565b5f82821c905092915050565b5f62000d255f198460080262000d08565b1980831691505092915050565b5f62000d3f838362000d14565b9150826002028217905092915050565b62000d5a8262000aeb565b67ffffffffffffffff81111562000d765762000d7562000af5565b5b62000d82825462000b4f565b62000d8f82828562000cb8565b5f60209050601f83116001811462000dc5575f841562000db0578287015190505b62000dbc858262000d32565b86555062000e2b565b601f19841662000dd58662000b83565b5f5b8281101562000dfe5784890151825560018201915060208501945060208101905062000dd7565b8683101562000e1e578489015162000e1a601f89168262000d14565b8355505b6001600288020188555050505b505050505050565b62000e3e8162000a79565b82525050565b5f60408201905062000e595f83018562000e33565b62000e68602083018462000e33565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ea88262000c05565b915062000eb58362000c05565b925082820262000ec58162000c05565b9150828204841483151762000edf5762000ede62000e6f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f1f8262000c05565b915062000f2c8362000c05565b92508262000f3f5762000f3e62000ee6565b5b828204905092915050565b5f62000f568262000c05565b915062000f638362000c05565b925082820190508082111562000f7e5762000f7d62000e6f565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000fca60208362000f84565b915062000fd78262000f94565b602082019050919050565b5f6020820190508181035f83015262000ffb8162000fbc565b9050919050565b5f8115159050919050565b620010188162001002565b82525050565b5f602082019050620010335f8301846200100d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200106f601f8362000f84565b91506200107c8262001039565b602082019050919050565b5f6020820190508181035f830152620010a08162001061565b9050919050565b620010b28162000c05565b82525050565b5f602082019050620010cd5f830184620010a7565b92915050565b60805160a05160c05160e051614533620011705f395f8181611ae90152818161251301528181612d6f0152612da301525f8181610ef101528181610fbf01528181611001015281816115900152818161193f0152612ed101525f8181610ca4015281816112d401526119b601525f8181610ac40152818161300b015281816130ea01528181613111015281816131a701526131ce01526145335ff3fe60806040526004361061025f575f3560e01c80637ca8448a11610143578063c0246668116100b5578063e2f4560511610079578063e2f45605146108e6578063f11a24d314610910578063f2fde38b1461093a578063f637434214610962578063f8b45b051461098c578063fe575a87146109b657610266565b8063c024666814610806578063c8c8ebe41461082e578063d85ba06314610858578063dd62ed3e14610882578063e19b2823146108be57610266565b80639c6868af116101075780639c6868af146106ea578063a457c2d714610700578063a9059cbb1461073c578063b62496f514610778578063bbc0c742146107b4578063bc205ad3146107de57610266565b80637ca8448a146106305780638a8c523c146106585780638da5cb5b1461066e57806395d89b41146106985780639a7a23d6146106c257610266565b8063313ce567116101dc5780636ddd1713116101a05780636ddd17131461053a57806370a0823114610564578063715018a6146105a05780637571336a146105b657806375e3661e146105de578063782c4e991461060657610266565b8063313ce56714610444578063395093511461046e57806349bd5a5e146104aa5780634fbee193146104d45780636a486a8e1461051057610266565b806318160ddd1161022357806318160ddd1461036057806319eab0421461038a5780631a8145bb146103b457806323b872dd146103de57806324b9f3c11461041a57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d0578063156c2f351461030c5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f2565b60405161028b9190613309565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906133ba565b610a82565b6040516102c79190613412565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061342b565b610a9f565b6040516103039190613412565b60405180910390f35b348015610317575f80fd5b50610320610abc565b60405161032d9190613465565b60405180910390f35b348015610341575f80fd5b5061034a610ac2565b60405161035791906134d9565b60405180910390f35b34801561036b575f80fd5b50610374610ae6565b6040516103819190613465565b60405180910390f35b348015610395575f80fd5b5061039e610aef565b6040516103ab9190613465565b60405180910390f35b3480156103bf575f80fd5b506103c8610af5565b6040516103d59190613465565b60405180910390f35b3480156103e9575f80fd5b5061040460048036038101906103ff91906134f2565b610afb565b6040516104119190613412565b60405180910390f35b348015610425575f80fd5b5061042e610bed565b60405161043b9190613465565b60405180910390f35b34801561044f575f80fd5b50610458610bf3565b604051610465919061355d565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906133ba565b610bfb565b6040516104a19190613412565b60405180910390f35b3480156104b5575f80fd5b506104be610ca2565b6040516104cb9190613585565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f5919061342b565b610cc6565b6040516105079190613412565b60405180910390f35b34801561051b575f80fd5b50610524610d18565b6040516105319190613465565b60405180910390f35b348015610545575f80fd5b5061054e610d1e565b60405161055b9190613412565b60405180910390f35b34801561056f575f80fd5b5061058a6004803603810190610585919061342b565b610d31565b6040516105979190613465565b60405180910390f35b3480156105ab575f80fd5b506105b4610d76565b005b3480156105c1575f80fd5b506105dc60048036038101906105d791906135c8565b610dfd565b005b3480156105e9575f80fd5b5061060460048036038101906105ff919061342b565b610ed1565b005b348015610611575f80fd5b5061061a610fbd565b6040516106279190613585565b60405180910390f35b34801561063b575f80fd5b506106566004803603810190610651919061342b565b610fe1565b005b348015610663575f80fd5b5061066c6110eb565b005b348015610679575f80fd5b5061068261119e565b60405161068f9190613585565b60405180910390f35b3480156106a3575f80fd5b506106ac6111c6565b6040516106b99190613309565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e391906135c8565b611256565b005b3480156106f5575f80fd5b506106fe61136e565b005b34801561070b575f80fd5b50610726600480360381019061072191906133ba565b61143e565b6040516107339190613412565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906133ba565b611524565b60405161076f9190613412565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061342b565b611541565b6040516107ab9190613412565b60405180910390f35b3480156107bf575f80fd5b506107c861155e565b6040516107d59190613412565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613606565b611570565b005b348015610811575f80fd5b5061082c600480360381019061082791906135c8565b61176f565b005b348015610839575f80fd5b50610842611891565b60405161084f9190613465565b60405180910390f35b348015610863575f80fd5b5061086c611897565b6040516108799190613465565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190613606565b61189d565b6040516108b59190613465565b60405180910390f35b3480156108c9575f80fd5b506108e460048036038101906108df919061342b565b61191f565b005b3480156108f1575f80fd5b506108fa611ae7565b6040516109079190613465565b60405180910390f35b34801561091b575f80fd5b50610924611b0b565b6040516109319190613465565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b919061342b565b611b11565b005b34801561096d575f80fd5b50610976611c07565b6040516109839190613465565b60405180910390f35b348015610997575f80fd5b506109a0611c0d565b6040516109ad9190613465565b60405180910390f35b3480156109c1575f80fd5b506109dc60048036038101906109d7919061342b565b611c13565b6040516109e99190613412565b60405180910390f35b606060038054610a0190613671565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613671565b8015610a785780601f10610a4f57610100808354040283529160200191610a78565b820191905f5260205f20905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b5f610a95610a8e611c65565b8484611c6c565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b600e5481565b60115481565b5f610b07848484611e2f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b4e611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613711565b60405180910390fd5b610be185610bd9611c65565b858403611c6c565b60019150509392505050565b60105481565b5f6012905090565b5f610c98610c07611c65565b848460015f610c14611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c93919061375c565b611c6c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d7e611c65565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61119e565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906137d9565b60405180910390fd5b610dfb5f61295b565b565b610e05611c65565b73ffffffffffffffffffffffffffffffffffffffff16610e2361119e565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906137d9565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ed9611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613841565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fe9611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613841565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161109b9061388c565b5f6040518083038185875af1925050503d805f81146110d5576040519150601f19603f3d011682016040523d82523d5f602084013e6110da565b606091505b50509050806110e7575f80fd5b5050565b6110f3611c65565b73ffffffffffffffffffffffffffffffffffffffff1661111161119e565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906137d9565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d590613671565b80601f016020809104026020016040519081016040528092919081815260200182805461120190613671565b801561124c5780601f106112235761010080835404028352916020019161124c565b820191905f5260205f20905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c65565b73ffffffffffffffffffffffffffffffffffffffff1661127c61119e565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c9906137d9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613910565b60405180910390fd5b61136a8282612a1e565b5050565b611376611c65565b73ffffffffffffffffffffffffffffffffffffffff1661139461119e565b73ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906137d9565b60405180910390fd5b69021e19e0c9bab240000060068190555069054b40b1f852bda000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b5f8060015f61144b611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc9061399e565b60405180910390fd5b611519611510611c65565b85858403611c6c565b600191505092915050565b5f611537611530611c65565b8484611e2f565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b611578611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613841565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613a06565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ad9190613585565b602060405180830381865afa1580156116c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ec9190613a38565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611729929190613a63565b6020604051808303815f875af1158015611745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117699190613a9e565b50505050565b611777611c65565b73ffffffffffffffffffffffffffffffffffffffff1661179561119e565b73ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906137d9565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118859190613412565b60405180910390a25050565b60065481565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611927611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90613841565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611a505750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613b39565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b611b19611c65565b73ffffffffffffffffffffffffffffffffffffffff16611b3761119e565b73ffffffffffffffffffffffffffffffffffffffff1614611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b84906137d9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613bc7565b60405180910390fd5b611c048161295b565b50565b600f5481565b60075481565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613c55565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613ce3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e229190613465565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490613d71565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613dff565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90613e67565b60405180910390fd5b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613ecf565b60405180910390fd5b5f81036120365761203183835f612abc565b612956565b61203e61119e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120ac575061207c61119e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121375750600560149054906101000a900460ff16155b156125045760085f9054906101000a900460ff1661222a5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ea575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090613f37565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122c7575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561236e57600654811115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613fc5565b60405180910390fd5b60075461231d83610d31565b82612328919061375c565b1115612369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123609061402d565b60405180910390fd5b612503565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561240b575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561245a57600654811115612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c906140bb565b60405180910390fd5b612502565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612501576007546124b483610d31565b826124bf919061375c565b1115612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f79061402d565b60405180910390fd5b5b5b5b5b5f61250e30610d31565b90505f7f000000000000000000000000000000000000000000000000000000000000000082101590508080156125505750600860019054906101000a900460ff165b80156125695750600560149054906101000a900460ff16155b80156125bc575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561260f575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612662575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126a5576001600560146101000a81548160ff02191690831515021790555061268a612d31565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612754575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561275d575f90505b5f81156129465760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127bb57505f600d54115b15612845576064600d54866127d091906140d9565b6127da9190614147565b9050600d54600f54826127ed91906140d9565b6127f79190614147565b60115f828254612807919061375c565b92505081905550600d54600e548261281f91906140d9565b6128299190614147565b60105f828254612839919061375c565b92505081905550612923565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289c57505f600a54115b15612922576064600a54866128b191906140d9565b6128bb9190614147565b9050600a54600c54826128ce91906140d9565b6128d89190614147565b60115f8282546128e8919061375c565b92505081905550600a54600b548261290091906140d9565b61290a9190614147565b60105f82825461291a919061375c565b925050819055505b5b5f81111561293757612936873083612abc565b5b80856129439190614177565b94505b612951878787612abc565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190613d71565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8f90613dff565b60405180910390fd5b612ba3838383612f64565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1d9061421a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cb4919061375c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d189190613465565b60405180910390a3612d2b848484612f69565b50505050565b5f612d3b30610d31565b90505f601054601154612d4e919061375c565b90505f80831480612d5e57505f82145b15612d6b57505050612f62565b60147f0000000000000000000000000000000000000000000000000000000000000000612d9891906140d9565b831115612dcf5760147f0000000000000000000000000000000000000000000000000000000000000000612dcc91906140d9565b92505b5f60028360115486612de191906140d9565b612deb9190614147565b612df59190614147565b90505f8185612e049190614177565b90505f479050612e1382612f6e565b5f8147612e209190614177565b90505f6002601154612e329190614147565b87612e3d9190614177565b60105483612e4b91906140d9565b612e559190614147565b90505f8183612e649190614177565b90505f86118015612e7457505f81115b15612ec157612e8386826131a1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612eb893929190614238565b60405180910390a15b5f6011819055505f6010819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1647604051612f139061388c565b5f6040518083038185875af1925050503d805f8114612f4d576040519150601f19603f3d011682016040523d82523d5f602084013e612f52565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff811115612f8a57612f8961426d565b5b604051908082528060200260200182016040528015612fb85781602001602082028036833780820191505090505b50905030815f81518110612fcf57612fce61429a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309691906142db565b816001815181106130aa576130a961429a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061310f307f000000000000000000000000000000000000000000000000000000000000000084611c6c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131709594939291906143f6565b5f604051808303815f87803b158015613187575f80fd5b505af1158015613199573d5f803e3d5ffd5b505050505050565b6131cc307f000000000000000000000000000000000000000000000000000000000000000084611c6c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061321561119e565b426040518863ffffffff1660e01b81526004016132379695949392919061444e565b60606040518083038185885af1158015613253573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061327891906144ad565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132b657808201518184015260208101905061329b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132db8261327f565b6132e58185613289565b93506132f5818560208601613299565b6132fe816132c1565b840191505092915050565b5f6020820190508181035f83015261332181846132d1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133568261332d565b9050919050565b6133668161334c565b8114613370575f80fd5b50565b5f813590506133818161335d565b92915050565b5f819050919050565b61339981613387565b81146133a3575f80fd5b50565b5f813590506133b481613390565b92915050565b5f80604083850312156133d0576133cf613329565b5b5f6133dd85828601613373565b92505060206133ee858286016133a6565b9150509250929050565b5f8115159050919050565b61340c816133f8565b82525050565b5f6020820190506134255f830184613403565b92915050565b5f602082840312156134405761343f613329565b5b5f61344d84828501613373565b91505092915050565b61345f81613387565b82525050565b5f6020820190506134785f830184613456565b92915050565b5f819050919050565b5f6134a161349c6134978461332d565b61347e565b61332d565b9050919050565b5f6134b282613487565b9050919050565b5f6134c3826134a8565b9050919050565b6134d3816134b9565b82525050565b5f6020820190506134ec5f8301846134ca565b92915050565b5f805f6060848603121561350957613508613329565b5b5f61351686828701613373565b935050602061352786828701613373565b9250506040613538868287016133a6565b9150509250925092565b5f60ff82169050919050565b61355781613542565b82525050565b5f6020820190506135705f83018461354e565b92915050565b61357f8161334c565b82525050565b5f6020820190506135985f830184613576565b92915050565b6135a7816133f8565b81146135b1575f80fd5b50565b5f813590506135c28161359e565b92915050565b5f80604083850312156135de576135dd613329565b5b5f6135eb85828601613373565b92505060206135fc858286016135b4565b9150509250929050565b5f806040838503121561361c5761361b613329565b5b5f61362985828601613373565b925050602061363a85828601613373565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368857607f821691505b60208210810361369b5761369a613644565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136fb602883613289565b9150613706826136a1565b604082019050919050565b5f6020820190508181035f830152613728816136ef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61376682613387565b915061377183613387565b92508282019050808211156137895761378861372f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c3602083613289565b91506137ce8261378f565b602082019050919050565b5f6020820190508181035f8301526137f0816137b7565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c706572005f82015250565b5f61382b601f83613289565b9150613836826137f7565b602082019050919050565b5f6020820190508181035f8301526138588161381f565b9050919050565b5f81905092915050565b50565b5f6138775f8361385f565b915061388282613869565b5f82019050919050565b5f6138968261386c565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6138fa603983613289565b9150613905826138a0565b604082019050919050565b5f6020820190508181035f830152613927816138ee565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613988602583613289565b91506139938261392e565b604082019050919050565b5f6020820190508181035f8301526139b58161397c565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6139f0601a83613289565b91506139fb826139bc565b602082019050919050565b5f6020820190508181035f830152613a1d816139e4565b9050919050565b5f81519050613a3281613390565b92915050565b5f60208284031215613a4d57613a4c613329565b5b5f613a5a84828501613a24565b91505092915050565b5f604082019050613a765f830185613576565b613a836020830184613456565b9392505050565b5f81519050613a988161359e565b92915050565b5f60208284031215613ab357613ab2613329565b5b5f613ac084828501613a8a565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f613b23602e83613289565b9150613b2e82613ac9565b604082019050919050565b5f6020820190508181035f830152613b5081613b17565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bb1602683613289565b9150613bbc82613b57565b604082019050919050565b5f6020820190508181035f830152613bde81613ba5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c3f602483613289565b9150613c4a82613be5565b604082019050919050565b5f6020820190508181035f830152613c6c81613c33565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ccd602283613289565b9150613cd882613c73565b604082019050919050565b5f6020820190508181035f830152613cfa81613cc1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d5b602583613289565b9150613d6682613d01565b604082019050919050565b5f6020820190508181035f830152613d8881613d4f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613de9602383613289565b9150613df482613d8f565b604082019050919050565b5f6020820190508181035f830152613e1681613ddd565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f613e51601283613289565b9150613e5c82613e1d565b602082019050919050565b5f6020820190508181035f830152613e7e81613e45565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f613eb9601483613289565b9150613ec482613e85565b602082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f21601683613289565b9150613f2c82613eed565b602082019050919050565b5f6020820190508181035f830152613f4e81613f15565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613faf603583613289565b9150613fba82613f55565b604082019050919050565b5f6020820190508181035f830152613fdc81613fa3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614017601383613289565b915061402282613fe3565b602082019050919050565b5f6020820190508181035f8301526140448161400b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140a5603683613289565b91506140b08261404b565b604082019050919050565b5f6020820190508181035f8301526140d281614099565b9050919050565b5f6140e382613387565b91506140ee83613387565b92508282026140fc81613387565b915082820484148315176141135761411261372f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61415182613387565b915061415c83613387565b92508261416c5761416b61411a565b5b828204905092915050565b5f61418182613387565b915061418c83613387565b92508282039050818111156141a4576141a361372f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614204602683613289565b915061420f826141aa565b604082019050919050565b5f6020820190508181035f830152614231816141f8565b9050919050565b5f60608201905061424b5f830186613456565b6142586020830185613456565b6142656040830184613456565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142d58161335d565b92915050565b5f602082840312156142f0576142ef613329565b5b5f6142fd848285016142c7565b91505092915050565b5f819050919050565b5f61432961432461431f84614306565b61347e565b613387565b9050919050565b6143398161430f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143718161334c565b82525050565b5f6143828383614368565b60208301905092915050565b5f602082019050919050565b5f6143a48261433f565b6143ae8185614349565b93506143b983614359565b805f5b838110156143e95781516143d08882614377565b97506143db8361438e565b9250506001810190506143bc565b5085935050505092915050565b5f60a0820190506144095f830188613456565b6144166020830187614330565b8181036040830152614428818661439a565b90506144376060830185613576565b6144446080830184613456565b9695505050505050565b5f60c0820190506144615f830189613576565b61446e6020830188613456565b61447b6040830187614330565b6144886060830186614330565b6144956080830185613576565b6144a260a0830184613456565b979650505050505050565b5f805f606084860312156144c4576144c3613329565b5b5f6144d186828701613a24565b93505060206144e286828701613a24565b92505060406144f386828701613a24565b915050925092509256fea2646970667358221220317b8b6aef4e8fa10064a13183a634a27f04f9bbbc05e57954ca38b0ca087c5064736f6c63430008140033000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de43
Deployed Bytecode
0x60806040526004361061025f575f3560e01c80637ca8448a11610143578063c0246668116100b5578063e2f4560511610079578063e2f45605146108e6578063f11a24d314610910578063f2fde38b1461093a578063f637434214610962578063f8b45b051461098c578063fe575a87146109b657610266565b8063c024666814610806578063c8c8ebe41461082e578063d85ba06314610858578063dd62ed3e14610882578063e19b2823146108be57610266565b80639c6868af116101075780639c6868af146106ea578063a457c2d714610700578063a9059cbb1461073c578063b62496f514610778578063bbc0c742146107b4578063bc205ad3146107de57610266565b80637ca8448a146106305780638a8c523c146106585780638da5cb5b1461066e57806395d89b41146106985780639a7a23d6146106c257610266565b8063313ce567116101dc5780636ddd1713116101a05780636ddd17131461053a57806370a0823114610564578063715018a6146105a05780637571336a146105b657806375e3661e146105de578063782c4e991461060657610266565b8063313ce56714610444578063395093511461046e57806349bd5a5e146104aa5780634fbee193146104d45780636a486a8e1461051057610266565b806318160ddd1161022357806318160ddd1461036057806319eab0421461038a5780631a8145bb146103b457806323b872dd146103de57806324b9f3c11461041a57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d0578063156c2f351461030c5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f2565b60405161028b9190613309565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906133ba565b610a82565b6040516102c79190613412565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061342b565b610a9f565b6040516103039190613412565b60405180910390f35b348015610317575f80fd5b50610320610abc565b60405161032d9190613465565b60405180910390f35b348015610341575f80fd5b5061034a610ac2565b60405161035791906134d9565b60405180910390f35b34801561036b575f80fd5b50610374610ae6565b6040516103819190613465565b60405180910390f35b348015610395575f80fd5b5061039e610aef565b6040516103ab9190613465565b60405180910390f35b3480156103bf575f80fd5b506103c8610af5565b6040516103d59190613465565b60405180910390f35b3480156103e9575f80fd5b5061040460048036038101906103ff91906134f2565b610afb565b6040516104119190613412565b60405180910390f35b348015610425575f80fd5b5061042e610bed565b60405161043b9190613465565b60405180910390f35b34801561044f575f80fd5b50610458610bf3565b604051610465919061355d565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f91906133ba565b610bfb565b6040516104a19190613412565b60405180910390f35b3480156104b5575f80fd5b506104be610ca2565b6040516104cb9190613585565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f5919061342b565b610cc6565b6040516105079190613412565b60405180910390f35b34801561051b575f80fd5b50610524610d18565b6040516105319190613465565b60405180910390f35b348015610545575f80fd5b5061054e610d1e565b60405161055b9190613412565b60405180910390f35b34801561056f575f80fd5b5061058a6004803603810190610585919061342b565b610d31565b6040516105979190613465565b60405180910390f35b3480156105ab575f80fd5b506105b4610d76565b005b3480156105c1575f80fd5b506105dc60048036038101906105d791906135c8565b610dfd565b005b3480156105e9575f80fd5b5061060460048036038101906105ff919061342b565b610ed1565b005b348015610611575f80fd5b5061061a610fbd565b6040516106279190613585565b60405180910390f35b34801561063b575f80fd5b506106566004803603810190610651919061342b565b610fe1565b005b348015610663575f80fd5b5061066c6110eb565b005b348015610679575f80fd5b5061068261119e565b60405161068f9190613585565b60405180910390f35b3480156106a3575f80fd5b506106ac6111c6565b6040516106b99190613309565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e391906135c8565b611256565b005b3480156106f5575f80fd5b506106fe61136e565b005b34801561070b575f80fd5b50610726600480360381019061072191906133ba565b61143e565b6040516107339190613412565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906133ba565b611524565b60405161076f9190613412565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061342b565b611541565b6040516107ab9190613412565b60405180910390f35b3480156107bf575f80fd5b506107c861155e565b6040516107d59190613412565b60405180910390f35b3480156107e9575f80fd5b5061080460048036038101906107ff9190613606565b611570565b005b348015610811575f80fd5b5061082c600480360381019061082791906135c8565b61176f565b005b348015610839575f80fd5b50610842611891565b60405161084f9190613465565b60405180910390f35b348015610863575f80fd5b5061086c611897565b6040516108799190613465565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190613606565b61189d565b6040516108b59190613465565b60405180910390f35b3480156108c9575f80fd5b506108e460048036038101906108df919061342b565b61191f565b005b3480156108f1575f80fd5b506108fa611ae7565b6040516109079190613465565b60405180910390f35b34801561091b575f80fd5b50610924611b0b565b6040516109319190613465565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b919061342b565b611b11565b005b34801561096d575f80fd5b50610976611c07565b6040516109839190613465565b60405180910390f35b348015610997575f80fd5b506109a0611c0d565b6040516109ad9190613465565b60405180910390f35b3480156109c1575f80fd5b506109dc60048036038101906109d7919061342b565b611c13565b6040516109e99190613412565b60405180910390f35b606060038054610a0190613671565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d90613671565b8015610a785780601f10610a4f57610100808354040283529160200191610a78565b820191905f5260205f20905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b5f610a95610a8e611c65565b8484611c6c565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600e5481565b60115481565b5f610b07848484611e2f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b4e611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613711565b60405180910390fd5b610be185610bd9611c65565b858403611c6c565b60019150509392505050565b60105481565b5f6012905090565b5f610c98610c07611c65565b848460015f610c14611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c93919061375c565b611c6c565b6001905092915050565b7f000000000000000000000000722885a8f952721cffc8fbd3479e47b7c142284281565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600860019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d7e611c65565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61119e565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906137d9565b60405180910390fd5b610dfb5f61295b565b565b610e05611c65565b73ffffffffffffffffffffffffffffffffffffffff16610e2361119e565b73ffffffffffffffffffffffffffffffffffffffff1614610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906137d9565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ed9611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4373ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613841565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4381565b610fe9611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4373ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613841565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff164760405161109b9061388c565b5f6040518083038185875af1925050503d805f81146110d5576040519150601f19603f3d011682016040523d82523d5f602084013e6110da565b606091505b50509050806110e7575f80fd5b5050565b6110f3611c65565b73ffffffffffffffffffffffffffffffffffffffff1661111161119e565b73ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906137d9565b60405180910390fd5b600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111d590613671565b80601f016020809104026020016040519081016040528092919081815260200182805461120190613671565b801561124c5780601f106112235761010080835404028352916020019161124c565b820191905f5260205f20905b81548152906001019060200180831161122f57829003601f168201915b5050505050905090565b61125e611c65565b73ffffffffffffffffffffffffffffffffffffffff1661127c61119e565b73ffffffffffffffffffffffffffffffffffffffff16146112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c9906137d9565b60405180910390fd5b7f000000000000000000000000722885a8f952721cffc8fbd3479e47b7c142284273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613910565b60405180910390fd5b61136a8282612a1e565b5050565b611376611c65565b73ffffffffffffffffffffffffffffffffffffffff1661139461119e565b73ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906137d9565b60405180910390fd5b69021e19e0c9bab240000060068190555069054b40b1f852bda000006007819055506004600b819055506001600c819055506005600a819055506004600e819055506001600f819055506005600d81905550565b5f8060015f61144b611c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc9061399e565b60405180910390fd5b611519611510611c65565b85858403611c6c565b600191505092915050565b5f611537611530611c65565b8484611e2f565b6001905092915050565b6014602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900460ff1681565b611578611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4373ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613841565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613a06565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ad9190613585565b602060405180830381865afa1580156116c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ec9190613a38565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611729929190613a63565b6020604051808303815f875af1158015611745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117699190613a9e565b50505050565b611777611c65565b73ffffffffffffffffffffffffffffffffffffffff1661179561119e565b73ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e2906137d9565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118859190613412565b60405180910390a25050565b60065481565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611927611c65565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4373ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90613841565b60405180910390fd5b7f000000000000000000000000722885a8f952721cffc8fbd3479e47b7c142284273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611a505750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613b39565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b7f00000000000000000000000000000000000000000000001b1ae4d6e2ef50000081565b600c5481565b611b19611c65565b73ffffffffffffffffffffffffffffffffffffffff16611b3761119e565b73ffffffffffffffffffffffffffffffffffffffff1614611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b84906137d9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613bc7565b60405180910390fd5b611c048161295b565b50565b600f5481565b60075481565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190613c55565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613ce3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e229190613465565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490613d71565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290613dff565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90613e67565b60405180910390fd5b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613ecf565b60405180910390fd5b5f81036120365761203183835f612abc565b612956565b61203e61119e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120ac575061207c61119e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120e457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561211e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121375750600560149054906101000a900460ff16155b156125045760085f9054906101000a900460ff1661222a5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ea575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090613f37565b60405180910390fd5b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156122c7575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561236e57600654811115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613fc5565b60405180910390fd5b60075461231d83610d31565b82612328919061375c565b1115612369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123609061402d565b60405180910390fd5b612503565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561240b575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561245a57600654811115612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c906140bb565b60405180910390fd5b612502565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612501576007546124b483610d31565b826124bf919061375c565b1115612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f79061402d565b60405180910390fd5b5b5b5b5b5f61250e30610d31565b90505f7f00000000000000000000000000000000000000000000001b1ae4d6e2ef50000082101590508080156125505750600860019054906101000a900460ff165b80156125695750600560149054906101000a900460ff16155b80156125bc575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561260f575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612662575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126a5576001600560146101000a81548160ff02191690831515021790555061268a612d31565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612754575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561275d575f90505b5f81156129465760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127bb57505f600d54115b15612845576064600d54866127d091906140d9565b6127da9190614147565b9050600d54600f54826127ed91906140d9565b6127f79190614147565b60115f828254612807919061375c565b92505081905550600d54600e548261281f91906140d9565b6128299190614147565b60105f828254612839919061375c565b92505081905550612923565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289c57505f600a54115b15612922576064600a54866128b191906140d9565b6128bb9190614147565b9050600a54600c54826128ce91906140d9565b6128d89190614147565b60115f8282546128e8919061375c565b92505081905550600a54600b548261290091906140d9565b61290a9190614147565b60105f82825461291a919061375c565b925050819055505b5b5f81111561293757612936873083612abc565b5b80856129439190614177565b94505b612951878787612abc565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190613d71565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8f90613dff565b60405180910390fd5b612ba3838383612f64565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1d9061421a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612cb4919061375c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d189190613465565b60405180910390a3612d2b848484612f69565b50505050565b5f612d3b30610d31565b90505f601054601154612d4e919061375c565b90505f80831480612d5e57505f82145b15612d6b57505050612f62565b60147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612d9891906140d9565b831115612dcf5760147f00000000000000000000000000000000000000000000001b1ae4d6e2ef500000612dcc91906140d9565b92505b5f60028360115486612de191906140d9565b612deb9190614147565b612df59190614147565b90505f8185612e049190614177565b90505f479050612e1382612f6e565b5f8147612e209190614177565b90505f6002601154612e329190614147565b87612e3d9190614177565b60105483612e4b91906140d9565b612e559190614147565b90505f8183612e649190614177565b90505f86118015612e7457505f81115b15612ec157612e8386826131a1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601154604051612eb893929190614238565b60405180910390a15b5f6011819055505f6010819055507f000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de4373ffffffffffffffffffffffffffffffffffffffff1647604051612f139061388c565b5f6040518083038185875af1925050503d805f8114612f4d576040519150601f19603f3d011682016040523d82523d5f602084013e612f52565b606091505b5050809750505050505050505050505b565b505050565b505050565b5f600267ffffffffffffffff811115612f8a57612f8961426d565b5b604051908082528060200260200182016040528015612fb85781602001602082028036833780820191505090505b50905030815f81518110612fcf57612fce61429a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309691906142db565b816001815181106130aa576130a961429a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061310f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131709594939291906143f6565b5f604051808303815f87803b158015613187575f80fd5b505af1158015613199573d5f803e3d5ffd5b505050505050565b6131cc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c6c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061321561119e565b426040518863ffffffff1660e01b81526004016132379695949392919061444e565b60606040518083038185885af1158015613253573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061327891906144ad565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132b657808201518184015260208101905061329b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132db8261327f565b6132e58185613289565b93506132f5818560208601613299565b6132fe816132c1565b840191505092915050565b5f6020820190508181035f83015261332181846132d1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133568261332d565b9050919050565b6133668161334c565b8114613370575f80fd5b50565b5f813590506133818161335d565b92915050565b5f819050919050565b61339981613387565b81146133a3575f80fd5b50565b5f813590506133b481613390565b92915050565b5f80604083850312156133d0576133cf613329565b5b5f6133dd85828601613373565b92505060206133ee858286016133a6565b9150509250929050565b5f8115159050919050565b61340c816133f8565b82525050565b5f6020820190506134255f830184613403565b92915050565b5f602082840312156134405761343f613329565b5b5f61344d84828501613373565b91505092915050565b61345f81613387565b82525050565b5f6020820190506134785f830184613456565b92915050565b5f819050919050565b5f6134a161349c6134978461332d565b61347e565b61332d565b9050919050565b5f6134b282613487565b9050919050565b5f6134c3826134a8565b9050919050565b6134d3816134b9565b82525050565b5f6020820190506134ec5f8301846134ca565b92915050565b5f805f6060848603121561350957613508613329565b5b5f61351686828701613373565b935050602061352786828701613373565b9250506040613538868287016133a6565b9150509250925092565b5f60ff82169050919050565b61355781613542565b82525050565b5f6020820190506135705f83018461354e565b92915050565b61357f8161334c565b82525050565b5f6020820190506135985f830184613576565b92915050565b6135a7816133f8565b81146135b1575f80fd5b50565b5f813590506135c28161359e565b92915050565b5f80604083850312156135de576135dd613329565b5b5f6135eb85828601613373565b92505060206135fc858286016135b4565b9150509250929050565b5f806040838503121561361c5761361b613329565b5b5f61362985828601613373565b925050602061363a85828601613373565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368857607f821691505b60208210810361369b5761369a613644565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136fb602883613289565b9150613706826136a1565b604082019050919050565b5f6020820190508181035f830152613728816136ef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61376682613387565b915061377183613387565b92508282019050808211156137895761378861372f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c3602083613289565b91506137ce8261378f565b602082019050919050565b5f6020820190508181035f8301526137f0816137b7565b9050919050565b7f546f6b656e3a2063616c6c6572206973206e6f74207468652048656c706572005f82015250565b5f61382b601f83613289565b9150613836826137f7565b602082019050919050565b5f6020820190508181035f8301526138588161381f565b9050919050565b5f81905092915050565b50565b5f6138775f8361385f565b915061388282613869565b5f82019050919050565b5f6138968261386c565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6138fa603983613289565b9150613905826138a0565b604082019050919050565b5f6020820190508181035f830152613927816138ee565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613988602583613289565b91506139938261392e565b604082019050919050565b5f6020820190508181035f8301526139b58161397c565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6139f0601a83613289565b91506139fb826139bc565b602082019050919050565b5f6020820190508181035f830152613a1d816139e4565b9050919050565b5f81519050613a3281613390565b92915050565b5f60208284031215613a4d57613a4c613329565b5b5f613a5a84828501613a24565b91505092915050565b5f604082019050613a765f830185613576565b613a836020830184613456565b9392505050565b5f81519050613a988161359e565b92915050565b5f60208284031215613ab357613ab2613329565b5b5f613ac084828501613a8a565b91505092915050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f613b23602e83613289565b9150613b2e82613ac9565b604082019050919050565b5f6020820190508181035f830152613b5081613b17565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bb1602683613289565b9150613bbc82613b57565b604082019050919050565b5f6020820190508181035f830152613bde81613ba5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c3f602483613289565b9150613c4a82613be5565b604082019050919050565b5f6020820190508181035f830152613c6c81613c33565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ccd602283613289565b9150613cd882613c73565b604082019050919050565b5f6020820190508181035f830152613cfa81613cc1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d5b602583613289565b9150613d6682613d01565b604082019050919050565b5f6020820190508181035f830152613d8881613d4f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613de9602383613289565b9150613df482613d8f565b604082019050919050565b5f6020820190508181035f830152613e1681613ddd565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f613e51601283613289565b9150613e5c82613e1d565b602082019050919050565b5f6020820190508181035f830152613e7e81613e45565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f613eb9601483613289565b9150613ec482613e85565b602082019050919050565b5f6020820190508181035f830152613ee681613ead565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f21601683613289565b9150613f2c82613eed565b602082019050919050565b5f6020820190508181035f830152613f4e81613f15565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613faf603583613289565b9150613fba82613f55565b604082019050919050565b5f6020820190508181035f830152613fdc81613fa3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614017601383613289565b915061402282613fe3565b602082019050919050565b5f6020820190508181035f8301526140448161400b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140a5603683613289565b91506140b08261404b565b604082019050919050565b5f6020820190508181035f8301526140d281614099565b9050919050565b5f6140e382613387565b91506140ee83613387565b92508282026140fc81613387565b915082820484148315176141135761411261372f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61415182613387565b915061415c83613387565b92508261416c5761416b61411a565b5b828204905092915050565b5f61418182613387565b915061418c83613387565b92508282039050818111156141a4576141a361372f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614204602683613289565b915061420f826141aa565b604082019050919050565b5f6020820190508181035f830152614231816141f8565b9050919050565b5f60608201905061424b5f830186613456565b6142586020830185613456565b6142656040830184613456565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142d58161335d565b92915050565b5f602082840312156142f0576142ef613329565b5b5f6142fd848285016142c7565b91505092915050565b5f819050919050565b5f61432961432461431f84614306565b61347e565b613387565b9050919050565b6143398161430f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143718161334c565b82525050565b5f6143828383614368565b60208301905092915050565b5f602082019050919050565b5f6143a48261433f565b6143ae8185614349565b93506143b983614359565b805f5b838110156143e95781516143d08882614377565b97506143db8361438e565b9250506001810190506143bc565b5085935050505092915050565b5f60a0820190506144095f830188613456565b6144166020830187614330565b8181036040830152614428818661439a565b90506144376060830185613576565b6144446080830184613456565b9695505050505050565b5f60c0820190506144615f830189613576565b61446e6020830188613456565b61447b6040830187614330565b6144886060830186614330565b6144956080830185613576565b6144a260a0830184613456565b979650505050505050565b5f805f606084860312156144c4576144c3613329565b5b5f6144d186828701613a24565b93505060206144e286828701613a24565b92505060406144f386828701613a24565b915050925092509256fea2646970667358221220317b8b6aef4e8fa10064a13183a634a27f04f9bbbc05e57954ca38b0ca087c5064736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de43
-----Decoded View---------------
Arg [0] : _revShareWallet (address): 0x490bEfD9aBC00FD1BAb8c4DE17490a106ce8De43
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000490befd9abc00fd1bab8c4de17490a106ce8de43
Deployed Bytecode Sourcemap
31388:14093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11320:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32351:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31971:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31451:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10207:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32197:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11996:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32158:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10049:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12934:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31509:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37036:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32046:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10378:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2483:103;;;;;;;;;;;;;:::i;:::-;;36159:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45379:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31584:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44600:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35552:112;;;;;;;;;;;;;:::i;:::-;;1832:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36526:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35781:370;;;;;;;;;;;;;:::i;:::-;;13727:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10734:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32572:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31757:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44185:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36336:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31632:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31937:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10997:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44880:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31674:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32007:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2741:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32118:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31724:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37170:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9087:100;9141:13;9174:5;9167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:100;:::o;11320:194::-;11428:4;11445:39;11454:12;:10;:12::i;:::-;11468:7;11477:6;11445:8;:39::i;:::-;11502:4;11495:11;;11320:194;;;;:::o;32351:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;31971:29::-;;;;:::o;31451:51::-;;;:::o;10207:108::-;10268:7;10295:12;;10288:19;;10207:108;:::o;32081:30::-;;;;:::o;32197:33::-;;;;:::o;11996:529::-;12136:4;12153:36;12163:6;12171:9;12182:6;12153:9;:36::i;:::-;12202:24;12229:11;:19;12241:6;12229:19;;;;;;;;;;;;;;;:33;12249:12;:10;:12::i;:::-;12229:33;;;;;;;;;;;;;;;;12202:60;;12315:6;12295:16;:26;;12273:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12425:57;12434:6;12442:12;:10;:12::i;:::-;12475:6;12456:16;:25;12425:8;:57::i;:::-;12513:4;12506:11;;;11996:529;;;;;:::o;32158:32::-;;;;:::o;10049:93::-;10107:5;10132:2;10125:9;;10049:93;:::o;12934:290::-;13047:4;13064:130;13087:12;:10;:12::i;:::-;13114:7;13173:10;13136:11;:25;13148:12;:10;:12::i;:::-;13136:25;;;;;;;;;;;;;;;:34;13162:7;13136:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13064:8;:130::i;:::-;13212:4;13205:11;;12934:290;;;;:::o;31509:38::-;;;:::o;37036:126::-;37102:4;37126:19;:28;37146:7;37126:28;;;;;;;;;;;;;;;;;;;;;;;;;37119:35;;37036:126;;;:::o;32046:28::-;;;;:::o;31797:31::-;;;;;;;;;;;;;:::o;10378:143::-;10468:7;10495:9;:18;10505:7;10495:18;;;;;;;;;;;;;;;;10488:25;;10378:143;;;:::o;2483:103::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2548:30:::1;2575:1;2548:18;:30::i;:::-;2483:103::o:0;36159:169::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36316:4:::1;36274:31;:39;36306:6;36274:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36159:169:::0;;:::o;45379:99::-;43990:12;:10;:12::i;:::-;43972:30;;:14;:30;;;43950:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;45465:5:::1;45444:11;:18;45456:5;45444:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45379:99:::0;:::o;31584:39::-;;;:::o;44600:172::-;43990:12;:10;:12::i;:::-;43972:30;;:14;:30;;;43950:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44674:12:::1;44692:6;:11;;44711:21;44692:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44673:64;;;44756:7;44748:16;;;::::0;::::1;;44662:110;44600:172:::0;:::o;35552:112::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35623:4:::1;35607:13;;:20;;;;;;;;;;;;;;;;;;35652:4;35638:11;;:18;;;;;;;;;;;;;;;;;;35552:112::o:0;1832:87::-;1878:7;1905:6;;;;;;;;;;;1898:13;;1832:87;:::o;9306:104::-;9362:13;9395:7;9388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9306:104;:::o;36526:306::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36672:13:::1;36664:21;;:4;:21;;::::0;36642:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36783:41;36812:4;36818:5;36783:28;:41::i;:::-;36526:306:::0;;:::o;35781:370::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35865:19:::1;35842:20;:42;;;;35913:19;35901:9;:31;;;;35970:1;35953:14;:18;;;;36006:1;35988:15;:19;;;;36039:1;36024:12;:16;;;;36071:1;36053:15;:19;;;;36108:1;36089:16;:20;;;;36142:1;36126:13;:17;;;;35781:370::o:0;13727:475::-;13845:4;13862:24;13889:11;:25;13901:12;:10;:12::i;:::-;13889:25;;;;;;;;;;;;;;;:34;13915:7;13889:34;;;;;;;;;;;;;;;;13862:61;;13976:15;13956:16;:35;;13934:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14092:67;14101:12;:10;:12::i;:::-;14115:7;14143:15;14124:16;:34;14092:8;:67::i;:::-;14190:4;14183:11;;;13727:475;;;;:::o;10734:200::-;10845:4;10862:42;10872:12;:10;:12::i;:::-;10886:9;10897:6;10862:9;:42::i;:::-;10922:4;10915:11;;10734:200;;;;:::o;32572:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31757:33::-;;;;;;;;;;;;;:::o;44185:314::-;43990:12;:10;:12::i;:::-;43972:30;;:14;:30;;;43950:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44324:1:::1;44306:20;;:6;:20;;::::0;44298:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44368:24;44402:6;44395:24;;;44428:4;44395:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44368:66;;44452:6;44445:23;;;44469:3;44474:16;44445:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44287:212;44185:314:::0;;:::o;36336:182::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36452:8:::1;36421:19;:28;36441:7;36421:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36492:7;36476:34;;;36501:8;36476:34;;;;;;:::i;:::-;;;;;;;;36336:182:::0;;:::o;31632:35::-;;;;:::o;31937:27::-;;;;:::o;10997:176::-;11111:7;11138:11;:18;11150:5;11138:18;;;;;;;;;;;;;;;:27;11157:7;11138:27;;;;;;;;;;;;;;;;11131:34;;10997:176;;;;:::o;44880:361::-;43990:12;:10;:12::i;:::-;43972:30;;:14;:30;;;43950:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;45003:13:::1;44982:35;;:9;:35;;;;:137;;;;;45076:42;45038:81;;:9;:81;;;;44982:137;44960:233;;;;;;;;;;;;:::i;:::-;;;;;;;;;45229:4;45204:11;:22;45216:9;45204:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44880:361:::0;:::o;31674:43::-;;;:::o;32007:30::-;;;;:::o;2741:238::-;2063:12;:10;:12::i;:::-;2052:23;;:7;:5;:7::i;:::-;:23;;;2044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:1:::1;2844:22;;:8;:22;;::::0;2822:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2943:28;2962:8;2943:18;:28::i;:::-;2741:238:::0;:::o;32118:31::-;;;;:::o;31724:24::-;;;;:::o;37170:113::-;37231:4;37255:11;:20;37267:7;37255:20;;;;;;;;;;;;;;;;;;;;;;;;;37248:27;;37170:113;;;:::o;674:98::-;727:7;754:10;747:17;;674:98;:::o;17510:380::-;17663:1;17646:19;;:5;:19;;;17638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17744:1;17725:21;;:7;:21;;;17717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17828:6;17798:11;:18;17810:5;17798:18;;;;;;;;;;;;;;;:27;17817:7;17798:27;;;;;;;;;;;;;;;:36;;;;17866:7;17850:32;;17859:5;17850:32;;;17875:6;17850:32;;;;;;:::i;:::-;;;;;;;;17510:380;;;:::o;37291:3672::-;37439:1;37423:18;;:4;:18;;;37415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37516:1;37502:16;;:2;:16;;;37494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37578:11;:17;37590:4;37578:17;;;;;;;;;;;;;;;;;;;;;;;;;37577:18;37569:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37638:11;:15;37650:2;37638:15;;;;;;;;;;;;;;;;;;;;;;;;;37637:16;37629:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37705:1;37695:6;:11;37691:93;;37723:28;37739:4;37745:2;37749:1;37723:15;:28::i;:::-;37766:7;;37691:93;37822:7;:5;:7::i;:::-;37814:15;;:4;:15;;;;:45;;;;;37852:7;:5;:7::i;:::-;37846:13;;:2;:13;;;;37814:45;:78;;;;;37890:1;37876:16;;:2;:16;;;;37814:78;:116;;;;;37923:6;37909:21;;:2;:21;;;;37814:116;:142;;;;;37948:8;;;;;;;;;;;37947:9;37814:142;37796:1478;;;37988:13;;;;;;;;;;;37983:203;;38052:19;:25;38072:4;38052:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38081:19;:23;38101:2;38081:23;;;;;;;;;;;;;;;;;;;;;;;;;38052:52;38022:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;37983:203;38247:25;:31;38273:4;38247:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;38300:31;:35;38332:2;38300:35;;;;;;;;;;;;;;;;;;;;;;;;;38299:36;38247:88;38225:1038;;;38410:20;;38400:6;:30;;38370:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;38602:9;;38585:13;38595:2;38585:9;:13::i;:::-;38576:6;:22;;;;:::i;:::-;:35;;38546:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;38225:1038;;;38755:25;:29;38781:2;38755:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;38806:31;:37;38838:4;38806:37;;;;;;;;;;;;;;;;;;;;;;;;;38805:38;38755:88;38733:530;;;38918:20;;38908:6;:30;;38878:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;38733:530;;;39063:31;:35;39095:2;39063:35;;;;;;;;;;;;;;;;;;;;;;;;;39058:205;;39175:9;;39158:13;39168:2;39158:9;:13::i;:::-;39149:6;:22;;;;:::i;:::-;:35;;39119:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;39058:205;38733:530;38225:1038;37796:1478;39286:28;39317:24;39335:4;39317:9;:24::i;:::-;39286:55;;39354:12;39393:18;39369:20;:42;;39354:57;;39442:7;:35;;;;;39466:11;;;;;;;;;;;39442:35;:61;;;;;39495:8;;;;;;;;;;;39494:9;39442:61;:110;;;;;39521:25;:31;39547:4;39521:31;;;;;;;;;;;;;;;;;;;;;;;;;39520:32;39442:110;:153;;;;;39570:19;:25;39590:4;39570:25;;;;;;;;;;;;;;;;;;;;;;;;;39569:26;39442:153;:194;;;;;39613:19;:23;39633:2;39613:23;;;;;;;;;;;;;;;;;;;;;;;;;39612:24;39442:194;39424:326;;;39674:4;39663:8;;:15;;;;;;;;;;;;;;;;;;39695:10;:8;:10::i;:::-;39733:5;39722:8;;:16;;;;;;;;;;;;;;;;;;39424:326;39762:12;39778:8;;;;;;;;;;;39777:9;39762:24;;39888:19;:25;39908:4;39888:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39917:19;:23;39937:2;39917:23;;;;;;;;;;;;;;;;;;;;;;;;;39888:52;39884:100;;;39967:5;39957:15;;39884:100;39996:12;40101:7;40097:813;;;40150:25;:29;40176:2;40150:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40199:1;40183:13;;:17;40150:50;40146:615;;;40255:3;40238:13;;40229:6;:22;;;;:::i;:::-;40228:30;;;;:::i;:::-;40221:37;;40327:13;;40307:16;;40300:4;:23;;;;:::i;:::-;40299:41;;;;:::i;:::-;40277:18;;:63;;;;;;;:::i;:::-;;;;;;;;40407:13;;40388:15;;40381:4;:22;;;;:::i;:::-;40380:40;;;;:::i;:::-;40359:17;;:61;;;;;;;:::i;:::-;;;;;;;;40146:615;;;40479:25;:31;40505:4;40479:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40529:1;40514:12;;:16;40479:51;40475:286;;;40584:3;40568:12;;40559:6;:21;;;;:::i;:::-;40558:29;;;;:::i;:::-;40551:36;;40655:12;;40636:15;;40629:4;:22;;;;:::i;:::-;40628:39;;;;:::i;:::-;40606:18;;:61;;;;;;;:::i;:::-;;;;;;;;40733:12;;40715:14;;40708:4;:21;;;;:::i;:::-;40707:38;;;;:::i;:::-;40686:17;;:59;;;;;;;:::i;:::-;;;;;;;;40475:286;40146:615;40788:1;40781:4;:8;40777:91;;;40810:42;40826:4;40840;40847;40810:15;:42::i;:::-;40777:91;40894:4;40884:14;;;;;:::i;:::-;;;40097:813;40922:33;40938:4;40944:2;40948:6;40922:15;:33::i;:::-;37404:3559;;;;37291:3672;;;;:::o;3139:191::-;3213:16;3232:6;;;;;;;;;;;3213:25;;3258:8;3249:6;;:17;;;;;;;;;;;;;;;;;;3313:8;3282:40;;3303:8;3282:40;;;;;;;;;;;;3202:128;3139:191;:::o;36840:188::-;36957:5;36923:25;:31;36949:4;36923:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37014:5;36980:40;;37008:4;36980:40;;;;;;;;;;;;36840:188;;:::o;14692:770::-;14850:1;14832:20;;:6;:20;;;14824:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:1;14913:23;;:9;:23;;;14905:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14989:47;15010:6;15018:9;15029:6;14989:20;:47::i;:::-;15049:21;15073:9;:17;15083:6;15073:17;;;;;;;;;;;;;;;;15049:41;;15140:6;15123:13;:23;;15101:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15284:6;15268:13;:22;15248:9;:17;15258:6;15248:17;;;;;;;;;;;;;;;:42;;;;15336:6;15312:9;:20;15322:9;15312:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15377:9;15360:35;;15369:6;15360:35;;;15388:6;15360:35;;;;;;:::i;:::-;;;;;;;;15408:46;15428:6;15436:9;15447:6;15408:19;:46::i;:::-;14813:649;14692:770;;;:::o;42106:1524::-;42145:23;42171:24;42189:4;42171:9;:24::i;:::-;42145:50;;42206:25;42255:17;;42234:18;;:38;;;;:::i;:::-;42206:66;;42283:12;42331:1;42312:15;:20;:46;;;;42357:1;42336:17;:22;42312:46;42308:85;;;42375:7;;;;;42308:85;42448:2;42427:18;:23;;;;:::i;:::-;42409:15;:41;42405:115;;;42506:2;42485:18;:23;;;;:::i;:::-;42467:41;;42405:115;42581:23;42694:1;42661:17;42626:18;;42608:15;:36;;;;:::i;:::-;42607:71;;;;:::i;:::-;:88;;;;:::i;:::-;42581:114;;42706:26;42753:15;42735;:33;;;;:::i;:::-;42706:62;;42781:25;42809:21;42781:49;;42843:36;42860:18;42843:16;:36::i;:::-;42892:18;42937:17;42913:21;:41;;;;:::i;:::-;42892:62;;42967:22;43083:1;43062:18;;:22;;;;:::i;:::-;43041:17;:44;;;;:::i;:::-;43006:17;;42993:10;:30;;;;:::i;:::-;42992:94;;;;:::i;:::-;42967:119;;43099:23;43138:14;43125:10;:27;;;;:::i;:::-;43099:53;;43187:1;43169:15;:19;:42;;;;;43210:1;43192:15;:19;43169:42;43165:278;;;43228:46;43241:15;43258;43228:12;:46::i;:::-;43294:137;43327:18;43364:15;43398:18;;43294:137;;;;;;;;:::i;:::-;;;;;;;;43165:278;43476:1;43455:18;:22;;;;43508:1;43488:17;:21;;;;43544:14;43536:28;;43586:21;43536:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43522:100;;;;;42134:1496;;;;;;;;;42106:1524;:::o;18490:125::-;;;;:::o;19219:124::-;;;;:::o;40971:606::-;41097:21;41135:1;41121:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41097:40;;41166:4;41148;41153:1;41148:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41192:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41182:4;41187:1;41182:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41227:62;41244:4;41259:15;41277:11;41227:8;:62::i;:::-;41328:15;:66;;;41409:11;41435:1;41496:4;41523;41543:15;41328:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41026:551;40971:606;:::o;41585:513::-;41733:62;41750:4;41765:15;41783:11;41733:8;:62::i;:::-;41838:15;:31;;;41877:9;41910:4;41930:11;41956:1;41999;42042:7;:5;:7::i;:::-;42064:15;41838:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41585:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:474::-;7321:6;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7253:474;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:320;7963:6;8000:1;7994:4;7990:12;7980:22;;8047:1;8041:4;8037:12;8068:18;8058:81;;8124:4;8116:6;8112:17;8102:27;;8058:81;8186:2;8178:6;8175:14;8155:18;8152:38;8149:84;;8205:18;;:::i;:::-;8149:84;7970:269;7919:320;;;:::o;8245:227::-;8385:34;8381:1;8373:6;8369:14;8362:58;8454:10;8449:2;8441:6;8437:15;8430:35;8245:227;:::o;8478:366::-;8620:3;8641:67;8705:2;8700:3;8641:67;:::i;:::-;8634:74;;8717:93;8806:3;8717:93;:::i;:::-;8835:2;8830:3;8826:12;8819:19;;8478:366;;;:::o;8850:419::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9103:9;9097:4;9093:20;9089:1;9078:9;9074:17;9067:47;9131:131;9257:4;9131:131;:::i;:::-;9123:139;;8850:419;;;:::o;9275:180::-;9323:77;9320:1;9313:88;9420:4;9417:1;9410:15;9444:4;9441:1;9434:15;9461:191;9501:3;9520:20;9538:1;9520:20;:::i;:::-;9515:25;;9554:20;9572:1;9554:20;:::i;:::-;9549:25;;9597:1;9594;9590:9;9583:16;;9618:3;9615:1;9612:10;9609:36;;;9625:18;;:::i;:::-;9609:36;9461:191;;;;:::o;9658:182::-;9798:34;9794:1;9786:6;9782:14;9775:58;9658:182;:::o;9846:366::-;9988:3;10009:67;10073:2;10068:3;10009:67;:::i;:::-;10002:74;;10085:93;10174:3;10085:93;:::i;:::-;10203:2;10198:3;10194:12;10187:19;;9846:366;;;:::o;10218:419::-;10384:4;10422:2;10411:9;10407:18;10399:26;;10471:9;10465:4;10461:20;10457:1;10446:9;10442:17;10435:47;10499:131;10625:4;10499:131;:::i;:::-;10491:139;;10218:419;;;:::o;10643:181::-;10783:33;10779:1;10771:6;10767:14;10760:57;10643:181;:::o;10830:366::-;10972:3;10993:67;11057:2;11052:3;10993:67;:::i;:::-;10986:74;;11069:93;11158:3;11069:93;:::i;:::-;11187:2;11182:3;11178:12;11171:19;;10830:366;;;:::o;11202:419::-;11368:4;11406:2;11395:9;11391:18;11383:26;;11455:9;11449:4;11445:20;11441:1;11430:9;11426:17;11419:47;11483:131;11609:4;11483:131;:::i;:::-;11475:139;;11202:419;;;:::o;11627:147::-;11728:11;11765:3;11750:18;;11627:147;;;;:::o;11780:114::-;;:::o;11900:398::-;12059:3;12080:83;12161:1;12156:3;12080:83;:::i;:::-;12073:90;;12172:93;12261:3;12172:93;:::i;:::-;12290:1;12285:3;12281:11;12274:18;;11900:398;;;:::o;12304:379::-;12488:3;12510:147;12653:3;12510:147;:::i;:::-;12503:154;;12674:3;12667:10;;12304:379;;;:::o;12689:244::-;12829:34;12825:1;12817:6;12813:14;12806:58;12898:27;12893:2;12885:6;12881:15;12874:52;12689:244;:::o;12939:366::-;13081:3;13102:67;13166:2;13161:3;13102:67;:::i;:::-;13095:74;;13178:93;13267:3;13178:93;:::i;:::-;13296:2;13291:3;13287:12;13280:19;;12939:366;;;:::o;13311:419::-;13477:4;13515:2;13504:9;13500:18;13492:26;;13564:9;13558:4;13554:20;13550:1;13539:9;13535:17;13528:47;13592:131;13718:4;13592:131;:::i;:::-;13584:139;;13311:419;;;:::o;13736:224::-;13876:34;13872:1;13864:6;13860:14;13853:58;13945:7;13940:2;13932:6;13928:15;13921:32;13736:224;:::o;13966:366::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;13966:366;;;:::o;14338:419::-;14504:4;14542:2;14531:9;14527:18;14519:26;;14591:9;14585:4;14581:20;14577:1;14566:9;14562:17;14555:47;14619:131;14745:4;14619:131;:::i;:::-;14611:139;;14338:419;;;:::o;14763:176::-;14903:28;14899:1;14891:6;14887:14;14880:52;14763:176;:::o;14945:366::-;15087:3;15108:67;15172:2;15167:3;15108:67;:::i;:::-;15101:74;;15184:93;15273:3;15184:93;:::i;:::-;15302:2;15297:3;15293:12;15286:19;;14945:366;;;:::o;15317:419::-;15483:4;15521:2;15510:9;15506:18;15498:26;;15570:9;15564:4;15560:20;15556:1;15545:9;15541:17;15534:47;15598:131;15724:4;15598:131;:::i;:::-;15590:139;;15317:419;;;:::o;15742:143::-;15799:5;15830:6;15824:13;15815:22;;15846:33;15873:5;15846:33;:::i;:::-;15742:143;;;;:::o;15891:351::-;15961:6;16010:2;15998:9;15989:7;15985:23;15981:32;15978:119;;;16016:79;;:::i;:::-;15978:119;16136:1;16161:64;16217:7;16208:6;16197:9;16193:22;16161:64;:::i;:::-;16151:74;;16107:128;15891:351;;;;:::o;16248:332::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16420:71;16488:1;16477:9;16473:17;16464:6;16420:71;:::i;:::-;16501:72;16569:2;16558:9;16554:18;16545:6;16501:72;:::i;:::-;16248:332;;;;;:::o;16586:137::-;16640:5;16671:6;16665:13;16656:22;;16687:30;16711:5;16687:30;:::i;:::-;16586:137;;;;:::o;16729:345::-;16796:6;16845:2;16833:9;16824:7;16820:23;16816:32;16813:119;;;16851:79;;:::i;:::-;16813:119;16971:1;16996:61;17049:7;17040:6;17029:9;17025:22;16996:61;:::i;:::-;16986:71;;16942:125;16729:345;;;;:::o;17080:233::-;17220:34;17216:1;17208:6;17204:14;17197:58;17289:16;17284:2;17276:6;17272:15;17265:41;17080:233;:::o;17319:366::-;17461:3;17482:67;17546:2;17541:3;17482:67;:::i;:::-;17475:74;;17558:93;17647:3;17558:93;:::i;:::-;17676:2;17671:3;17667:12;17660:19;;17319:366;;;:::o;17691:419::-;17857:4;17895:2;17884:9;17880:18;17872:26;;17944:9;17938:4;17934:20;17930:1;17919:9;17915:17;17908:47;17972:131;18098:4;17972:131;:::i;:::-;17964:139;;17691:419;;;:::o;18116:225::-;18256:34;18252:1;18244:6;18240:14;18233:58;18325:8;18320:2;18312:6;18308:15;18301:33;18116:225;:::o;18347:366::-;18489:3;18510:67;18574:2;18569:3;18510:67;:::i;:::-;18503:74;;18586:93;18675:3;18586:93;:::i;:::-;18704:2;18699:3;18695:12;18688:19;;18347:366;;;:::o;18719:419::-;18885:4;18923:2;18912:9;18908:18;18900:26;;18972:9;18966:4;18962:20;18958:1;18947:9;18943:17;18936:47;19000:131;19126:4;19000:131;:::i;:::-;18992:139;;18719:419;;;:::o;19144:223::-;19284:34;19280:1;19272:6;19268:14;19261:58;19353:6;19348:2;19340:6;19336:15;19329:31;19144:223;:::o;19373:366::-;19515:3;19536:67;19600:2;19595:3;19536:67;:::i;:::-;19529:74;;19612:93;19701:3;19612:93;:::i;:::-;19730:2;19725:3;19721:12;19714:19;;19373:366;;;:::o;19745:419::-;19911:4;19949:2;19938:9;19934:18;19926:26;;19998:9;19992:4;19988:20;19984:1;19973:9;19969:17;19962:47;20026:131;20152:4;20026:131;:::i;:::-;20018:139;;19745:419;;;:::o;20170:221::-;20310:34;20306:1;20298:6;20294:14;20287:58;20379:4;20374:2;20366:6;20362:15;20355:29;20170:221;:::o;20397:366::-;20539:3;20560:67;20624:2;20619:3;20560:67;:::i;:::-;20553:74;;20636:93;20725:3;20636:93;:::i;:::-;20754:2;20749:3;20745:12;20738:19;;20397:366;;;:::o;20769:419::-;20935:4;20973:2;20962:9;20958:18;20950:26;;21022:9;21016:4;21012:20;21008:1;20997:9;20993:17;20986:47;21050:131;21176:4;21050:131;:::i;:::-;21042:139;;20769:419;;;:::o;21194:224::-;21334:34;21330:1;21322:6;21318:14;21311:58;21403:7;21398:2;21390:6;21386:15;21379:32;21194:224;:::o;21424:366::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:419::-;21962:4;22000:2;21989:9;21985:18;21977:26;;22049:9;22043:4;22039:20;22035:1;22024:9;22020:17;22013:47;22077:131;22203:4;22077:131;:::i;:::-;22069:139;;21796:419;;;:::o;22221:222::-;22361:34;22357:1;22349:6;22345:14;22338:58;22430:5;22425:2;22417:6;22413:15;22406:30;22221:222;:::o;22449:366::-;22591:3;22612:67;22676:2;22671:3;22612:67;:::i;:::-;22605:74;;22688:93;22777:3;22688:93;:::i;:::-;22806:2;22801:3;22797:12;22790:19;;22449:366;;;:::o;22821:419::-;22987:4;23025:2;23014:9;23010:18;23002:26;;23074:9;23068:4;23064:20;23060:1;23049:9;23045:17;23038:47;23102:131;23228:4;23102:131;:::i;:::-;23094:139;;22821:419;;;:::o;23246:168::-;23386:20;23382:1;23374:6;23370:14;23363:44;23246:168;:::o;23420:366::-;23562:3;23583:67;23647:2;23642:3;23583:67;:::i;:::-;23576:74;;23659:93;23748:3;23659:93;:::i;:::-;23777:2;23772:3;23768:12;23761:19;;23420:366;;;:::o;23792:419::-;23958:4;23996:2;23985:9;23981:18;23973:26;;24045:9;24039:4;24035:20;24031:1;24020:9;24016:17;24009:47;24073:131;24199:4;24073:131;:::i;:::-;24065:139;;23792:419;;;:::o;24217:170::-;24357:22;24353:1;24345:6;24341:14;24334:46;24217:170;:::o;24393:366::-;24535:3;24556:67;24620:2;24615:3;24556:67;:::i;:::-;24549:74;;24632:93;24721:3;24632:93;:::i;:::-;24750:2;24745:3;24741:12;24734:19;;24393:366;;;:::o;24765:419::-;24931:4;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:131;25172:4;25046:131;:::i;:::-;25038:139;;24765:419;;;:::o;25190:172::-;25330:24;25326:1;25318:6;25314:14;25307:48;25190:172;:::o;25368:366::-;25510:3;25531:67;25595:2;25590:3;25531:67;:::i;:::-;25524:74;;25607:93;25696:3;25607:93;:::i;:::-;25725:2;25720:3;25716:12;25709:19;;25368:366;;;:::o;25740:419::-;25906:4;25944:2;25933:9;25929:18;25921:26;;25993:9;25987:4;25983:20;25979:1;25968:9;25964:17;25957:47;26021:131;26147:4;26021:131;:::i;:::-;26013:139;;25740:419;;;:::o;26165:240::-;26305:34;26301:1;26293:6;26289:14;26282:58;26374:23;26369:2;26361:6;26357:15;26350:48;26165:240;:::o;26411:366::-;26553:3;26574:67;26638:2;26633:3;26574:67;:::i;:::-;26567:74;;26650:93;26739:3;26650:93;:::i;:::-;26768:2;26763:3;26759:12;26752:19;;26411:366;;;:::o;26783:419::-;26949:4;26987:2;26976:9;26972:18;26964:26;;27036:9;27030:4;27026:20;27022:1;27011:9;27007:17;27000:47;27064:131;27190:4;27064:131;:::i;:::-;27056:139;;26783:419;;;:::o;27208:169::-;27348:21;27344:1;27336:6;27332:14;27325:45;27208:169;:::o;27383:366::-;27525:3;27546:67;27610:2;27605:3;27546:67;:::i;:::-;27539:74;;27622:93;27711:3;27622:93;:::i;:::-;27740:2;27735:3;27731:12;27724:19;;27383:366;;;:::o;27755:419::-;27921:4;27959:2;27948:9;27944:18;27936:26;;28008:9;28002:4;27998:20;27994:1;27983:9;27979:17;27972:47;28036:131;28162:4;28036:131;:::i;:::-;28028:139;;27755:419;;;:::o;28180:241::-;28320:34;28316:1;28308:6;28304:14;28297:58;28389:24;28384:2;28376:6;28372:15;28365:49;28180:241;:::o;28427:366::-;28569:3;28590:67;28654:2;28649:3;28590:67;:::i;:::-;28583:74;;28666:93;28755:3;28666:93;:::i;:::-;28784:2;28779:3;28775:12;28768:19;;28427:366;;;:::o;28799:419::-;28965:4;29003:2;28992:9;28988:18;28980:26;;29052:9;29046:4;29042:20;29038:1;29027:9;29023:17;29016:47;29080:131;29206:4;29080:131;:::i;:::-;29072:139;;28799:419;;;:::o;29224:410::-;29264:7;29287:20;29305:1;29287:20;:::i;:::-;29282:25;;29321:20;29339:1;29321:20;:::i;:::-;29316:25;;29376:1;29373;29369:9;29398:30;29416:11;29398:30;:::i;:::-;29387:41;;29577:1;29568:7;29564:15;29561:1;29558:22;29538:1;29531:9;29511:83;29488:139;;29607:18;;:::i;:::-;29488:139;29272:362;29224:410;;;;:::o;29640:180::-;29688:77;29685:1;29678:88;29785:4;29782:1;29775:15;29809:4;29806:1;29799:15;29826:185;29866:1;29883:20;29901:1;29883:20;:::i;:::-;29878:25;;29917:20;29935:1;29917:20;:::i;:::-;29912:25;;29956:1;29946:35;;29961:18;;:::i;:::-;29946:35;30003:1;30000;29996:9;29991:14;;29826:185;;;;:::o;30017:194::-;30057:4;30077:20;30095:1;30077:20;:::i;:::-;30072:25;;30111:20;30129:1;30111:20;:::i;:::-;30106:25;;30155:1;30152;30148:9;30140:17;;30179:1;30173:4;30170:11;30167:37;;;30184:18;;:::i;:::-;30167:37;30017:194;;;;:::o;30217:225::-;30357:34;30353:1;30345:6;30341:14;30334:58;30426:8;30421:2;30413:6;30409:15;30402:33;30217:225;:::o;30448:366::-;30590:3;30611:67;30675:2;30670:3;30611:67;:::i;:::-;30604:74;;30687:93;30776:3;30687:93;:::i;:::-;30805:2;30800:3;30796:12;30789:19;;30448:366;;;:::o;30820:419::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31073:9;31067:4;31063:20;31059:1;31048:9;31044:17;31037:47;31101:131;31227:4;31101:131;:::i;:::-;31093:139;;30820:419;;;:::o;31245:442::-;31394:4;31432:2;31421:9;31417:18;31409:26;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:72;31594:2;31583:9;31579:18;31570:6;31526:72;:::i;:::-;31608;31676:2;31665:9;31661:18;31652:6;31608:72;:::i;:::-;31245:442;;;;;;:::o;31693:180::-;31741:77;31738:1;31731:88;31838:4;31835:1;31828:15;31862:4;31859:1;31852:15;31879:180;31927:77;31924:1;31917:88;32024:4;32021:1;32014:15;32048:4;32045:1;32038:15;32065:143;32122:5;32153:6;32147:13;32138:22;;32169:33;32196:5;32169:33;:::i;:::-;32065:143;;;;:::o;32214:351::-;32284:6;32333:2;32321:9;32312:7;32308:23;32304:32;32301:119;;;32339:79;;:::i;:::-;32301:119;32459:1;32484:64;32540:7;32531:6;32520:9;32516:22;32484:64;:::i;:::-;32474:74;;32430:128;32214:351;;;;:::o;32571:85::-;32616:7;32645:5;32634:16;;32571:85;;;:::o;32662:158::-;32720:9;32753:61;32771:42;32780:32;32806:5;32780:32;:::i;:::-;32771:42;:::i;:::-;32753:61;:::i;:::-;32740:74;;32662:158;;;:::o;32826:147::-;32921:45;32960:5;32921:45;:::i;:::-;32916:3;32909:58;32826:147;;:::o;32979:114::-;33046:6;33080:5;33074:12;33064:22;;32979:114;;;:::o;33099:184::-;33198:11;33232:6;33227:3;33220:19;33272:4;33267:3;33263:14;33248:29;;33099:184;;;;:::o;33289:132::-;33356:4;33379:3;33371:11;;33409:4;33404:3;33400:14;33392:22;;33289:132;;;:::o;33427:108::-;33504:24;33522:5;33504:24;:::i;:::-;33499:3;33492:37;33427:108;;:::o;33541:179::-;33610:10;33631:46;33673:3;33665:6;33631:46;:::i;:::-;33709:4;33704:3;33700:14;33686:28;;33541:179;;;;:::o;33726:113::-;33796:4;33828;33823:3;33819:14;33811:22;;33726:113;;;:::o;33875:732::-;33994:3;34023:54;34071:5;34023:54;:::i;:::-;34093:86;34172:6;34167:3;34093:86;:::i;:::-;34086:93;;34203:56;34253:5;34203:56;:::i;:::-;34282:7;34313:1;34298:284;34323:6;34320:1;34317:13;34298:284;;;34399:6;34393:13;34426:63;34485:3;34470:13;34426:63;:::i;:::-;34419:70;;34512:60;34565:6;34512:60;:::i;:::-;34502:70;;34358:224;34345:1;34342;34338:9;34333:14;;34298:284;;;34302:14;34598:3;34591:10;;33999:608;;;33875:732;;;;:::o;34613:831::-;34876:4;34914:3;34903:9;34899:19;34891:27;;34928:71;34996:1;34985:9;34981:17;34972:6;34928:71;:::i;:::-;35009:80;35085:2;35074:9;35070:18;35061:6;35009:80;:::i;:::-;35136:9;35130:4;35126:20;35121:2;35110:9;35106:18;35099:48;35164:108;35267:4;35258:6;35164:108;:::i;:::-;35156:116;;35282:72;35350:2;35339:9;35335:18;35326:6;35282:72;:::i;:::-;35364:73;35432:3;35421:9;35417:19;35408:6;35364:73;:::i;:::-;34613:831;;;;;;;;:::o;35450:807::-;35699:4;35737:3;35726:9;35722:19;35714:27;;35751:71;35819:1;35808:9;35804:17;35795:6;35751:71;:::i;:::-;35832:72;35900:2;35889:9;35885:18;35876:6;35832:72;:::i;:::-;35914:80;35990:2;35979:9;35975:18;35966:6;35914:80;:::i;:::-;36004;36080:2;36069:9;36065:18;36056:6;36004:80;:::i;:::-;36094:73;36162:3;36151:9;36147:19;36138:6;36094:73;:::i;:::-;36177;36245:3;36234:9;36230:19;36221:6;36177:73;:::i;:::-;35450:807;;;;;;;;;:::o;36263:663::-;36351:6;36359;36367;36416:2;36404:9;36395:7;36391:23;36387:32;36384:119;;;36422:79;;:::i;:::-;36384:119;36542:1;36567:64;36623:7;36614:6;36603:9;36599:22;36567:64;:::i;:::-;36557:74;;36513:128;36680:2;36706:64;36762:7;36753:6;36742:9;36738:22;36706:64;:::i;:::-;36696:74;;36651:129;36819:2;36845:64;36901:7;36892:6;36881:9;36877:22;36845:64;:::i;:::-;36835:74;;36790:129;36263:663;;;;;:::o
Swarm Source
ipfs://317b8b6aef4e8fa10064a13183a634a27f04f9bbbc05e57954ca38b0ca087c50
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.