Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 425 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21780277 | 4 mins ago | IN | 0 ETH | 0.00020645 | ||||
Transfer | 21775040 | 17 hrs ago | IN | 0 ETH | 0.00026609 | ||||
Approve | 21767111 | 44 hrs ago | IN | 0 ETH | 0.00148819 | ||||
Approve | 21750718 | 4 days ago | IN | 0 ETH | 0.00018709 | ||||
Approve | 21746243 | 4 days ago | IN | 0 ETH | 0.0003947 | ||||
Approve | 21746236 | 4 days ago | IN | 0 ETH | 0.00021276 | ||||
Approve | 21746232 | 4 days ago | IN | 0 ETH | 0.00020927 | ||||
Approve | 21746228 | 4 days ago | IN | 0 ETH | 0.00022033 | ||||
Approve | 21746225 | 4 days ago | IN | 0 ETH | 0.00036807 | ||||
Approve | 21746152 | 4 days ago | IN | 0 ETH | 0.00050691 | ||||
Approve | 21741728 | 5 days ago | IN | 0 ETH | 0.00029408 | ||||
Approve | 21726761 | 7 days ago | IN | 0 ETH | 0.0001213 | ||||
Transfer | 21726755 | 7 days ago | IN | 0 ETH | 0.00085496 | ||||
Transfer | 21723570 | 7 days ago | IN | 0 ETH | 0.00051504 | ||||
Transfer | 21723493 | 7 days ago | IN | 0 ETH | 0.0010474 | ||||
Transfer | 21717519 | 8 days ago | IN | 0 ETH | 0.00095003 | ||||
Approve | 21716038 | 8 days ago | IN | 0 ETH | 0.00073375 | ||||
Approve | 21709585 | 9 days ago | IN | 0 ETH | 0.000403 | ||||
Approve | 21708763 | 9 days ago | IN | 0 ETH | 0.00029399 | ||||
Transfer | 21707818 | 10 days ago | IN | 0 ETH | 0.00027816 | ||||
Approve | 21707668 | 10 days ago | IN | 0 ETH | 0.00015547 | ||||
Approve | 21698792 | 11 days ago | IN | 0 ETH | 0.00023286 | ||||
Approve | 21697912 | 11 days ago | IN | 0 ETH | 0.00038577 | ||||
Approve | 21695348 | 11 days ago | IN | 0 ETH | 0.00096324 | ||||
Approve | 21693079 | 12 days ago | IN | 0 ETH | 0.00017324 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21767111 | 44 hrs ago | 0.03771055 ETH | ||||
21767111 | 44 hrs ago | 0.03771055 ETH | ||||
21761394 | 2 days ago | 0.04464318 ETH | ||||
21761394 | 2 days ago | 0.04464318 ETH | ||||
21736665 | 6 days ago | 0.07549219 ETH | ||||
21736665 | 6 days ago | 0.07549219 ETH | ||||
21726755 | 7 days ago | 0.05306259 ETH | ||||
21726755 | 7 days ago | 0.05306259 ETH | ||||
21723493 | 7 days ago | 0.06412217 ETH | ||||
21723493 | 7 days ago | 0.06412217 ETH | ||||
21717509 | 8 days ago | 0.06833546 ETH | ||||
21717509 | 8 days ago | 0.06833546 ETH | ||||
21707913 | 10 days ago | 0.05056692 ETH | ||||
21707913 | 10 days ago | 0.05056692 ETH | ||||
21698492 | 11 days ago | 0.05894471 ETH | ||||
21698492 | 11 days ago | 0.05894471 ETH | ||||
21691166 | 12 days ago | 0.06444283 ETH | ||||
21691166 | 12 days ago | 0.06444283 ETH | ||||
21685645 | 13 days ago | 0.06060318 ETH | ||||
21685645 | 13 days ago | 0.06060318 ETH | ||||
21682958 | 13 days ago | 0.05193116 ETH | ||||
21682958 | 13 days ago | 0.00189602 ETH | ||||
21682958 | 13 days ago | 0.00390658 ETH | ||||
21682958 | 13 days ago | 0.00260438 ETH | ||||
21682958 | 13 days ago | 0.0565461 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
NextGenMobility
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-01-06 */ /* Hi guys, Welcome to NextGen Mobility, revolutionizing automotive with AI, blockchain and IoT solutions. Doxxed team. Join our almost daily video stream in our TG: https://t.me/NextGen_Mobility www.nextgen-mobility.org Kind regards, Kay **/ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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); } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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 9; } /** * @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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 to 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 {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract LockToken is Ownable { bool public isOpen = false; mapping(address => bool) private _whiteList; address public tradingEnablerRole; modifier open(address from, address to) { require(isOpen || _whiteList[from] || _whiteList[to], "Not Open"); _; } constructor() { _whiteList[msg.sender] = true; _whiteList[address(this)] = true; tradingEnablerRole = owner(); } function enableTrade(bool _enable) external onlyOwner { require(tradingEnablerRole == msg.sender, 'incompatible role!'); isOpen = _enable; } function renounceTradingEnablerRole() public { require(tradingEnablerRole == msg.sender, 'incompatible role!'); tradingEnablerRole = address(0x0); } function preTrade(address[] memory _users) external onlyOwner { for(uint8 i = 0; i < _users.length; i++) { _whiteList[_users[i]] = true; } } } contract NextGenMobility is ERC20, LockToken { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public developmentWallet; address public treasuryWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public buyTreasury; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; uint256 public sellTreasury; uint256 public tokensForDev; uint256 public tokensForLiquidity; uint256 public tokensForTreasury; /******************/ // exlcude 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 developmentWalletUpdated(address indexed newWallet, address indexed oldWallet); event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event BuyBackTriggered(uint256 amount); constructor() ERC20("Next Gen Mobility", "$NGMAI") { address newOwner = address(msg.sender); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 8; uint256 _buyLiquidityFee = 8; uint256 _buyTreasury = 4; uint256 _sellDevFee = 8; uint256 _sellLiquidityFee = 8; uint256 _sellTreasury = 4; uint256 totalSupply = 100e9 * 1e9; maxTransactionAmount = 1000000000 * 10e9; // 1% maxTransactionAmountTxn swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet maxWallet = 1000000000 * 10e9; // 1% max wallet buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyTreasury = _buyTreasury; buyTotalFees = buyDevFee + buyLiquidityFee + buyTreasury; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellTreasury = _sellTreasury; sellTotalFees = sellDevFee + sellLiquidityFee + sellTreasury; developmentWallet = address(0x9c10a88749c16cB76d9321ebbA01428eCbb78900); // set as Development wallet treasuryWallet = address(0x054d989ce9F0f8EF45983463Ce11F6073Fe66371); // set as treasury wallet // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(treasuryWallet, true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(treasuryWallet, 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(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**9); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require (newNum >= (totalSupply() * 3 / 1000)/1e9, "Cannot set maxWallet lower than 0.3%"); maxWallet = newNum * (10**9); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _devFee, uint256 _liquidityFee, uint256 _treasuryFee) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyTreasury = _treasuryFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyTreasury; require(buyTotalFees <= 30, "Must keep fees at 30% or less"); } function updateSellFees(uint256 _devFee, uint256 _liquidityFee, uint256 _treasuryFee) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellTreasury = _treasuryFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellTreasury; require(sellTotalFees <= 30, "Must keep fees at 30% or less"); } 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 updatedevelopmentWallet(address newdevelopmentWallet) external onlyOwner { emit developmentWalletUpdated(newdevelopmentWallet, developmentWallet); developmentWallet = newdevelopmentWallet; } function updatetreasuryWallet(address newWallet) external onlyOwner { emit treasuryWalletUpdated(newWallet, treasuryWallet); treasuryWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) open(to, from)internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else { 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){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForTreasury += fees * sellTreasury / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForTreasury += fees * buyTreasury / buyTotalFees; tokensForDev += fees * buyDevFee / 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 path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev + tokensForTreasury; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForBuyBack = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack; tokensForLiquidity = 0; tokensForDev = 0; tokensForTreasury = 0; (bool success,) = address(developmentWallet).call{value: ethForMarketing}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // keep leftover ETH for buyback (success,) = address(treasuryWallet).call{value: address(this).balance}(""); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); emit BuyBackTriggered(ETHAmountInWei); } function withdrawStuckETH() external onlyOwner{ require (address(this).balance > 0, "Can't withdraw negative or zero"); payable(owner()).transfer(address(this).balance); } function removeStuckToken(address _address) external onlyOwner { require(_address != address(this), "Can't withdraw tokens destined for liquidity"); require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0"); IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","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":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableTrade","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"preTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceTradingEnablerRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasury","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","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":"tradingEnablerRole","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newdevelopmentWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatetreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560146101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280601181526020017f4e6578742047656e204d6f62696c6974790000000000000000000000000000008152506040518060400160405280600681526020017f244e474d414900000000000000000000000000000000000000000000000000008152508160039081620000c59190620010db565b508060049081620000d79190620010db565b5050506000620000ec6200075a60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200024b6200076260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002bc8160016200078c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036291906200122c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f091906200122c565b6040518363ffffffff1660e01b81526004016200040f9291906200126f565b6020604051808303816000875af11580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045591906200122c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200049d60a05160016200078c60201b60201c565b620004b260a05160016200088960201b60201c565b600060089050600060089050600060049050600060089050600060089050600060049050600068056bc75e2d631000009050678ac7230489e80000600a81905550612710600582620005059190620012cb565b62000511919062001345565b600b81905550678ac7230489e80000600c8190555086600f819055508560108190555084601181905550601154601054600f546200055091906200137d565b6200055c91906200137d565b600e819055508360138190555082601481905550816015819055506015546014546013546200058c91906200137d565b6200059891906200137d565b601281905550739c10a88749c16cb76d9321ebba01428ecbb78900600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073054d989ce9f0f8ef45983463ce11f6073fe66371600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200065b8960016200092a60201b60201c565b6200066e3060016200092a60201b60201c565b6200068361dead60016200092a60201b60201c565b620006b8600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b620006cb8960016200078c60201b60201c565b620006de3060016200078c60201b60201c565b62000713600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078c60201b60201c565b6200072861dead60016200078c60201b60201c565b6200073a898262000a7760201b60201c565b6200074b8962000c2560201b60201c565b5050505050505050506200161f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200079c6200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200082e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008259062001419565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200093a6200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c39062001419565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a6b919062001458565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae090620014c5565b60405180910390fd5b62000afd6000838362000df960201b60201c565b62000b198160025462000dfe60201b62002dc91790919060201c565b60028190555062000b77816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dfe60201b62002dc91790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c199190620014f8565b60405180910390a35050565b62000c356200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cbe9062001419565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000d39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d30906200158b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000e0f91906200137d565b90508381101562000e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e4e90620015fd565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ee357607f821691505b60208210810362000ef95762000ef862000e9b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f24565b62000f6f868362000f24565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000fbc62000fb662000fb08462000f87565b62000f91565b62000f87565b9050919050565b6000819050919050565b62000fd88362000f9b565b62000ff062000fe78262000fc3565b84845462000f31565b825550505050565b600090565b6200100762000ff8565b6200101481848462000fcd565b505050565b5b818110156200103c576200103060008262000ffd565b6001810190506200101a565b5050565b601f8211156200108b57620010558162000eff565b620010608462000f14565b8101602085101562001070578190505b620010886200107f8562000f14565b83018262001019565b50505b505050565b600082821c905092915050565b6000620010b06000198460080262001090565b1980831691505092915050565b6000620010cb83836200109d565b9150826002028217905092915050565b620010e68262000e61565b67ffffffffffffffff81111562001102576200110162000e6c565b5b6200110e825462000eca565b6200111b82828562001040565b600060209050601f8311600181146200115357600084156200113e578287015190505b6200114a8582620010bd565b865550620011ba565b601f198416620011638662000eff565b60005b828110156200118d5784890151825560018201915060208501945060208101905062001166565b86831015620011ad5784890151620011a9601f8916826200109d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011f482620011c7565b9050919050565b6200120681620011e7565b81146200121257600080fd5b50565b6000815190506200122681620011fb565b92915050565b600060208284031215620012455762001244620011c2565b5b6000620012558482850162001215565b91505092915050565b6200126981620011e7565b82525050565b60006040820190506200128660008301856200125e565b6200129560208301846200125e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012d88262000f87565b9150620012e58362000f87565b9250828202620012f58162000f87565b915082820484148315176200130f576200130e6200129c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013528262000f87565b91506200135f8362000f87565b92508262001372576200137162001316565b5b828204905092915050565b60006200138a8262000f87565b9150620013978362000f87565b9250828201905080821115620013b257620013b16200129c565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001401602083620013b8565b91506200140e82620013c9565b602082019050919050565b600060208201905081810360008301526200143481620013f2565b9050919050565b60008115159050919050565b62001452816200143b565b82525050565b60006020820190506200146f600083018462001447565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014ad601f83620013b8565b9150620014ba8262001475565b602082019050919050565b60006020820190508181036000830152620014e0816200149e565b9050919050565b620014f28162000f87565b82525050565b60006020820190506200150f6000830184620014e7565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062001573602683620013b8565b9150620015808262001515565b604082019050919050565b60006020820190508181036000830152620015a68162001564565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620015e5601b83620013b8565b9150620015f282620015ad565b602082019050919050565b600060208201905081810360008301526200161881620015d6565b9050919050565b60805160a051615d3d6200167d600039600081816113da0152611afa01526000818161107b01528181612bcf01528181612cfb0152818161426c0152818161434d015281816143740152818161441001526144370152615d3d6000f3fe60806040526004361061036f5760003560e01c806399ab04a7116101c6578063c8c8ebe4116100f7578063e2f4560511610095578063f5648a4f1161006f578063f5648a4f14610cb9578063f637434214610cd0578063f8b45b0514610cfb578063fc155d1d14610d2657610376565b8063e2f4560514610c3a578063f11a24d314610c65578063f2fde38b14610c9057610376565b8063d257b34f116100d1578063d257b34f14610b6c578063d85ba06314610ba9578063dd62ed3e14610bd4578063e083e92214610c1157610376565b8063c8c8ebe414610aeb578063cbdcfd8114610b16578063cc2ffe7c14610b4157610376565b8063b62496f511610164578063c04a54141161013e578063c04a541414610a45578063c17b5b8c14610a70578063c18bc19514610a99578063c79c04fd14610ac257610376565b8063b62496f5146109b6578063c00f04d1146109f3578063c024666814610a1c57610376565b80639fccce32116101a05780639fccce32146108e6578063a0d82dc514610911578063a457c2d71461093c578063a9059cbb1461097957610376565b806399ab04a71461087b5780639a7a23d6146108925780639c3b4fdc146108bb57610376565b80634626402b116102a057806370a082311161023e5780638095d564116102185780638095d564146107d35780638da5cb5b146107fc578063924de9b71461082757806395d89b411461085057610376565b806370a0823114610756578063715018a6146107935780637571336a146107aa57610376565b80634fbee1931161027a5780634fbee193146106985780635e015739146106d55780636a486a8e146107005780636ddd17131461072b57610376565b80634626402b1461061757806347535d7b1461064257806349bd5a5e1461066d57610376565b806318160ddd1161030d57806327c8f835116102e757806327c8f8351461055b5780632955ede614610586578063313ce567146105af57806339509351146105da57610376565b806318160ddd146104c85780631a8145bb146104f357806323b872dd1461051e57610376565b8063095ea7b311610349578063095ea7b3146103fa578063106b5da11461043757806310d5de53146104605780631694505e1461049d57610376565b806304fdf86f1461037b57806306fdde03146103a45780630805d787146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614714565b610d4f565b005b3480156103b057600080fd5b506103b9610e81565b6040516103c691906147dc565b60405180910390f35b3480156103db57600080fd5b506103e4610f13565b6040516103f19190614817565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061485e565b610f19565b60405161042e91906148b9565b60405180910390f35b34801561044357600080fd5b5061045e600480360381019061045991906148d4565b610f37565b005b34801561046c57600080fd5b5061048760048036038101906104829190614901565b611059565b60405161049491906148b9565b60405180910390f35b3480156104a957600080fd5b506104b2611079565b6040516104bf919061498d565b60405180910390f35b3480156104d457600080fd5b506104dd61109d565b6040516104ea9190614817565b60405180910390f35b3480156104ff57600080fd5b506105086110a7565b6040516105159190614817565b60405180910390f35b34801561052a57600080fd5b50610545600480360381019061054091906149a8565b6110ad565b60405161055291906148b9565b60405180910390f35b34801561056757600080fd5b50610570611186565b60405161057d9190614a0a565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190614901565b61118c565b005b3480156105bb57600080fd5b506105c46112e3565b6040516105d19190614a41565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc919061485e565b6112ec565b60405161060e91906148b9565b60405180910390f35b34801561062357600080fd5b5061062c61139f565b6040516106399190614a0a565b60405180910390f35b34801561064e57600080fd5b506106576113c5565b60405161066491906148b9565b60405180910390f35b34801561067957600080fd5b506106826113d8565b60405161068f9190614a0a565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190614901565b6113fc565b6040516106cc91906148b9565b60405180910390f35b3480156106e157600080fd5b506106ea611452565b6040516106f79190614817565b60405180910390f35b34801561070c57600080fd5b50610715611458565b6040516107229190614817565b60405180910390f35b34801561073757600080fd5b5061074061145e565b60405161074d91906148b9565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614901565b611471565b60405161078a9190614817565b60405180910390f35b34801561079f57600080fd5b506107a86114b9565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614a88565b611611565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190614ac8565b611703565b005b34801561080857600080fd5b5061081161181d565b60405161081e9190614a0a565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190614b1b565b611847565b005b34801561085c57600080fd5b506108656118fb565b60405161087291906147dc565b60405180910390f35b34801561088757600080fd5b5061089061198d565b005b34801561089e57600080fd5b506108b960048036038101906108b49190614a88565b611a61565b005b3480156108c757600080fd5b506108d0611b94565b6040516108dd9190614817565b60405180910390f35b3480156108f257600080fd5b506108fb611b9a565b6040516109089190614817565b60405180910390f35b34801561091d57600080fd5b50610926611ba0565b6040516109339190614817565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e919061485e565b611ba6565b60405161097091906148b9565b60405180910390f35b34801561098557600080fd5b506109a0600480360381019061099b919061485e565b611c73565b6040516109ad91906148b9565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190614901565b611c91565b6040516109ea91906148b9565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190614b1b565b611cb1565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190614a88565b611df5565b005b348015610a5157600080fd5b50610a5a611f35565b604051610a679190614a0a565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190614ac8565b611f5b565b005b348015610aa557600080fd5b50610ac06004803603810190610abb91906148d4565b612075565b005b348015610ace57600080fd5b50610ae96004803603810190610ae49190614901565b612197565b005b348015610af757600080fd5b50610b006122ee565b604051610b0d9190614817565b60405180910390f35b348015610b2257600080fd5b50610b2b6122f4565b604051610b389190614a0a565b60405180910390f35b348015610b4d57600080fd5b50610b5661231a565b604051610b639190614817565b60405180910390f35b348015610b7857600080fd5b50610b936004803603810190610b8e91906148d4565b612320565b604051610ba091906148b9565b60405180910390f35b348015610bb557600080fd5b50610bbe612490565b604051610bcb9190614817565b60405180910390f35b348015610be057600080fd5b50610bfb6004803603810190610bf69190614b48565b612496565b604051610c089190614817565b60405180910390f35b348015610c1d57600080fd5b50610c386004803603810190610c339190614901565b61251d565b005b348015610c4657600080fd5b50610c4f6127e0565b604051610c5c9190614817565b60405180910390f35b348015610c7157600080fd5b50610c7a6127e6565b604051610c879190614817565b60405180910390f35b348015610c9c57600080fd5b50610cb76004803603810190610cb29190614901565b6127ec565b005b348015610cc557600080fd5b50610cce6129b2565b005b348015610cdc57600080fd5b50610ce5612adc565b604051610cf29190614817565b60405180910390f35b348015610d0757600080fd5b50610d10612ae2565b604051610d1d9190614817565b60405180910390f35b348015610d3257600080fd5b50610d4d6004803603810190610d4891906148d4565b612ae8565b005b610d57612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90614bd4565b60405180910390fd5b60005b81518160ff161015610e7d57600160066000848460ff1681518110610e1157610e10614bf4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e7590614c52565b915050610de9565b5050565b606060038054610e9090614caa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebc90614caa565b8015610f095780601f10610ede57610100808354040283529160200191610f09565b820191906000526020600020905b815481529060010190602001808311610eec57829003601f168201915b5050505050905090565b60115481565b6000610f2d610f26612e27565b8484612e2f565b6001905092915050565b610f3f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614bd4565b60405180910390fd5b633b9aca006103e86005610fe061109d565b610fea9190614cdb565b610ff49190614d4c565b610ffe9190614d4c565b811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614def565b60405180910390fd5b633b9aca00816110509190614cdb565b600a8190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60175481565b60006110ba848484612ff8565b61117b846110c6612e27565b61117685604051806060016040528060288152602001615cbb60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112c612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b612e2f565b600190509392505050565b61dead81565b611194612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90614bd4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006009905090565b60006113956112f9612e27565b84611390856001600061130a612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc990919063ffffffff16565b612e2f565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60125481565b600d60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c1612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614bd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611619612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90614bd4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61170b612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614bd4565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546117c29190614e0f565b6117cc9190614e0f565b600e81905550601e600e541115611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f90614e8f565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61184f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d590614bd4565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606004805461190a90614caa565b80601f016020809104026020016040519081016040528092919081815260200182805461193690614caa565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490614efb565b60405180910390fd5b6000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a69612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef90614bd4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90614f8d565b60405180910390fd5b611b908282613ac9565b5050565b600f5481565b60165481565b60135481565b6000611c69611bb3612e27565b84611c6485604051806060016040528060258152602001615ce36025913960016000611bdd612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b612e2f565b6001905092915050565b6000611c87611c80612e27565b8484612ff8565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b611cb9612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90614bd4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614efb565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b611dfd612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614bd4565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2991906148b9565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f63612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990614bd4565b60405180910390fd5b82601381905550816014819055508060158190555060155460145460135461201a9190614e0f565b6120249190614e0f565b601281905550601e6012541115612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614e8f565b60405180910390fd5b505050565b61207d612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614bd4565b60405180910390fd5b633b9aca006103e8600361211e61109d565b6121289190614cdb565b6121329190614d4c565b61213c9190614d4c565b81101561217e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121759061501f565b60405180910390fd5b633b9aca008161218e9190614cdb565b600c8190555050565b61219f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590614bd4565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b600061232a612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614bd4565b60405180910390fd5b620186a060016123c761109d565b6123d19190614cdb565b6123db9190614d4c565b82101561241d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612414906150b1565b60405180910390fd5b6103e8600561242a61109d565b6124349190614cdb565b61243e9190614d4c565b821115612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790615143565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612525612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614bd4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612619906151d5565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161265d9190614a0a565b602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e919061520a565b116126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d590615283565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61270261181d565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161273b9190614a0a565b602060405180830381865afa158015612758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277c919061520a565b6040518363ffffffff1660e01b81526004016127999291906152a3565b6020604051808303816000875af11580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc91906152e1565b5050565b600b5481565b60105481565b6127f4612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a90614bd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e990615380565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129ba612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614bd4565b60405180910390fd5b60004711612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a83906153ec565b60405180910390fd5b612a9461181d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ad9573d6000803e3d6000fd5b50565b60145481565b600c5481565b612af0612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690614bd4565b60405180910390fd5b6000600267ffffffffffffffff811115612b9c57612b9b614573565b5b604051908082528060200260200182016040528015612bca5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615421565b81600081518110612c7057612c6f614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612cbf57612cbe614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612d5c9493929190615547565b6000604051808303818588803b158015612d7557600080fd5b505af1158015612d89573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612dbd9190614817565b60405180910390a15050565b6000808284612dd89190614e0f565b905083811015612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906155df565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590615671565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0490615703565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612feb9190614817565b60405180910390a3505050565b8183600560149054906101000a900460ff168061305e5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130b25750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e89061576f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315790615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690615893565b60405180910390fd5b600083036131e8576131e385856000613b6a565b613a5e565b6131f061181d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561325e575061322e61181d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132975750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132d1575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132ea5750600760149054906101000a900460ff16155b1561358657601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133925750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561343957600a548311156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615925565b60405180910390fd5b600c546133e885611471565b846133f39190614e0f565b1115613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b90615991565b60405180910390fd5b613585565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134dc5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352b57600a54831115613526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351d90615a23565b60405180910390fd5b613584565b600c5461353785611471565b846135429190614e0f565b1115613583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357a90615991565b60405180910390fd5b5b5b5b600061359130611471565b90506000600b5482101590508080156135b65750600d60009054906101000a900460ff165b80156135cf5750600760149054906101000a900460ff16155b80156136255750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561367b5750601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d15750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613715576001600760146101000a81548160ff0219169083151502179055506136f9613dfd565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137cb5750601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137d557600090505b60008115613a4e57601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561383857506000601254115b156139055761386560646138576012548a6140ba90919063ffffffff16565b61413490919063ffffffff16565b9050601254601454826138789190614cdb565b6138829190614d4c565b601760008282546138939190614e0f565b92505081905550601254601554826138ab9190614cdb565b6138b59190614d4c565b601860008282546138c69190614e0f565b92505081905550601254601354826138de9190614cdb565b6138e89190614d4c565b601660008282546138f99190614e0f565b92505081905550613a2a565b601b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561396057506000600e54115b15613a295761398d606461397f600e548a6140ba90919063ffffffff16565b61413490919063ffffffff16565b9050600e54601054826139a09190614cdb565b6139aa9190614d4c565b601760008282546139bb9190614e0f565b92505081905550600e54601154826139d39190614cdb565b6139dd9190614d4c565b601860008282546139ee9190614e0f565b92505081905550600e54600f5482613a069190614cdb565b613a109190614d4c565b60166000828254613a219190614e0f565b925050819055505b5b6000811115613a3f57613a3e893083613b6a565b5b8087613a4b9190615a43565b96505b613a59898989613b6a565b505050505b5050505050565b6000838311158290613aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aa491906147dc565b60405180910390fd5b5060008385613abc9190615a43565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd090615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3f90615893565b60405180910390fd5b613c5383838361417e565b613cbe81604051806060016040528060268152602001615c95602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d51816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613df09190614817565b60405180910390a3505050565b6000613e0830611471565b90506000601854601654601754613e1f9190614e0f565b613e299190614e0f565b90506000821480613e3a5750600081145b15613e465750506140b8565b600060028260175485613e599190614cdb565b613e639190614d4c565b613e6d9190614d4c565b90506000613e84828561418390919063ffffffff16565b90506000479050613e94826141cd565b6000613ea9824761418390919063ffffffff16565b90506000613ed486613ec6601654856140ba90919063ffffffff16565b61413490919063ffffffff16565b90506000613eff87613ef1601854866140ba90919063ffffffff16565b61413490919063ffffffff16565b90506000818385613f109190615a43565b613f1a9190615a43565b90506000601781905550600060168190555060006018819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613f7c90615aa8565b60006040518083038185875af1925050503d8060008114613fb9576040519150601f19603f3d011682016040523d82523d6000602084013e613fbe565b606091505b50509050600088118015613fd25750600082115b1561401f57613fe1888361440a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161401693929190615abd565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161406590615aa8565b60006040518083038185875af1925050503d80600081146140a2576040519150601f19603f3d011682016040523d82523d6000602084013e6140a7565b606091505b505080915050505050505050505050505b565b60008083036140cc576000905061412e565b600082846140da9190614cdb565b90508284826140e99190614d4c565b14614129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161412090615b66565b60405180910390fd5b809150505b92915050565b600061417683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144e6565b905092915050565b505050565b60006141c583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a65565b905092915050565b6000600267ffffffffffffffff8111156141ea576141e9614573565b5b6040519080825280602002602001820160405280156142185781602001602082028036833780820191505090505b50905030816000815181106142305761422f614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f99190615421565b8160018151811061430d5761430c614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614372307f000000000000000000000000000000000000000000000000000000000000000084612e2f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143d4959493929190615b86565b600060405180830381600087803b1580156143ee57600080fd5b505af1158015614402573d6000803e3d6000fd5b505050505050565b614435307f000000000000000000000000000000000000000000000000000000000000000084612e2f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161449c96959493929190615be0565b60606040518083038185885af11580156144ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144df9190615c41565b5050505050565b6000808311829061452d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161452491906147dc565b60405180910390fd5b506000838561453c9190614d4c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145ab82614562565b810181811067ffffffffffffffff821117156145ca576145c9614573565b5b80604052505050565b60006145dd614549565b90506145e982826145a2565b919050565b600067ffffffffffffffff82111561460957614608614573565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464a8261461f565b9050919050565b61465a8161463f565b811461466557600080fd5b50565b60008135905061467781614651565b92915050565b600061469061468b846145ee565b6145d3565b905080838252602082019050602084028301858111156146b3576146b261461a565b5b835b818110156146dc57806146c88882614668565b8452602084019350506020810190506146b5565b5050509392505050565b600082601f8301126146fb576146fa61455d565b5b813561470b84826020860161467d565b91505092915050565b60006020828403121561472a57614729614553565b5b600082013567ffffffffffffffff81111561474857614747614558565b5b614754848285016146e6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479757808201518184015260208101905061477c565b60008484015250505050565b60006147ae8261475d565b6147b88185614768565b93506147c8818560208601614779565b6147d181614562565b840191505092915050565b600060208201905081810360008301526147f681846147a3565b905092915050565b6000819050919050565b614811816147fe565b82525050565b600060208201905061482c6000830184614808565b92915050565b61483b816147fe565b811461484657600080fd5b50565b60008135905061485881614832565b92915050565b6000806040838503121561487557614874614553565b5b600061488385828601614668565b925050602061489485828601614849565b9150509250929050565b60008115159050919050565b6148b38161489e565b82525050565b60006020820190506148ce60008301846148aa565b92915050565b6000602082840312156148ea576148e9614553565b5b60006148f884828501614849565b91505092915050565b60006020828403121561491757614916614553565b5b600061492584828501614668565b91505092915050565b6000819050919050565b600061495361494e6149498461461f565b61492e565b61461f565b9050919050565b600061496582614938565b9050919050565b60006149778261495a565b9050919050565b6149878161496c565b82525050565b60006020820190506149a2600083018461497e565b92915050565b6000806000606084860312156149c1576149c0614553565b5b60006149cf86828701614668565b93505060206149e086828701614668565b92505060406149f186828701614849565b9150509250925092565b614a048161463f565b82525050565b6000602082019050614a1f60008301846149fb565b92915050565b600060ff82169050919050565b614a3b81614a25565b82525050565b6000602082019050614a566000830184614a32565b92915050565b614a658161489e565b8114614a7057600080fd5b50565b600081359050614a8281614a5c565b92915050565b60008060408385031215614a9f57614a9e614553565b5b6000614aad85828601614668565b9250506020614abe85828601614a73565b9150509250929050565b600080600060608486031215614ae157614ae0614553565b5b6000614aef86828701614849565b9350506020614b0086828701614849565b9250506040614b1186828701614849565b9150509250925092565b600060208284031215614b3157614b30614553565b5b6000614b3f84828501614a73565b91505092915050565b60008060408385031215614b5f57614b5e614553565b5b6000614b6d85828601614668565b9250506020614b7e85828601614668565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bbe602083614768565b9150614bc982614b88565b602082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c5d82614a25565b915060ff8203614c7057614c6f614c23565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cc257607f821691505b602082108103614cd557614cd4614c7b565b5b50919050565b6000614ce6826147fe565b9150614cf1836147fe565b9250828202614cff816147fe565b91508282048414831517614d1657614d15614c23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d57826147fe565b9150614d62836147fe565b925082614d7257614d71614d1d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614dd9602f83614768565b9150614de482614d7d565b604082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b6000614e1a826147fe565b9150614e25836147fe565b9250828201905080821115614e3d57614e3c614c23565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614e79601d83614768565b9150614e8482614e43565b602082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f696e636f6d70617469626c6520726f6c65210000000000000000000000000000600082015250565b6000614ee5601283614768565b9150614ef082614eaf565b602082019050919050565b60006020820190508181036000830152614f1481614ed8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f77603983614768565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e332500000000000000000000000000000000000000000000000000000000602082015250565b6000615009602483614768565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061509b603583614768565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061512d603483614768565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006151bf602c83614768565b91506151ca82615163565b604082019050919050565b600060208201905081810360008301526151ee816151b2565b9050919050565b60008151905061520481614832565b92915050565b6000602082840312156152205761521f614553565b5b600061522e848285016151f5565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b600061526d601083614768565b915061527882615237565b602082019050919050565b6000602082019050818103600083015261529c81615260565b9050919050565b60006040820190506152b860008301856149fb565b6152c56020830184614808565b9392505050565b6000815190506152db81614a5c565b92915050565b6000602082840312156152f7576152f6614553565b5b6000615305848285016152cc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536a602683614768565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006153d6601f83614768565b91506153e1826153a0565b602082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b60008151905061541b81614651565b92915050565b60006020828403121561543757615436614553565b5b60006154458482850161540c565b91505092915050565b6000819050919050565b600061547361546e6154698461544e565b61492e565b6147fe565b9050919050565b61548381615458565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154be8161463f565b82525050565b60006154d083836154b5565b60208301905092915050565b6000602082019050919050565b60006154f482615489565b6154fe8185615494565b9350615509836154a5565b8060005b8381101561553a57815161552188826154c4565b975061552c836154dc565b92505060018101905061550d565b5085935050505092915050565b600060808201905061555c600083018761547a565b818103602083015261556e81866154e9565b905061557d60408301856149fb565b61558a6060830184614808565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155c9601b83614768565b91506155d482615593565b602082019050919050565b600060208201905081810360008301526155f8816155bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565b602483614768565b9150615666826155ff565b604082019050919050565b6000602082019050818103600083015261568a8161564e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156ed602283614768565b91506156f882615691565b604082019050919050565b6000602082019050818103600083015261571c816156e0565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b6000615759600883614768565b915061576482615723565b602082019050919050565b600060208201905081810360008301526157888161574c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157eb602583614768565b91506157f68261578f565b604082019050919050565b6000602082019050818103600083015261581a816157de565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061587d602383614768565b915061588882615821565b604082019050919050565b600060208201905081810360008301526158ac81615870565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061590f603583614768565b915061591a826158b3565b604082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061597b601383614768565b915061598682615945565b602082019050919050565b600060208201905081810360008301526159aa8161596e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a0d603683614768565b9150615a18826159b1565b604082019050919050565b60006020820190508181036000830152615a3c81615a00565b9050919050565b6000615a4e826147fe565b9150615a59836147fe565b9250828203905081811115615a7157615a70614c23565b5b92915050565b600081905092915050565b50565b6000615a92600083615a77565b9150615a9d82615a82565b600082019050919050565b6000615ab382615a85565b9150819050919050565b6000606082019050615ad26000830186614808565b615adf6020830185614808565b615aec6040830184614808565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b50602183614768565b9150615b5b82615af4565b604082019050919050565b60006020820190508181036000830152615b7f81615b43565b9050919050565b600060a082019050615b9b6000830188614808565b615ba8602083018761547a565b8181036040830152615bba81866154e9565b9050615bc960608301856149fb565b615bd66080830184614808565b9695505050505050565b600060c082019050615bf560008301896149fb565b615c026020830188614808565b615c0f604083018761547a565b615c1c606083018661547a565b615c2960808301856149fb565b615c3660a0830184614808565b979650505050505050565b600080600060608486031215615c5a57615c59614553565b5b6000615c68868287016151f5565b9350506020615c79868287016151f5565b9250506040615c8a868287016151f5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007077aeced9b37996db7cbf48526a7fdc24bfa73fd92bbb344037b27ed50038c64736f6c63430008120033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c806399ab04a7116101c6578063c8c8ebe4116100f7578063e2f4560511610095578063f5648a4f1161006f578063f5648a4f14610cb9578063f637434214610cd0578063f8b45b0514610cfb578063fc155d1d14610d2657610376565b8063e2f4560514610c3a578063f11a24d314610c65578063f2fde38b14610c9057610376565b8063d257b34f116100d1578063d257b34f14610b6c578063d85ba06314610ba9578063dd62ed3e14610bd4578063e083e92214610c1157610376565b8063c8c8ebe414610aeb578063cbdcfd8114610b16578063cc2ffe7c14610b4157610376565b8063b62496f511610164578063c04a54141161013e578063c04a541414610a45578063c17b5b8c14610a70578063c18bc19514610a99578063c79c04fd14610ac257610376565b8063b62496f5146109b6578063c00f04d1146109f3578063c024666814610a1c57610376565b80639fccce32116101a05780639fccce32146108e6578063a0d82dc514610911578063a457c2d71461093c578063a9059cbb1461097957610376565b806399ab04a71461087b5780639a7a23d6146108925780639c3b4fdc146108bb57610376565b80634626402b116102a057806370a082311161023e5780638095d564116102185780638095d564146107d35780638da5cb5b146107fc578063924de9b71461082757806395d89b411461085057610376565b806370a0823114610756578063715018a6146107935780637571336a146107aa57610376565b80634fbee1931161027a5780634fbee193146106985780635e015739146106d55780636a486a8e146107005780636ddd17131461072b57610376565b80634626402b1461061757806347535d7b1461064257806349bd5a5e1461066d57610376565b806318160ddd1161030d57806327c8f835116102e757806327c8f8351461055b5780632955ede614610586578063313ce567146105af57806339509351146105da57610376565b806318160ddd146104c85780631a8145bb146104f357806323b872dd1461051e57610376565b8063095ea7b311610349578063095ea7b3146103fa578063106b5da11461043757806310d5de53146104605780631694505e1461049d57610376565b806304fdf86f1461037b57806306fdde03146103a45780630805d787146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d9190614714565b610d4f565b005b3480156103b057600080fd5b506103b9610e81565b6040516103c691906147dc565b60405180910390f35b3480156103db57600080fd5b506103e4610f13565b6040516103f19190614817565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061485e565b610f19565b60405161042e91906148b9565b60405180910390f35b34801561044357600080fd5b5061045e600480360381019061045991906148d4565b610f37565b005b34801561046c57600080fd5b5061048760048036038101906104829190614901565b611059565b60405161049491906148b9565b60405180910390f35b3480156104a957600080fd5b506104b2611079565b6040516104bf919061498d565b60405180910390f35b3480156104d457600080fd5b506104dd61109d565b6040516104ea9190614817565b60405180910390f35b3480156104ff57600080fd5b506105086110a7565b6040516105159190614817565b60405180910390f35b34801561052a57600080fd5b50610545600480360381019061054091906149a8565b6110ad565b60405161055291906148b9565b60405180910390f35b34801561056757600080fd5b50610570611186565b60405161057d9190614a0a565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190614901565b61118c565b005b3480156105bb57600080fd5b506105c46112e3565b6040516105d19190614a41565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc919061485e565b6112ec565b60405161060e91906148b9565b60405180910390f35b34801561062357600080fd5b5061062c61139f565b6040516106399190614a0a565b60405180910390f35b34801561064e57600080fd5b506106576113c5565b60405161066491906148b9565b60405180910390f35b34801561067957600080fd5b506106826113d8565b60405161068f9190614a0a565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190614901565b6113fc565b6040516106cc91906148b9565b60405180910390f35b3480156106e157600080fd5b506106ea611452565b6040516106f79190614817565b60405180910390f35b34801561070c57600080fd5b50610715611458565b6040516107229190614817565b60405180910390f35b34801561073757600080fd5b5061074061145e565b60405161074d91906148b9565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614901565b611471565b60405161078a9190614817565b60405180910390f35b34801561079f57600080fd5b506107a86114b9565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614a88565b611611565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190614ac8565b611703565b005b34801561080857600080fd5b5061081161181d565b60405161081e9190614a0a565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190614b1b565b611847565b005b34801561085c57600080fd5b506108656118fb565b60405161087291906147dc565b60405180910390f35b34801561088757600080fd5b5061089061198d565b005b34801561089e57600080fd5b506108b960048036038101906108b49190614a88565b611a61565b005b3480156108c757600080fd5b506108d0611b94565b6040516108dd9190614817565b60405180910390f35b3480156108f257600080fd5b506108fb611b9a565b6040516109089190614817565b60405180910390f35b34801561091d57600080fd5b50610926611ba0565b6040516109339190614817565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e919061485e565b611ba6565b60405161097091906148b9565b60405180910390f35b34801561098557600080fd5b506109a0600480360381019061099b919061485e565b611c73565b6040516109ad91906148b9565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190614901565b611c91565b6040516109ea91906148b9565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190614b1b565b611cb1565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190614a88565b611df5565b005b348015610a5157600080fd5b50610a5a611f35565b604051610a679190614a0a565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190614ac8565b611f5b565b005b348015610aa557600080fd5b50610ac06004803603810190610abb91906148d4565b612075565b005b348015610ace57600080fd5b50610ae96004803603810190610ae49190614901565b612197565b005b348015610af757600080fd5b50610b006122ee565b604051610b0d9190614817565b60405180910390f35b348015610b2257600080fd5b50610b2b6122f4565b604051610b389190614a0a565b60405180910390f35b348015610b4d57600080fd5b50610b5661231a565b604051610b639190614817565b60405180910390f35b348015610b7857600080fd5b50610b936004803603810190610b8e91906148d4565b612320565b604051610ba091906148b9565b60405180910390f35b348015610bb557600080fd5b50610bbe612490565b604051610bcb9190614817565b60405180910390f35b348015610be057600080fd5b50610bfb6004803603810190610bf69190614b48565b612496565b604051610c089190614817565b60405180910390f35b348015610c1d57600080fd5b50610c386004803603810190610c339190614901565b61251d565b005b348015610c4657600080fd5b50610c4f6127e0565b604051610c5c9190614817565b60405180910390f35b348015610c7157600080fd5b50610c7a6127e6565b604051610c879190614817565b60405180910390f35b348015610c9c57600080fd5b50610cb76004803603810190610cb29190614901565b6127ec565b005b348015610cc557600080fd5b50610cce6129b2565b005b348015610cdc57600080fd5b50610ce5612adc565b604051610cf29190614817565b60405180910390f35b348015610d0757600080fd5b50610d10612ae2565b604051610d1d9190614817565b60405180910390f35b348015610d3257600080fd5b50610d4d6004803603810190610d4891906148d4565b612ae8565b005b610d57612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90614bd4565b60405180910390fd5b60005b81518160ff161015610e7d57600160066000848460ff1681518110610e1157610e10614bf4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e7590614c52565b915050610de9565b5050565b606060038054610e9090614caa565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebc90614caa565b8015610f095780601f10610ede57610100808354040283529160200191610f09565b820191906000526020600020905b815481529060010190602001808311610eec57829003601f168201915b5050505050905090565b60115481565b6000610f2d610f26612e27565b8484612e2f565b6001905092915050565b610f3f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614bd4565b60405180910390fd5b633b9aca006103e86005610fe061109d565b610fea9190614cdb565b610ff49190614d4c565b610ffe9190614d4c565b811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790614def565b60405180910390fd5b633b9aca00816110509190614cdb565b600a8190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60175481565b60006110ba848484612ff8565b61117b846110c6612e27565b61117685604051806060016040528060288152602001615cbb60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061112c612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b612e2f565b600190509392505050565b61dead81565b611194612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90614bd4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006009905090565b60006113956112f9612e27565b84611390856001600061130a612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc990919063ffffffff16565b612e2f565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b7f000000000000000000000000035e7c43ef45e55d0221233bd8671eb4c8c5379981565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60125481565b600d60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114c1612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614bd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611619612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90614bd4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61170b612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614bd4565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546117c29190614e0f565b6117cc9190614e0f565b600e81905550601e600e541115611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f90614e8f565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61184f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d590614bd4565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606004805461190a90614caa565b80601f016020809104026020016040519081016040528092919081815260200182805461193690614caa565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490614efb565b60405180910390fd5b6000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a69612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef90614bd4565b60405180910390fd5b7f000000000000000000000000035e7c43ef45e55d0221233bd8671eb4c8c5379973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90614f8d565b60405180910390fd5b611b908282613ac9565b5050565b600f5481565b60165481565b60135481565b6000611c69611bb3612e27565b84611c6485604051806060016040528060258152602001615ce36025913960016000611bdd612e27565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b612e2f565b6001905092915050565b6000611c87611c80612e27565b8484612ff8565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b611cb9612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90614bd4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614efb565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b611dfd612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614bd4565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2991906148b9565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f63612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990614bd4565b60405180910390fd5b82601381905550816014819055508060158190555060155460145460135461201a9190614e0f565b6120249190614e0f565b601281905550601e6012541115612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614e8f565b60405180910390fd5b505050565b61207d612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614bd4565b60405180910390fd5b633b9aca006103e8600361211e61109d565b6121289190614cdb565b6121329190614d4c565b61213c9190614d4c565b81101561217e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121759061501f565b60405180910390fd5b633b9aca008161218e9190614cdb565b600c8190555050565b61219f612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222590614bd4565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b600061232a612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090614bd4565b60405180910390fd5b620186a060016123c761109d565b6123d19190614cdb565b6123db9190614d4c565b82101561241d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612414906150b1565b60405180910390fd5b6103e8600561242a61109d565b6124349190614cdb565b61243e9190614d4c565b821115612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790615143565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612525612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614bd4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612619906151d5565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161265d9190614a0a565b602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e919061520a565b116126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d590615283565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61270261181d565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161273b9190614a0a565b602060405180830381865afa158015612758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277c919061520a565b6040518363ffffffff1660e01b81526004016127999291906152a3565b6020604051808303816000875af11580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc91906152e1565b5050565b600b5481565b60105481565b6127f4612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a90614bd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e990615380565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129ba612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614bd4565b60405180910390fd5b60004711612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a83906153ec565b60405180910390fd5b612a9461181d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ad9573d6000803e3d6000fd5b50565b60145481565b600c5481565b612af0612e27565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690614bd4565b60405180910390fd5b6000600267ffffffffffffffff811115612b9c57612b9b614573565b5b604051908082528060200260200182016040528015612bca5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5c9190615421565b81600081518110612c7057612c6f614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612cbf57612cbe614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612d5c9493929190615547565b6000604051808303818588803b158015612d7557600080fd5b505af1158015612d89573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051612dbd9190614817565b60405180910390a15050565b6000808284612dd89190614e0f565b905083811015612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906155df565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9590615671565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0490615703565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612feb9190614817565b60405180910390a3505050565b8183600560149054906101000a900460ff168061305e5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130b25750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e89061576f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315790615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690615893565b60405180910390fd5b600083036131e8576131e385856000613b6a565b613a5e565b6131f061181d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561325e575061322e61181d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132975750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132d1575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132ea5750600760149054906101000a900460ff16155b1561358657601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133925750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561343957600a548311156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615925565b60405180910390fd5b600c546133e885611471565b846133f39190614e0f565b1115613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b90615991565b60405180910390fd5b613585565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134dc5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352b57600a54831115613526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351d90615a23565b60405180910390fd5b613584565b600c5461353785611471565b846135429190614e0f565b1115613583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357a90615991565b60405180910390fd5b5b5b5b600061359130611471565b90506000600b5482101590508080156135b65750600d60009054906101000a900460ff165b80156135cf5750600760149054906101000a900460ff16155b80156136255750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561367b5750601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d15750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613715576001600760146101000a81548160ff0219169083151502179055506136f9613dfd565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137cb5750601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137d557600090505b60008115613a4e57601b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561383857506000601254115b156139055761386560646138576012548a6140ba90919063ffffffff16565b61413490919063ffffffff16565b9050601254601454826138789190614cdb565b6138829190614d4c565b601760008282546138939190614e0f565b92505081905550601254601554826138ab9190614cdb565b6138b59190614d4c565b601860008282546138c69190614e0f565b92505081905550601254601354826138de9190614cdb565b6138e89190614d4c565b601660008282546138f99190614e0f565b92505081905550613a2a565b601b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561396057506000600e54115b15613a295761398d606461397f600e548a6140ba90919063ffffffff16565b61413490919063ffffffff16565b9050600e54601054826139a09190614cdb565b6139aa9190614d4c565b601760008282546139bb9190614e0f565b92505081905550600e54601154826139d39190614cdb565b6139dd9190614d4c565b601860008282546139ee9190614e0f565b92505081905550600e54600f5482613a069190614cdb565b613a109190614d4c565b60166000828254613a219190614e0f565b925050819055505b5b6000811115613a3f57613a3e893083613b6a565b5b8087613a4b9190615a43565b96505b613a59898989613b6a565b505050505b5050505050565b6000838311158290613aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aa491906147dc565b60405180910390fd5b5060008385613abc9190615a43565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd090615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3f90615893565b60405180910390fd5b613c5383838361417e565b613cbe81604051806060016040528060268152602001615c95602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a659092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d51816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613df09190614817565b60405180910390a3505050565b6000613e0830611471565b90506000601854601654601754613e1f9190614e0f565b613e299190614e0f565b90506000821480613e3a5750600081145b15613e465750506140b8565b600060028260175485613e599190614cdb565b613e639190614d4c565b613e6d9190614d4c565b90506000613e84828561418390919063ffffffff16565b90506000479050613e94826141cd565b6000613ea9824761418390919063ffffffff16565b90506000613ed486613ec6601654856140ba90919063ffffffff16565b61413490919063ffffffff16565b90506000613eff87613ef1601854866140ba90919063ffffffff16565b61413490919063ffffffff16565b90506000818385613f109190615a43565b613f1a9190615a43565b90506000601781905550600060168190555060006018819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613f7c90615aa8565b60006040518083038185875af1925050503d8060008114613fb9576040519150601f19603f3d011682016040523d82523d6000602084013e613fbe565b606091505b50509050600088118015613fd25750600082115b1561401f57613fe1888361440a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161401693929190615abd565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161406590615aa8565b60006040518083038185875af1925050503d80600081146140a2576040519150601f19603f3d011682016040523d82523d6000602084013e6140a7565b606091505b505080915050505050505050505050505b565b60008083036140cc576000905061412e565b600082846140da9190614cdb565b90508284826140e99190614d4c565b14614129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161412090615b66565b60405180910390fd5b809150505b92915050565b600061417683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144e6565b905092915050565b505050565b60006141c583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a65565b905092915050565b6000600267ffffffffffffffff8111156141ea576141e9614573565b5b6040519080825280602002602001820160405280156142185781602001602082028036833780820191505090505b50905030816000815181106142305761422f614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f99190615421565b8160018151811061430d5761430c614bf4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614372307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612e2f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143d4959493929190615b86565b600060405180830381600087803b1580156143ee57600080fd5b505af1158015614402573d6000803e3d6000fd5b505050505050565b614435307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612e2f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161449c96959493929190615be0565b60606040518083038185885af11580156144ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144df9190615c41565b5050505050565b6000808311829061452d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161452491906147dc565b60405180910390fd5b506000838561453c9190614d4c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145ab82614562565b810181811067ffffffffffffffff821117156145ca576145c9614573565b5b80604052505050565b60006145dd614549565b90506145e982826145a2565b919050565b600067ffffffffffffffff82111561460957614608614573565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464a8261461f565b9050919050565b61465a8161463f565b811461466557600080fd5b50565b60008135905061467781614651565b92915050565b600061469061468b846145ee565b6145d3565b905080838252602082019050602084028301858111156146b3576146b261461a565b5b835b818110156146dc57806146c88882614668565b8452602084019350506020810190506146b5565b5050509392505050565b600082601f8301126146fb576146fa61455d565b5b813561470b84826020860161467d565b91505092915050565b60006020828403121561472a57614729614553565b5b600082013567ffffffffffffffff81111561474857614747614558565b5b614754848285016146e6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479757808201518184015260208101905061477c565b60008484015250505050565b60006147ae8261475d565b6147b88185614768565b93506147c8818560208601614779565b6147d181614562565b840191505092915050565b600060208201905081810360008301526147f681846147a3565b905092915050565b6000819050919050565b614811816147fe565b82525050565b600060208201905061482c6000830184614808565b92915050565b61483b816147fe565b811461484657600080fd5b50565b60008135905061485881614832565b92915050565b6000806040838503121561487557614874614553565b5b600061488385828601614668565b925050602061489485828601614849565b9150509250929050565b60008115159050919050565b6148b38161489e565b82525050565b60006020820190506148ce60008301846148aa565b92915050565b6000602082840312156148ea576148e9614553565b5b60006148f884828501614849565b91505092915050565b60006020828403121561491757614916614553565b5b600061492584828501614668565b91505092915050565b6000819050919050565b600061495361494e6149498461461f565b61492e565b61461f565b9050919050565b600061496582614938565b9050919050565b60006149778261495a565b9050919050565b6149878161496c565b82525050565b60006020820190506149a2600083018461497e565b92915050565b6000806000606084860312156149c1576149c0614553565b5b60006149cf86828701614668565b93505060206149e086828701614668565b92505060406149f186828701614849565b9150509250925092565b614a048161463f565b82525050565b6000602082019050614a1f60008301846149fb565b92915050565b600060ff82169050919050565b614a3b81614a25565b82525050565b6000602082019050614a566000830184614a32565b92915050565b614a658161489e565b8114614a7057600080fd5b50565b600081359050614a8281614a5c565b92915050565b60008060408385031215614a9f57614a9e614553565b5b6000614aad85828601614668565b9250506020614abe85828601614a73565b9150509250929050565b600080600060608486031215614ae157614ae0614553565b5b6000614aef86828701614849565b9350506020614b0086828701614849565b9250506040614b1186828701614849565b9150509250925092565b600060208284031215614b3157614b30614553565b5b6000614b3f84828501614a73565b91505092915050565b60008060408385031215614b5f57614b5e614553565b5b6000614b6d85828601614668565b9250506020614b7e85828601614668565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bbe602083614768565b9150614bc982614b88565b602082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c5d82614a25565b915060ff8203614c7057614c6f614c23565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cc257607f821691505b602082108103614cd557614cd4614c7b565b5b50919050565b6000614ce6826147fe565b9150614cf1836147fe565b9250828202614cff816147fe565b91508282048414831517614d1657614d15614c23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d57826147fe565b9150614d62836147fe565b925082614d7257614d71614d1d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614dd9602f83614768565b9150614de482614d7d565b604082019050919050565b60006020820190508181036000830152614e0881614dcc565b9050919050565b6000614e1a826147fe565b9150614e25836147fe565b9250828201905080821115614e3d57614e3c614c23565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614e79601d83614768565b9150614e8482614e43565b602082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f696e636f6d70617469626c6520726f6c65210000000000000000000000000000600082015250565b6000614ee5601283614768565b9150614ef082614eaf565b602082019050919050565b60006020820190508181036000830152614f1481614ed8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f77603983614768565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e332500000000000000000000000000000000000000000000000000000000602082015250565b6000615009602483614768565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061509b603583614768565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061512d603483614768565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006151bf602c83614768565b91506151ca82615163565b604082019050919050565b600060208201905081810360008301526151ee816151b2565b9050919050565b60008151905061520481614832565b92915050565b6000602082840312156152205761521f614553565b5b600061522e848285016151f5565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b600061526d601083614768565b915061527882615237565b602082019050919050565b6000602082019050818103600083015261529c81615260565b9050919050565b60006040820190506152b860008301856149fb565b6152c56020830184614808565b9392505050565b6000815190506152db81614a5c565b92915050565b6000602082840312156152f7576152f6614553565b5b6000615305848285016152cc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536a602683614768565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006153d6601f83614768565b91506153e1826153a0565b602082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b60008151905061541b81614651565b92915050565b60006020828403121561543757615436614553565b5b60006154458482850161540c565b91505092915050565b6000819050919050565b600061547361546e6154698461544e565b61492e565b6147fe565b9050919050565b61548381615458565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154be8161463f565b82525050565b60006154d083836154b5565b60208301905092915050565b6000602082019050919050565b60006154f482615489565b6154fe8185615494565b9350615509836154a5565b8060005b8381101561553a57815161552188826154c4565b975061552c836154dc565b92505060018101905061550d565b5085935050505092915050565b600060808201905061555c600083018761547a565b818103602083015261556e81866154e9565b905061557d60408301856149fb565b61558a6060830184614808565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006155c9601b83614768565b91506155d482615593565b602082019050919050565b600060208201905081810360008301526155f8816155bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565b602483614768565b9150615666826155ff565b604082019050919050565b6000602082019050818103600083015261568a8161564e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156ed602283614768565b91506156f882615691565b604082019050919050565b6000602082019050818103600083015261571c816156e0565b9050919050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b6000615759600883614768565b915061576482615723565b602082019050919050565b600060208201905081810360008301526157888161574c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157eb602583614768565b91506157f68261578f565b604082019050919050565b6000602082019050818103600083015261581a816157de565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061587d602383614768565b915061588882615821565b604082019050919050565b600060208201905081810360008301526158ac81615870565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061590f603583614768565b915061591a826158b3565b604082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061597b601383614768565b915061598682615945565b602082019050919050565b600060208201905081810360008301526159aa8161596e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a0d603683614768565b9150615a18826159b1565b604082019050919050565b60006020820190508181036000830152615a3c81615a00565b9050919050565b6000615a4e826147fe565b9150615a59836147fe565b9250828203905081811115615a7157615a70614c23565b5b92915050565b600081905092915050565b50565b6000615a92600083615a77565b9150615a9d82615a82565b600082019050919050565b6000615ab382615a85565b9150819050919050565b6000606082019050615ad26000830186614808565b615adf6020830185614808565b615aec6040830184614808565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b50602183614768565b9150615b5b82615af4565b604082019050919050565b60006020820190508181036000830152615b7f81615b43565b9050919050565b600060a082019050615b9b6000830188614808565b615ba8602083018761547a565b8181036040830152615bba81866154e9565b9050615bc960608301856149fb565b615bd66080830184614808565b9695505050505050565b600060c082019050615bf560008301896149fb565b615c026020830188614808565b615c0f604083018761547a565b615c1c606083018661547a565b615c2960808301856149fb565b615c3660a0830184614808565b979650505050505050565b600080600060608486031215615c5a57615c59614553565b5b6000615c68868287016151f5565b9350506020615c79868287016151f5565b9250506040615c8a868287016151f5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007077aeced9b37996db7cbf48526a7fdc24bfa73fd92bbb344037b27ed50038c64736f6c63430008120033
Deployed Bytecode Sourcemap
30690:15042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30507:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7852:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31309:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35660:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31753:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30777:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8971:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31527:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10669:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30880:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38099:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8814:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11433:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31011:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29732:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30835:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38290:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31453:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31348:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31168:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9142:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22316:148;;;;;;;;;;;;;:::i;:::-;;36123:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36480:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21674:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36367:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8071:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30328:171;;;;;;;;;;;;;:::i;:::-;;37417:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31241:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31493:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31383:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12154:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9482:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31975:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30157:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37227:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30972:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36851:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35897:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37865:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31053:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29815:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31567:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35262:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31207:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9720:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45388:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31095:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31272:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22619:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45186:194;;;;;;;;;;;;;:::i;:::-;;31415:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31135:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44603:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30507:176;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30584:7:::1;30580:96;30601:6;:13;30597:1;:17;;;30580:96;;;30660:4;30636:10;:21;30647:6;30654:1;30647:9;;;;;;;;;;:::i;:::-;;;;;;;;30636:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30616:3;;;;;:::i;:::-;;;;30580:96;;;;30507:176:::0;:::o;7852:100::-;7906:13;7939:5;7932:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:100;:::o;31309:26::-;;;;:::o;10018:169::-;10101:4;10118:39;10127:12;:10;:12::i;:::-;10141:7;10150:6;10118:8;:39::i;:::-;10175:4;10168:11;;10018:169;;;;:::o;35660:229::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35776:3:::1;35770:4;35766:1;35750:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35749:30;;;;:::i;:::-;35739:6;:40;;35731:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35875:5;35865:6;:16;;;;:::i;:::-;35842:20;:39;;;;35660:229:::0;:::o;31753:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30777:51::-;;;:::o;8971:108::-;9032:7;9059:12;;9052:19;;8971:108;:::o;31527:33::-;;;;:::o;10669:355::-;10809:4;10826:36;10836:6;10844:9;10855:6;10826:9;:36::i;:::-;10873:121;10882:6;10890:12;:10;:12::i;:::-;10904:89;10942:6;10904:89;;;;;;;;;;;;;;;;;:11;:19;10916:6;10904:19;;;;;;;;;;;;;;;:33;10924:12;:10;:12::i;:::-;10904:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10873:8;:121::i;:::-;11012:4;11005:11;;10669:355;;;;;:::o;30880:53::-;30926:6;30880:53;:::o;38099:177::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38216:14:::1;;;;;;;;;;;38183:48;;38205:9;38183:48;;;;;;;;;;;;38259:9;38242:14;;:26;;;;;;;;;;;;;;;;;;38099:177:::0;:::o;8814:92::-;8872:5;8897:1;8890:8;;8814:92;:::o;11433:218::-;11521:4;11538:83;11547:12;:10;:12::i;:::-;11561:7;11570:50;11609:10;11570:11;:25;11582:12;:10;:12::i;:::-;11570:25;;;;;;;;;;;;;;;:34;11596:7;11570:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11538:8;:83::i;:::-;11639:4;11632:11;;11433:218;;;;:::o;31011:29::-;;;;;;;;;;;;;:::o;29732:26::-;;;;;;;;;;;;;:::o;30835:38::-;;;:::o;38290:125::-;38355:4;38379:19;:28;38399:7;38379:28;;;;;;;;;;;;;;;;;;;;;;;;;38372:35;;38290:125;;;:::o;31453:27::-;;;;:::o;31348:28::-;;;;:::o;31168:30::-;;;;;;;;;;;;;:::o;9142:127::-;9216:7;9243:9;:18;9253:7;9243:18;;;;;;;;;;;;;;;;9236:25;;9142:127;;;:::o;22316:148::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22423:1:::1;22386:40;;22407:6;;;;;;;;;;;22386:40;;;;;;;;;;;;22454:1;22437:6;;:19;;;;;;;;;;;;;;;;;;22316:148::o:0;36123:144::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:4:::1;36213:31;:39;36245:6;36213:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36123:144:::0;;:::o;36480:359::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:7:::1;36595:9;:19;;;;36643:13;36625:15;:31;;;;36681:12;36667:11;:26;;;;36749:11;;36731:15;;36719:9;;:27;;;;:::i;:::-;:41;;;;:::i;:::-;36704:12;:56;;;;36795:2;36779:12;;:18;;36771:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36480:359:::0;;;:::o;21674:79::-;21712:7;21739:6;;;;;;;;;;;21732:13;;21674:79;:::o;36367:101::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36453:7:::1;36439:11;;:21;;;;;;;;;;;;;;;;;;36367:101:::0;:::o;8071:104::-;8127:13;8160:7;8153:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:104;:::o;30328:171::-;30414:10;30392:32;;:18;;;;;;;;;;;:32;;;30384:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30487:3;30458:18;;:33;;;;;;;;;;;;;;;;;;30328:171::o;37417:244::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37524:13:::1;37516:21;;:4;:21;;::::0;37508:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37612:41;37641:4;37647:5;37612:28;:41::i;:::-;37417:244:::0;;:::o;31241:24::-;;;;:::o;31493:27::-;;;;:::o;31383:25::-;;;;:::o;12154:269::-;12247:4;12264:129;12273:12;:10;:12::i;:::-;12287:7;12296:96;12335:15;12296:96;;;;;;;;;;;;;;;;;:11;:25;12308:12;:10;:12::i;:::-;12296:25;;;;;;;;;;;;;;;:34;12322:7;12296:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12264:8;:129::i;:::-;12411:4;12404:11;;12154:269;;;;:::o;9482:175::-;9568:4;9585:42;9595:12;:10;:12::i;:::-;9609:9;9620:6;9585:9;:42::i;:::-;9645:4;9638:11;;9482:175;;;;:::o;31975:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30157:163::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30252:10:::1;30230:32;;:18;;;;;;;;;;;:32;;;30222:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30305:7;30296:6;;:16;;;;;;;;;;;;;;;;;;30157:163:::0;:::o;37227:182::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37343:8:::1;37312:19;:28;37332:7;37312:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37383:7;37367:34;;;37392:8;37367:34;;;;;;:::i;:::-;;;;;;;;37227:182:::0;;:::o;30972:32::-;;;;;;;;;;;;;:::o;36851:368::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36980:7:::1;36967:10;:20;;;;37017:13;36998:16;:32;;;;37056:12;37041;:27;;;;37127:12;;37108:16;;37095:10;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;37079:13;:60;;;;37175:2;37158:13;;:19;;37150:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36851:368:::0;;;:::o;35897:214::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36020:3:::1;36014:4;36010:1;35994:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35993:30;;;;:::i;:::-;35983:6;:40;;35974:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:5;36087:6;:16;;;;:::i;:::-;36075:9;:28;;;;35897:214:::0;:::o;37865:222::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38010:17:::1;;;;;;;;;;;37963:65;;37988:20;37963:65;;;;;;;;;;;;38059:20;38039:17;;:40;;;;;;;;;;;;;;;;;;37865:222:::0;:::o;31053:35::-;;;;:::o;29815:33::-;;;;;;;;;;;;;:::o;31567:32::-;;;;:::o;35262:386::-;35343:4;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35400:6:::1;35396:1;35380:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35367:9;:39;;35359:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35516:4;35512:1;35496:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35483:9;:37;;35475:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35609:9;35588:18;:30;;;;35636:4;35629:11;;35262:386:::0;;;:::o;31207:27::-;;;;:::o;9720:151::-;9809:7;9836:11;:18;9848:5;9836:18;;;;;;;;;;;;;;;:27;9855:7;9836:27;;;;;;;;;;;;;;;;9829:34;;9720:151;;;;:::o;45388:339::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45490:4:::1;45470:25;;:8;:25;;::::0;45462:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45607:1;45570:8;45563:26;;;45598:4;45563:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;45555:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45649:8;45642:25;;;45668:7;:5;:7::i;:::-;45684:8;45677:26;;;45712:4;45677:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45642:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45388:339:::0;:::o;31095:33::-;;;;:::o;31272:30::-;;;;:::o;22619:244::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22728:1:::1;22708:22;;:8;:22;;::::0;22700:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22818:8;22789:38;;22810:6;;;;;;;;;;;22789:38;;;;;;;;;;;;22847:8;22838:6;;:17;;;;;;;;;;;;;;;;;;22619:244:::0;:::o;45186:194::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45276:1:::1;45252:21;:25;45243:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45332:7;:5;:7::i;:::-;45324:25;;:48;45350:21;45324:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45186:194::o:0;31415:31::-;;;;:::o;31135:24::-;;;;:::o;44603:575::-;21896:12;:10;:12::i;:::-;21886:22;;:6;;;;;;;;;;;:22;;;21878:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44738:21:::1;44776:1;44762:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44738:40;;44799:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44789:4;44794:1;44789:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;44850:4;44832;44837:1;44832:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;44894:15;:66;;;44968:14;44998:1;45047:4;45074:6;45096:15;44894:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45138:32;45155:14;45138:32;;;;;;:::i;:::-;;;;;;;;44669:509;44603:575:::0;:::o;16718:181::-;16776:7;16796:9;16812:1;16808;:5;;;;:::i;:::-;16796:17;;16837:1;16832;:6;;16824:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16890:1;16883:8;;;16718:181;;;;:::o;488:98::-;541:7;568:10;561:17;;488:98;:::o;15340:380::-;15493:1;15476:19;;:5;:19;;;15468:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15574:1;15555:21;;:7;:21;;;15547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15658:6;15628:11;:18;15640:5;15628:18;;;;;;;;;;;;;;;:27;15647:7;15628:27;;;;;;;;;;;;;;;:36;;;;15696:7;15680:32;;15689:5;15680:32;;;15705:6;15680:32;;;;;;:::i;:::-;;;;;;;;15340:380;;;:::o;38423:3350::-;38523:2;38527:4;29920:6;;;;;;;;;;;:26;;;;29930:10;:16;29941:4;29930:16;;;;;;;;;;;;;;;;;;;;;;;;;29920:26;:44;;;;29950:10;:14;29961:2;29950:14;;;;;;;;;;;;;;;;;;;;;;;;;29920:44;29912:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38585:1:::1;38569:18;;:4;:18;;::::0;38561:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38662:1;38648:16;;:2;:16;;::::0;38640:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38739:1;38729:6;:11:::0;38726:92:::1;;38757:28;38773:4;38779:2;38783:1;38757:15;:28::i;:::-;38800:7;;38726:92;38881:7;:5;:7::i;:::-;38873:15;;:4;:15;;;;:49;;;;;38915:7;:5;:7::i;:::-;38909:13;;:2;:13;;;;38873:49;:86;;;;;38957:1;38943:16;;:2;:16;;;;38873:86;:128;;;;;38994:6;38980:21;;:2;:21;;;;38873:128;:158;;;;;39023:8;;;;;;;;;;;39022:9;38873:158;38851:1014;;;39116:25;:31;39142:4;39116:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39152:31;:35;39184:2;39152:35;;;;;;;;;;;;;;;;;;;;;;;;;39151:36;39116:71;39112:738;;;39234:20;;39224:6;:30;;39216:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39373:9;;39356:13;39366:2;39356:9;:13::i;:::-;39347:6;:22;;;;:::i;:::-;:35;;39339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39112:738;;;39500:25;:29;39526:2;39500:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39534:31;:37;39566:4;39534:37;;;;;;;;;;;;;;;;;;;;;;;;;39533:38;39500:71;39496:354;;;39618:20;;39608:6;:30;;39600:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39496:354;;;39797:9;;39780:13;39790:2;39780:9;:13::i;:::-;39771:6;:22;;;;:::i;:::-;:35;;39763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39496:354;39112:738;38851:1014;39905:28;39936:24;39954:4;39936:9;:24::i;:::-;39905:55;;39981:12;40020:18;;39996:20;:42;;39981:57;;40069:7;:35;;;;;40093:11;;;;;;;;;;;40069:35;:61;;;;;40122:8;;;;;;;;;;;40121:9;40069:61;:110;;;;;40148:25;:31;40174:4;40148:31;;;;;;;;;;;;;;;;;;;;;;;;;40147:32;40069:110;:153;;;;;40197:19;:25;40217:4;40197:25;;;;;;;;;;;;;;;;;;;;;;;;;40196:26;40069:153;:194;;;;;40240:19;:23;40260:2;40240:23;;;;;;;;;;;;;;;;;;;;;;;;;40239:24;40069:194;40051:338;;;40301:4;40290:8;;:15;;;;;;;;;;;;;;;;;;40334:10;:8;:10::i;:::-;40372:5;40361:8;;:16;;;;;;;;;;;;;;;;;;40051:338;40409:12;40425:8;;;;;;;;;;;40424:9;40409:24;;40534:19;:25;40554:4;40534:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40563:19;:23;40583:2;40563:23;;;;;;;;;;;;;;;;;;;;;;;;;40534:52;40531:99;;;40613:5;40603:15;;40531:99;40650:12;40754:7;40751:969;;;40805:25;:29;40831:2;40805:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40854:1;40838:13;;:17;40805:50;40801:744;;;40882:34;40912:3;40882:25;40893:13;;40882:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40875:41;;40983:13;;40964:16;;40957:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40935:18;;:61;;;;;;;:::i;:::-;;;;;;;;41058:13;;41043:12;;41036:4;:19;;;;:::i;:::-;:35;;;;:::i;:::-;41015:17;;:56;;;;;;;:::i;:::-;;;;;;;;41126:13;;41113:10;;41106:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41090:12;;:49;;;;;;;:::i;:::-;;;;;;;;40801:744;;;41200:25;:31;41226:4;41200:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41250:1;41235:12;;:16;41200:51;41197:348;;;41279:33;41308:3;41279:24;41290:12;;41279:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41272:40;;41378:12;;41360:15;;41353:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41331:18;;:59;;;;;;;:::i;:::-;;;;;;;;41451:12;;41437:11;;41430:4;:18;;;;:::i;:::-;:33;;;;:::i;:::-;41409:17;;:54;;;;;;;:::i;:::-;;;;;;;;41517:12;;41505:9;;41498:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41482:12;;:47;;;;;;;:::i;:::-;;;;;;;;41197:348;40801:744;41583:1;41576:4;:8;41573:93;;;41608:42;41624:4;41638;41645;41608:15;:42::i;:::-;41573:93;41704:4;41694:14;;;;;:::i;:::-;;;40751:969;41732:33;41748:4;41754:2;41758:6;41732:15;:33::i;:::-;38550:3223;;;;29988:1;38423:3350:::0;;;;;:::o;17621:192::-;17707:7;17740:1;17735;:6;;17743:12;17727:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17767:9;17783:1;17779;:5;;;;:::i;:::-;17767:17;;17804:1;17797:8;;;17621:192;;;;;:::o;37669:188::-;37786:5;37752:25;:31;37778:4;37752:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37843:5;37809:40;;37837:4;37809:40;;;;;;;;;;;;37669:188;;:::o;12913:573::-;13071:1;13053:20;;:6;:20;;;13045:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13155:1;13134:23;;:9;:23;;;13126:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13210:47;13231:6;13239:9;13250:6;13210:20;:47::i;:::-;13290:71;13312:6;13290:71;;;;;;;;;;;;;;;;;:9;:17;13300:6;13290:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13270:9;:17;13280:6;13270:17;;;;;;;;;;;;;;;:91;;;;13395:32;13420:6;13395:9;:20;13405:9;13395:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13372:9;:20;13382:9;13372:20;;;;;;;;;;;;;;;:55;;;;13460:9;13443:35;;13452:6;13443:35;;;13471:6;13443:35;;;;;;:::i;:::-;;;;;;;;12913:573;;;:::o;42931:1565::-;42970:23;42996:24;43014:4;42996:9;:24::i;:::-;42970:50;;43031:25;43095:17;;43080:12;;43059:18;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;43031:81;;43155:1;43136:15;:20;:46;;;;43181:1;43160:17;:22;43136:46;43133:60;;;43185:7;;;;43133:60;43262:23;43347:1;43327:17;43306:18;;43288:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43262:86;;43359:26;43388:36;43408:15;43388;:19;;:36;;;;:::i;:::-;43359:65;;43445:25;43473:21;43445:49;;43507:36;43524:18;43507:16;:36::i;:::-;43565:18;43586:44;43612:17;43586:21;:25;;:44;;;;:::i;:::-;43565:65;;43651:23;43677:51;43710:17;43677:28;43692:12;;43677:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43651:77;;43739:21;43763:56;43801:17;43763:33;43778:17;;43763:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;43739:80;;43850:23;43907:13;43889:15;43876:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;43850:70;;43972:1;43951:18;:22;;;;43999:1;43984:12;:16;;;;44031:1;44011:17;:21;;;;44054:12;44079:17;;;;;;;;;;;44071:31;;44110:15;44071:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44053:77;;;44162:1;44144:15;:19;:42;;;;;44185:1;44167:15;:19;44144:42;44141:210;;;44202:46;44215:15;44232;44202:12;:46::i;:::-;44268:71;44283:18;44303:15;44320:18;;44268:71;;;;;;;;:::i;:::-;;;;;;;;44141:210;44434:14;;;;;;;;;;;44426:28;;44462:21;44426:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44413:75;;;;;42959:1537;;;;;;;;;;42931:1565;:::o;18072:471::-;18130:7;18380:1;18375;:6;18371:47;;18405:1;18398:8;;;;18371:47;18430:9;18446:1;18442;:5;;;;:::i;:::-;18430:17;;18475:1;18470;18466;:5;;;;:::i;:::-;:10;18458:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18534:1;18527:8;;;18072:471;;;;;:::o;19019:132::-;19077:7;19104:39;19108:1;19111;19104:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19097:46;;19019:132;;;;:::o;16323:125::-;;;;:::o;17182:136::-;17240:7;17267:43;17271:1;17274;17267:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17260:50;;17182:136;;;;:::o;41781:601::-;41909:21;41947:1;41933:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41909:40;;41978:4;41960;41965:1;41960:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42004:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41994:4;41999:1;41994:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42039:62;42056:4;42071:15;42089:11;42039:8;:62::i;:::-;42140:15;:66;;;42221:11;42247:1;42291:4;42318;42338:15;42140:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41836:546;41781:601;:::o;42406:517::-;42554:62;42571:4;42586:15;42604:11;42554:8;:62::i;:::-;42659:15;:31;;;42698:9;42731:4;42751:11;42777:1;42820;30926:6;42889:15;42659:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42406:517;;:::o;19647:278::-;19733:7;19765:1;19761;:5;19768:12;19753:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19792:9;19808:1;19804;:5;;;;:::i;:::-;19792:17;;19916:1;19909:8;;;19647:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:99::-;3843:6;3877:5;3871:12;3861:22;;3791:99;;;:::o;3896:169::-;3980:11;4014:6;4009:3;4002:19;4054:4;4049:3;4045:14;4030:29;;3896:169;;;;:::o;4071:246::-;4152:1;4162:113;4176:6;4173:1;4170:13;4162:113;;;4261:1;4256:3;4252:11;4246:18;4242:1;4237:3;4233:11;4226:39;4198:2;4195:1;4191:10;4186:15;;4162:113;;;4309:1;4300:6;4295:3;4291:16;4284:27;4133:184;4071:246;;;:::o;4323:377::-;4411:3;4439:39;4472:5;4439:39;:::i;:::-;4494:71;4558:6;4553:3;4494:71;:::i;:::-;4487:78;;4574:65;4632:6;4627:3;4620:4;4613:5;4609:16;4574:65;:::i;:::-;4664:29;4686:6;4664:29;:::i;:::-;4659:3;4655:39;4648:46;;4415:285;4323:377;;;;:::o;4706:313::-;4819:4;4857:2;4846:9;4842:18;4834:26;;4906:9;4900:4;4896:20;4892:1;4881:9;4877:17;4870:47;4934:78;5007:4;4998:6;4934:78;:::i;:::-;4926:86;;4706:313;;;;:::o;5025:77::-;5062:7;5091:5;5080:16;;5025:77;;;:::o;5108:118::-;5195:24;5213:5;5195:24;:::i;:::-;5190:3;5183:37;5108:118;;:::o;5232:222::-;5325:4;5363:2;5352:9;5348:18;5340:26;;5376:71;5444:1;5433:9;5429:17;5420:6;5376:71;:::i;:::-;5232:222;;;;:::o;5460:122::-;5533:24;5551:5;5533:24;:::i;:::-;5526:5;5523:35;5513:63;;5572:1;5569;5562:12;5513:63;5460:122;:::o;5588:139::-;5634:5;5672:6;5659:20;5650:29;;5688:33;5715:5;5688:33;:::i;:::-;5588:139;;;;:::o;5733:474::-;5801:6;5809;5858:2;5846:9;5837:7;5833:23;5829:32;5826:119;;;5864:79;;:::i;:::-;5826:119;5984:1;6009:53;6054:7;6045:6;6034:9;6030:22;6009:53;:::i;:::-;5999:63;;5955:117;6111:2;6137:53;6182:7;6173:6;6162:9;6158:22;6137:53;:::i;:::-;6127:63;;6082:118;5733:474;;;;;:::o;6213:90::-;6247:7;6290:5;6283:13;6276:21;6265:32;;6213:90;;;:::o;6309:109::-;6390:21;6405:5;6390:21;:::i;:::-;6385:3;6378:34;6309:109;;:::o;6424:210::-;6511:4;6549:2;6538:9;6534:18;6526:26;;6562:65;6624:1;6613:9;6609:17;6600:6;6562:65;:::i;:::-;6424:210;;;;:::o;6640:329::-;6699:6;6748:2;6736:9;6727:7;6723:23;6719:32;6716:119;;;6754:79;;:::i;:::-;6716:119;6874:1;6899:53;6944:7;6935:6;6924:9;6920:22;6899:53;:::i;:::-;6889:63;;6845:117;6640:329;;;;:::o;6975:::-;7034:6;7083:2;7071:9;7062:7;7058:23;7054:32;7051:119;;;7089:79;;:::i;:::-;7051:119;7209:1;7234:53;7279:7;7270:6;7259:9;7255:22;7234:53;:::i;:::-;7224:63;;7180:117;6975:329;;;;:::o;7310:60::-;7338:3;7359:5;7352:12;;7310:60;;;:::o;7376:142::-;7426:9;7459:53;7477:34;7486:24;7504:5;7486:24;:::i;:::-;7477:34;:::i;:::-;7459:53;:::i;:::-;7446:66;;7376:142;;;:::o;7524:126::-;7574:9;7607:37;7638:5;7607:37;:::i;:::-;7594:50;;7524:126;;;:::o;7656:153::-;7733:9;7766:37;7797:5;7766:37;:::i;:::-;7753:50;;7656:153;;;:::o;7815:185::-;7929:64;7987:5;7929:64;:::i;:::-;7924:3;7917:77;7815:185;;:::o;8006:276::-;8126:4;8164:2;8153:9;8149:18;8141:26;;8177:98;8272:1;8261:9;8257:17;8248:6;8177:98;:::i;:::-;8006:276;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:118::-;9000:24;9018:5;9000:24;:::i;:::-;8995:3;8988:37;8913:118;;:::o;9037:222::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:71;9249:1;9238:9;9234:17;9225:6;9181:71;:::i;:::-;9037:222;;;;:::o;9265:86::-;9300:7;9340:4;9333:5;9329:16;9318:27;;9265:86;;;:::o;9357:112::-;9440:22;9456:5;9440:22;:::i;:::-;9435:3;9428:35;9357:112;;:::o;9475:214::-;9564:4;9602:2;9591:9;9587:18;9579:26;;9615:67;9679:1;9668:9;9664:17;9655:6;9615:67;:::i;:::-;9475:214;;;;:::o;9695:116::-;9765:21;9780:5;9765:21;:::i;:::-;9758:5;9755:32;9745:60;;9801:1;9798;9791:12;9745:60;9695:116;:::o;9817:133::-;9860:5;9898:6;9885:20;9876:29;;9914:30;9938:5;9914:30;:::i;:::-;9817:133;;;;:::o;9956:468::-;10021:6;10029;10078:2;10066:9;10057:7;10053:23;10049:32;10046:119;;;10084:79;;:::i;:::-;10046:119;10204:1;10229:53;10274:7;10265:6;10254:9;10250:22;10229:53;:::i;:::-;10219:63;;10175:117;10331:2;10357:50;10399:7;10390:6;10379:9;10375:22;10357:50;:::i;:::-;10347:60;;10302:115;9956:468;;;;;:::o;10430:619::-;10507:6;10515;10523;10572:2;10560:9;10551:7;10547:23;10543:32;10540:119;;;10578:79;;:::i;:::-;10540:119;10698:1;10723:53;10768:7;10759:6;10748:9;10744:22;10723:53;:::i;:::-;10713:63;;10669:117;10825:2;10851:53;10896:7;10887:6;10876:9;10872:22;10851:53;:::i;:::-;10841:63;;10796:118;10953:2;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10924:118;10430:619;;;;;:::o;11055:323::-;11111:6;11160:2;11148:9;11139:7;11135:23;11131:32;11128:119;;;11166:79;;:::i;:::-;11128:119;11286:1;11311:50;11353:7;11344:6;11333:9;11329:22;11311:50;:::i;:::-;11301:60;;11257:114;11055:323;;;;:::o;11384:474::-;11452:6;11460;11509:2;11497:9;11488:7;11484:23;11480:32;11477:119;;;11515:79;;:::i;:::-;11477:119;11635:1;11660:53;11705:7;11696:6;11685:9;11681:22;11660:53;:::i;:::-;11650:63;;11606:117;11762:2;11788:53;11833:7;11824:6;11813:9;11809:22;11788:53;:::i;:::-;11778:63;;11733:118;11384:474;;;;;:::o;11864:182::-;12004:34;12000:1;11992:6;11988:14;11981:58;11864:182;:::o;12052:366::-;12194:3;12215:67;12279:2;12274:3;12215:67;:::i;:::-;12208:74;;12291:93;12380:3;12291:93;:::i;:::-;12409:2;12404:3;12400:12;12393:19;;12052:366;;;:::o;12424:419::-;12590:4;12628:2;12617:9;12613:18;12605:26;;12677:9;12671:4;12667:20;12663:1;12652:9;12648:17;12641:47;12705:131;12831:4;12705:131;:::i;:::-;12697:139;;12424:419;;;:::o;12849:180::-;12897:77;12894:1;12887:88;12994:4;12991:1;12984:15;13018:4;13015:1;13008:15;13035:180;13083:77;13080:1;13073:88;13180:4;13177:1;13170:15;13204:4;13201:1;13194:15;13221:167;13258:3;13281:22;13297:5;13281:22;:::i;:::-;13272:31;;13325:4;13318:5;13315:15;13312:41;;13333:18;;:::i;:::-;13312:41;13380:1;13373:5;13369:13;13362:20;;13221:167;;;:::o;13394:180::-;13442:77;13439:1;13432:88;13539:4;13536:1;13529:15;13563:4;13560:1;13553:15;13580:320;13624:6;13661:1;13655:4;13651:12;13641:22;;13708:1;13702:4;13698:12;13729:18;13719:81;;13785:4;13777:6;13773:17;13763:27;;13719:81;13847:2;13839:6;13836:14;13816:18;13813:38;13810:84;;13866:18;;:::i;:::-;13810:84;13631:269;13580:320;;;:::o;13906:410::-;13946:7;13969:20;13987:1;13969:20;:::i;:::-;13964:25;;14003:20;14021:1;14003:20;:::i;:::-;13998:25;;14058:1;14055;14051:9;14080:30;14098:11;14080:30;:::i;:::-;14069:41;;14259:1;14250:7;14246:15;14243:1;14240:22;14220:1;14213:9;14193:83;14170:139;;14289:18;;:::i;:::-;14170:139;13954:362;13906:410;;;;:::o;14322:180::-;14370:77;14367:1;14360:88;14467:4;14464:1;14457:15;14491:4;14488:1;14481:15;14508:185;14548:1;14565:20;14583:1;14565:20;:::i;:::-;14560:25;;14599:20;14617:1;14599:20;:::i;:::-;14594:25;;14638:1;14628:35;;14643:18;;:::i;:::-;14628:35;14685:1;14682;14678:9;14673:14;;14508:185;;;;:::o;14699:234::-;14839:34;14835:1;14827:6;14823:14;14816:58;14908:17;14903:2;14895:6;14891:15;14884:42;14699:234;:::o;14939:366::-;15081:3;15102:67;15166:2;15161:3;15102:67;:::i;:::-;15095:74;;15178:93;15267:3;15178:93;:::i;:::-;15296:2;15291:3;15287:12;15280:19;;14939:366;;;:::o;15311:419::-;15477:4;15515:2;15504:9;15500:18;15492:26;;15564:9;15558:4;15554:20;15550:1;15539:9;15535:17;15528:47;15592:131;15718:4;15592:131;:::i;:::-;15584:139;;15311:419;;;:::o;15736:191::-;15776:3;15795:20;15813:1;15795:20;:::i;:::-;15790:25;;15829:20;15847:1;15829:20;:::i;:::-;15824:25;;15872:1;15869;15865:9;15858:16;;15893:3;15890:1;15887:10;15884:36;;;15900:18;;:::i;:::-;15884:36;15736:191;;;;:::o;15933:179::-;16073:31;16069:1;16061:6;16057:14;16050:55;15933:179;:::o;16118:366::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16118:366;;;:::o;16490:419::-;16656:4;16694:2;16683:9;16679:18;16671:26;;16743:9;16737:4;16733:20;16729:1;16718:9;16714:17;16707:47;16771:131;16897:4;16771:131;:::i;:::-;16763:139;;16490:419;;;:::o;16915:168::-;17055:20;17051:1;17043:6;17039:14;17032:44;16915:168;:::o;17089:366::-;17231:3;17252:67;17316:2;17311:3;17252:67;:::i;:::-;17245:74;;17328:93;17417:3;17328:93;:::i;:::-;17446:2;17441:3;17437:12;17430:19;;17089:366;;;:::o;17461:419::-;17627:4;17665:2;17654:9;17650:18;17642:26;;17714:9;17708:4;17704:20;17700:1;17689:9;17685:17;17678:47;17742:131;17868:4;17742:131;:::i;:::-;17734:139;;17461:419;;;:::o;17886:244::-;18026:34;18022:1;18014:6;18010:14;18003:58;18095:27;18090:2;18082:6;18078:15;18071:52;17886:244;:::o;18136:366::-;18278:3;18299:67;18363:2;18358:3;18299:67;:::i;:::-;18292:74;;18375:93;18464:3;18375:93;:::i;:::-;18493:2;18488:3;18484:12;18477:19;;18136:366;;;:::o;18508:419::-;18674:4;18712:2;18701:9;18697:18;18689:26;;18761:9;18755:4;18751:20;18747:1;18736:9;18732:17;18725:47;18789:131;18915:4;18789:131;:::i;:::-;18781:139;;18508:419;;;:::o;18933:223::-;19073:34;19069:1;19061:6;19057:14;19050:58;19142:6;19137:2;19129:6;19125:15;19118:31;18933:223;:::o;19162:366::-;19304:3;19325:67;19389:2;19384:3;19325:67;:::i;:::-;19318:74;;19401:93;19490:3;19401:93;:::i;:::-;19519:2;19514:3;19510:12;19503:19;;19162:366;;;:::o;19534:419::-;19700:4;19738:2;19727:9;19723:18;19715:26;;19787:9;19781:4;19777:20;19773:1;19762:9;19758:17;19751:47;19815:131;19941:4;19815:131;:::i;:::-;19807:139;;19534:419;;;:::o;19959:240::-;20099:34;20095:1;20087:6;20083:14;20076:58;20168:23;20163:2;20155:6;20151:15;20144:48;19959:240;:::o;20205:366::-;20347:3;20368:67;20432:2;20427:3;20368:67;:::i;:::-;20361:74;;20444:93;20533:3;20444:93;:::i;:::-;20562:2;20557:3;20553:12;20546:19;;20205:366;;;:::o;20577:419::-;20743:4;20781:2;20770:9;20766:18;20758:26;;20830:9;20824:4;20820:20;20816:1;20805:9;20801:17;20794:47;20858:131;20984:4;20858:131;:::i;:::-;20850:139;;20577:419;;;:::o;21002:239::-;21142:34;21138:1;21130:6;21126:14;21119:58;21211:22;21206:2;21198:6;21194:15;21187:47;21002:239;:::o;21247:366::-;21389:3;21410:67;21474:2;21469:3;21410:67;:::i;:::-;21403:74;;21486:93;21575:3;21486:93;:::i;:::-;21604:2;21599:3;21595:12;21588:19;;21247:366;;;:::o;21619:419::-;21785:4;21823:2;21812:9;21808:18;21800:26;;21872:9;21866:4;21862:20;21858:1;21847:9;21843:17;21836:47;21900:131;22026:4;21900:131;:::i;:::-;21892:139;;21619:419;;;:::o;22044:231::-;22184:34;22180:1;22172:6;22168:14;22161:58;22253:14;22248:2;22240:6;22236:15;22229:39;22044:231;:::o;22281:366::-;22423:3;22444:67;22508:2;22503:3;22444:67;:::i;:::-;22437:74;;22520:93;22609:3;22520:93;:::i;:::-;22638:2;22633:3;22629:12;22622:19;;22281:366;;;:::o;22653:419::-;22819:4;22857:2;22846:9;22842:18;22834:26;;22906:9;22900:4;22896:20;22892:1;22881:9;22877:17;22870:47;22934:131;23060:4;22934:131;:::i;:::-;22926:139;;22653:419;;;:::o;23078:143::-;23135:5;23166:6;23160:13;23151:22;;23182:33;23209:5;23182:33;:::i;:::-;23078:143;;;;:::o;23227:351::-;23297:6;23346:2;23334:9;23325:7;23321:23;23317:32;23314:119;;;23352:79;;:::i;:::-;23314:119;23472:1;23497:64;23553:7;23544:6;23533:9;23529:22;23497:64;:::i;:::-;23487:74;;23443:128;23227:351;;;;:::o;23584:166::-;23724:18;23720:1;23712:6;23708:14;23701:42;23584:166;:::o;23756:366::-;23898:3;23919:67;23983:2;23978:3;23919:67;:::i;:::-;23912:74;;23995:93;24084:3;23995:93;:::i;:::-;24113:2;24108:3;24104:12;24097:19;;23756:366;;;:::o;24128:419::-;24294:4;24332:2;24321:9;24317:18;24309:26;;24381:9;24375:4;24371:20;24367:1;24356:9;24352:17;24345:47;24409:131;24535:4;24409:131;:::i;:::-;24401:139;;24128:419;;;:::o;24553:332::-;24674:4;24712:2;24701:9;24697:18;24689:26;;24725:71;24793:1;24782:9;24778:17;24769:6;24725:71;:::i;:::-;24806:72;24874:2;24863:9;24859:18;24850:6;24806:72;:::i;:::-;24553:332;;;;;:::o;24891:137::-;24945:5;24976:6;24970:13;24961:22;;24992:30;25016:5;24992:30;:::i;:::-;24891:137;;;;:::o;25034:345::-;25101:6;25150:2;25138:9;25129:7;25125:23;25121:32;25118:119;;;25156:79;;:::i;:::-;25118:119;25276:1;25301:61;25354:7;25345:6;25334:9;25330:22;25301:61;:::i;:::-;25291:71;;25247:125;25034:345;;;;:::o;25385:225::-;25525:34;25521:1;25513:6;25509:14;25502:58;25594:8;25589:2;25581:6;25577:15;25570:33;25385:225;:::o;25616:366::-;25758:3;25779:67;25843:2;25838:3;25779:67;:::i;:::-;25772:74;;25855:93;25944:3;25855:93;:::i;:::-;25973:2;25968:3;25964:12;25957:19;;25616:366;;;:::o;25988:419::-;26154:4;26192:2;26181:9;26177:18;26169:26;;26241:9;26235:4;26231:20;26227:1;26216:9;26212:17;26205:47;26269:131;26395:4;26269:131;:::i;:::-;26261:139;;25988:419;;;:::o;26413:181::-;26553:33;26549:1;26541:6;26537:14;26530:57;26413:181;:::o;26600:366::-;26742:3;26763:67;26827:2;26822:3;26763:67;:::i;:::-;26756:74;;26839:93;26928:3;26839:93;:::i;:::-;26957:2;26952:3;26948:12;26941:19;;26600:366;;;:::o;26972:419::-;27138:4;27176:2;27165:9;27161:18;27153:26;;27225:9;27219:4;27215:20;27211:1;27200:9;27196:17;27189:47;27253:131;27379:4;27253:131;:::i;:::-;27245:139;;26972:419;;;:::o;27397:143::-;27454:5;27485:6;27479:13;27470:22;;27501:33;27528:5;27501:33;:::i;:::-;27397:143;;;;:::o;27546:351::-;27616:6;27665:2;27653:9;27644:7;27640:23;27636:32;27633:119;;;27671:79;;:::i;:::-;27633:119;27791:1;27816:64;27872:7;27863:6;27852:9;27848:22;27816:64;:::i;:::-;27806:74;;27762:128;27546:351;;;;:::o;27903:85::-;27948:7;27977:5;27966:16;;27903:85;;;:::o;27994:158::-;28052:9;28085:61;28103:42;28112:32;28138:5;28112:32;:::i;:::-;28103:42;:::i;:::-;28085:61;:::i;:::-;28072:74;;27994:158;;;:::o;28158:147::-;28253:45;28292:5;28253:45;:::i;:::-;28248:3;28241:58;28158:147;;:::o;28311:114::-;28378:6;28412:5;28406:12;28396:22;;28311:114;;;:::o;28431:184::-;28530:11;28564:6;28559:3;28552:19;28604:4;28599:3;28595:14;28580:29;;28431:184;;;;:::o;28621:132::-;28688:4;28711:3;28703:11;;28741:4;28736:3;28732:14;28724:22;;28621:132;;;:::o;28759:108::-;28836:24;28854:5;28836:24;:::i;:::-;28831:3;28824:37;28759:108;;:::o;28873:179::-;28942:10;28963:46;29005:3;28997:6;28963:46;:::i;:::-;29041:4;29036:3;29032:14;29018:28;;28873:179;;;;:::o;29058:113::-;29128:4;29160;29155:3;29151:14;29143:22;;29058:113;;;:::o;29207:732::-;29326:3;29355:54;29403:5;29355:54;:::i;:::-;29425:86;29504:6;29499:3;29425:86;:::i;:::-;29418:93;;29535:56;29585:5;29535:56;:::i;:::-;29614:7;29645:1;29630:284;29655:6;29652:1;29649:13;29630:284;;;29731:6;29725:13;29758:63;29817:3;29802:13;29758:63;:::i;:::-;29751:70;;29844:60;29897:6;29844:60;:::i;:::-;29834:70;;29690:224;29677:1;29674;29670:9;29665:14;;29630:284;;;29634:14;29930:3;29923:10;;29331:608;;;29207:732;;;;:::o;29945:720::-;30180:4;30218:3;30207:9;30203:19;30195:27;;30232:79;30308:1;30297:9;30293:17;30284:6;30232:79;:::i;:::-;30358:9;30352:4;30348:20;30343:2;30332:9;30328:18;30321:48;30386:108;30489:4;30480:6;30386:108;:::i;:::-;30378:116;;30504:72;30572:2;30561:9;30557:18;30548:6;30504:72;:::i;:::-;30586;30654:2;30643:9;30639:18;30630:6;30586:72;:::i;:::-;29945:720;;;;;;;:::o;30671:177::-;30811:29;30807:1;30799:6;30795:14;30788:53;30671:177;:::o;30854:366::-;30996:3;31017:67;31081:2;31076:3;31017:67;:::i;:::-;31010:74;;31093:93;31182:3;31093:93;:::i;:::-;31211:2;31206:3;31202:12;31195:19;;30854:366;;;:::o;31226:419::-;31392:4;31430:2;31419:9;31415:18;31407:26;;31479:9;31473:4;31469:20;31465:1;31454:9;31450:17;31443:47;31507:131;31633:4;31507:131;:::i;:::-;31499:139;;31226:419;;;:::o;31651:223::-;31791:34;31787:1;31779:6;31775:14;31768:58;31860:6;31855:2;31847:6;31843:15;31836:31;31651:223;:::o;31880:366::-;32022:3;32043:67;32107:2;32102:3;32043:67;:::i;:::-;32036:74;;32119:93;32208:3;32119:93;:::i;:::-;32237:2;32232:3;32228:12;32221:19;;31880:366;;;:::o;32252:419::-;32418:4;32456:2;32445:9;32441:18;32433:26;;32505:9;32499:4;32495:20;32491:1;32480:9;32476:17;32469:47;32533:131;32659:4;32533:131;:::i;:::-;32525:139;;32252:419;;;:::o;32677:221::-;32817:34;32813:1;32805:6;32801:14;32794:58;32886:4;32881:2;32873:6;32869:15;32862:29;32677:221;:::o;32904:366::-;33046:3;33067:67;33131:2;33126:3;33067:67;:::i;:::-;33060:74;;33143:93;33232:3;33143:93;:::i;:::-;33261:2;33256:3;33252:12;33245:19;;32904:366;;;:::o;33276:419::-;33442:4;33480:2;33469:9;33465:18;33457:26;;33529:9;33523:4;33519:20;33515:1;33504:9;33500:17;33493:47;33557:131;33683:4;33557:131;:::i;:::-;33549:139;;33276:419;;;:::o;33701:158::-;33841:10;33837:1;33829:6;33825:14;33818:34;33701:158;:::o;33865:365::-;34007:3;34028:66;34092:1;34087:3;34028:66;:::i;:::-;34021:73;;34103:93;34192:3;34103:93;:::i;:::-;34221:2;34216:3;34212:12;34205:19;;33865:365;;;:::o;34236:419::-;34402:4;34440:2;34429:9;34425:18;34417:26;;34489:9;34483:4;34479:20;34475:1;34464:9;34460:17;34453:47;34517:131;34643:4;34517:131;:::i;:::-;34509:139;;34236:419;;;:::o;34661:224::-;34801:34;34797:1;34789:6;34785:14;34778:58;34870:7;34865:2;34857:6;34853:15;34846:32;34661:224;:::o;34891:366::-;35033:3;35054:67;35118:2;35113:3;35054:67;:::i;:::-;35047:74;;35130:93;35219:3;35130:93;:::i;:::-;35248:2;35243:3;35239:12;35232:19;;34891:366;;;:::o;35263:419::-;35429:4;35467:2;35456:9;35452:18;35444:26;;35516:9;35510:4;35506:20;35502:1;35491:9;35487:17;35480:47;35544:131;35670:4;35544:131;:::i;:::-;35536:139;;35263:419;;;:::o;35688:222::-;35828:34;35824:1;35816:6;35812:14;35805:58;35897:5;35892:2;35884:6;35880:15;35873:30;35688:222;:::o;35916:366::-;36058:3;36079:67;36143:2;36138:3;36079:67;:::i;:::-;36072:74;;36155:93;36244:3;36155:93;:::i;:::-;36273:2;36268:3;36264:12;36257:19;;35916:366;;;:::o;36288:419::-;36454:4;36492:2;36481:9;36477:18;36469:26;;36541:9;36535:4;36531:20;36527:1;36516:9;36512:17;36505:47;36569:131;36695:4;36569:131;:::i;:::-;36561:139;;36288:419;;;:::o;36713:240::-;36853:34;36849:1;36841:6;36837:14;36830:58;36922:23;36917:2;36909:6;36905:15;36898:48;36713:240;:::o;36959:366::-;37101:3;37122:67;37186:2;37181:3;37122:67;:::i;:::-;37115:74;;37198:93;37287:3;37198:93;:::i;:::-;37316:2;37311:3;37307:12;37300:19;;36959:366;;;:::o;37331:419::-;37497:4;37535:2;37524:9;37520:18;37512:26;;37584:9;37578:4;37574:20;37570:1;37559:9;37555:17;37548:47;37612:131;37738:4;37612:131;:::i;:::-;37604:139;;37331:419;;;:::o;37756:169::-;37896:21;37892:1;37884:6;37880:14;37873:45;37756:169;:::o;37931:366::-;38073:3;38094:67;38158:2;38153:3;38094:67;:::i;:::-;38087:74;;38170:93;38259:3;38170:93;:::i;:::-;38288:2;38283:3;38279:12;38272:19;;37931:366;;;:::o;38303:419::-;38469:4;38507:2;38496:9;38492:18;38484:26;;38556:9;38550:4;38546:20;38542:1;38531:9;38527:17;38520:47;38584:131;38710:4;38584:131;:::i;:::-;38576:139;;38303:419;;;:::o;38728:241::-;38868:34;38864:1;38856:6;38852:14;38845:58;38937:24;38932:2;38924:6;38920:15;38913:49;38728:241;:::o;38975:366::-;39117:3;39138:67;39202:2;39197:3;39138:67;:::i;:::-;39131:74;;39214:93;39303:3;39214:93;:::i;:::-;39332:2;39327:3;39323:12;39316:19;;38975:366;;;:::o;39347:419::-;39513:4;39551:2;39540:9;39536:18;39528:26;;39600:9;39594:4;39590:20;39586:1;39575:9;39571:17;39564:47;39628:131;39754:4;39628:131;:::i;:::-;39620:139;;39347:419;;;:::o;39772:194::-;39812:4;39832:20;39850:1;39832:20;:::i;:::-;39827:25;;39866:20;39884:1;39866:20;:::i;:::-;39861:25;;39910:1;39907;39903:9;39895:17;;39934:1;39928:4;39925:11;39922:37;;;39939:18;;:::i;:::-;39922:37;39772:194;;;;:::o;39972:147::-;40073:11;40110:3;40095:18;;39972:147;;;;:::o;40125:114::-;;:::o;40245:398::-;40404:3;40425:83;40506:1;40501:3;40425:83;:::i;:::-;40418:90;;40517:93;40606:3;40517:93;:::i;:::-;40635:1;40630:3;40626:11;40619:18;;40245:398;;;:::o;40649:379::-;40833:3;40855:147;40998:3;40855:147;:::i;:::-;40848:154;;41019:3;41012:10;;40649:379;;;:::o;41034:442::-;41183:4;41221:2;41210:9;41206:18;41198:26;;41234:71;41302:1;41291:9;41287:17;41278:6;41234:71;:::i;:::-;41315:72;41383:2;41372:9;41368:18;41359:6;41315:72;:::i;:::-;41397;41465:2;41454:9;41450:18;41441:6;41397:72;:::i;:::-;41034:442;;;;;;:::o;41482:220::-;41622:34;41618:1;41610:6;41606:14;41599:58;41691:3;41686:2;41678:6;41674:15;41667:28;41482:220;:::o;41708:366::-;41850:3;41871:67;41935:2;41930:3;41871:67;:::i;:::-;41864:74;;41947:93;42036:3;41947:93;:::i;:::-;42065:2;42060:3;42056:12;42049:19;;41708:366;;;:::o;42080:419::-;42246:4;42284:2;42273:9;42269:18;42261:26;;42333:9;42327:4;42323:20;42319:1;42308:9;42304:17;42297:47;42361:131;42487:4;42361:131;:::i;:::-;42353:139;;42080:419;;;:::o;42505:831::-;42768:4;42806:3;42795:9;42791:19;42783:27;;42820:71;42888:1;42877:9;42873:17;42864:6;42820:71;:::i;:::-;42901:80;42977:2;42966:9;42962:18;42953:6;42901:80;:::i;:::-;43028:9;43022:4;43018:20;43013:2;43002:9;42998:18;42991:48;43056:108;43159:4;43150:6;43056:108;:::i;:::-;43048:116;;43174:72;43242:2;43231:9;43227:18;43218:6;43174:72;:::i;:::-;43256:73;43324:3;43313:9;43309:19;43300:6;43256:73;:::i;:::-;42505:831;;;;;;;;:::o;43342:807::-;43591:4;43629:3;43618:9;43614:19;43606:27;;43643:71;43711:1;43700:9;43696:17;43687:6;43643:71;:::i;:::-;43724:72;43792:2;43781:9;43777:18;43768:6;43724:72;:::i;:::-;43806:80;43882:2;43871:9;43867:18;43858:6;43806:80;:::i;:::-;43896;43972:2;43961:9;43957:18;43948:6;43896:80;:::i;:::-;43986:73;44054:3;44043:9;44039:19;44030:6;43986:73;:::i;:::-;44069;44137:3;44126:9;44122:19;44113:6;44069:73;:::i;:::-;43342:807;;;;;;;;;:::o;44155:663::-;44243:6;44251;44259;44308:2;44296:9;44287:7;44283:23;44279:32;44276:119;;;44314:79;;:::i;:::-;44276:119;44434:1;44459:64;44515:7;44506:6;44495:9;44491:22;44459:64;:::i;:::-;44449:74;;44405:128;44572:2;44598:64;44654:7;44645:6;44634:9;44630:22;44598:64;:::i;:::-;44588:74;;44543:129;44711:2;44737:64;44793:7;44784:6;44773:9;44769:22;44737:64;:::i;:::-;44727:74;;44682:129;44155:663;;;;;:::o
Swarm Source
ipfs://07077aeced9b37996db7cbf48526a7fdc24bfa73fd92bbb344037b27ed50038c
Loading...
Loading
Loading...
Loading
OVERVIEW
At NextGen Mobility, we are building the future of transportation by combining the power of blockchain, AI, and IoT. Our mission is to create a smarter, safer, and more transparent automotive ecosystem that benefits everyone. With cutting-edge technology, we are transforming how the world moves.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.