Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 786 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Update Min Amoun... | 41205919 | 2 days ago | IN | 0 ETH | 0.00000012 | ||||
| Transfer | 40942002 | 8 days ago | IN | 0 ETH | 0.00000107 | ||||
| Approve | 40857809 | 10 days ago | IN | 0 ETH | 0.00000026 | ||||
| Approve | 40806840 | 11 days ago | IN | 0 ETH | 0.00000039 | ||||
| Transfer | 40806565 | 11 days ago | IN | 0 ETH | 0.00000271 | ||||
| Approve | 40806478 | 11 days ago | IN | 0 ETH | 0.00000036 | ||||
| Approve | 40787349 | 12 days ago | IN | 0 ETH | 0.00000029 | ||||
| Approve | 40732928 | 13 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 40732202 | 13 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 40692968 | 14 days ago | IN | 0 ETH | 0.00000012 | ||||
| Approve | 40692922 | 14 days ago | IN | 0 ETH | 0.00000012 | ||||
| Approve | 40692904 | 14 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40692888 | 14 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40605616 | 16 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 40604233 | 16 days ago | IN | 0 ETH | 0.0000001 | ||||
| Approve | 40601781 | 16 days ago | IN | 0 ETH | 0.00000019 | ||||
| Approve | 40597514 | 16 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40583719 | 16 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 40575353 | 16 days ago | IN | 0 ETH | 0.00000015 | ||||
| Burn | 40208108 | 25 days ago | IN | 0 ETH | 0.00000025 | ||||
| Transfer | 40208006 | 25 days ago | IN | 0 ETH | 0.00000038 | ||||
| Approve | 40204000 | 25 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40169402 | 26 days ago | IN | 0 ETH | 0.00000007 | ||||
| Approve | 40108556 | 27 days ago | IN | 0 ETH | 0.00000004 | ||||
| Approve | 40108527 | 27 days ago | IN | 0 ETH | 0.00000003 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 41206004 | 2 days ago | 0.00519812 ETH | ||||
| 41206004 | 2 days ago | 0.00519812 ETH | ||||
| 40692672 | 14 days ago | 0.00575973 ETH | ||||
| 40692672 | 14 days ago | 0.00575973 ETH | ||||
| 39675692 | 37 days ago | 0.00534379 ETH | ||||
| 39675692 | 37 days ago | 0.00534379 ETH | ||||
| 39675648 | 37 days ago | 0.00534379 ETH | ||||
| 39675648 | 37 days ago | 0.00534379 ETH | ||||
| 39675648 | 37 days ago | 0.00534379 ETH | ||||
| 39675648 | 37 days ago | 0.00534379 ETH | ||||
| 38291160 | 69 days ago | 0.00576447 ETH | ||||
| 38291160 | 69 days ago | 0.00576447 ETH | ||||
| 37875981 | 79 days ago | 0.00652444 ETH | ||||
| 37875981 | 79 days ago | 0.00652444 ETH | ||||
| 37707278 | 83 days ago | 0.00265917 ETH | ||||
| 37707278 | 83 days ago | 0.00265917 ETH | ||||
| 37471931 | 88 days ago | 0.02026653 ETH | ||||
| 37471931 | 88 days ago | 0.02026653 ETH | ||||
| 37471931 | 88 days ago | 0.0050692 ETH | ||||
| 37471931 | 88 days ago | 0.0050692 ETH | ||||
| 37471883 | 88 days ago | 0.0050692 ETH | ||||
| 37471883 | 88 days ago | 0.0050692 ETH | ||||
| 37471871 | 88 days ago | 0.0050692 ETH | ||||
| 37471871 | 88 days ago | 0.0050692 ETH | ||||
| 37471847 | 88 days ago | 0.0050692 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ALTITUDE
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2023-10-31
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
pragma solidity 0.8.18;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}
contract ALTITUDE is IERC20, Ownable {
using SafeERC20 for IERC20;
uint8 private _decimals;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal;
uint256 private _rTotal;
uint256 private _tFeeTotal;
string private _name;
string private _symbol;
uint256 private _rewardFee;
uint256 private _previousRewardFee;
uint256 private _liquidityFee;
uint256 private _previousLiquidityFee;
uint256 private _marketingFee;
uint256 private _previousMarketingFee;
uint256 private _burnFee;
uint256 private _previousBurnFee;
bool private inSwapAndLiquify;
uint16 public sellRewardFee;
uint16 public buyRewardFee;
uint16 public sellLiquidityFee;
uint16 public buyLiquidityFee;
uint16 public sellMarketingFee;
uint16 public buyMarketingFee;
uint16 public sellBurnFee;
uint16 public buyBurnFee;
address public marketingWallet;
bool public isMarketingFeeETH;
uint256 public minAmountToTakeFee;
uint256 public maxWallet;
uint256 public maxTransactionAmount;
IUniswapV2Router02 public mainRouter;
address public mainPair;
mapping(address => bool) public isExcludedFromFee;
mapping(address => bool) public isExcludedFromMaxTransactionAmount;
mapping(address => bool) public automatedMarketMakerPairs;
uint256 private _liquidityFeeTokens;
uint256 private _marketingFeeTokens;
event UpdateLiquidityFee(
uint16 newSellLiquidityFee,
uint16 newBuyLiquidityFee,
uint16 oldSellLiquidityFee,
uint16 oldBuyLiquidityFee
);
event UpdateMarketingFee(
uint16 newSellMarketingFee,
uint16 newBuyMarketingFee,
uint16 oldSellMarketingFee,
uint16 oldBuyMarketingFee
);
event UpdateBurnFee(
uint16 newSellBurnFee,
uint16 newBuyBurnFee,
uint16 oldSellBurnFee,
uint16 oldBuyBurnFee
);
event UpdateRewardFee(
uint16 newSellRewardFee,
uint16 newBuyRewardFee,
uint16 oldSellRewardFee,
uint16 oldBuyRewardFee
);
event UpdateMarketingWallet(
address indexed newMarketingWallet,
bool newIsMarketingFeeETH,
address indexed oldMarketingWallet,
bool oldIsMarketingFeeETH
);
event UpdateMinAmountToTakeFee(uint256 newMinAmountToTakeFee, uint256 oldMinAmountToTakeFee);
event SetAutomatedMarketMakerPair(address indexed pair, bool value);
event ExcludedFromFee(address indexed account, bool isEx);
event SwapAndLiquify(uint256 tokensForLiquidity, uint256 ETHForLiquidity);
event MarketingFeeTaken(
uint256 marketingFeeTokens,
uint256 marketingFeeETHSwapped
);
event ExcludedFromMaxTransactionAmount(address indexed account, bool isExcluded);
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldRouter);
event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet);
event UpdateMaxTransactionAmount(uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount);
constructor(
string memory __name,
string memory __symbol,
uint8 __decimals,
uint256 _totalSupply,
uint256 _maxWallet,
uint256 _maxTransactionAmount,
address[2] memory _accounts,
bool _isMarketingFeeETH,
uint16[8] memory _fees
) {
_decimals = __decimals;
_name = __name;
_symbol = __symbol;
_tTotal = _totalSupply ;
_rTotal = (MAX - (MAX % _tTotal));
_rOwned[_msgSender()] = _rTotal;
_tOwned[_msgSender()] = _tTotal;
require(_accounts[0] != address(0), "marketing wallet can not be 0");
require(_accounts[1] != address(0), "Router address can not be 0");
require(_fees[0]+(_fees[2])+(_fees[4]) + _fees[6] <= 300, "sell total fee <= 30%");
require(_fees[1]+(_fees[3])+(_fees[5]) + _fees[7] <= 300, "buy total fee <= 30%");
require(_fees[0] < 150, "each fee < 15%");
require(_fees[1] < 150, "each fee < 15%");
require(_fees[2] < 150, "each fee < 15%");
require(_fees[3] < 150, "each fee < 15%");
require(_fees[4] < 150, "each fee < 15%");
require(_fees[5] < 150, "each fee < 15%");
require(_fees[6] < 150, "each fee < 15%");
require(_fees[7] < 150, "each fee < 15%");
marketingWallet = _accounts[0];
isMarketingFeeETH = _isMarketingFeeETH;
emit UpdateMarketingWallet(
marketingWallet,
isMarketingFeeETH,
address(0),
false
);
mainRouter = IUniswapV2Router02(_accounts[1]);
_approve(address(this), address(mainRouter), MAX);
emit UpdateUniswapV2Router(address(mainRouter), address(0));
mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
address(this),
mainRouter.WETH()
);
sellLiquidityFee = _fees[0];
buyLiquidityFee = _fees[1];
emit UpdateLiquidityFee(
sellLiquidityFee,
buyLiquidityFee,
0,
0
);
sellMarketingFee = _fees[2];
buyMarketingFee = _fees[3];
emit UpdateMarketingFee(
sellMarketingFee,
buyMarketingFee,
0,
0
);
sellBurnFee = _fees[6];
buyBurnFee = _fees[7];
emit UpdateBurnFee(
sellBurnFee,
buyBurnFee,
0,
0
);
sellRewardFee = _fees[4];
buyRewardFee = _fees[5];
emit UpdateRewardFee(
sellRewardFee,
buyRewardFee,
0,
0
);
minAmountToTakeFee = _totalSupply/(10000);
emit UpdateMinAmountToTakeFee(minAmountToTakeFee, 0);
require(_maxTransactionAmount>=_totalSupply / 10000, "maxTransactionAmount >= total supply / 10000");
require(_maxWallet>=_totalSupply / 10000, "maxWallet >= total supply / 10000");
maxWallet=_maxWallet;
emit UpdateMaxWallet(maxWallet, 0);
maxTransactionAmount=_maxTransactionAmount;
emit UpdateMaxTransactionAmount(maxTransactionAmount, 0);
_isExcluded[address(0xdead)] = true;
_excluded.push(address(0xdead));
_isExcluded[address(this)] = true;
_excluded.push(address(this));
isExcludedFromFee[address(this)] = true;
isExcludedFromFee[marketingWallet] = true;
isExcludedFromFee[_msgSender()] = true;
isExcludedFromFee[address(0xdead)] = true;
isExcludedFromMaxTransactionAmount[address(0xdead)]=true;
isExcludedFromMaxTransactionAmount[address(this)]=true;
isExcludedFromMaxTransactionAmount[marketingWallet]=true;
isExcludedFromMaxTransactionAmount[_msgSender()]=true;
_setAutomatedMarketMakerPair(mainPair, true);
emit Transfer(address(0), _msgSender(), _totalSupply);
}
function updateUniswapV2Router(address newAddress) public onlyOwner {
require(
newAddress != address(mainRouter),
"The router already has that address"
);
emit UpdateUniswapV2Router(newAddress, address(mainRouter));
mainRouter = IUniswapV2Router02(newAddress);
_approve(address(this), address(mainRouter), MAX);
address _mainPair = IUniswapV2Factory(mainRouter.factory())
.createPair(address(this), mainRouter.WETH());
mainPair = _mainPair;
_setAutomatedMarketMakerPair(mainPair, true);
}
function _tokenTransfer(
address sender,
address recipient,
uint256 amount
) private {
(
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tMarketing,
uint256 tBurn
) = _getTValues(amount);
uint256 currentRate = _getRate();
{
//burn
_tTotal = _tTotal - tBurn;
_rTotal = _rTotal - tBurn*currentRate;
emit Transfer(sender, address(0), tBurn);
}
{
//marketing & liquidity collected in the token contract
_liquidityFeeTokens = _liquidityFeeTokens+tLiquidity;
_marketingFeeTokens = _marketingFeeTokens+tMarketing;
uint256 tTotalFee = tLiquidity+tMarketing;
_rOwned[address(this)] = _rOwned[address(this)]+tTotalFee * currentRate;
if (_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)]+tTotalFee;
}
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_tOwned[sender] = _tOwned[sender]-amount;
_rOwned[sender] = _rOwned[sender]-amount*currentRate;
_rOwned[recipient] = _rOwned[recipient]+tTransferAmount*currentRate;
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_rOwned[sender] = _rOwned[sender]-amount*currentRate;
_tOwned[recipient] = _tOwned[recipient]+tTransferAmount;
_rOwned[recipient] = _rOwned[recipient]+tTransferAmount*currentRate;
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_tOwned[sender] = _tOwned[sender]-amount;
_rOwned[sender] = _rOwned[sender]-amount*currentRate;
_tOwned[recipient] = _tOwned[recipient]+tTransferAmount;
_rOwned[recipient] = _rOwned[recipient]+tTransferAmount*currentRate;
} else {
_rOwned[sender] = _rOwned[sender]-amount*currentRate;
_rOwned[recipient] = _rOwned[recipient]+tTransferAmount*currentRate;
}
_reflectFee(tFee*currentRate, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function updateMaxWallet(uint256 _maxWallet) external onlyOwner {
require(_maxWallet>=_tTotal / 10000, "maxWallet >= total supply / 10000");
emit UpdateMaxWallet(_maxWallet, maxWallet);
maxWallet = _maxWallet;
}
function updateMaxTransactionAmount(uint256 _maxTransactionAmount)
external
onlyOwner
{
require(_maxTransactionAmount>=_tTotal / 10000, "maxTransactionAmount >= total supply / 10000");
emit UpdateMaxTransactionAmount(_maxTransactionAmount, maxTransactionAmount);
maxTransactionAmount = _maxTransactionAmount;
}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal-(rFee);
_tFeeTotal = _tFeeTotal+(tFee);
}
function _getTValues(uint256 tAmount)
private
view
returns (
uint256,
uint256,
uint256,
uint256,
uint256
)
{
uint256 tFee = calculateRewardFee(tAmount);
uint256 tLiquidity = calculateLiquidityFee(tAmount);
uint256 tMarketing = calculateMarketingFee(tAmount);
uint256 tBurn = calculateBurnFee(tAmount);
uint256 tTransferAmount = calculateTransferAmount(tAmount);
return (tTransferAmount, tFee, tLiquidity, tMarketing, tBurn);
}
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply/(tSupply);
}
function _getCurrentSupply() private view returns (uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (
_rOwned[_excluded[i]] > rSupply ||
_tOwned[_excluded[i]] > tSupply
) return (_rTotal, _tTotal);
rSupply = rSupply-(_rOwned[_excluded[i]]);
tSupply = tSupply-(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal/(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function removeAllFee() private {
_previousRewardFee = _rewardFee;
_previousLiquidityFee = _liquidityFee;
_previousMarketingFee = _marketingFee;
_previousBurnFee = _burnFee;
_burnFee = 0;
_marketingFee = 0;
_rewardFee = 0;
_liquidityFee = 0;
}
function restoreAllFee() private {
_burnFee = _previousBurnFee;
_rewardFee = _previousRewardFee;
_liquidityFee = _previousLiquidityFee;
_marketingFee = _previousMarketingFee;
}
function calculateRewardFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount*(_rewardFee)/(10**3);
}
function calculateLiquidityFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount*(_liquidityFee)/(10**3);
}
function calculateMarketingFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount*(_marketingFee)/(10**3);
}
function calculateBurnFee(uint256 _amount)
private
view
returns (uint256)
{
return _amount*(_burnFee)/(10**3);
}
function calculateTransferAmount(uint256 _amount)
private
view
returns (uint256)
{
return _amount*(1000 - _burnFee - _rewardFee - _liquidityFee - _marketingFee)/(10**3);
}
/////////////////////////////////////////////////////////////////////////////////
function name() external view returns (string memory) {
return _name;
}
function symbol() external view returns (string memory) {
return _symbol;
}
function decimals() external view returns (uint8) {
return _decimals;
}
function totalSupply() external view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount)
external
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
external
view
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()]-amount
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
external
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender]+(addedValue)
);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
external
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender]-(
subtractedValue
)
);
return true;
}
function isExcludedFromReward(address account)
external
view
returns (bool)
{
return _isExcluded[account];
}
function totalFees() external view returns (uint256) {
return _tFeeTotal;
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
external
view
returns (uint256)
{
require(tAmount <= _tTotal, "Amount must be less than supply");
uint256 currentRate = _getRate();
if (!deductTransferFee) {
uint256 rAmount = tAmount*currentRate;
return rAmount;
} else {
(
uint256 tTransferAmount,
,
,
,
) = _getTValues(tAmount);
uint256 rTransferAmount = tTransferAmount * currentRate;
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount)
public
view
returns (uint256)
{
require(
rAmount <= _rTotal,
"Amount must be less than total reflections"
);
uint256 currentRate = _getRate();
return rAmount/(currentRate);
}
function excludeFromReward(address account) public onlyOwner {
require(!_isExcluded[account], "Account is already excluded");
require(
_excluded.length + 1 <= 50,
"Cannot exclude more than 50 accounts. Include a previously excluded address."
);
if (_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) public onlyOwner {
require(_isExcluded[account], "Account is not excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
uint256 prev_rOwned=_rOwned[account];
_rOwned[account]=_tOwned[account]*_getRate();
_rTotal=_rTotal-prev_rOwned+_rOwned[account];
_isExcluded[account] = false;
_excluded[i] = _excluded[_excluded.length - 1];
_excluded.pop();
break;
}
}
}
function _approve(
address owner,
address spender,
uint256 amount
) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
function updateLiquidityFee(
uint16 _sellLiquidityFee,
uint16 _buyLiquidityFee
) external onlyOwner {
require(
_sellLiquidityFee+(sellMarketingFee)+(sellRewardFee) + sellBurnFee <= 300,
"sell total fee <= 30%"
);
require(
_buyLiquidityFee+(buyMarketingFee)+(buyRewardFee) + buyBurnFee <= 300,
"buy total fee <= 30%"
);
require(_sellLiquidityFee<= 150, "sell fee <= 15%");
require(_buyLiquidityFee<= 150, "buy fee <= 15%");
emit UpdateLiquidityFee(
_sellLiquidityFee,
_buyLiquidityFee,
sellLiquidityFee,
buyLiquidityFee
);
sellLiquidityFee = _sellLiquidityFee;
buyLiquidityFee = _buyLiquidityFee;
}
function updateMarketingFee(
uint16 _sellMarketingFee,
uint16 _buyMarketingFee
) external onlyOwner {
require(
_sellMarketingFee+(sellLiquidityFee)+(sellRewardFee) + sellBurnFee <= 300,
"sell total fee <= 30%"
);
require(
_buyMarketingFee+(buyLiquidityFee)+(buyRewardFee) + buyBurnFee <= 300,
"buy total fee <= 30%"
);
require(_sellMarketingFee<= 150, "sell fee <= 15%");
require(_buyMarketingFee<= 150, "buy fee <= 15%");
emit UpdateMarketingFee(
_sellMarketingFee,
_buyMarketingFee,
sellMarketingFee,
buyMarketingFee
);
sellMarketingFee = _sellMarketingFee;
buyMarketingFee = _buyMarketingFee;
}
function updateRewardFee(
uint16 _sellRewardFee,
uint16 _buyRewardFee
) external onlyOwner {
require(
_sellRewardFee+(sellLiquidityFee)+(sellMarketingFee) + sellBurnFee <= 300,
"sell total fee <= 30%"
);
require(
_buyRewardFee+(buyLiquidityFee)+(buyMarketingFee) + buyBurnFee <= 300,
"buy total fee <= 30%"
);
require(_sellRewardFee<= 150, "sell fee <= 15%");
require(_buyRewardFee<= 150, "buy fee <= 15%");
emit UpdateRewardFee(
_sellRewardFee,
_buyRewardFee,
sellRewardFee,
buyRewardFee
);
sellRewardFee = _sellRewardFee;
buyRewardFee = _buyRewardFee;
}
function updateBurnFee(
uint16 _sellBurnFee,
uint16 _buyBurnFee
) external onlyOwner {
require(
_sellBurnFee+(sellLiquidityFee)+(sellMarketingFee) + sellRewardFee <= 300,
"sell total fee <= 30%"
);
require(
_buyBurnFee+(buyLiquidityFee)+(buyMarketingFee) + buyRewardFee <= 300,
"buy total fee <= 30%"
);
require(_sellBurnFee<= 150, "sell fee <= 15%");
require(_buyBurnFee<= 150, "buy fee <= 15%");
emit UpdateBurnFee(
_sellBurnFee,
_buyBurnFee,
sellBurnFee,
buyBurnFee
);
sellBurnFee = _sellBurnFee;
buyBurnFee = _buyBurnFee;
}
function updateMarketingWallet(
address _marketingWallet,
bool _isMarketingFeeETH
) external onlyOwner {
require(_marketingWallet != address(0), "marketing wallet can't be 0");
emit UpdateMarketingWallet(_marketingWallet, _isMarketingFeeETH,
marketingWallet, isMarketingFeeETH);
marketingWallet = _marketingWallet;
isMarketingFeeETH = _isMarketingFeeETH;
isExcludedFromFee[_marketingWallet] = true;
isExcludedFromMaxTransactionAmount[_marketingWallet]=true;
}
function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee)
external
onlyOwner
{
require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0");
emit UpdateMinAmountToTakeFee(_minAmountToTakeFee, minAmountToTakeFee);
minAmountToTakeFee = _minAmountToTakeFee;
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
require(
automatedMarketMakerPairs[pair] != value,
"Automated market maker pair is already set to that value"
);
automatedMarketMakerPairs[pair] = value;
if (value) excludeFromReward(pair);
else includeInReward(pair);
isExcludedFromMaxTransactionAmount[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function excludeFromFee(address account, bool isEx) external onlyOwner {
require(isExcludedFromFee[account] != isEx, "already");
isExcludedFromFee[account] = isEx;
emit ExcludedFromFee(account, isEx);
}
function excludeFromMaxTransactionAmount(address account, bool isEx)
external
onlyOwner
{
require(isExcludedFromMaxTransactionAmount[account]!=isEx, "already");
isExcludedFromMaxTransactionAmount[account] = isEx;
emit ExcludedFromMaxTransactionAmount(account, isEx);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinimumTokenBalance = contractTokenBalance >=
minAmountToTakeFee;
// Take Fee
if (
!inSwapAndLiquify &&
overMinimumTokenBalance &&
balanceOf(mainPair) > 0 &&
automatedMarketMakerPairs[to]
) {
takeFee();
}
removeAllFee();
// If any account belongs to isExcludedFromFee account then remove the fee
if (
!inSwapAndLiquify &&
!isExcludedFromFee[from] &&
!isExcludedFromFee[to]
) {
// Buy
if (automatedMarketMakerPairs[from]) {
_rewardFee = buyRewardFee;
_liquidityFee = buyLiquidityFee;
_marketingFee = buyMarketingFee;
_burnFee = buyBurnFee;
}
// Sell
else if (automatedMarketMakerPairs[to]) {
_rewardFee = sellRewardFee;
_liquidityFee = sellLiquidityFee;
_marketingFee = sellMarketingFee;
_burnFee = sellBurnFee;
}
}
_tokenTransfer(from, to, amount);
restoreAllFee();
if (!inSwapAndLiquify) {
if (!isExcludedFromMaxTransactionAmount[from]) {
require(
amount < maxTransactionAmount,
"ERC20: exceeds transfer limit"
);
}
if (!isExcludedFromMaxTransactionAmount[to]) {
require(
balanceOf(to) < maxWallet,
"ERC20: exceeds max wallet limit"
);
}
}
}
function takeFee() private lockTheSwap {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensTaken = _liquidityFeeTokens + _marketingFeeTokens;
if (totalTokensTaken == 0 || contractBalance < totalTokensTaken) {
return;
}
// Halve the amount of liquidity tokens
uint256 tokensForLiquidity = _liquidityFeeTokens / 2;
uint256 initialETHBalance = address(this).balance;
uint256 ETHForLiquidity;
if (isMarketingFeeETH) {
uint256 tokensForSwap=tokensForLiquidity+_marketingFeeTokens;
if(tokensForSwap>0)
swapTokensForETH(tokensForSwap);
uint256 ETHBalance = address(this).balance-initialETHBalance;
uint256 ETHForMarketing = ETHBalance*_marketingFeeTokens/tokensForSwap;
ETHForLiquidity = ETHBalance - ETHForMarketing;
if(ETHForMarketing>0){
(bool success, )=address(marketingWallet).call{value: ETHForMarketing}("");
if(success){
emit MarketingFeeTaken(0, ETHForMarketing);
}
}
} else {
if(tokensForLiquidity>0)
swapTokensForETH(tokensForLiquidity);
ETHForLiquidity = address(this).balance-initialETHBalance;
if(_marketingFeeTokens>0){
_transfer(address(this), marketingWallet, _marketingFeeTokens);
emit MarketingFeeTaken(_marketingFeeTokens, 0);
}
}
if (tokensForLiquidity > 0 && ETHForLiquidity > 0) {
addLiquidity(tokensForLiquidity, ETHForLiquidity);
emit SwapAndLiquify(tokensForLiquidity, ETHForLiquidity);
}
_marketingFeeTokens = 0;
_liquidityFeeTokens = 0;
if(owner()!=address(0))
_transfer(address(this), owner(), balanceOf(address(this)));
else
_burn(address(this), balanceOf(address(this)));
}
function swapTokensForETH(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = mainRouter.WETH();
mainRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
mainRouter.addLiquidityETH{value: ETHAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(0xdead),
block.timestamp
);
}
function burn(uint256 amount) external {
_burn(_msgSender(), amount);
}
function _burn(address sender, uint256 amount) private {
uint256 currentRate = _getRate();
uint256 rAmount = currentRate * amount;
if(_isExcluded[sender]){
require(amount <= _tOwned[sender], "more than balance");
_tOwned[sender] -= amount;
rAmount = rAmount > _rOwned[sender] ? _rOwned[sender] : rAmount;
_rOwned[sender] -= rAmount;
_tTotal = _tTotal - amount;
_rTotal = _rTotal - rAmount;
emit Transfer(sender, address(0), amount);
}else{
require(rAmount <= _rOwned[sender], "more than balance");
_rOwned[sender] -= rAmount;
_tOwned[sender] -= amount;
_tTotal = _tTotal - amount;
_rTotal = _rTotal - rAmount;
emit Transfer(sender, address(0), amount);
}
}
function withdrawETH() external onlyOwner {
(bool success, )=address(owner()).call{value: address(this).balance}("");
require(success, "Failed in withdrawal");
}
function withdrawToken(address token) external onlyOwner{
require(address(this) != token, "Not allowed");
IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this)));
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"address[2]","name":"_accounts","type":"address[2]"},{"internalType":"bool","name":"_isMarketingFeeETH","type":"bool"},{"internalType":"uint16[8]","name":"_fees","type":"uint16[8]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeETHSwapped","type":"uint256"}],"name":"MarketingFeeTaken","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":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHForLiquidity","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":false,"internalType":"uint16","name":"newSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyBurnFee","type":"uint16"}],"name":"UpdateBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyLiquidityFee","type":"uint16"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyMarketingFee","type":"uint16"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"newIsMarketingFeeETH","type":"bool"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"oldIsMarketingFeeETH","type":"bool"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmountToTakeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellRewardFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyRewardFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellRewardFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyRewardFee","type":"uint16"}],"name":"UpdateRewardFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMarketingFeeETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"minAmountToTakeFee","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":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnFee","type":"uint16"}],"name":"updateBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_buyLiquidityFee","type":"uint16"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingFee","type":"uint16"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"bool","name":"_isMarketingFeeETH","type":"bool"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellRewardFee","type":"uint16"},{"internalType":"uint16","name":"_buyRewardFee","type":"uint16"}],"name":"updateRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162005cf038038062005cf0833981016040819052620000349162001907565b6200003f3362000d87565b6000805460ff60a01b1916600160a01b60ff8a16021790556009620000658a8262001a74565b50600a62000074898262001a74565b506006869055620000888660001962001b56565b620000969060001962001b83565b60078190553360009081526001602090815260408083209390935560065460029091529190205582516001600160a01b03166200011a5760405162461bcd60e51b815260206004820152601d60248201527f6d61726b6574696e672077616c6c65742063616e206e6f74206265203000000060448201526064015b60405180910390fd5b60208301516001600160a01b0316620001765760405162461bcd60e51b815260206004820152601b60248201527f526f7574657220616464726573732063616e206e6f7420626520300000000000604482015260640162000111565b60c081015160808201516040830151835161012c939291620001989162001bb5565b620001a4919062001bb5565b620001b0919062001bb5565b61ffff161115620002045760405162461bcd60e51b815260206004820152601560248201527f73656c6c20746f74616c20666565203c3d203330250000000000000000000000604482015260640162000111565b60e081015160a08201516060830151602084015161012c939291620002299162001bb5565b62000235919062001bb5565b62000241919062001bb5565b61ffff161115620002955760405162461bcd60e51b815260206004820152601460248201527f62757920746f74616c20666565203c3d20333025000000000000000000000000604482015260640162000111565b8051609661ffff90911610620002df5760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816001602002015161ffff16106200032d5760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816002602002015161ffff16106200037b5760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816003602002015161ffff1610620003c95760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816004602002015161ffff1610620004175760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816005602002015161ffff1610620004655760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816006602002015161ffff1610620004b35760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b6096816007602002015161ffff1610620005015760405162461bcd60e51b815260206004820152600e60248201526d6561636820666565203c2031352560901b604482015260640162000111565b825160148054841515600160a01b9081026001600160a81b03199092166001600160a01b039485161791909117918290556040805191830460ff16151582526000602083018190529392909216917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a36020830151601880546001600160a01b0319166001600160a01b039092169182179055620005ad90309060001962000dd7565b6018546040516000916001600160a01b0316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e908390a3601860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000639573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065f919062001bda565b6001600160a01b031663c9c6539630601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e8919062001bda565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000736573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200075c919062001bda565b601980546001600160a01b0319166001600160a01b039290921691909117905580516013805460208085015163ffffffff60281b1990921661ffff9485166501000000000090810261ffff60381b19169190911767010000000000000093861684021793849055604080519185048616825292909304909316928201929092526000818301819052606082015290517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16040818101516013805460608086015163ffffffff60481b1990921661ffff948516690100000000000000000090810261ffff60581b1916919091176b0100000000000000000000009386168402179384905585519084048516815291909204909216602083015260008284018190529082015290517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a160c08101516013805460e084015163ffffffff60681b1990911661ffff9384166d010000000000000000000000000090810261ffff60781b191691909117600160781b9285168302179283905560408051918404851682529190920490921660208201526000818301819052606082015290517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16080808201516013805460a085015161ffff908116630100000090810264ffff0000001961010096841687021664ffffffff00199094169390931792909217928390556040805194840482168552919092049091166020830152600090820181905260608201527f0a21d45dab14d5d2f53ae98d95d951cd627fcf1b5bc485174326568b5e0a4572910160405180910390a1620009f26127108762001bf8565b601581905560408051918252600060208301527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a162000a3e6127108762001bf8565b84101562000aa45760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b606482015260840162000111565b62000ab26127108762001bf8565b85101562000b0d5760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b606482015260840162000111565b601685905560408051868152600060208201527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1601784905560408051858152600060208201527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600460209081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054600160ff19918216811790925560058054808401825560008051602062005cb0833981519152908101805461dead6001600160a01b031991821617909155306000818152604080822080548816891790558554808901909655949093018054909216179055601a9485905281812080548416851790556014546001600160a01b031681529081208054909216831790915590919062000c4f3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790557f428bdc965569ef4717764ecfd84e88946a9a226b52b813e6ab6a7f46aad86e88805486166001908117909155601b948590527f6790d4910a095e0e04c8daa388834616a295bac3f59038957b6d0b93a2d216848054871682179055308252838220805487168217905560145490921681529182208054909416811790935562000d043390565b6001600160a01b0390811682526020820192909252604001600020805460ff19169215159290921790915560195462000d409116600162000eff565b60405186815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050505050505062001c71565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831662000e3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000111565b6001600160a01b03821662000e9e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000111565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152601c602052604090205481151560ff90911615150362000f975760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840162000111565b6001600160a01b0382166000908152601c60205260409020805460ff1916821580159190911790915562000fd65762000fd08262001040565b62000fe1565b62000fe18262001247565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b6000546001600160a01b031633146200108b5760405162461bcd60e51b8152602060048201819052602482015260008051602062005cd0833981519152604482015260640162000111565b6001600160a01b03811660009081526004602052604090205460ff1615620010f65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000111565b6005546032906200110990600162001c0f565b1115620011955760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a40162000111565b6001600160a01b03811660009081526001602052604090205415620011f2576001600160a01b038116600090815260016020526040902054620011d890620014bd565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff1916600190811790915560058054918201815590915260008051602062005cb08339815191520180546001600160a01b0319169091179055565b6000546001600160a01b03163314620012925760405162461bcd60e51b8152602060048201819052602482015260008051602062005cd0833981519152604482015260640162000111565b6001600160a01b03811660009081526004602052604090205460ff16620012fc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640162000111565b60005b600554811015620014b957816001600160a01b0316600582815481106200132a576200132a62001b9f565b6000918252602090912001546001600160a01b031603620014a4576001600160a01b0382166000908152600160205260409020546200136862001547565b6001600160a01b0384166000908152600260205260409020546200138d919062001c25565b6001600160a01b0384166000908152600160205260409020819055600754620013b890839062001b83565b620013c4919062001c0f565b6007556001600160a01b0383166000908152600460205260409020805460ff1916905560058054620013f99060019062001b83565b815481106200140c576200140c62001b9f565b600091825260209091200154600580546001600160a01b0390921691849081106200143b576200143b62001b9f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060058054806200147d576200147d62001c3f565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80620014b08162001c55565b915050620012ff565b5050565b6000600754821115620015265760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000111565b60006200153262001547565b905062001540818462001bf8565b9392505050565b60008080620015556200156d565b909250905062001566818362001bf8565b9250505090565b6007546006546000918291825b600554811015620016d557826001600060058481548110620015a057620015a062001b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200160f5750816002600060058481548110620015e857620015e862001b9f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200162657600754600654945094505050509091565b600160006005838154811062001640576200164062001b9f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462001671908462001b83565b925060026000600583815481106200168d576200168d62001b9f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620016be908362001b83565b915080620016cc8162001c55565b9150506200157a565b50600654600754620016e8919062001bf8565b82101562001700576007546006549350935050509091565b90939092509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200174a576200174a62001709565b604052919050565b600082601f8301126200176457600080fd5b81516001600160401b0381111562001780576200178062001709565b602062001796601f8301601f191682016200171f565b8281528582848701011115620017ab57600080fd5b60005b83811015620017cb578581018301518282018401528201620017ae565b506000928101909101919091529392505050565b80516001600160a01b0381168114620017f757600080fd5b919050565b600082601f8301126200180e57600080fd5b604080519081016001600160401b038111828210171562001833576200183362001709565b80604052508060408401858111156200184b57600080fd5b845b8181101562001870576200186181620017df565b8352602092830192016200184d565b509195945050505050565b80518015158114620017f757600080fd5b600082601f8301126200189e57600080fd5b6040516101008082016001600160401b0381118382101715620018c557620018c562001709565b60405283018185821115620018d957600080fd5b845b828110156200187057805161ffff81168114620018f85760008081fd5b825260209182019101620018db565b60008060008060008060008060006102208a8c0312156200192757600080fd5b89516001600160401b03808211156200193f57600080fd5b6200194d8d838e0162001752565b9a5060208c01519150808211156200196457600080fd5b50620019738c828d0162001752565b98505060408a015160ff811681146200198b57600080fd5b8097505060608a0151955060808a0151945060a08a01519350620019b38b60c08c01620017fc565b9250620019c46101008b016200187b565b9150620019d68b6101208c016200188c565b90509295985092959850929598565b600181811c90821680620019fa57607f821691505b60208210810362001a1b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562001a6f57600081815260208120601f850160051c8101602086101562001a4a5750805b601f850160051c820191505b8181101562001a6b5782815560010162001a56565b5050505b505050565b81516001600160401b0381111562001a905762001a9062001709565b62001aa88162001aa18454620019e5565b8462001a21565b602080601f83116001811462001ae0576000841562001ac75750858301515b600019600386901b1c1916600185901b17855562001a6b565b600085815260208120601f198616915b8281101562001b115788860151825594840194600190910190840162001af0565b508582101562001b305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008262001b685762001b6862001b40565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562001b995762001b9962001b6d565b92915050565b634e487b7160e01b600052603260045260246000fd5b61ffff81811683821601908082111562001bd35762001bd362001b6d565b5092915050565b60006020828403121562001bed57600080fd5b6200154082620017df565b60008262001c0a5762001c0a62001b40565b500490565b8082018082111562001b995762001b9962001b6d565b808202811582820484141762001b995762001b9962001b6d565b634e487b7160e01b600052603160045260246000fd5b60006001820162001c6a5762001c6a62001b6d565b5060010190565b61402f8062001c816000396000f3fe60806040526004361061031e5760003560e01c806388f82020116101ab578063cf089e13116100f7578063e71dc3f511610095578063f2fde38b1161006f578063f2fde38b146109e1578063f637434214610a01578063f8b45b0514610a23578063fc59d23d14610a3957600080fd5b8063e71dc3f51461096d578063e9481eee1461098f578063f11a24d3146109bf57600080fd5b8063dd62ed3e116100d1578063dd62ed3e146108d2578063de0aad5314610918578063df8408fe14610938578063e086e5ec1461095857600080fd5b8063cf089e1314610872578063cf188ad014610892578063d68f8cde146108b257600080fd5b80639a7a23d611610164578063aa4980231161013e578063aa498023146107ea578063adb873bd1461080a578063b62496f51461082c578063c8c8ebe41461085c57600080fd5b80639a7a23d61461078a578063a457c2d7146107aa578063a9059cbb146107ca57600080fd5b806388f82020146106bc57806389476069146106f55780638da5cb5b146107155780639213691314610733578063948384dc1461075557806395d89b411461077557600080fd5b8063395093511161026a57806365b8dbc01161022357806373b9e82c116101fd57806373b9e82c1461062257806375f0a874146106425780637bce5a041461067a57806385af30c51461069c57600080fd5b806365b8dbc0146105cd57806370a08231146105ed578063715018a61461060d57600080fd5b806339509351146104fd57806342966c681461051d5780634549b0391461053d5780634707c5511461055d57806352390c021461057d5780635342acb41461059d57600080fd5b80632073bd85116102d75780632d838119116102b15780632d83811914610470578063313ce567146104905780633685d419146104bc5780633812550a146104dc57600080fd5b80632073bd851461041057806323b872dd146104305780632ae2f1211461045057600080fd5b806306fdde031461032a578063095ea7b3146103555780630cfe2f3f1461038557806313114a9d146103ba57806318160ddd146103d95780631c499ab0146103ee57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a4f565b60405161034c9190613b0a565b60405180910390f35b34801561036157600080fd5b50610375610370366004613b52565b610ae1565b604051901515815260200161034c565b34801561039157600080fd5b506013546103a7906301000000900461ffff1681565b60405161ffff909116815260200161034c565b3480156103c657600080fd5b506008545b60405190815260200161034c565b3480156103e557600080fd5b506006546103cb565b3480156103fa57600080fd5b5061040e610409366004613b7e565b610af8565b005b34801561041c57600080fd5b5061040e61042b366004613bae565b610bd6565b34801561043c57600080fd5b5061037561044b366004613be1565b610dab565b34801561045c57600080fd5b5061040e61046b366004613c30565b610dfe565b34801561047c57600080fd5b506103cb61048b366004613b7e565b610ee2565b34801561049c57600080fd5b50600054600160a01b900460ff1660405160ff909116815260200161034c565b3480156104c857600080fd5b5061040e6104d7366004613c69565b610f5f565b3480156104e857600080fd5b5060145461037590600160a01b900460ff1681565b34801561050957600080fd5b50610375610518366004613b52565b611197565b34801561052957600080fd5b5061040e610538366004613b7e565b6111ce565b34801561054957600080fd5b506103cb610558366004613c86565b6111db565b34801561056957600080fd5b5061040e610578366004613c30565b611287565b34801561058957600080fd5b5061040e610598366004613c69565b6113bf565b3480156105a957600080fd5b506103756105b8366004613c69565b601a6020526000908152604090205460ff1681565b3480156105d957600080fd5b5061040e6105e8366004613c69565b6115ad565b3480156105f957600080fd5b506103cb610608366004613c69565b611839565b34801561061957600080fd5b5061040e611898565b34801561062e57600080fd5b5061040e61063d366004613b7e565b6118ce565b34801561064e57600080fd5b50601454610662906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561068657600080fd5b506013546103a790600160581b900461ffff1681565b3480156106a857600080fd5b50601954610662906001600160a01b031681565b3480156106c857600080fd5b506103756106d7366004613c69565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070157600080fd5b5061040e610710366004613c69565b611983565b34801561072157600080fd5b506000546001600160a01b0316610662565b34801561073f57600080fd5b506013546103a790600160481b900461ffff1681565b34801561076157600080fd5b5061040e610770366004613bae565b611a81565b34801561078157600080fd5b5061033f611c52565b34801561079657600080fd5b5061040e6107a5366004613c30565b611c61565b3480156107b657600080fd5b506103756107c5366004613b52565b611c95565b3480156107d657600080fd5b506103756107e5366004613b52565b611ccc565b3480156107f657600080fd5b5061040e610805366004613b7e565b611cd9565b34801561081657600080fd5b506013546103a790600160681b900461ffff1681565b34801561083857600080fd5b50610375610847366004613c69565b601c6020526000908152604090205460ff1681565b34801561086857600080fd5b506103cb60175481565b34801561087e57600080fd5b5061040e61088d366004613bae565b611db9565b34801561089e57600080fd5b50601854610662906001600160a01b031681565b3480156108be57600080fd5b5061040e6108cd366004613bae565b611f94565b3480156108de57600080fd5b506103cb6108ed366004613cab565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561092457600080fd5b506013546103a790610100900461ffff1681565b34801561094457600080fd5b5061040e610953366004613c30565b61216f565b34801561096457600080fd5b5061040e61224b565b34801561097957600080fd5b506013546103a790600160781b900461ffff1681565b34801561099b57600080fd5b506103756109aa366004613c69565b601b6020526000908152604090205460ff1681565b3480156109cb57600080fd5b506013546103a790600160381b900461ffff1681565b3480156109ed57600080fd5b5061040e6109fc366004613c69565b61230f565b348015610a0d57600080fd5b506013546103a790600160281b900461ffff1681565b348015610a2f57600080fd5b506103cb60165481565b348015610a4557600080fd5b506103cb60155481565b606060098054610a5e90613cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a90613cd9565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aee3384846123a7565b5060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290613d13565b60405180910390fd5b612710600654610b3b9190613d5e565b811015610b945760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b6064820152608401610b22565b6016546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1601655565b6000546001600160a01b03163314610c005760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff6101008204811691600160481b8104821691610c2e91600160281b90041686613d80565b610c389190613d80565b610c429190613d80565b61ffff161115610c645760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff63010000008204811691600160581b8104821691610c9491600160381b90041685613d80565b610c9e9190613d80565b610ca89190613d80565b61ffff161115610cca5760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115610cef5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115610d145760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160681b8404811682840152600160781b9093049092166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16013805463ffffffff60681b1916600160681b61ffff9485160261ffff60781b191617600160781b9290931691909102919091179055565b6000610db88484846124cb565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610df3918691610dee908690613e49565b6123a7565b5060015b9392505050565b6000546001600160a01b03163314610e285760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610e825760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610b22565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6000600754821115610f495760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b22565b6000610f53612863565b9050610df78184613d5e565b6000546001600160a01b03163314610f895760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811660009081526004602052604090205460ff16610ff15760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b22565b60005b60055481101561119357816001600160a01b03166005828154811061101b5761101b613e5c565b6000918252602090912001546001600160a01b031603611181576001600160a01b038216600090815260016020526040902054611056612863565b6001600160a01b0384166000908152600260205260409020546110799190613e72565b6001600160a01b03841660009081526001602052604090208190556007546110a2908390613e49565b6110ac9190613e89565b6007556001600160a01b0383166000908152600460205260409020805460ff19169055600580546110df90600190613e49565b815481106110ef576110ef613e5c565b600091825260209091200154600580546001600160a01b03909216918490811061111b5761111b613e5c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061115a5761115a613e9c565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061118b81613eb2565b915050610ff4565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610aee918590610dee908690613e89565b6111d83382612886565b50565b600060065483111561122f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b22565b6000611239612863565b90508261125657600061124c8286613e72565b9250610af2915050565b600061126185612b20565b505050509050600082826112759190613e72565b9350610af292505050565b5092915050565b6000546001600160a01b031633146112b15760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166113075760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610b22565b601454604080518315158152600160a01b830460ff16151560208201526001600160a01b03928316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a360148054911515600160a01b026001600160a81b03199092166001600160a01b039093169283179190911790556000908152601a60209081526040808320805460ff199081166001908117909255601b909352922080549091169091179055565b6000546001600160a01b031633146113e95760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811660009081526004602052604090205460ff16156114525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b22565b600554603290611463906001613e89565b11156114ed5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b22565b6001600160a01b03811660009081526001602052604090205415611547576001600160a01b03811660009081526001602052604090205461152d90610ee2565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610b2290613d13565b6018546001600160a01b03908116908216036116415760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b22565b6018546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601880546001600160a01b0319166001600160a01b0383169081179091556116a89030906000196123a7565b6018546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190613ecb565b6001600160a01b031663c9c6539630601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c9190613ecb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190613ecb565b601980546001600160a01b0319166001600160a01b038316908117909155909150611193906001612b79565b6001600160a01b03811660009081526004602052604081205460ff161561187657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610af290610ee2565b6000546001600160a01b031633146118c25760405162461bcd60e51b8152600401610b2290613d13565b6118cc6000612cab565b565b6000546001600160a01b031633146118f85760405162461bcd60e51b8152600401610b2290613d13565b600081116119415760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610b22565b6015546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1601555565b6000546001600160a01b031633146119ad5760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811630036119f35760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610b22565b6111d8611a086000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a709190613ee8565b6001600160a01b0384169190612cfb565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b8204811691600160481b8104821691611adb91600160281b90041686613d80565b611ae59190613d80565b611aef9190613d80565b61ffff161115611b115760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b8204811691600160581b8104821691611b4191600160381b90041685613d80565b611b4b9190613d80565b611b559190613d80565b61ffff161115611b775760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115611b9c5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115611bc15760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152610100840481168284015263010000009093049092166060830152517f0a21d45dab14d5d2f53ae98d95d951cd627fcf1b5bc485174326568b5e0a45729181900360800190a16013805464ffffffff00191661010061ffff9485160264ffff00000019161763010000009290931691909102919091179055565b6060600a8054610a5e90613cd9565b6000546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610b2290613d13565b6111938282612b79565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610aee918590610dee908690613e49565b6000610aee3384846124cb565b6000546001600160a01b03163314611d035760405162461bcd60e51b8152600401610b2290613d13565b612710600654611d139190613d5e565b811015611d775760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610b22565b6017546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1601755565b6000546001600160a01b03163314611de35760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b82048116916101008104821691611e1191600160281b90041686613d80565b611e1b9190613d80565b611e259190613d80565b61ffff161115611e475760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b820481169163010000008104821691611e7791600160381b90041685613d80565b611e819190613d80565b611e8b9190613d80565b61ffff161115611ead5760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115611ed25760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115611ef75760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160481b8404811682840152600160581b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a1601380546cffffffff0000000000000000001916600160481b61ffff9485160261ffff60581b191617600160581b9290931691909102919091179055565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b82048116916101008104821691611fec91600160481b90041686613d80565b611ff69190613d80565b6120009190613d80565b61ffff1611156120225760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b82048116916301000000810482169161205291600160581b90041685613d80565b61205c9190613d80565b6120669190613d80565b61ffff1611156120885760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff1611156120ad5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff1611156120d25760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160281b8404811682840152600160381b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16013805468ffffffff00000000001916600160281b61ffff9485160268ffff00000000000000191617600160381b9290931691909102919091179055565b6000546001600160a01b031633146121995760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036121f35760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610b22565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610ed6565b6000546001600160a01b031633146122755760405162461bcd60e51b8152600401610b2290613d13565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50509050806111d85760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610b22565b6000546001600160a01b031633146123395760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811661239e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b22565b6111d881612cab565b6001600160a01b0383166124095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b22565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b22565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661252f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b22565b6001600160a01b0382166125915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b22565b600061259c30611839565b6015546013549192508210159060ff161580156125b65750805b80156125d757506019546000906125d5906001600160a01b0316611839565b115b80156125fb57506001600160a01b0384166000908152601c602052604090205460ff165b1561260857612608612d52565b612638600b8054600c55600d8054600e55600f805460105560118054601255600090819055908190559182905555565b60135460ff1615801561266457506001600160a01b0385166000908152601a602052604090205460ff16155b801561268957506001600160a01b0384166000908152601a602052604090205460ff16155b15612740576001600160a01b0385166000908152601c602052604090205460ff16156126ea5760135461ffff630100000082048116600b55600160381b82048116600d55600160581b82048116600f55600160781b90910416601155612740565b6001600160a01b0384166000908152601c602052604090205460ff16156127405760135461ffff61010082048116600b55600160281b82048116600d55600160481b82048116600f55600160681b909104166011555b61274b858585613001565b612768601254601155600c54600b55600e54600d55601054600f55565b60135460ff1661285c576001600160a01b0385166000908152601b602052604090205460ff166127e35760175483106127e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610b22565b6001600160a01b0384166000908152601b602052604090205460ff1661285c5760165461280f85611839565b1061285c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610b22565b5050505050565b600080600061287061347a565b909250905061287f8183613d5e565b9250505090565b6000612890612863565b9050600061289e8383613e72565b6001600160a01b03851660009081526004602052604090205490915060ff1615612a12576001600160a01b03841660009081526002602052604090205483111561291e5760405162461bcd60e51b81526020600482015260116024820152706d6f7265207468616e2062616c616e636560781b6044820152606401610b22565b6001600160a01b03841660009081526002602052604081208054859290612946908490613e49565b90915550506001600160a01b0384166000908152600160205260409020548111612970578061298a565b6001600160a01b0384166000908152600160205260409020545b6001600160a01b0385166000908152600160205260408120805492935083929091906129b7908490613e49565b90915550506006546129ca908490613e49565b6006556007546129db908290613e49565b6007556040518381526000906001600160a01b03861690600080516020613fda8339815191529060200160405180910390a3612b1a565b6001600160a01b038416600090815260016020526040902054811115612a6e5760405162461bcd60e51b81526020600482015260116024820152706d6f7265207468616e2062616c616e636560781b6044820152606401610b22565b6001600160a01b03841660009081526001602052604081208054839290612a96908490613e49565b90915550506001600160a01b03841660009081526002602052604081208054859290612ac3908490613e49565b9091555050600654612ad6908490613e49565b600655600754612ae7908290613e49565b6007556040518381526000906001600160a01b03861690600080516020613fda8339815191529060200160405180910390a35b50505050565b600080600080600080612b32876135fd565b90506000612b3f8861361a565b90506000612b4c8961362d565b90506000612b598a613640565b90506000612b668b613653565b9b949a5092985090965094509092505050565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503612c0f5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b22565b6001600160a01b0382166000908152601c60205260409020805460ff19168215801591909117909155612c4a57612c45826113bf565b612c53565b612c5382610f5f565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610ed6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d4d908490613699565b505050565b6013805460ff191660011790556000612d6a30611839565b90506000601e54601d54612d7e9190613e89565b9050801580612d8c57508082105b15612d98575050612ff5565b60006002601d54612da99190613d5e565b6014549091504790600090600160a01b900460ff1615612ec2576000601e5484612dd39190613e89565b90508015612de457612de48161376b565b6000612df08447613e49565b9050600082601e5483612e039190613e72565b612e0d9190613d5e565b9050612e198183613e49565b93508015612eba576014546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612e6e576040519150601f19603f3d011682016040523d82523d6000602084013e612e73565b606091505b505090508015612eb8576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b505050612f40565b8215612ed157612ed18361376b565b612edb8247613e49565b601e5490915015612f4057601454601e54612f039130916001600160a01b03909116906124cb565b601e5460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015612f505750600081115b15612f9957612f5f83826138ac565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6000601e819055601d819055546001600160a01b031615612fdd57612fd830612fca6000546001600160a01b031690565b612fd330611839565b6124cb565b612fef565b612fef30612fea30611839565b612886565b50505050505b6013805460ff19169055565b600080600080600061301286612b20565b945094509450945094506000613026612863565b9050816006546130369190613e49565b6006556130438183613e72565b6007546130509190613e49565b6007556040518281526000906001600160a01b038b1690600080516020613fda8339815191529060200160405180910390a383601d546130909190613e89565b601d55601e546130a1908490613e89565b601e5560006130b08486613e89565b90506130bc8282613e72565b306000908152600160205260409020546130d69190613e89565b3060009081526001602090815260408083209390935560049052205460ff16156131265730600090815260026020526040902054613115908290613e89565b306000908152600260205260409020555b506001600160a01b03891660009081526004602052604090205460ff16801561316857506001600160a01b03881660009081526004602052604090205460ff16155b1561323b576001600160a01b038916600090815260026020526040902054613191908890613e49565b6001600160a01b038a166000908152600260205260409020556131b48188613e72565b6001600160a01b038a166000908152600160205260409020546131d79190613e49565b6001600160a01b038a166000908152600160205260409020556131fa8187613e72565b6001600160a01b03891660009081526001602052604090205461321d9190613e89565b6001600160a01b038916600090815260016020526040902055613421565b6001600160a01b03891660009081526004602052604090205460ff1615801561327c57506001600160a01b03881660009081526004602052604090205460ff165b156133085761328b8188613e72565b6001600160a01b038a166000908152600160205260409020546132ae9190613e49565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546132e5908790613e89565b6001600160a01b0389166000908152600260205260409020556131fa8187613e72565b6001600160a01b03891660009081526004602052604090205460ff16801561334857506001600160a01b03881660009081526004602052604090205460ff165b15613394576001600160a01b038916600090815260026020526040902054613371908890613e49565b6001600160a01b038a1660009081526002602052604090205561328b8188613e72565b61339e8188613e72565b6001600160a01b038a166000908152600160205260409020546133c19190613e49565b6001600160a01b038a166000908152600160205260409020556133e48187613e72565b6001600160a01b0389166000908152600160205260409020546134079190613e89565b6001600160a01b0389166000908152600160205260409020555b61343461342e8287613e72565b8661393f565b876001600160a01b0316896001600160a01b0316600080516020613fda8339815191528860405161346791815260200190565b60405180910390a3505050505050505050565b6007546006546000918291825b6005548110156135cc578260016000600584815481106134a9576134a9613e5c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061351457508160026000600584815481106134ed576134ed613e5c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561352a57600754600654945094505050509091565b600160006005838154811061354157613541613e5c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135709084613e49565b9250600260006005838154811061358957613589613e5c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135b89083613e49565b9150806135c481613eb2565b915050613487565b506006546007546135dd9190613d5e565b8210156135f4576007546006549350935050509091565b90939092509050565b60006103e8600b54836136109190613e72565b610af29190613d5e565b60006103e8600d54836136109190613e72565b60006103e8600f54836136109190613e72565b60006103e8601154836136109190613e72565b60006103e8600f54600d54600b546011546103e86136719190613e49565b61367b9190613e49565b6136859190613e49565b61368f9190613e49565b6136109084613e72565b60006136ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139659092919063ffffffff16565b805190915015612d4d578080602001905181019061370c9190613f01565b612d4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b22565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106137a0576137a0613e5c565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d9190613ecb565b8160018151811061383057613830613e5c565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b815291169063791ac94790613876908590600090869030904290600401613f1e565b600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b505050505050565b60185460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561391a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061285c9190613f8f565b8160075461394d9190613e49565b60075560085461395e908290613e89565b6008555050565b6060613974848460008561397c565b949350505050565b6060824710156139dd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b22565b6001600160a01b0385163b613a345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b22565b600080866001600160a01b03168587604051613a509190613fbd565b60006040518083038185875af1925050503d8060008114613a8d576040519150601f19603f3d011682016040523d82523d6000602084013e613a92565b606091505b5091509150613aa2828286613aad565b979650505050505050565b60608315613abc575081610df7565b825115613acc5782518084602001fd5b8160405162461bcd60e51b8152600401610b229190613b0a565b60005b83811015613b01578181015183820152602001613ae9565b50506000910152565b6020815260008251806020840152613b29816040850160208701613ae6565b601f01601f19169190910160400192915050565b6001600160a01b03811681146111d857600080fd5b60008060408385031215613b6557600080fd5b8235613b7081613b3d565b946020939093013593505050565b600060208284031215613b9057600080fd5b5035919050565b803561ffff81168114613ba957600080fd5b919050565b60008060408385031215613bc157600080fd5b613bca83613b97565b9150613bd860208401613b97565b90509250929050565b600080600060608486031215613bf657600080fd5b8335613c0181613b3d565b92506020840135613c1181613b3d565b929592945050506040919091013590565b80151581146111d857600080fd5b60008060408385031215613c4357600080fd5b8235613c4e81613b3d565b91506020830135613c5e81613c22565b809150509250929050565b600060208284031215613c7b57600080fd5b8135610df781613b3d565b60008060408385031215613c9957600080fd5b823591506020830135613c5e81613c22565b60008060408385031215613cbe57600080fd5b8235613cc981613b3d565b91506020830135613c5e81613b3d565b600181811c90821680613ced57607f821691505b602082108103613d0d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082613d7b57634e487b7160e01b600052601260045260246000fd5b500490565b61ffff81811683821601908082111561128057611280613d48565b60208082526015908201527473656c6c20746f74616c20666565203c3d2033302560581b604082015260600190565b60208082526014908201527362757920746f74616c20666565203c3d2033302560601b604082015260600190565b6020808252600f908201526e73656c6c20666565203c3d2031352560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2031352560901b604082015260600190565b81810381811115610af257610af2613d48565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610af257610af2613d48565b80820180821115610af257610af2613d48565b634e487b7160e01b600052603160045260246000fd5b600060018201613ec457613ec4613d48565b5060010190565b600060208284031215613edd57600080fd5b8151610df781613b3d565b600060208284031215613efa57600080fd5b5051919050565b600060208284031215613f1357600080fd5b8151610df781613c22565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f6e5784516001600160a01b031683529383019391830191600101613f49565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613fa457600080fd5b8351925060208401519150604084015190509250925092565b60008251613fcf818460208701613ae6565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ad1241f9833d857a6e29d5e48d50ad97079784fd2dc5dddaba662e4a40a321ac64736f6c63430008120033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db04f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000adb53acfa41aee12000000000000000000000000000000000000000000000000adb53acfa41aee12000000000000000000000000000000000000000000000000adb53acfa41aee120000000000000000000000000000002dc03f9e6e3ce6dadbb472442f82f13b3f3cf767000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d8600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008414c5449545544450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008414c544954554445000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061031e5760003560e01c806388f82020116101ab578063cf089e13116100f7578063e71dc3f511610095578063f2fde38b1161006f578063f2fde38b146109e1578063f637434214610a01578063f8b45b0514610a23578063fc59d23d14610a3957600080fd5b8063e71dc3f51461096d578063e9481eee1461098f578063f11a24d3146109bf57600080fd5b8063dd62ed3e116100d1578063dd62ed3e146108d2578063de0aad5314610918578063df8408fe14610938578063e086e5ec1461095857600080fd5b8063cf089e1314610872578063cf188ad014610892578063d68f8cde146108b257600080fd5b80639a7a23d611610164578063aa4980231161013e578063aa498023146107ea578063adb873bd1461080a578063b62496f51461082c578063c8c8ebe41461085c57600080fd5b80639a7a23d61461078a578063a457c2d7146107aa578063a9059cbb146107ca57600080fd5b806388f82020146106bc57806389476069146106f55780638da5cb5b146107155780639213691314610733578063948384dc1461075557806395d89b411461077557600080fd5b8063395093511161026a57806365b8dbc01161022357806373b9e82c116101fd57806373b9e82c1461062257806375f0a874146106425780637bce5a041461067a57806385af30c51461069c57600080fd5b806365b8dbc0146105cd57806370a08231146105ed578063715018a61461060d57600080fd5b806339509351146104fd57806342966c681461051d5780634549b0391461053d5780634707c5511461055d57806352390c021461057d5780635342acb41461059d57600080fd5b80632073bd85116102d75780632d838119116102b15780632d83811914610470578063313ce567146104905780633685d419146104bc5780633812550a146104dc57600080fd5b80632073bd851461041057806323b872dd146104305780632ae2f1211461045057600080fd5b806306fdde031461032a578063095ea7b3146103555780630cfe2f3f1461038557806313114a9d146103ba57806318160ddd146103d95780631c499ab0146103ee57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a4f565b60405161034c9190613b0a565b60405180910390f35b34801561036157600080fd5b50610375610370366004613b52565b610ae1565b604051901515815260200161034c565b34801561039157600080fd5b506013546103a7906301000000900461ffff1681565b60405161ffff909116815260200161034c565b3480156103c657600080fd5b506008545b60405190815260200161034c565b3480156103e557600080fd5b506006546103cb565b3480156103fa57600080fd5b5061040e610409366004613b7e565b610af8565b005b34801561041c57600080fd5b5061040e61042b366004613bae565b610bd6565b34801561043c57600080fd5b5061037561044b366004613be1565b610dab565b34801561045c57600080fd5b5061040e61046b366004613c30565b610dfe565b34801561047c57600080fd5b506103cb61048b366004613b7e565b610ee2565b34801561049c57600080fd5b50600054600160a01b900460ff1660405160ff909116815260200161034c565b3480156104c857600080fd5b5061040e6104d7366004613c69565b610f5f565b3480156104e857600080fd5b5060145461037590600160a01b900460ff1681565b34801561050957600080fd5b50610375610518366004613b52565b611197565b34801561052957600080fd5b5061040e610538366004613b7e565b6111ce565b34801561054957600080fd5b506103cb610558366004613c86565b6111db565b34801561056957600080fd5b5061040e610578366004613c30565b611287565b34801561058957600080fd5b5061040e610598366004613c69565b6113bf565b3480156105a957600080fd5b506103756105b8366004613c69565b601a6020526000908152604090205460ff1681565b3480156105d957600080fd5b5061040e6105e8366004613c69565b6115ad565b3480156105f957600080fd5b506103cb610608366004613c69565b611839565b34801561061957600080fd5b5061040e611898565b34801561062e57600080fd5b5061040e61063d366004613b7e565b6118ce565b34801561064e57600080fd5b50601454610662906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561068657600080fd5b506013546103a790600160581b900461ffff1681565b3480156106a857600080fd5b50601954610662906001600160a01b031681565b3480156106c857600080fd5b506103756106d7366004613c69565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070157600080fd5b5061040e610710366004613c69565b611983565b34801561072157600080fd5b506000546001600160a01b0316610662565b34801561073f57600080fd5b506013546103a790600160481b900461ffff1681565b34801561076157600080fd5b5061040e610770366004613bae565b611a81565b34801561078157600080fd5b5061033f611c52565b34801561079657600080fd5b5061040e6107a5366004613c30565b611c61565b3480156107b657600080fd5b506103756107c5366004613b52565b611c95565b3480156107d657600080fd5b506103756107e5366004613b52565b611ccc565b3480156107f657600080fd5b5061040e610805366004613b7e565b611cd9565b34801561081657600080fd5b506013546103a790600160681b900461ffff1681565b34801561083857600080fd5b50610375610847366004613c69565b601c6020526000908152604090205460ff1681565b34801561086857600080fd5b506103cb60175481565b34801561087e57600080fd5b5061040e61088d366004613bae565b611db9565b34801561089e57600080fd5b50601854610662906001600160a01b031681565b3480156108be57600080fd5b5061040e6108cd366004613bae565b611f94565b3480156108de57600080fd5b506103cb6108ed366004613cab565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561092457600080fd5b506013546103a790610100900461ffff1681565b34801561094457600080fd5b5061040e610953366004613c30565b61216f565b34801561096457600080fd5b5061040e61224b565b34801561097957600080fd5b506013546103a790600160781b900461ffff1681565b34801561099b57600080fd5b506103756109aa366004613c69565b601b6020526000908152604090205460ff1681565b3480156109cb57600080fd5b506013546103a790600160381b900461ffff1681565b3480156109ed57600080fd5b5061040e6109fc366004613c69565b61230f565b348015610a0d57600080fd5b506013546103a790600160281b900461ffff1681565b348015610a2f57600080fd5b506103cb60165481565b348015610a4557600080fd5b506103cb60155481565b606060098054610a5e90613cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a90613cd9565b8015610ad75780601f10610aac57610100808354040283529160200191610ad7565b820191906000526020600020905b815481529060010190602001808311610aba57829003601f168201915b5050505050905090565b6000610aee3384846123a7565b5060015b92915050565b6000546001600160a01b03163314610b2b5760405162461bcd60e51b8152600401610b2290613d13565b60405180910390fd5b612710600654610b3b9190613d5e565b811015610b945760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b6064820152608401610b22565b6016546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1601655565b6000546001600160a01b03163314610c005760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff6101008204811691600160481b8104821691610c2e91600160281b90041686613d80565b610c389190613d80565b610c429190613d80565b61ffff161115610c645760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff63010000008204811691600160581b8104821691610c9491600160381b90041685613d80565b610c9e9190613d80565b610ca89190613d80565b61ffff161115610cca5760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115610cef5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115610d145760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160681b8404811682840152600160781b9093049092166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16013805463ffffffff60681b1916600160681b61ffff9485160261ffff60781b191617600160781b9290931691909102919091179055565b6000610db88484846124cb565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610df3918691610dee908690613e49565b6123a7565b5060015b9392505050565b6000546001600160a01b03163314610e285760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166000908152601b602052604090205481151560ff909116151503610e825760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610b22565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b6000600754821115610f495760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b22565b6000610f53612863565b9050610df78184613d5e565b6000546001600160a01b03163314610f895760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811660009081526004602052604090205460ff16610ff15760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b22565b60005b60055481101561119357816001600160a01b03166005828154811061101b5761101b613e5c565b6000918252602090912001546001600160a01b031603611181576001600160a01b038216600090815260016020526040902054611056612863565b6001600160a01b0384166000908152600260205260409020546110799190613e72565b6001600160a01b03841660009081526001602052604090208190556007546110a2908390613e49565b6110ac9190613e89565b6007556001600160a01b0383166000908152600460205260409020805460ff19169055600580546110df90600190613e49565b815481106110ef576110ef613e5c565b600091825260209091200154600580546001600160a01b03909216918490811061111b5761111b613e5c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061115a5761115a613e9c565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061118b81613eb2565b915050610ff4565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610aee918590610dee908690613e89565b6111d83382612886565b50565b600060065483111561122f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b22565b6000611239612863565b90508261125657600061124c8286613e72565b9250610af2915050565b600061126185612b20565b505050509050600082826112759190613e72565b9350610af292505050565b5092915050565b6000546001600160a01b031633146112b15760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166113075760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e2774206265203000000000006044820152606401610b22565b601454604080518315158152600160a01b830460ff16151560208201526001600160a01b03928316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a360148054911515600160a01b026001600160a81b03199092166001600160a01b039093169283179190911790556000908152601a60209081526040808320805460ff199081166001908117909255601b909352922080549091169091179055565b6000546001600160a01b031633146113e95760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811660009081526004602052604090205460ff16156114525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b22565b600554603290611463906001613e89565b11156114ed5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b22565b6001600160a01b03811660009081526001602052604090205415611547576001600160a01b03811660009081526001602052604090205461152d90610ee2565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610b2290613d13565b6018546001600160a01b03908116908216036116415760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b22565b6018546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601880546001600160a01b0319166001600160a01b0383169081179091556116a89030906000196123a7565b6018546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190613ecb565b6001600160a01b031663c9c6539630601860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c9190613ecb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180d9190613ecb565b601980546001600160a01b0319166001600160a01b038316908117909155909150611193906001612b79565b6001600160a01b03811660009081526004602052604081205460ff161561187657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610af290610ee2565b6000546001600160a01b031633146118c25760405162461bcd60e51b8152600401610b2290613d13565b6118cc6000612cab565b565b6000546001600160a01b031633146118f85760405162461bcd60e51b8152600401610b2290613d13565b600081116119415760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b6044820152606401610b22565b6015546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1601555565b6000546001600160a01b031633146119ad5760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811630036119f35760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610b22565b6111d8611a086000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a709190613ee8565b6001600160a01b0384169190612cfb565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b8204811691600160481b8104821691611adb91600160281b90041686613d80565b611ae59190613d80565b611aef9190613d80565b61ffff161115611b115760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b8204811691600160581b8104821691611b4191600160381b90041685613d80565b611b4b9190613d80565b611b559190613d80565b61ffff161115611b775760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115611b9c5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115611bc15760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152610100840481168284015263010000009093049092166060830152517f0a21d45dab14d5d2f53ae98d95d951cd627fcf1b5bc485174326568b5e0a45729181900360800190a16013805464ffffffff00191661010061ffff9485160264ffff00000019161763010000009290931691909102919091179055565b6060600a8054610a5e90613cd9565b6000546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610b2290613d13565b6111938282612b79565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610aee918590610dee908690613e49565b6000610aee3384846124cb565b6000546001600160a01b03163314611d035760405162461bcd60e51b8152600401610b2290613d13565b612710600654611d139190613d5e565b811015611d775760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610b22565b6017546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1601755565b6000546001600160a01b03163314611de35760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b82048116916101008104821691611e1191600160281b90041686613d80565b611e1b9190613d80565b611e259190613d80565b61ffff161115611e475760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b820481169163010000008104821691611e7791600160381b90041685613d80565b611e819190613d80565b611e8b9190613d80565b61ffff161115611ead5760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff161115611ed25760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff161115611ef75760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160481b8404811682840152600160581b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a1601380546cffffffff0000000000000000001916600160481b61ffff9485160261ffff60581b191617600160581b9290931691909102919091179055565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610b2290613d13565b60135461012c9061ffff600160681b82048116916101008104821691611fec91600160481b90041686613d80565b611ff69190613d80565b6120009190613d80565b61ffff1611156120225760405162461bcd60e51b8152600401610b2290613d9b565b60135461012c9061ffff600160781b82048116916301000000810482169161205291600160581b90041685613d80565b61205c9190613d80565b6120669190613d80565b61ffff1611156120885760405162461bcd60e51b8152600401610b2290613dca565b60968261ffff1611156120ad5760405162461bcd60e51b8152600401610b2290613df8565b60968161ffff1611156120d25760405162461bcd60e51b8152600401610b2290613e21565b6013546040805161ffff85811682528481166020830152600160281b8404811682840152600160381b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16013805468ffffffff00000000001916600160281b61ffff9485160268ffff00000000000000191617600160381b9290931691909102919091179055565b6000546001600160a01b031633146121995760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036121f35760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b6044820152606401610b22565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610ed6565b6000546001600160a01b031633146122755760405162461bcd60e51b8152600401610b2290613d13565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50509050806111d85760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610b22565b6000546001600160a01b031633146123395760405162461bcd60e51b8152600401610b2290613d13565b6001600160a01b03811661239e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b22565b6111d881612cab565b6001600160a01b0383166124095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b22565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b22565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661252f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b22565b6001600160a01b0382166125915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b22565b600061259c30611839565b6015546013549192508210159060ff161580156125b65750805b80156125d757506019546000906125d5906001600160a01b0316611839565b115b80156125fb57506001600160a01b0384166000908152601c602052604090205460ff165b1561260857612608612d52565b612638600b8054600c55600d8054600e55600f805460105560118054601255600090819055908190559182905555565b60135460ff1615801561266457506001600160a01b0385166000908152601a602052604090205460ff16155b801561268957506001600160a01b0384166000908152601a602052604090205460ff16155b15612740576001600160a01b0385166000908152601c602052604090205460ff16156126ea5760135461ffff630100000082048116600b55600160381b82048116600d55600160581b82048116600f55600160781b90910416601155612740565b6001600160a01b0384166000908152601c602052604090205460ff16156127405760135461ffff61010082048116600b55600160281b82048116600d55600160481b82048116600f55600160681b909104166011555b61274b858585613001565b612768601254601155600c54600b55600e54600d55601054600f55565b60135460ff1661285c576001600160a01b0385166000908152601b602052604090205460ff166127e35760175483106127e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610b22565b6001600160a01b0384166000908152601b602052604090205460ff1661285c5760165461280f85611839565b1061285c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610b22565b5050505050565b600080600061287061347a565b909250905061287f8183613d5e565b9250505090565b6000612890612863565b9050600061289e8383613e72565b6001600160a01b03851660009081526004602052604090205490915060ff1615612a12576001600160a01b03841660009081526002602052604090205483111561291e5760405162461bcd60e51b81526020600482015260116024820152706d6f7265207468616e2062616c616e636560781b6044820152606401610b22565b6001600160a01b03841660009081526002602052604081208054859290612946908490613e49565b90915550506001600160a01b0384166000908152600160205260409020548111612970578061298a565b6001600160a01b0384166000908152600160205260409020545b6001600160a01b0385166000908152600160205260408120805492935083929091906129b7908490613e49565b90915550506006546129ca908490613e49565b6006556007546129db908290613e49565b6007556040518381526000906001600160a01b03861690600080516020613fda8339815191529060200160405180910390a3612b1a565b6001600160a01b038416600090815260016020526040902054811115612a6e5760405162461bcd60e51b81526020600482015260116024820152706d6f7265207468616e2062616c616e636560781b6044820152606401610b22565b6001600160a01b03841660009081526001602052604081208054839290612a96908490613e49565b90915550506001600160a01b03841660009081526002602052604081208054859290612ac3908490613e49565b9091555050600654612ad6908490613e49565b600655600754612ae7908290613e49565b6007556040518381526000906001600160a01b03861690600080516020613fda8339815191529060200160405180910390a35b50505050565b600080600080600080612b32876135fd565b90506000612b3f8861361a565b90506000612b4c8961362d565b90506000612b598a613640565b90506000612b668b613653565b9b949a5092985090965094509092505050565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503612c0f5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b22565b6001600160a01b0382166000908152601c60205260409020805460ff19168215801591909117909155612c4a57612c45826113bf565b612c53565b612c5382610f5f565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610ed6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d4d908490613699565b505050565b6013805460ff191660011790556000612d6a30611839565b90506000601e54601d54612d7e9190613e89565b9050801580612d8c57508082105b15612d98575050612ff5565b60006002601d54612da99190613d5e565b6014549091504790600090600160a01b900460ff1615612ec2576000601e5484612dd39190613e89565b90508015612de457612de48161376b565b6000612df08447613e49565b9050600082601e5483612e039190613e72565b612e0d9190613d5e565b9050612e198183613e49565b93508015612eba576014546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612e6e576040519150601f19603f3d011682016040523d82523d6000602084013e612e73565b606091505b505090508015612eb8576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b505b505050612f40565b8215612ed157612ed18361376b565b612edb8247613e49565b601e5490915015612f4057601454601e54612f039130916001600160a01b03909116906124cb565b601e5460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b600083118015612f505750600081115b15612f9957612f5f83826138ac565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6000601e819055601d819055546001600160a01b031615612fdd57612fd830612fca6000546001600160a01b031690565b612fd330611839565b6124cb565b612fef565b612fef30612fea30611839565b612886565b50505050505b6013805460ff19169055565b600080600080600061301286612b20565b945094509450945094506000613026612863565b9050816006546130369190613e49565b6006556130438183613e72565b6007546130509190613e49565b6007556040518281526000906001600160a01b038b1690600080516020613fda8339815191529060200160405180910390a383601d546130909190613e89565b601d55601e546130a1908490613e89565b601e5560006130b08486613e89565b90506130bc8282613e72565b306000908152600160205260409020546130d69190613e89565b3060009081526001602090815260408083209390935560049052205460ff16156131265730600090815260026020526040902054613115908290613e89565b306000908152600260205260409020555b506001600160a01b03891660009081526004602052604090205460ff16801561316857506001600160a01b03881660009081526004602052604090205460ff16155b1561323b576001600160a01b038916600090815260026020526040902054613191908890613e49565b6001600160a01b038a166000908152600260205260409020556131b48188613e72565b6001600160a01b038a166000908152600160205260409020546131d79190613e49565b6001600160a01b038a166000908152600160205260409020556131fa8187613e72565b6001600160a01b03891660009081526001602052604090205461321d9190613e89565b6001600160a01b038916600090815260016020526040902055613421565b6001600160a01b03891660009081526004602052604090205460ff1615801561327c57506001600160a01b03881660009081526004602052604090205460ff165b156133085761328b8188613e72565b6001600160a01b038a166000908152600160205260409020546132ae9190613e49565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546132e5908790613e89565b6001600160a01b0389166000908152600260205260409020556131fa8187613e72565b6001600160a01b03891660009081526004602052604090205460ff16801561334857506001600160a01b03881660009081526004602052604090205460ff165b15613394576001600160a01b038916600090815260026020526040902054613371908890613e49565b6001600160a01b038a1660009081526002602052604090205561328b8188613e72565b61339e8188613e72565b6001600160a01b038a166000908152600160205260409020546133c19190613e49565b6001600160a01b038a166000908152600160205260409020556133e48187613e72565b6001600160a01b0389166000908152600160205260409020546134079190613e89565b6001600160a01b0389166000908152600160205260409020555b61343461342e8287613e72565b8661393f565b876001600160a01b0316896001600160a01b0316600080516020613fda8339815191528860405161346791815260200190565b60405180910390a3505050505050505050565b6007546006546000918291825b6005548110156135cc578260016000600584815481106134a9576134a9613e5c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061351457508160026000600584815481106134ed576134ed613e5c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561352a57600754600654945094505050509091565b600160006005838154811061354157613541613e5c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135709084613e49565b9250600260006005838154811061358957613589613e5c565b60009182526020808320909101546001600160a01b031683528201929092526040019020546135b89083613e49565b9150806135c481613eb2565b915050613487565b506006546007546135dd9190613d5e565b8210156135f4576007546006549350935050509091565b90939092509050565b60006103e8600b54836136109190613e72565b610af29190613d5e565b60006103e8600d54836136109190613e72565b60006103e8600f54836136109190613e72565b60006103e8601154836136109190613e72565b60006103e8600f54600d54600b546011546103e86136719190613e49565b61367b9190613e49565b6136859190613e49565b61368f9190613e49565b6136109084613e72565b60006136ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139659092919063ffffffff16565b805190915015612d4d578080602001905181019061370c9190613f01565b612d4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b22565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106137a0576137a0613e5c565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d9190613ecb565b8160018151811061383057613830613e5c565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b815291169063791ac94790613876908590600090869030904290600401613f1e565b600060405180830381600087803b15801561389057600080fd5b505af11580156138a4573d6000803e3d6000fd5b505050505050565b60185460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561391a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061285c9190613f8f565b8160075461394d9190613e49565b60075560085461395e908290613e89565b6008555050565b6060613974848460008561397c565b949350505050565b6060824710156139dd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b22565b6001600160a01b0385163b613a345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b22565b600080866001600160a01b03168587604051613a509190613fbd565b60006040518083038185875af1925050503d8060008114613a8d576040519150601f19603f3d011682016040523d82523d6000602084013e613a92565b606091505b5091509150613aa2828286613aad565b979650505050505050565b60608315613abc575081610df7565b825115613acc5782518084602001fd5b8160405162461bcd60e51b8152600401610b229190613b0a565b60005b83811015613b01578181015183820152602001613ae9565b50506000910152565b6020815260008251806020840152613b29816040850160208701613ae6565b601f01601f19169190910160400192915050565b6001600160a01b03811681146111d857600080fd5b60008060408385031215613b6557600080fd5b8235613b7081613b3d565b946020939093013593505050565b600060208284031215613b9057600080fd5b5035919050565b803561ffff81168114613ba957600080fd5b919050565b60008060408385031215613bc157600080fd5b613bca83613b97565b9150613bd860208401613b97565b90509250929050565b600080600060608486031215613bf657600080fd5b8335613c0181613b3d565b92506020840135613c1181613b3d565b929592945050506040919091013590565b80151581146111d857600080fd5b60008060408385031215613c4357600080fd5b8235613c4e81613b3d565b91506020830135613c5e81613c22565b809150509250929050565b600060208284031215613c7b57600080fd5b8135610df781613b3d565b60008060408385031215613c9957600080fd5b823591506020830135613c5e81613c22565b60008060408385031215613cbe57600080fd5b8235613cc981613b3d565b91506020830135613c5e81613b3d565b600181811c90821680613ced57607f821691505b602082108103613d0d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082613d7b57634e487b7160e01b600052601260045260246000fd5b500490565b61ffff81811683821601908082111561128057611280613d48565b60208082526015908201527473656c6c20746f74616c20666565203c3d2033302560581b604082015260600190565b60208082526014908201527362757920746f74616c20666565203c3d2033302560601b604082015260600190565b6020808252600f908201526e73656c6c20666565203c3d2031352560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2031352560901b604082015260600190565b81810381811115610af257610af2613d48565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610af257610af2613d48565b80820180821115610af257610af2613d48565b634e487b7160e01b600052603160045260246000fd5b600060018201613ec457613ec4613d48565b5060010190565b600060208284031215613edd57600080fd5b8151610df781613b3d565b600060208284031215613efa57600080fd5b5051919050565b600060208284031215613f1357600080fd5b8151610df781613c22565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f6e5784516001600160a01b031683529383019391830191600101613f49565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613fa457600080fd5b8351925060208401519150604084015190509250925092565b60008251613fcf818460208701613ae6565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ad1241f9833d857a6e29d5e48d50ad97079784fd2dc5dddaba662e4a40a321ac64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000adb53acfa41aee12000000000000000000000000000000000000000000000000adb53acfa41aee12000000000000000000000000000000000000000000000000adb53acfa41aee120000000000000000000000000000002dc03f9e6e3ce6dadbb472442f82f13b3f3cf767000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d8600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008414c5449545544450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008414c544954554445000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : __name (string): ALTITUDE
Arg [1] : __symbol (string): ALTITUDE
Arg [2] : __decimals (uint8): 18
Arg [3] : _totalSupply (uint256): 210000000000000000000000000
Arg [4] : _maxWallet (uint256): 210000000000000000000000000
Arg [5] : _maxTransactionAmount (uint256): 210000000000000000000000000
Arg [6] : _accounts (address[2]): 0x2Dc03F9e6E3CE6DAdBb472442f82f13B3F3CF767,0x327Df1E6de05895d2ab08513aaDD9313Fe505d86
Arg [7] : _isMarketingFeeETH (bool): True
Arg [8] : _fees (uint16[8]): 20,10,40,30,50,50,10,10
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000000000000000000000adb53acfa41aee12000000
Arg [4] : 000000000000000000000000000000000000000000adb53acfa41aee12000000
Arg [5] : 000000000000000000000000000000000000000000adb53acfa41aee12000000
Arg [6] : 0000000000000000000000002dc03f9e6e3ce6dadbb472442f82f13b3f3cf767
Arg [7] : 000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d86
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [12] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [15] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [16] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [18] : 414c544954554445000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [20] : 414c544954554445000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
26072:30952:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40076:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41073:193;;;;;;;;;;-1:-1:-1;41073:193:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;41073:193:0;1126:187:1;27020:26:0;;;;;;;;;;-1:-1:-1;27020:26:0;;;;;;;;;;;;;;1492:6:1;1480:19;;;1462:38;;1450:2;1435:18;27020:26:0;1318:188:1;42450:89:0;;;;;;;;;;-1:-1:-1;42521:10:0;;42450:89;;;1657:25:1;;;1645:2;1630:18;42450:89:0;1511:177:1;40359:97:0;;;;;;;;;;-1:-1:-1;40441:7:0;;40359:97;;36375:243;;;;;;;;;;-1:-1:-1;36375:243:0;;;;;:::i;:::-;;:::i;:::-;;47672:759;;;;;;;;;;-1:-1:-1;47672:759:0;;;;;:::i;:::-;;:::i;41274:350::-;;;;;;;;;;-1:-1:-1;41274:350:0;;;;;:::i;:::-;;:::i;50246:323::-;;;;;;;;;;-1:-1:-1;50246:323:0;;;;;:::i;:::-;;:::i;43256:319::-;;;;;;;;;;-1:-1:-1;43256:319:0;;;;;:::i;:::-;;:::i;40266:85::-;;;;;;;;;;-1:-1:-1;40309:5:0;40334:9;-1:-1:-1;;;40334:9:0;;;;40266:85;;3446:4:1;3434:17;;;3416:36;;3404:2;3389:18;40266:85:0;3274:184:1;44087:613:0;;;;;;;;;;-1:-1:-1;44087:613:0;;;;;:::i;:::-;;:::i;27305:29::-;;;;;;;;;;-1:-1:-1;27305:29:0;;;;-1:-1:-1;;;27305:29:0;;;;;;41632:299;;;;;;;;;;-1:-1:-1;41632:299:0;;;;;:::i;:::-;;:::i;55556:85::-;;;;;;;;;;-1:-1:-1;55556:85:0;;;;;:::i;:::-;;:::i;42547:701::-;;;;;;;;;;-1:-1:-1;42547:701:0;;;;;:::i;:::-;;:::i;48439:562::-;;;;;;;;;;-1:-1:-1;48439:562:0;;;;;:::i;:::-;;:::i;43583:496::-;;;;;;;;;;-1:-1:-1;43583:496:0;;;;;:::i;:::-;;:::i;27535:49::-;;;;;;;;;;-1:-1:-1;27535:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33509:604;;;;;;;;;;-1:-1:-1;33509:604:0;;;;;:::i;:::-;;:::i;40464:198::-;;;;;;;;;;-1:-1:-1;40464:198:0;;;;;:::i;:::-;;:::i;12459:103::-;;;;;;;;;;;;;:::i;49009:322::-;;;;;;;;;;-1:-1:-1;49009:322:0;;;;;:::i;:::-;;:::i;27268:30::-;;;;;;;;;;-1:-1:-1;27268:30:0;;;;-1:-1:-1;;;;;27268:30:0;;;;;;-1:-1:-1;;;;;4193:32:1;;;4175:51;;4163:2;4148:18;27268:30:0;4029:203:1;27165:29:0;;;;;;;;;;-1:-1:-1;27165:29:0;;;;-1:-1:-1;;;27165:29:0;;;;;;27503:23;;;;;;;;;;-1:-1:-1;27503:23:0;;;;-1:-1:-1;;;;;27503:23:0;;;42288:154;;;;;;;;;;-1:-1:-1;42288:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;42414:20:0;42385:4;42414:20;;;:11;:20;;;;;;;;;42288:154;56779:207;;;;;;;;;;-1:-1:-1;56779:207:0;;;;;:::i;:::-;;:::i;11808:87::-;;;;;;;;;;-1:-1:-1;11854:7:0;11881:6;-1:-1:-1;;;;;11881:6:0;11808:87;;27128:30;;;;;;;;;;-1:-1:-1;27128:30:0;;;;-1:-1:-1;;;27128:30:0;;;;;;46877:787;;;;;;;;;;-1:-1:-1;46877:787:0;;;;;:::i;:::-;;:::i;40169:89::-;;;;;;;;;;;;;:::i;49339:163::-;;;;;;;;;;-1:-1:-1;49339:163:0;;;;;:::i;:::-;;:::i;41939:341::-;;;;;;;;;;-1:-1:-1;41939:341:0;;;;;:::i;:::-;;:::i;40670:201::-;;;;;;;;;;-1:-1:-1;40670:201:0;;;;;:::i;:::-;;:::i;36626:367::-;;;;;;;;;;-1:-1:-1;36626:367:0;;;;;:::i;:::-;;:::i;27203:25::-;;;;;;;;;;-1:-1:-1;27203:25:0;;;;-1:-1:-1;;;27203:25:0;;;;;;27664:57;;;;;;;;;;-1:-1:-1;27664:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27414:35;;;;;;;;;;;;;;;;46042:827;;;;;;;;;;-1:-1:-1;46042:827:0;;;;;:::i;:::-;;:::i;27460:36::-;;;;;;;;;;-1:-1:-1;27460:36:0;;;;-1:-1:-1;;;;;27460:36:0;;;45207:827;;;;;;;;;;-1:-1:-1;45207:827:0;;;;;:::i;:::-;;:::i;40879:186::-;;;;;;;;;;-1:-1:-1;40879:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;41030:18:0;;;40998:7;41030:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;40879:186;26986:27;;;;;;;;;;-1:-1:-1;26986:27:0;;;;;;;;;;;50004:234;;;;;;;;;;-1:-1:-1;50004:234:0;;;;;:::i;:::-;;:::i;56589:184::-;;;;;;;;;;;;;:::i;27235:24::-;;;;;;;;;;-1:-1:-1;27235:24:0;;;;-1:-1:-1;;;27235:24:0;;;;;;27591:66;;;;;;;;;;-1:-1:-1;27591:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27090:29;;;;;;;;;;-1:-1:-1;27090:29:0;;;;-1:-1:-1;;;27090:29:0;;;;;;12717:201;;;;;;;;;;-1:-1:-1;12717:201:0;;;;;:::i;:::-;;:::i;27053:30::-;;;;;;;;;;-1:-1:-1;27053:30:0;;;;-1:-1:-1;;;27053:30:0;;;;;;27383:24;;;;;;;;;;;;;;;;27343:33;;;;;;;;;;;;;;;;40076:85;40115:13;40148:5;40141:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40076:85;:::o;41073:193::-;41175:4;41197:39;11262:10;41220:7;41229:6;41197:8;:39::i;:::-;-1:-1:-1;41254:4:0;41073:193;;;;;:::o;36375:243::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;;;;;;;;;36480:5:::1;36470:7;;:15;;;;:::i;:::-;36458:10;:27;;36450:73;;;::::0;-1:-1:-1;;;36450:73:0;;6167:2:1;36450:73:0::1;::::0;::::1;6149:21:1::0;6206:2;6186:18;;;6179:30;6245:34;6225:18;;;6218:62;-1:-1:-1;;;6296:18:1;;;6289:31;6337:19;;36450:73:0::1;5965:397:1::0;36450:73:0::1;36567:9;::::0;36539:38:::1;::::0;;6541:25:1;;;6597:2;6582:18;;6575:34;;;;36539:38:0::1;::::0;6514:18:1;36539:38:0::1;;;;;;;36588:9;:22:::0;36375:243::o;47672:759::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;47866:13:::1;::::0;47883:3:::1;::::0;47866:13:::1;;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;47846:16:0;::::1;::::0;::::1;::::0;47813:31:::1;::::0;-1:-1:-1;;;47827:16:0;::::1;;47813:12:::0;:31:::1;:::i;:::-;:50;;;;:::i;:::-;:66;;;;:::i;:::-;:73;;;;47791:144;;;;-1:-1:-1::0;;;47791:144:0::1;;;;;;;:::i;:::-;48018:12;::::0;48034:3:::1;::::0;48018:12:::1;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;47999:15:0;::::1;::::0;::::1;::::0;47968:29:::1;::::0;-1:-1:-1;;;47981:15:0;::::1;;47968:11:::0;:29:::1;:::i;:::-;:47;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;;;47946:139;;;;-1:-1:-1::0;;;47946:139:0::1;;;;;;;:::i;:::-;48119:3;48104:12;:18;;;;48096:46;;;;-1:-1:-1::0;;;48096:46:0::1;;;;;;;:::i;:::-;48175:3;48161:11;:17;;;;48153:44;;;;-1:-1:-1::0;;;48153:44:0::1;;;;;;;:::i;:::-;48295:11;::::0;48213:130:::1;::::0;;48295:11:::1;8445:15:1::0;;;8427:34;;8497:15;;;8492:2;8477:18;;8470:43;-1:-1:-1;;;48295:11:0;::::1;::::0;::::1;8529:18:1::0;;;8522:43;-1:-1:-1;;;48322:10:0;;::::1;::::0;;::::1;8596:2:1::0;8581:18;;8574:43;48213:130:0;::::1;::::0;;;;8389:3:1;48213:130:0;;::::1;48354:11;:26:::0;;-1:-1:-1;;;;48391:24:0;-1:-1:-1;;;48354:26:0::1;::::0;;::::1;;-1:-1:-1::0;;;;48391:24:0;;-1:-1:-1;;;48391:24:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;47672:759::o;41274:350::-;41408:4;41425:36;41435:6;41443:9;41454:6;41425:9;:36::i;:::-;-1:-1:-1;;;;;41543:19:0;;;;;;:11;:19;;;;;;;;11262:10;41543:33;;;;;;;;;41472:122;;41495:6;;41543:40;;41577:6;;41543:40;:::i;:::-;41472:8;:122::i;:::-;-1:-1:-1;41612:4:0;41274:350;;;;;;:::o;50246:323::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50376:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;50368:69:::1;;;::::0;-1:-1:-1;;;50368:69:0;;8963:2:1;50368:69:0::1;::::0;::::1;8945:21:1::0;9002:1;8982:18;;;8975:29;-1:-1:-1;;;9020:18:1;;;9013:37;9067:18;;50368:69:0::1;8761:330:1::0;50368:69:0::1;-1:-1:-1::0;;;;;50448:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;50448:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;50514:47;;1266:41:1;;;50514:47:0::1;::::0;1239:18:1;50514:47:0::1;;;;;;;;50246:323:::0;;:::o;43256:319::-;43350:7;43408;;43397;:18;;43375:110;;;;-1:-1:-1;;;43375:110:0;;9298:2:1;43375:110:0;;;9280:21:1;9337:2;9317:18;;;9310:30;9376:34;9356:18;;;9349:62;-1:-1:-1;;;9427:18:1;;;9420:40;9477:19;;43375:110:0;9096:406:1;43375:110:0;43496:19;43518:10;:8;:10::i;:::-;43496:32;-1:-1:-1;43546:21:0;43496:32;43546:7;:21;:::i;44087:613::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44165:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;44157:56;;;::::0;-1:-1:-1;;;44157:56:0;;9709:2:1;44157:56:0::1;::::0;::::1;9691:21:1::0;9748:2;9728:18;;;9721:30;9787:25;9767:18;;;9760:53;9830:18;;44157:56:0::1;9507:347:1::0;44157:56:0::1;44229:9;44224:469;44248:9;:16:::0;44244:20;::::1;44224:469;;;44306:7;-1:-1:-1::0;;;;;44290:23:0::1;:9;44300:1;44290:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;44290:12:0::1;:23:::0;44286:396:::1;;-1:-1:-1::0;;;;;44354:16:0;::::1;44334:19;44354:16:::0;;;:7:::1;:16;::::0;;;;;44423:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;44406:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:27:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;44389:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:44;;;44460:7:::1;::::0;:19:::1;::::0;44468:11;;44460:19:::1;:::i;:::-;:36;;;;:::i;:::-;44452:7;:44:::0;-1:-1:-1;;;;;44515:20:0;::::1;44538:5;44515:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;44515:28:0::1;::::0;;44577:9:::1;44587:16:::0;;:20:::1;::::0;44515:28;;44587:20:::1;:::i;:::-;44577:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;44562:9:::1;:12:::0;;-1:-1:-1;;;;;44577:31:0;;::::1;::::0;44572:1;;44562:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;44562:46:0::1;;;;;-1:-1:-1::0;;;;;44562:46:0::1;;;;;;44627:9;:15;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;44627:15:0;;;;;-1:-1:-1;;;;;;44627:15:0::1;::::0;;;;;-1:-1:-1;44224:469:0::1;44087:613:::0;:::o;44286:396::-:1;44266:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44224:469;;;;44087:613:::0;:::o;41632:299::-;11262:10;41749:4;41843:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;41843:34:0;;;;;;;;;;41749:4;;41771:130;;41821:7;;41843:47;;41879:10;;41843:47;:::i;55556:85::-;55606:27;11262:10;55626:6;55606:5;:27::i;:::-;55556:85;:::o;42547:701::-;42667:7;42711;;42700;:18;;42692:62;;;;-1:-1:-1;;;42692:62:0;;10768:2:1;42692:62:0;;;10750:21:1;10807:2;10787:18;;;10780:30;10846:33;10826:18;;;10819:61;10897:18;;42692:62:0;10566:355:1;42692:62:0;42765:19;42787:10;:8;:10::i;:::-;42765:32;;42813:17;42808:433;;42859:15;42877:19;42885:11;42877:7;:19;:::i;:::-;42859:37;-1:-1:-1;42911:14:0;;-1:-1:-1;;42911:14:0;42808:433;42988:23;43102:20;43114:7;43102:11;:20::i;:::-;42958:164;;;;;;43137:23;43181:11;43163:15;:29;;;;:::i;:::-;43137:55;-1:-1:-1;43207:22:0;;-1:-1:-1;;;43207:22:0;42808:433;42681:567;42547:701;;;;:::o;48439:562::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48584:30:0;::::1;48576:70;;;::::0;-1:-1:-1;;;48576:70:0;;11128:2:1;48576:70:0::1;::::0;::::1;11110:21:1::0;11167:2;11147:18;;;11140:30;11206:29;11186:18;;;11179:57;11253:18;;48576:70:0::1;10926:351:1::0;48576:70:0::1;48735:15;::::0;48662:108:::1;::::0;;11469:14:1;;11462:22;11444:41;;-1:-1:-1;;;48752:17:0;::::1;;;11528:14:1::0;11521:22;11516:2;11501:18;;11494:50;-1:-1:-1;;;;;48735:15:0;;::::1;::::0;48662:108;::::1;::::0;::::1;::::0;11417:18:1;48662:108:0::1;;;;;;;48781:15;:34:::0;;48826:38;::::1;;-1:-1:-1::0;;;48826:38:0::1;-1:-1:-1::0;;;;;;48826:38:0;;;-1:-1:-1;;;;;48781:34:0;;::::1;48826:38:::0;;;;;;::::1;::::0;;48781:15:::1;48875:35:::0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;48875:42:0;;::::1;48781:34:::0;48875:42;;::::1;::::0;;;48932:34:::1;:52:::0;;;;;:57;;;;::::1;::::0;;::::1;::::0;;48439:562::o;43583:496::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43664:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;43663:21;43655:61;;;::::0;-1:-1:-1;;;43655:61:0;;11757:2:1;43655:61:0::1;::::0;::::1;11739:21:1::0;11796:2;11776:18;;;11769:30;11835:29;11815:18;;;11808:57;11882:18;;43655:61:0::1;11555:351:1::0;43655:61:0::1;43749:9;:16:::0;43773:2:::1;::::0;43749:20:::1;::::0;43768:1:::1;43749:20;:::i;:::-;:26;;43727:153;;;::::0;-1:-1:-1;;;43727:153:0;;12113:2:1;43727:153:0::1;::::0;::::1;12095:21:1::0;12152:2;12132:18;;;12125:30;12191:34;12171:18;;;12164:62;12262:34;12242:18;;;12235:62;-1:-1:-1;;;12313:19:1;;;12306:44;12367:19;;43727:153:0::1;11911:481:1::0;43727:153:0::1;-1:-1:-1::0;;;;;43895:16:0;::::1;43914:1;43895:16:::0;;;:7:::1;:16;::::0;;;;;:20;43891:109:::1;;-1:-1:-1::0;;;;;43971:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;43951:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;43932:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;43891:109:::1;-1:-1:-1::0;;;;;44010:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;44010:27:0::1;44033:4;44010:27:::0;;::::1;::::0;;;44048:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;44048:23:0::1;::::0;;::::1;::::0;;43583:496::o;33509:604::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;33632:10:::1;::::0;-1:-1:-1;;;;;33632:10:0;;::::1;33610:33:::0;;::::1;::::0;33588:118:::1;;;::::0;-1:-1:-1;;;33588:118:0;;12599:2:1;33588:118:0::1;::::0;::::1;12581:21:1::0;12638:2;12618:18;;;12611:30;12677:34;12657:18;;;12650:62;-1:-1:-1;;;12728:18:1;;;12721:33;12771:19;;33588:118:0::1;12397:399:1::0;33588:118:0::1;33764:10;::::0;33722:54:::1;::::0;-1:-1:-1;;;;;33764:10:0;;::::1;::::0;33722:54;::::1;::::0;::::1;::::0;33764:10:::1;::::0;33722:54:::1;33787:10;:43:::0;;-1:-1:-1;;;;;;33787:43:0::1;-1:-1:-1::0;;;;;33787:43:0;::::1;::::0;;::::1;::::0;;;33841:49:::1;::::0;33858:4:::1;::::0;-1:-1:-1;;33841:8:0::1;:49::i;:::-;33939:10;::::0;:20:::1;::::0;;-1:-1:-1;;;33939:20:0;;;;33901:17:::1;::::0;-1:-1:-1;;;;;33939:10:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33921:64:0::1;;33994:4;34001:10;;;;;;;;;-1:-1:-1::0;;;;;34001:10:0::1;-1:-1:-1::0;;;;;34001:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33921:98;::::0;-1:-1:-1;;;;;;33921:98:0::1;::::0;;;;;;-1:-1:-1;;;;;13287:15:1;;;33921:98:0::1;::::0;::::1;13269:34:1::0;13339:15;;13319:18;;;13312:43;13204:18;;33921:98:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34030:8;:20:::0;;-1:-1:-1;;;;;;34030:20:0::1;-1:-1:-1::0;;;;;34030:20:0;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;34061:44:0::1;::::0;-1:-1:-1;34061:28:0::1;:44::i;40464:198::-:0;-1:-1:-1;;;;;40554:20:0;;40530:7;40554:20;;;:11;:20;;;;;;;;40550:49;;;-1:-1:-1;;;;;;40583:16:0;;;;;:7;:16;;;;;;;40464:198::o;40550:49::-;-1:-1:-1;;;;;40637:16:0;;;;;;:7;:16;;;;;;40617:37;;:19;:37::i;12459:103::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;12524:30:::1;12551:1;12524:18;:30::i;:::-;12459:103::o:0;49009:322::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;49155:1:::1;49133:19;:23;49125:58;;;::::0;-1:-1:-1;;;49125:58:0;;13568:2:1;49125:58:0::1;::::0;::::1;13550:21:1::0;13607:2;13587:18;;;13580:30;-1:-1:-1;;;13626:18:1;;;13619:52;13688:18;;49125:58:0::1;13366:346:1::0;49125:58:0::1;49245:18;::::0;49199:65:::1;::::0;;6541:25:1;;;6597:2;6582:18;;6575:34;;;;49199:65:0::1;::::0;6514:18:1;49199:65:0::1;;;;;;;49275:18;:40:::0;49009:322::o;56779:207::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56854:22:0;::::1;56862:4;56854:22:::0;56846:46:::1;;;::::0;-1:-1:-1;;;56846:46:0;;13919:2:1;56846:46:0::1;::::0;::::1;13901:21:1::0;13958:2;13938:18;;;13931:30;-1:-1:-1;;;13977:18:1;;;13970:41;14028:18;;56846:46:0::1;13717:335:1::0;56846:46:0::1;56903:75;56930:7;11854::::0;11881:6;-1:-1:-1;;;;;11881:6:0;;11808:87;56930:7:::1;56939:38;::::0;-1:-1:-1;;;56939:38:0;;56971:4:::1;56939:38;::::0;::::1;4175:51:1::0;-1:-1:-1;;;;;56939:23:0;::::1;::::0;::::1;::::0;4148:18:1;;56939:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56903:26:0;::::1;::::0;:75;:26:::1;:75::i;46877:787::-:0;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;47079:11:::1;::::0;47094:3:::1;::::0;47079:11:::1;-1:-1:-1::0;;;47079:11:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;47059:16:0;::::1;::::0;::::1;::::0;47024:33:::1;::::0;-1:-1:-1;;;47040:16:0;::::1;;47024:14:::0;:33:::1;:::i;:::-;:52;;;;:::i;:::-;:66;;;;:::i;:::-;:73;;;;47002:144;;;;-1:-1:-1::0;;;47002:144:0::1;;;;;;;:::i;:::-;47231:10;::::0;47245:3:::1;::::0;47231:10:::1;-1:-1:-1::0;;;47231:10:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;47212:15:0;::::1;::::0;::::1;::::0;47179:31:::1;::::0;-1:-1:-1;;;47194:15:0;::::1;;47179:13:::0;:31:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;;;47157:139;;;;-1:-1:-1::0;;;47157:139:0::1;;;;;;;:::i;:::-;47332:3;47315:14;:20;;;;47307:48;;;;-1:-1:-1::0;;;47307:48:0::1;;;;;;;:::i;:::-;47390:3;47374:13;:19;;;;47366:46;;;;-1:-1:-1::0;;;47366:46:0::1;;;;;;;:::i;:::-;47516:13;::::0;47428:140:::1;::::0;;47516:13:::1;8445:15:1::0;;;8427:34;;8497:15;;;8492:2;8477:18;;8470:43;47516:13:0::1;::::0;::::1;::::0;::::1;8529:18:1::0;;;8522:43;47545:12:0;;;::::1;::::0;;::::1;8596:2:1::0;8581:18;;8574:43;47428:140:0;::::1;::::0;;;;8389:3:1;47428:140:0;;::::1;47579:13;:30:::0;;-1:-1:-1;;47620:28:0;47579:30:::1;;::::0;;::::1;;-1:-1:-1::0;;47620:28:0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;46877:787::o;40169:89::-;40210:13;40243:7;40236:14;;;;;:::i;49339:163::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;49453:41:::1;49482:4;49488:5;49453:28;:41::i;41939:341::-:0;11262:10;42061:4;42155:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;42155:34:0;;;;;;;;;;42061:4;;42083:167;;42133:7;;42155:84;;42209:15;;42155:84;:::i;40670:201::-;40777:4;40799:42;11262:10;40823:9;40834:6;40799:9;:42::i;36626:367::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;36787:5:::1;36777:7;;:15;;;;:::i;:::-;36754:21;:38;;36746:95;;;::::0;-1:-1:-1;;;36746:95:0;;14448:2:1;36746:95:0::1;::::0;::::1;14430:21:1::0;14487:2;14467:18;;;14460:30;14526:34;14506:18;;;14499:62;-1:-1:-1;;;14577:18:1;;;14570:42;14629:19;;36746:95:0::1;14246:408:1::0;36746:95:0::1;36909:20;::::0;36859:71:::1;::::0;;6541:25:1;;;6597:2;6582:18;;6575:34;;;;36859:71:0::1;::::0;6514:18:1;36859:71:0::1;;;;;;;36941:20;:44:::0;36626:367::o;46042:827::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;46253:11:::1;::::0;46268:3:::1;::::0;46253:11:::1;-1:-1:-1::0;;;46253:11:0;::::1;::::0;::::1;::::0;::::1;46236:13:::0;::::1;::::0;::::1;::::0;46198:36:::1;::::0;-1:-1:-1;;;46217:16:0;::::1;;46198:17:::0;:36:::1;:::i;:::-;:52;;;;:::i;:::-;:66;;;;:::i;:::-;:73;;;;46176:144;;;;-1:-1:-1::0;;;46176:144:0::1;;;;;;;:::i;:::-;46405:10;::::0;46419:3:::1;::::0;46405:10:::1;-1:-1:-1::0;;;46405:10:0;::::1;::::0;::::1;::::0;46389:12;;::::1;::::0;::::1;::::0;46353:34:::1;::::0;-1:-1:-1;;;46371:15:0;::::1;;46353:16:::0;:34:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;;;46331:139;;;;-1:-1:-1::0;;;46331:139:0::1;;;;;;;:::i;:::-;46509:3;46489:17;:23;;;;46481:51;;;;-1:-1:-1::0;;;46481:51:0::1;;;;;;;:::i;:::-;46570:3;46551:16;:22;;;;46543:49;;;;-1:-1:-1::0;;;46543:49:0::1;;;;;;;:::i;:::-;46704:16;::::0;46608:153:::1;::::0;;46704:16:::1;8445:15:1::0;;;8427:34;;8497:15;;;8492:2;8477:18;;8470:43;-1:-1:-1;;;46704:16:0;::::1;::::0;::::1;8529:18:1::0;;;8522:43;-1:-1:-1;;;46735:15:0;;::::1;::::0;;::::1;8596:2:1::0;8581:18;;8574:43;46608:153:0;::::1;::::0;;;;8389:3:1;46608:153:0;;::::1;46772:16;:36:::0;;-1:-1:-1;;46819:34:0;-1:-1:-1;;;46772:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;46819:34:0;;-1:-1:-1;;;46819:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;46042:827::o;45207:::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;45418:11:::1;::::0;45433:3:::1;::::0;45418:11:::1;-1:-1:-1::0;;;45418:11:0;::::1;::::0;::::1;::::0;::::1;45401:13:::0;::::1;::::0;::::1;::::0;45363:36:::1;::::0;-1:-1:-1;;;45382:16:0;::::1;;45363:17:::0;:36:::1;:::i;:::-;:52;;;;:::i;:::-;:66;;;;:::i;:::-;:73;;;;45341:144;;;;-1:-1:-1::0;;;45341:144:0::1;;;;;;;:::i;:::-;45570:10;::::0;45584:3:::1;::::0;45570:10:::1;-1:-1:-1::0;;;45570:10:0;::::1;::::0;::::1;::::0;45554:12;;::::1;::::0;::::1;::::0;45518:34:::1;::::0;-1:-1:-1;;;45536:15:0;::::1;;45518:16:::0;:34:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;;;45496:139;;;;-1:-1:-1::0;;;45496:139:0::1;;;;;;;:::i;:::-;45674:3;45654:17;:23;;;;45646:51;;;;-1:-1:-1::0;;;45646:51:0::1;;;;;;;:::i;:::-;45735:3;45716:16;:22;;;;45708:49;;;;-1:-1:-1::0;;;45708:49:0::1;;;;;;;:::i;:::-;45869:16;::::0;45773:153:::1;::::0;;45869:16:::1;8445:15:1::0;;;8427:34;;8497:15;;;8492:2;8477:18;;8470:43;-1:-1:-1;;;45869:16:0;::::1;::::0;::::1;8529:18:1::0;;;8522:43;-1:-1:-1;;;45900:15:0;;::::1;::::0;;::::1;8596:2:1::0;8581:18;;8574:43;45773:153:0;::::1;::::0;;;;8389:3:1;45773:153:0;;::::1;45937:16;:36:::0;;-1:-1:-1;;45984:34:0;-1:-1:-1;;;45937:36:0::1;::::0;;::::1;;-1:-1:-1::0;;45984:34:0;;-1:-1:-1;;;45984:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;45207:827::o;50004:234::-;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50094:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;50086:54:::1;;;::::0;-1:-1:-1;;;50086:54:0;;8963:2:1;50086:54:0::1;::::0;::::1;8945:21:1::0;9002:1;8982:18;;;8975:29;-1:-1:-1;;;9020:18:1;;;9013:37;9067:18;;50086:54:0::1;8761:330:1::0;50086:54:0::1;-1:-1:-1::0;;;;;50151:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;50151:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;50200:30;;1266:41:1;;;50200:30:0::1;::::0;1239:18:1;50200:30:0::1;1126:187:1::0;56589:184:0;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;56643:12:::1;11881:6:::0;;56659:55:::1;::::0;-1:-1:-1;;;;;11881:6:0;;;;56688:21:::1;::::0;56643:12;56659:55;56643:12;56659:55;56688:21;11881:6;56659:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56642:72;;;56733:7;56725:40;;;::::0;-1:-1:-1;;;56725:40:0;;15071:2:1;56725:40:0::1;::::0;::::1;15053:21:1::0;15110:2;15090:18;;;15083:30;-1:-1:-1;;;15129:18:1;;;15122:50;15189:18;;56725:40:0::1;14869:344:1::0;12717:201:0;11854:7;11881:6;-1:-1:-1;;;;;11881:6:0;11262:10;12028:23;12020:68;;;;-1:-1:-1;;;12020:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12806:22:0;::::1;12798:73;;;::::0;-1:-1:-1;;;12798:73:0;;15420:2:1;12798:73:0::1;::::0;::::1;15402:21:1::0;15459:2;15439:18;;;15432:30;15498:34;15478:18;;;15471:62;-1:-1:-1;;;15549:18:1;;;15542:36;15595:19;;12798:73:0::1;15218:402:1::0;12798:73:0::1;12882:28;12901:8;12882:18;:28::i;44708:371::-:0;-1:-1:-1;;;;;44835:19:0;;44827:68;;;;-1:-1:-1;;;44827:68:0;;15827:2:1;44827:68:0;;;15809:21:1;15866:2;15846:18;;;15839:30;15905:34;15885:18;;;15878:62;-1:-1:-1;;;15956:18:1;;;15949:34;16000:19;;44827:68:0;15625:400:1;44827:68:0;-1:-1:-1;;;;;44914:21:0;;44906:68;;;;-1:-1:-1;;;44906:68:0;;16232:2:1;44906:68:0;;;16214:21:1;16271:2;16251:18;;;16244:30;16310:34;16290:18;;;16283:62;-1:-1:-1;;;16361:18:1;;;16354:32;16403:19;;44906:68:0;16030:398:1;44906:68:0;-1:-1:-1;;;;;44987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45039:32;;1657:25:1;;;45039:32:0;;1630:18:1;45039:32:0;;;;;;;44708:371;;;:::o;50577:2054::-;-1:-1:-1;;;;;50699:18:0;;50691:68;;;;-1:-1:-1;;;50691:68:0;;16635:2:1;50691:68:0;;;16617:21:1;16674:2;16654:18;;;16647:30;16713:34;16693:18;;;16686:62;-1:-1:-1;;;16764:18:1;;;16757:35;16809:19;;50691:68:0;16433:401:1;50691:68:0;-1:-1:-1;;;;;50778:16:0;;50770:64;;;;-1:-1:-1;;;50770:64:0;;17041:2:1;50770:64:0;;;17023:21:1;17080:2;17060:18;;;17053:30;17119:34;17099:18;;;17092:62;-1:-1:-1;;;17170:18:1;;;17163:33;17213:19;;50770:64:0;16839:399:1;50770:64:0;50853:28;50884:24;50902:4;50884:9;:24::i;:::-;50987:18;;51058:16;;50853:55;;-1:-1:-1;50950:55:0;;;;51058:16;;51057:17;:57;;;;;51091:23;51057:57;:97;;;;-1:-1:-1;51141:8:0;;51153:1;;51131:19;;-1:-1:-1;;;;;51141:8:0;51131:9;:19::i;:::-;:23;51057:97;:143;;;;-1:-1:-1;;;;;;51171:29:0;;;;;;:25;:29;;;;;;;;51057:143;51039:209;;;51227:9;:7;:9::i;:::-;51258:14;38587:10;;;38566:18;:31;38632:13;;;38608:21;:37;38680:13;;;38656:21;:37;38723:8;;;38704:16;:27;-1:-1:-1;38744:12:0;;;;38767:17;;;;38795:14;;;;38820:17;38523:322;51258:14;51388:16;;;;51387:17;:58;;;;-1:-1:-1;;;;;;51422:23:0;;;;;;:17;:23;;;;;;;;51421:24;51387:58;:97;;;;-1:-1:-1;;;;;;51463:21:0;;;;;;:17;:21;;;;;;;;51462:22;51387:97;51369:689;;;-1:-1:-1;;;;;51535:31:0;;;;;;:25;:31;;;;;;;;51531:516;;;51600:12;;;;;;;;51587:10;:25;-1:-1:-1;;;51647:15:0;;;;51631:13;:31;-1:-1:-1;;;51697:15:0;;;;51681:13;:31;-1:-1:-1;;;51742:10:0;;;;51731:8;:21;51531:516;;;-1:-1:-1;;;;;51812:29:0;;;;;;:25;:29;;;;;;;;51808:239;;;51875:13;;;;;;;;51862:10;:26;-1:-1:-1;;;51923:16:0;;;;51907:13;:32;-1:-1:-1;;;51974:16:0;;;;51958:13;:32;-1:-1:-1;;;52020:11:0;;;;52009:8;:22;51808:239;52068:32;52083:4;52089:2;52093:6;52068:14;:32::i;:::-;52111:15;38908:16;;38897:8;:27;38948:18;;38935:10;:31;38993:21;;38977:13;:37;39041:21;;39025:13;:37;38853:217;52111:15;52142:16;;;;52137:487;;-1:-1:-1;;;;;52180:40:0;;;;;;:34;:40;;;;;;;;52175:214;;52280:20;;52271:6;:29;52241:132;;;;-1:-1:-1;;;52241:132:0;;17445:2:1;52241:132:0;;;17427:21:1;17484:2;17464:18;;;17457:30;17523:31;17503:18;;;17496:59;17572:18;;52241:132:0;17243:353:1;52241:132:0;-1:-1:-1;;;;;52408:38:0;;;;;;:34;:38;;;;;;;;52403:210;;52513:9;;52497:13;52507:2;52497:9;:13::i;:::-;:25;52467:130;;;;-1:-1:-1;;;52467:130:0;;17803:2:1;52467:130:0;;;17785:21:1;17842:2;17822:18;;;17815:30;17881:33;17861:18;;;17854:61;17932:18;;52467:130:0;17601:355:1;52467:130:0;50680:1951;;50577:2054;;;:::o;37750:161::-;37792:7;37813:15;37830;37849:19;:17;:19::i;:::-;37812:56;;-1:-1:-1;37812:56:0;-1:-1:-1;37886:17:0;37812:56;;37886:17;:::i;:::-;37879:24;;;;37750:161;:::o;55649:932::-;55715:19;55737:10;:8;:10::i;:::-;55715:32;-1:-1:-1;55758:15:0;55776:20;55790:6;55715:32;55776:20;:::i;:::-;-1:-1:-1;;;;;55810:19:0;;;;;;:11;:19;;;;;;55758:38;;-1:-1:-1;55810:19:0;;55807:764;;;-1:-1:-1;;;;;55863:15:0;;;;;;:7;:15;;;;;;55853:25;;;55845:55;;;;-1:-1:-1;;;55845:55:0;;18163:2:1;55845:55:0;;;18145:21:1;18202:2;18182:18;;;18175:30;-1:-1:-1;;;18221:18:1;;;18214:47;18278:18;;55845:55:0;17961:341:1;55845:55:0;-1:-1:-1;;;;;55927:15:0;;;;;;:7;:15;;;;;:25;;55946:6;;55927:15;:25;;55946:6;;55927:25;:::i;:::-;;;;-1:-1:-1;;;;;;;55999:15:0;;;;;;:7;:15;;;;;;55989:25;;:53;;56035:7;55989:53;;;-1:-1:-1;;;;;56017:15:0;;;;;;:7;:15;;;;;;55989:53;-1:-1:-1;;;;;56057:15:0;;;;;;:7;:15;;;;;:26;;55979:63;;-1:-1:-1;55979:63:0;;56057:15;;;:26;;55979:63;;56057:26;:::i;:::-;;;;-1:-1:-1;;56108:7:0;;:16;;56118:6;;56108:16;:::i;:::-;56098:7;:26;56149:7;;:17;;56159:7;;56149:17;:::i;:::-;56139:7;:27;56186:36;;1657:25:1;;;56211:1:0;;-1:-1:-1;;;;;56186:36:0;;;-1:-1:-1;;;;;;;;;;;56186:36:0;1645:2:1;1630:18;56186:36:0;;;;;;;55807:764;;;-1:-1:-1;;;;;56288:15:0;;;;;;:7;:15;;;;;;56277:26;;;56269:56;;;;-1:-1:-1;;;56269:56:0;;18163:2:1;56269:56:0;;;18145:21:1;18202:2;18182:18;;;18175:30;-1:-1:-1;;;18221:18:1;;;18214:47;18278:18;;56269:56:0;17961:341:1;56269:56:0;-1:-1:-1;;;;;56340:15:0;;;;;;:7;:15;;;;;:26;;56359:7;;56340:15;:26;;56359:7;;56340:26;:::i;:::-;;;;-1:-1:-1;;;;;;;56381:15:0;;;;;;:7;:15;;;;;:25;;56400:6;;56381:15;:25;;56400:6;;56381:25;:::i;:::-;;;;-1:-1:-1;;56431:7:0;;:16;;56441:6;;56431:16;:::i;:::-;56421:7;:26;56472:7;;:17;;56482:7;;56472:17;:::i;:::-;56462:7;:27;56509:36;;1657:25:1;;;56534:1:0;;-1:-1:-1;;;;;56509:36:0;;;-1:-1:-1;;;;;;;;;;;56509:36:0;1645:2:1;1630:18;56509:36:0;;;;;;;55807:764;55704:877;;55649:932;;:::o;37151:591::-;37252:7;37274;37296;37318;37340;37375:12;37390:27;37409:7;37390:18;:27::i;:::-;37375:42;;37428:18;37449:30;37471:7;37449:21;:30::i;:::-;37428:51;;37490:18;37511:30;37533:7;37511:21;:30::i;:::-;37490:51;;37552:13;37568:25;37585:7;37568:16;:25::i;:::-;37552:41;;37604:23;37630:32;37654:7;37630:23;:32::i;:::-;37604:58;37698:4;;-1:-1:-1;37704:10:0;;-1:-1:-1;37716:10:0;;-1:-1:-1;37704:10:0;-1:-1:-1;37151:591:0;;-1:-1:-1;;;37151:591:0:o;49510:484::-;-1:-1:-1;;;;;49615:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;49593:146;;;;-1:-1:-1;;;49593:146:0;;18509:2:1;49593:146:0;;;18491:21:1;18548:2;18528:18;;;18521:30;18587:34;18567:18;;;18560:62;18658:26;18638:18;;;18631:54;18702:19;;49593:146:0;18307:420:1;49593:146:0;-1:-1:-1;;;;;49750:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;49750:39:0;;;;;;;;;;;;49800:71;;49811:23;49829:4;49811:17;:23::i;:::-;49800:71;;;49850:21;49866:4;49850:15;:21::i;:::-;-1:-1:-1;;;;;49882:40:0;;;;;;:34;:40;;;;;;;;;:48;;-1:-1:-1;;49882:48:0;;;;;;;;;;49946:40;;1266:41:1;;;49946:40:0;;1239:18:1;49946:40:0;1126:187:1;13078:191:0;13152:16;13171:6;;-1:-1:-1;;;;;13188:17:0;;;-1:-1:-1;;;;;;13188:17:0;;;;;;13221:40;;13171:6;;;;;;;13221:40;;13152:16;13221:40;13141:128;13078:191;:::o;13333:211::-;13477:58;;;-1:-1:-1;;;;;18924:32:1;;13477:58:0;;;18906:51:1;18973:18;;;;18966:34;;;13477:58:0;;;;;;;;;;18879:18:1;;;;13477:58:0;;;;;;;;-1:-1:-1;;;;;13477:58:0;-1:-1:-1;;;13477:58:0;;;13450:86;;13470:5;;13450:19;:86::i;:::-;13333:211;;;:::o;52639:2113::-;45121:16;:23;;-1:-1:-1;;45121:23:0;45140:4;45121:23;;;:16;52715:24:::1;52733:4;52715:9;:24::i;:::-;52689:50;;52750:24;52799:19;;52777;;:41;;;;:::i;:::-;52750:68:::0;-1:-1:-1;52833:21:0;;;:59:::1;;;52876:16;52858:15;:34;52833:59;52829:98;;;52909:7;;;;52829:98;52988:26;53039:1;53017:19;;:23;;;;:::i;:::-;53149:17;::::0;52988:52;;-1:-1:-1;53079:21:0::1;::::0;53051:25:::1;::::0;-1:-1:-1;;;53149:17:0;::::1;;;53145:1136;;;53183:21;53224:19;;53205:18;:38;;;;:::i;:::-;53183:60:::0;-1:-1:-1;53261:15:0;;53258:68:::1;;53295:31;53312:13;53295:16;:31::i;:::-;53341:18;53362:39;53384:17:::0;53362:21:::1;:39;:::i;:::-;53341:60;;53416:23;53473:13;53453:19;;53442:10;:30;;;;:::i;:::-;:44;;;;:::i;:::-;53416:70:::0;-1:-1:-1;53519:28:0::1;53416:70:::0;53519:10;:28:::1;:::i;:::-;53501:46:::0;-1:-1:-1;53565:17:0;;53562:286:::1;;53627:15;::::0;53619:57:::1;::::0;53603:12:::1;::::0;-1:-1:-1;;;;;53627:15:0::1;::::0;53656;;53603:12;53619:57;53603:12;53619:57;53656:15;53627;53619:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53602:74;;;53698:7;53695:119;;;53757:37;::::0;;53775:1:::1;6541:25:1::0;;6597:2;6582:18;;6575:34;;;53757:37:0::1;::::0;6514:18:1;53757:37:0::1;;;;;;;53695:119;53583:265;53562:286;53168:703;;;53145:1136;;;53895:20:::0;;53892:78:::1;;53934:36;53951:18;53934:16;:36::i;:::-;54003:39;54025:17:::0;54003:21:::1;:39;:::i;:::-;54074:19;::::0;53985:57;;-1:-1:-1;54074:21:0;54071:187:::1;;54140:15;::::0;54157:19:::1;::::0;54115:62:::1;::::0;54133:4:::1;::::0;-1:-1:-1;;;;;54140:15:0;;::::1;::::0;54115:9:::1;:62::i;:::-;54219:19;::::0;54201:41:::1;::::0;;6541:25:1;;;54240:1:0::1;6597:2:1::0;6582:18;;6575:34;54201:41:0::1;::::0;6514:18:1;54201:41:0::1;;;;;;;54071:187;54318:1;54297:18;:22;:45;;;;;54341:1;54323:15;:19;54297:45;54293:198;;;54359:49;54372:18;54392:15;54359:12;:49::i;:::-;54428:51;::::0;;6541:25:1;;;6597:2;6582:18;;6575:34;;;54428:51:0::1;::::0;6514:18:1;54428:51:0::1;;;;;;;54293:198;54523:1;54501:19;:23:::0;;;54535:19:::1;:23:::0;;;11881:6;-1:-1:-1;;;;;11881:6:0;54572:19;54569:173:::1;;54606:59;54624:4;54631:7;11854::::0;11881:6;-1:-1:-1;;;;;11881:6:0;;11808:87;54631:7:::1;54640:24;54658:4;54640:9;:24::i;:::-;54606:9;:59::i;:::-;54569:173;;;54696:46;54710:4;54717:24;54735:4;54717:9;:24::i;:::-;54696:5;:46::i;:::-;52678:2074;;;;;45155:1;45167:16:::0;:24;;-1:-1:-1;;45167:24:0;;;52639:2113::o;34123:2242::-;34277:23;34315:12;34342:18;34375;34408:13;34435:19;34447:6;34435:11;:19::i;:::-;34251:203;;;;;;;;;;34465:19;34487:10;:8;:10::i;:::-;34465:32;;34563:5;34553:7;;:15;;;;:::i;:::-;34543:7;:25;34603:17;34609:11;34603:5;:17;:::i;:::-;34593:7;;:27;;;;:::i;:::-;34583:7;:37;34640:35;;1657:25:1;;;34665:1:0;;-1:-1:-1;;;;;34640:35:0;;;-1:-1:-1;;;;;;;;;;;34640:35:0;1645:2:1;1630:18;34640:35:0;;;;;;;34823:10;34803:19;;:30;;;;:::i;:::-;34781:19;:52;34870:19;;:30;;34890:10;;34870:30;:::i;:::-;34848:19;:52;34915:17;34935:21;34946:10;34935;:21;:::i;:::-;34915:41;-1:-1:-1;35019:23:0;35031:11;34915:41;35019:23;:::i;:::-;35012:4;34996:22;;;;:7;:22;;;;;;:46;;;;:::i;:::-;34987:4;34971:22;;;;:7;:22;;;;;;;;:71;;;;35061:11;:26;;;;;;35057:106;;;35147:4;35131:22;;;;:7;:22;;;;;;:32;;35154:9;;35131:32;:::i;:::-;35122:4;35106:22;;;;:7;:22;;;;;:57;35057:106;-1:-1:-1;;;;;;35189:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35213:22:0;;;;;;:11;:22;;;;;;;;35212:23;35189:46;35185:1067;;;-1:-1:-1;;;;;35270:15:0;;;;;;:7;:15;;;;;;:22;;35286:6;;35270:22;:::i;:::-;-1:-1:-1;;;;;35252:15:0;;;;;;:7;:15;;;;;:40;35341:18;35348:11;35341:6;:18;:::i;:::-;-1:-1:-1;;;;;35325:15:0;;;;;;:7;:15;;;;;;:34;;;;:::i;:::-;-1:-1:-1;;;;;35307:15:0;;;;;;:7;:15;;;;;:52;35414:27;35430:11;35414:15;:27;:::i;:::-;-1:-1:-1;;;;;35395:18:0;;;;;;:7;:18;;;;;;:46;;;;:::i;:::-;-1:-1:-1;;;;;35374:18:0;;;;;;:7;:18;;;;;:67;35185:1067;;;-1:-1:-1;;;;;35464:19:0;;;;;;:11;:19;;;;;;;;35463:20;:46;;;;-1:-1:-1;;;;;;35487:22:0;;;;;;:11;:22;;;;;;;;35463:46;35459:793;;;35560:18;35567:11;35560:6;:18;:::i;:::-;-1:-1:-1;;;;;35544:15:0;;;;;;:7;:15;;;;;;:34;;;;:::i;:::-;-1:-1:-1;;;;;35526:15:0;;;;;;;:7;:15;;;;;;;;:52;;;;35614:18;;;;;:7;:18;;;;;:34;;35633:15;;35614:34;:::i;:::-;-1:-1:-1;;;;;35593:18:0;;;;;;:7;:18;;;;;:55;35703:27;35719:11;35703:15;:27;:::i;35459:793::-;-1:-1:-1;;;;;35752:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35775:22:0;;;;;;:11;:22;;;;;;;;35752:45;35748:504;;;-1:-1:-1;;;;;35832:15:0;;;;;;:7;:15;;;;;;:22;;35848:6;;35832:22;:::i;:::-;-1:-1:-1;;;;;35814:15:0;;;;;;:7;:15;;;;;:40;35903:18;35910:11;35903:6;:18;:::i;35748:504::-;36140:18;36147:11;36140:6;:18;:::i;:::-;-1:-1:-1;;;;;36124:15:0;;;;;;:7;:15;;;;;;:34;;;;:::i;:::-;-1:-1:-1;;;;;36106:15:0;;;;;;:7;:15;;;;;:52;36213:27;36229:11;36213:15;:27;:::i;:::-;-1:-1:-1;;;;;36194:18:0;;;;;;:7;:18;;;;;;:46;;;;:::i;:::-;-1:-1:-1;;;;;36173:18:0;;;;;;:7;:18;;;;;:67;35748:504;36262:35;36274:16;36279:11;36274:4;:16;:::i;:::-;36292:4;36262:11;:35::i;:::-;36330:9;-1:-1:-1;;;;;36313:44:0;36322:6;-1:-1:-1;;;;;36313:44:0;-1:-1:-1;;;;;;;;;;;36341:15:0;36313:44;;;;1657:25:1;;1645:2;1630:18;;1511:177;36313:44:0;;;;;;;;34240:2125;;;;;;34123:2242;;;:::o;37919:596::-;38017:7;;38053;;37970;;;;;38071:332;38095:9;:16;38091:20;;38071:332;;;38179:7;38155;:21;38163:9;38173:1;38163:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38163:12:0;38155:21;;;;;;;;;;;;;:31;;:83;;;38231:7;38207;:21;38215:9;38225:1;38215:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38215:12:0;38207:21;;;;;;;;;;;;;:31;38155:83;38133:146;;;38262:7;;38271;;38254:25;;;;;;;37919:596;;:::o;38133:146::-;38313:7;:21;38321:9;38331:1;38321:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38321:12:0;38313:21;;;;;;;;;;;;;38304:31;;:7;:31;:::i;:::-;38294:41;;38369:7;:21;38377:9;38387:1;38377:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38377:12:0;38369:21;;;;;;;;;;;;;38360:31;;:7;:31;:::i;:::-;38350:41;-1:-1:-1;38113:3:0;;;;:::i;:::-;;;;38071:332;;;;38436:7;;38427;;:17;;;;:::i;:::-;38417:7;:27;38413:58;;;38454:7;;38463;;38446:25;;;;;;37919:596;;:::o;38413:58::-;38490:7;;38499;;-1:-1:-1;37919:596:0;-1:-1:-1;37919:596:0:o;39078:162::-;39172:7;39226:5;39213:10;;39204:7;:20;;;;:::i;:::-;:28;;;;:::i;39248:168::-;39345:7;39402:5;39386:13;;39377:7;:23;;;;:::i;39424:168::-;39521:7;39578:5;39562:13;;39553:7;:23;;;;:::i;39600:158::-;39692:7;39744:5;39733:8;;39724:7;:18;;;;:::i;39764:217::-;39863:7;39967:5;39951:13;;39935;;39922:10;;39911:8;;39904:4;:15;;;;:::i;:::-;:28;;;;:::i;:::-;:44;;;;:::i;:::-;:60;;;;:::i;:::-;39895:70;;:7;:70;:::i;15906:716::-;16330:23;16356:69;16384:4;16356:69;;;;;;;;;;;;;;;;;16364:5;-1:-1:-1;;;;;16356:27:0;;;:69;;;;;:::i;:::-;16440:17;;16330:95;;-1:-1:-1;16440:21:0;16436:179;;16537:10;16526:30;;;;;;;;;;;;:::i;:::-;16518:85;;;;-1:-1:-1;;;16518:85:0;;19985:2:1;16518:85:0;;;19967:21:1;20024:2;20004:18;;;19997:30;20063:34;20043:18;;;20036:62;-1:-1:-1;;;20114:18:1;;;20107:40;20164:19;;16518:85:0;19783:406:1;54764:424:0;54854:16;;;54868:1;54854:16;;;;;;;;54830:21;;54854:16;;;;;;;;;;-1:-1:-1;54854:16:0;54830:40;;54899:4;54881;54886:1;54881:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54881:23:0;;;:7;;;;;;;;;;:23;;;;54925:10;;:17;;;-1:-1:-1;;;54925:17:0;;;;:10;;;;;:15;;:17;;;;;54881:7;;54925:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54915:4;54920:1;54915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54915:27:0;;;:7;;;;;;;;;:27;54953:10;;:219;;-1:-1:-1;;;54953:219:0;;:10;;;:61;;:219;;55029:11;;54953:10;;55099:4;;55126;;55146:15;;54953:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54819:369;54764:424;:::o;55196:352::-;55285:10;;:255;;-1:-1:-1;;;55285:255:0;;55352:4;55285:255;;;21652:34:1;21702:18;;;21695:34;;;55285:10:0;21745:18:1;;;21738:34;;;21788:18;;;21781:34;55492:6:0;21831:19:1;;;21824:44;55514:15:0;21884:19:1;;;21877:35;-1:-1:-1;;;;;55285:10:0;;;;:26;;55319:9;;21586:19:1;;55285:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37002:141::-;37089:4;37080:7;;:14;;;;:::i;:::-;37070:7;:24;37118:10;;:17;;37130:4;;37118:17;:::i;:::-;37105:10;:30;-1:-1:-1;;37002:141:0:o;3884:229::-;4021:12;4053:52;4075:6;4083:4;4089:1;4092:12;4053:21;:52::i;:::-;4046:59;3884:229;-1:-1:-1;;;;3884:229:0:o;5004:510::-;5174:12;5232:5;5207:21;:30;;5199:81;;;;-1:-1:-1;;;5199:81:0;;22436:2:1;5199:81:0;;;22418:21:1;22475:2;22455:18;;;22448:30;22514:34;22494:18;;;22487:62;-1:-1:-1;;;22565:18:1;;;22558:36;22611:19;;5199:81:0;22234:402:1;5199:81:0;-1:-1:-1;;;;;1434:19:0;;;5291:60;;;;-1:-1:-1;;;5291:60:0;;22843:2:1;5291:60:0;;;22825:21:1;22882:2;22862:18;;;22855:30;22921:31;22901:18;;;22894:59;22970:18;;5291:60:0;22641:353:1;5291:60:0;5365:12;5379:23;5406:6;-1:-1:-1;;;;;5406:11:0;5425:5;5432:4;5406:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5364:73;;;;5455:51;5472:7;5481:10;5493:12;5455:16;:51::i;:::-;5448:58;5004:510;-1:-1:-1;;;;;;;5004:510:0:o;7690:712::-;7840:12;7869:7;7865:530;;;-1:-1:-1;7900:10:0;7893:17;;7865:530;8014:17;;:21;8010:374;;8212:10;8206:17;8273:15;8260:10;8256:2;8252:19;8245:44;8010:374;8355:12;8348:20;;-1:-1:-1;;;8348:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;1878:159::-;1945:20;;2005:6;1994:18;;1984:29;;1974:57;;2027:1;2024;2017:12;1974:57;1878:159;;;:::o;2042:256::-;2108:6;2116;2169:2;2157:9;2148:7;2144:23;2140:32;2137:52;;;2185:1;2182;2175:12;2137:52;2208:28;2226:9;2208:28;:::i;:::-;2198:38;;2255:37;2288:2;2277:9;2273:18;2255:37;:::i;:::-;2245:47;;2042:256;;;;;:::o;2303:456::-;2380:6;2388;2396;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2504:9;2491:23;2523:31;2548:5;2523:31;:::i;:::-;2573:5;-1:-1:-1;2630:2:1;2615:18;;2602:32;2643:33;2602:32;2643:33;:::i;:::-;2303:456;;2695:7;;-1:-1:-1;;;2749:2:1;2734:18;;;;2721:32;;2303:456::o;2764:118::-;2850:5;2843:13;2836:21;2829:5;2826:32;2816:60;;2872:1;2869;2862:12;2887:382;2952:6;2960;3013:2;3001:9;2992:7;2988:23;2984:32;2981:52;;;3029:1;3026;3019:12;2981:52;3068:9;3055:23;3087:31;3112:5;3087:31;:::i;:::-;3137:5;-1:-1:-1;3194:2:1;3179:18;;3166:32;3207:30;3166:32;3207:30;:::i;:::-;3256:7;3246:17;;;2887:382;;;;;:::o;3463:247::-;3522:6;3575:2;3563:9;3554:7;3550:23;3546:32;3543:52;;;3591:1;3588;3581:12;3543:52;3630:9;3617:23;3649:31;3674:5;3649:31;:::i;3715:309::-;3780:6;3788;3841:2;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3893:9;3880:23;3870:33;;3953:2;3942:9;3938:18;3925:32;3966:28;3988:5;3966:28;:::i;4472:388::-;4540:6;4548;4601:2;4589:9;4580:7;4576:23;4572:32;4569:52;;;4617:1;4614;4607:12;4569:52;4656:9;4643:23;4675:31;4700:5;4675:31;:::i;:::-;4725:5;-1:-1:-1;4782:2:1;4767:18;;4754:32;4795:33;4754:32;4795:33;:::i;4865:380::-;4944:1;4940:12;;;;4987;;;5008:61;;5062:4;5054:6;5050:17;5040:27;;5008:61;5115:2;5107:6;5104:14;5084:18;5081:38;5078:161;;5161:10;5156:3;5152:20;5149:1;5142:31;5196:4;5193:1;5186:15;5224:4;5221:1;5214:15;5078:161;;4865:380;;;:::o;5250:356::-;5452:2;5434:21;;;5471:18;;;5464:30;5530:34;5525:2;5510:18;;5503:62;5597:2;5582:18;;5250:356::o;5611:127::-;5672:10;5667:3;5663:20;5660:1;5653:31;5703:4;5700:1;5693:15;5727:4;5724:1;5717:15;5743:217;5783:1;5809;5799:132;;5853:10;5848:3;5844:20;5841:1;5834:31;5888:4;5885:1;5878:15;5916:4;5913:1;5906:15;5799:132;-1:-1:-1;5945:9:1;;5743:217::o;6620:168::-;6687:6;6713:10;;;6725;;;6709:27;;6748:11;;;6745:37;;;6762:18;;:::i;6793:345::-;6995:2;6977:21;;;7034:2;7014:18;;;7007:30;-1:-1:-1;;;7068:2:1;7053:18;;7046:51;7129:2;7114:18;;6793:345::o;7143:344::-;7345:2;7327:21;;;7384:2;7364:18;;;7357:30;-1:-1:-1;;;7418:2:1;7403:18;;7396:50;7478:2;7463:18;;7143:344::o;7492:339::-;7694:2;7676:21;;;7733:2;7713:18;;;7706:30;-1:-1:-1;;;7767:2:1;7752:18;;7745:45;7822:2;7807:18;;7492:339::o;7836:338::-;8038:2;8020:21;;;8077:2;8057:18;;;8050:30;-1:-1:-1;;;8111:2:1;8096:18;;8089:44;8165:2;8150:18;;7836:338::o;8628:128::-;8695:9;;;8716:11;;;8713:37;;;8730:18;;:::i;9859:127::-;9920:10;9915:3;9911:20;9908:1;9901:31;9951:4;9948:1;9941:15;9975:4;9972:1;9965:15;9991:168;10064:9;;;10095;;10112:15;;;10106:22;;10092:37;10082:71;;10133:18;;:::i;10164:125::-;10229:9;;;10250:10;;;10247:36;;;10263:18;;:::i;10294:127::-;10355:10;10350:3;10346:20;10343:1;10336:31;10386:4;10383:1;10376:15;10410:4;10407:1;10400:15;10426:135;10465:3;10486:17;;;10483:43;;10506:18;;:::i;:::-;-1:-1:-1;10553:1:1;10542:13;;10426:135::o;12801:251::-;12871:6;12924:2;12912:9;12903:7;12899:23;12895:32;12892:52;;;12940:1;12937;12930:12;12892:52;12972:9;12966:16;12991:31;13016:5;12991:31;:::i;14057:184::-;14127:6;14180:2;14168:9;14159:7;14155:23;14151:32;14148:52;;;14196:1;14193;14186:12;14148:52;-1:-1:-1;14219:16:1;;14057:184;-1:-1:-1;14057:184:1:o;19533:245::-;19600:6;19653:2;19641:9;19632:7;19628:23;19624:32;19621:52;;;19669:1;19666;19659:12;19621:52;19701:9;19695:16;19720:28;19742:5;19720:28;:::i;20326:980::-;20588:4;20636:3;20625:9;20621:19;20667:6;20656:9;20649:25;20693:2;20731:6;20726:2;20715:9;20711:18;20704:34;20774:3;20769:2;20758:9;20754:18;20747:31;20798:6;20833;20827:13;20864:6;20856;20849:22;20902:3;20891:9;20887:19;20880:26;;20941:2;20933:6;20929:15;20915:29;;20962:1;20972:195;20986:6;20983:1;20980:13;20972:195;;;21051:13;;-1:-1:-1;;;;;21047:39:1;21035:52;;21142:15;;;;21107:12;;;;21083:1;21001:9;20972:195;;;-1:-1:-1;;;;;;;21223:32:1;;;;21218:2;21203:18;;21196:60;-1:-1:-1;;;21287:3:1;21272:19;21265:35;21184:3;20326:980;-1:-1:-1;;;20326:980:1:o;21923:306::-;22011:6;22019;22027;22080:2;22068:9;22059:7;22055:23;22051:32;22048:52;;;22096:1;22093;22086:12;22048:52;22125:9;22119:16;22109:26;;22175:2;22164:9;22160:18;22154:25;22144:35;;22219:2;22208:9;22204:18;22198:25;22188:35;;21923:306;;;;;:::o;22999:287::-;23128:3;23166:6;23160:13;23182:66;23241:6;23236:3;23229:4;23221:6;23217:17;23182:66;:::i;:::-;23264:16;;;;;22999:287;-1:-1:-1;;22999:287:1:o
Swarm Source
ipfs://ad1241f9833d857a6e29d5e48d50ad97079784fd2dc5dddaba662e4a40a321ac
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.65
Net Worth in ETH
0.000226
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $2,864.59 | 0.0002257 | $0.646527 |
Loading...
Loading
Loading...
Loading
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.