Contract
0x37A41688AeD27D303dfeE5CC89D4D25570756945
11
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Contract Name:
AFFITRUM
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-07-11 */ /* ████████╗██████╗░██╗░░░██╗███╗░░░███╗ ██╗░██████╗ ░██████╗░█████╗░███████╗██╗░░░██╗ ╚══██╔══╝██╔══██╗██║░░░██║████╗░████║ ██║██╔════╝ ██╔════╝██╔══██╗██╔════╝██║░░░██║ ░░░██║░░░██████╔╝██║░░░██║██╔████╔██║ ██║╚█████╗░ ╚█████╗░███████║█████╗░░██║░░░██║ ░░░██║░░░██╔══██╗██║░░░██║██║╚██╔╝██║ ██║░╚═══██╗ ░╚═══██╗██╔══██║██╔══╝░░██║░░░██║ ░░░██║░░░██║░░██║╚██████╔╝██║░╚═╝░██║ ██║██████╔╝ ██████╔╝██║░░██║██║░░░░░╚██████╔╝ ##CONTRACT FEATURES FOR SAFUU *Owner can not modify tax *Owner can not mint tokens *Owner can not recover own token *Owner can not edit balance *Owner can not blacklist users *Owner can not suspend trading *Owner can not set max wallet or tx amount *Permanently fixed 9% Buy and Sell tax *Ownership Renounced after Airdrop. ##Socials## twitter: https://twitter.com/affitrum telegram: https://t.me/affitrum telegram channel: https://t.me/affitrumprotocol facebook: https://facebook.com/affitrum youtube: https://www.youtube.com/channel/UClPL3Ff4xfY2z18rBC1Xjtg medium: https://medium.com/@affitrum */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 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 {} } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (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); } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure * unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an * array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } // File: contracts/interfaces/ICamelotFactory.sol pragma solidity >=0.5.0; interface ICamelotFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function owner() external view returns (address); function feePercentOwner() external view returns (address); function setStableOwner() external view returns (address); function feeTo() external view returns (address); function ownerFeeShare() external view returns (uint256); function referrersFeeShare(address) external view returns (uint256); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function feeInfo() external view returns (uint _ownerFeeShare, address _feeTo); } // File: contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/interfaces/ICamelotRouter.sol pragma solidity >=0.6.2; interface ICamelotRouter is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, address referrer, uint deadline ) external; function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); } // File: contracts/interfaces/IJackpot.sol pragma solidity >=0.5.0; interface IJackpot { function lottery(address sender, uint256 amount) external; } interface IAutoliquidityTreasury { function autoAddLiquidity(address contractA, address contractB, uint256 tokenAmountA) external; } // File: contracts/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } pragma solidity >=0.5.0; interface IAffiBonusPool { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function emergencyWithdraw(uint256 _pid) external; function injectRewards(uint256 amount) external; function injectRewardsWithTime(uint256 amount, uint256 rewardsSeconds) external; } // File: contracts/token/AFFITRUM.sol pragma solidity =0.8.19; contract AFFITRUM is ERC20, Ownable { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; event SwapBack(uint256 burn, uint256 liquidity, uint256 jackpot, uint256 bonus, uint256 dev, uint timestamp); event Trade(address pair, uint256 amount, uint side, uint256 circulatingSupply, uint timestamp); event AddLiquidity(uint256 tokenAmount, uint256 ethAmount, uint256 timestamp); event BuyBack(uint256 ethAmount, uint256 timestamp); bool public swapEnabled = true; bool public addLiquidityEnabled = true; bool public autoBuyBackEnabled = true; bool public inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } mapping(address => bool) public isFeeExempt; mapping(address => bool) public canAddLiquidityBeforeLaunch; mapping(address => address) public referrers; mapping(address => uint256) public totalCoinsBought; uint256 private burnFee; uint256 private liquidityFee; uint256 private jackpotFee; uint256 private devFee; uint256 private bonusFee; uint256 private totalFee; uint256 public feeDenominator = 10000; uint256 public mintokenswapback; // Buy Fees uint256 public burnFeeBuy = 100; uint256 public liquidityFeeBuy = 100; uint256 public jackpotFeeBuy = 100; uint256 public bonusFeeBuy = 400; uint256 public devFeeBuy = 200; uint256 public totalFeeBuy = 900; // Sell Fees uint256 public burnFeeSell = 100; uint256 public liquidityFeeSell = 100; uint256 public jackpotFeeSell = 100; uint256 public bonusFeeSell = 400; uint256 public devFeeSell = 200; uint256 public totalFeeSell = 900; // Fees receivers address public bonusWallet; IJackpot public jackpotWallet; IAutoliquidityTreasury public AutoLiquidityTreasury; address private devWallet; IERC20 public backToken; IERC20 public USDT; uint256 public launchedAt; uint256 public launchedAtTimestamp; bool private initialized; ICamelotFactory private immutable factory; ICamelotRouter private immutable swapRouter; IWETH private immutable WETH; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; EnumerableSet.AddressSet private _pairs; constructor( IERC20 _backToken, address _factory, address _swapRouter, address _weth, IERC20 _usdt ) ERC20("AFFITRUM", "TRUM") { uint256 _totalSupply = 100_000_000 * 1e6; backToken = _backToken; USDT = _usdt; canAddLiquidityBeforeLaunch[_msgSender()] = true; canAddLiquidityBeforeLaunch[address(this)] = true; isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; factory = ICamelotFactory(_factory); swapRouter = ICamelotRouter(_swapRouter); WETH = IWETH(_weth); _mint(_msgSender(), _totalSupply); } function initializePair(address _pair) external onlyOwner { require(!initialized, "Already initialized"); address pair = factory.createPair(_pair, address(this)); _pairs.add(pair); initialized = true; } function decimals() public view virtual override returns (uint8) { return 6; } function transfer(address to, uint256 amount) public virtual override returns (bool) { return _AffiTransfer(_msgSender(), to, amount); } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(sender, spender, amount); return _AffiTransfer(sender, recipient, amount); } function _AffiTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { if (inSwap) { _transfer(sender, recipient, amount); return true; } if (!canAddLiquidityBeforeLaunch[sender]) { require(launched(), "Project Not yet started!!"); } bool shouldTakeFee = (!isFeeExempt[sender] && !isFeeExempt[recipient]) && launched(); uint side = 0; address user_ = sender; address pair_ = recipient; // Set Fees if (isPair(sender)) { buyFees(); side = 1; user_ = recipient; pair_ = sender; try jackpotWallet.lottery(recipient, amount) {} catch {} } else if (isPair(recipient)) { sellFees(); side = 2; } else { shouldTakeFee = false; } if (shouldSwapBack(address(sender))) { swapBack(); } uint256 amountReceived = shouldTakeFee ? takeFee(sender, amount) : amount; _transfer(sender, recipient, amountReceived); if (side > 0) { emit Trade(pair_, amount, side, getCirculatingSupply(), block.timestamp); } return true; } function shouldSwapBack(address sender) internal view returns (bool) { return !inSwap && swapEnabled && launched() && balanceOf(address(this)) > mintokenswapback && !isPair(_msgSender()) && sender != bonusWallet; } function swapBack() internal swapping { uint256 txAmount = balanceOf(address(this)); uint256 ethbalance = address(this).balance; _approve(address(this), address(swapRouter), txAmount); uint256 _totalFee = totalFee; uint256 amountAffiBurn = (txAmount * burnFee) / (_totalFee); uint256 amountAffiLp = (txAmount * liquidityFee) / (_totalFee); uint256 amountAffiBonus = (txAmount * bonusFee) / (_totalFee); txAmount -= amountAffiBurn; txAmount -= amountAffiLp; txAmount -= amountAffiBonus; //SWAP BACK TOKEN > USDT(LP) address[] memory path = new address[](3); path[0] = address(this); path[1] = address(USDT); path[2] = address(backToken); bool success = false; uint256 balanceBefore = backToken.balanceOf(address(this)); try swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(txAmount,0,path,address(this),address(0),block.timestamp) { success = true; } catch {} if (!success) { return; } _transfer(address(this), DEAD, amountAffiBurn); _transfer(address(this), address(bonusWallet), amountAffiBonus); uint256 amountBackToken = backToken.balanceOf(address(this)) - balanceBefore; uint256 backTokenTotalFee = _totalFee - burnFee - liquidityFee - bonusFee; uint256 amountBackTokenJackpot = (amountBackToken * jackpotFee) / backTokenTotalFee; uint256 amountBackTokenDev = amountBackToken - amountBackTokenJackpot; backToken.transfer(address(jackpotWallet), amountBackTokenJackpot); backToken.transfer(devWallet, amountBackTokenDev); if (addLiquidityEnabled) { _doAddLp(); } if (autoBuyBackEnabled && ethbalance > 0) { _buybackToken(); } emit SwapBack(amountAffiBurn, amountAffiLp, amountBackTokenJackpot, amountAffiBonus, amountBackTokenDev, block.timestamp); } function _doAddLp() internal { //swap half tokens to usdt to add LP address[] memory pathEth = new address[](2); pathEth[0] = address(this); pathEth[1] = address(USDT); uint256 tokenAmount = balanceOf(address(this)); uint256 half = tokenAmount / 2; if(half < 1000) return; //swap leftover to usdt bool success = false; try swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(half,0, pathEth,address(AutoLiquidityTreasury),address(0),block.timestamp) { success = true; } catch {} if (!success) { return; } //add liquidity _transfer(address(this), address(AutoLiquidityTreasury), half); _approve(address(AutoLiquidityTreasury), address(swapRouter), half); try AutoLiquidityTreasury.autoAddLiquidity(address(this), address(USDT), half) {} catch {} } function _buybackToken() internal swapping { address[] memory path = new address[](3); path[0] = address(WETH); path[1] = address(USDT); path[2] = address(this); uint256 ethAmountBefore = address(this).balance; try swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountBefore}(0, path, bonusWallet, address(0), block.timestamp) {} catch {} emit BuyBack(ethAmountBefore, block.timestamp); } function doSwapBack() public onlyOwner { swapBack(); } function launched() internal view returns (bool) { return launchedAt != 0; } function buyFees() internal { burnFee = burnFeeBuy; liquidityFee = liquidityFeeBuy; jackpotFee = jackpotFeeBuy; bonusFee = bonusFeeBuy; devFee = devFeeBuy; totalFee = totalFeeBuy; } function sellFees() internal { burnFee = burnFeeSell; liquidityFee = liquidityFeeSell; jackpotFee = jackpotFeeSell; bonusFee = bonusFeeSell; devFee = devFeeSell; totalFee = totalFeeSell; } function takeFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeAmount = (amount * totalFee) / feeDenominator; _transfer(sender, address(this), feeAmount); return amount - feeAmount; } function getCirculatingSupply() public view returns (uint256) { return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO); } /*** ADMIN FUNCTIONS ***/ function launch() public onlyOwner { require(launchedAt == 0, "Already launched"); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function rescueToken(address tokenAddress) external onlyOwner { require(tokenAddress != address(this), "CANT RESQUE OWN TOKEN"); IERC20(tokenAddress).safeTransfer(msg.sender,IERC20(tokenAddress).balanceOf(address(this))); } function clearStuckEthBalance() external onlyOwner { uint256 amountETH = address(this).balance; (bool success, ) = payable(_msgSender()).call{value: amountETH}(new bytes(0)); require(success, "ETH_TRANSFER_FAILED"); } function setFeeReceivers( address _bonusWallet, address _jackpotWallet, address _devWallet ) external onlyOwner { bonusWallet = _bonusWallet; jackpotWallet = IJackpot(_jackpotWallet); devWallet = _devWallet; } function setAutoLiquidityTreasury(address _AutoLiquidityTreasury) external onlyOwner { require(_AutoLiquidityTreasury != address(0), "Zero address"); AutoLiquidityTreasury = IAutoliquidityTreasury(_AutoLiquidityTreasury); } function setMinSwapbackAmount(uint256 _minimumswapbackamount) external onlyOwner { mintokenswapback = _minimumswapbackamount; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setSwapBackSettings(bool _enabled) external onlyOwner { swapEnabled = _enabled; } function setAddLiquidityEnabled(bool _enabled) external onlyOwner { addLiquidityEnabled = _enabled; } function setAutoBuyBackEnabled(bool _enabled) external onlyOwner { autoBuyBackEnabled = _enabled; } function isPair(address account) public view returns (bool) { return _pairs.contains(account); } function addPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "pair is the zero address"); return _pairs.add(pair); } function delPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "pair is the zero address"); return _pairs.remove(pair); } function getMinterLength() public view returns (uint256) { return _pairs.length(); } function getPair(uint256 index) public view returns (address) { require(index <= _pairs.length() - 1, "index out of bounds"); return _pairs.at(index); } receive() external payable {} }
[{"inputs":[{"internalType":"contract IERC20","name":"_backToken","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"contract IERC20","name":"_usdt","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"BuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"jackpot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"side","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"circulatingSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AutoLiquidityTreasury","outputs":[{"internalType":"contract IAutoliquidityTreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"autoBuyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEthBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"delPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","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":[{"internalType":"address","name":"_pair","type":"address"}],"name":"initializePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotWallet","outputs":[{"internalType":"contract IJackpot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintokenswapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAddLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_AutoLiquidityTreasury","type":"address"}],"name":"setAutoLiquidityTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusWallet","type":"address"},{"internalType":"address","name":"_jackpotWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumswapbackamount","type":"uint256"}],"name":"setMinSwapbackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalCoinsBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526001600560146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff0219169083151502179055506001600560166101000a81548160ff02191690831515021790555061271060105560646012556064601355606460145561019060155560c8601655610384601755606460185560646019556064601a55610190601b5560c8601c55610384601d55348015620000a857600080fd5b5060405162005c1638038062005c168339818101604052810190620000ce919062000739565b6040518060400160405280600881526020017f414646495452554d0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5452554d0000000000000000000000000000000000000000000000000000000081525081600390816200014b919062000a3b565b5080600490816200015d919062000a3b565b50505062000180620001746200044560201b60201c565b6200044d60201b60201c565b6000655af3107a4000905085602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620002236200044560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050620004396200042c6200044560201b60201c565b826200051360201b60201c565b50505050505062000c3d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057c9062000b83565b60405180910390fd5b62000599600083836200068060201b60201c565b8060026000828254620005ad919062000bd4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000660919062000c20565b60405180910390a36200067c600083836200068560201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006bc826200068f565b9050919050565b6000620006d082620006af565b9050919050565b620006e281620006c3565b8114620006ee57600080fd5b50565b6000815190506200070281620006d7565b92915050565b6200071381620006af565b81146200071f57600080fd5b50565b600081519050620007338162000708565b92915050565b600080600080600060a086880312156200075857620007576200068a565b5b60006200076888828901620006f1565b95505060206200077b8882890162000722565b94505060406200078e8882890162000722565b9350506060620007a18882890162000722565b9250506080620007b488828901620006f1565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200084357607f821691505b602082108103620008595762000858620007fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000884565b620008cf868362000884565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200091c620009166200091084620008e7565b620008f1565b620008e7565b9050919050565b6000819050919050565b6200093883620008fb565b62000950620009478262000923565b84845462000891565b825550505050565b600090565b6200096762000958565b620009748184846200092d565b505050565b5b818110156200099c57620009906000826200095d565b6001810190506200097a565b5050565b601f821115620009eb57620009b5816200085f565b620009c08462000874565b81016020851015620009d0578190505b620009e8620009df8562000874565b83018262000979565b50505b505050565b600082821c905092915050565b600062000a1060001984600802620009f0565b1980831691505092915050565b600062000a2b8383620009fd565b9150826002028217905092915050565b62000a4682620007c1565b67ffffffffffffffff81111562000a625762000a61620007cc565b5b62000a6e82546200082a565b62000a7b828285620009a0565b600060209050601f83116001811462000ab3576000841562000a9e578287015190505b62000aaa858262000a1d565b86555062000b1a565b601f19841662000ac3866200085f565b60005b8281101562000aed5784890151825560018201915060208501945060208101905062000ac6565b8683101562000b0d578489015162000b09601f891682620009fd565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b6b601f8362000b22565b915062000b788262000b33565b602082019050919050565b6000602082019050818103600083015262000b9e8162000b5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000be182620008e7565b915062000bee83620008e7565b925082820190508082111562000c095762000c0862000ba5565b5b92915050565b62000c1a81620008e7565b82525050565b600060208201905062000c37600083018462000c0f565b92915050565b60805160a05160c051614f8d62000c89600039600061349a01526000818161244601528181612715015281816132390152818161335601526135ce0152600061109b0152614f8d6000f3fe6080604052600436106103a65760003560e01c80638072250b116101e7578063b8c611301161010d578063cdba31fd116100a0578063e3df00341161006f578063e3df003414610de1578063e5e31b1314610e0a578063f2fde38b14610e47578063fb5f27fb14610e70576103ad565b8063cdba31fd14610d25578063d7c0103214610d50578063d830678614610d79578063dd62ed3e14610da4576103ad565b8063c2b7bbb6116100dc578063c2b7bbb614610c69578063c54e44eb14610ca6578063c6d2577d14610cd1578063c91d8f3c14610cfc576103ad565b8063b8c6113014610bc1578063bdf391cc14610bea578063bf56b37114610c27578063bfa382b514610c52576103ad565b806395d89b4111610185578063a9059cbb11610154578063a9059cbb14610b05578063aac46c9514610b42578063ace1880114610b6b578063b7eed4c414610b96576103ad565b806395d89b4114610a23578063979f166c14610a4e578063a457c2d714610a8b578063a5bc508514610ac8576103ad565b8063861faf5f116101c1578063861faf5f1461098b57806386c8782f146109b65780638da5cb5b146109e15780638fbbd75014610a0c576103ad565b80638072250b146108f857806382d20116146109355780638601394014610960576103ad565b80632d2f244b116102cc57806356320fb11161026a57806370a082311161023957806370a0823114610850578063715018a61461088d57806375552ea8146108a45780637c117a62146108cf576103ad565b806356320fb1146107a6578063658d4b7f146107d15780636c470595146107fa5780636ddd171314610825576103ad565b80633f4218e0116102a65780633f4218e0146106d85780634460d3cf146107155780634a3b68cc1461073e578063531484161461077b576103ad565b80632d2f244b14610645578063313ce56714610670578063395093511461069b576103ad565b806315674e8e11610344578063234a2daa11610313578063234a2daa1461058957806323b872dd146105b45780632a55fc2a146105f15780632b112e491461061a576103ad565b806315674e8e146104dd578063180b0d7e1461050857806318160ddd1461053357806318c1d9b21461055e576103ad565b806306fdde031161038057806306fdde031461041f578063095ea7b31461044a5780631107b3a51461048757806312835c5e146104b2576103ad565b806301339c21146103b25780630190b7a6146103c95780630323aac7146103f4576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e9b565b005b3480156103d557600080fd5b506103de610ef8565b6040516103eb9190613a28565b60405180910390f35b34801561040057600080fd5b50610409610efe565b6040516104169190613a28565b60405180910390f35b34801561042b57600080fd5b50610434610f0f565b6040516104419190613ad3565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613b84565b610fa1565b60405161047e9190613bdf565b60405180910390f35b34801561049357600080fd5b5061049c610fc4565b6040516104a99190613a28565b60405180910390f35b3480156104be57600080fd5b506104c7610fca565b6040516104d49190613a28565b60405180910390f35b3480156104e957600080fd5b506104f2610fd0565b6040516104ff9190613a28565b60405180910390f35b34801561051457600080fd5b5061051d610fd6565b60405161052a9190613a28565b60405180910390f35b34801561053f57600080fd5b50610548610fdc565b6040516105559190613a28565b60405180910390f35b34801561056a57600080fd5b50610573610fe6565b6040516105809190613c09565b60405180910390f35b34801561059557600080fd5b5061059e61100c565b6040516105ab9190613a28565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613c24565b611012565b6040516105e89190613bdf565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613c77565b61103f565b005b34801561062657600080fd5b5061062f61116d565b60405161063c9190613a28565b60405180910390f35b34801561065157600080fd5b5061065a6111a5565b6040516106679190613d03565b60405180910390f35b34801561067c57600080fd5b506106856111cb565b6040516106929190613d3a565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613b84565b6111d4565b6040516106cf9190613bdf565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613c77565b61120b565b60405161070c9190613bdf565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190613c77565b61122b565b005b34801561074a57600080fd5b5061076560048036038101906107609190613c77565b611348565b6040516107729190613c09565b60405180910390f35b34801561078757600080fd5b5061079061137b565b60405161079d9190613a28565b60405180910390f35b3480156107b257600080fd5b506107bb611381565b6040516107c89190613d76565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613dbd565b6113a7565b005b34801561080657600080fd5b5061080f61140a565b60405161081c9190613a28565b60405180910390f35b34801561083157600080fd5b5061083a611410565b6040516108479190613bdf565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613c77565b611423565b6040516108849190613a28565b60405180910390f35b34801561089957600080fd5b506108a261146b565b005b3480156108b057600080fd5b506108b961147f565b6040516108c69190613bdf565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190613c77565b611492565b005b34801561090457600080fd5b5061091f600480360381019061091a9190613c77565b61154d565b60405161092c9190613bdf565b60405180910390f35b34801561094157600080fd5b5061094a61156d565b6040516109579190613a28565b60405180910390f35b34801561096c57600080fd5b50610975611573565b6040516109829190613bdf565b60405180910390f35b34801561099757600080fd5b506109a0611586565b6040516109ad9190613e1e565b60405180910390f35b3480156109c257600080fd5b506109cb6115ac565b6040516109d89190613a28565b60405180910390f35b3480156109ed57600080fd5b506109f66115b2565b604051610a039190613c09565b60405180910390f35b348015610a1857600080fd5b50610a216115dc565b005b348015610a2f57600080fd5b50610a386115ee565b604051610a459190613ad3565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a709190613c77565b611680565b604051610a829190613a28565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190613b84565b611698565b604051610abf9190613bdf565b60405180910390f35b348015610ad457600080fd5b50610aef6004803603810190610aea9190613c77565b61170f565b604051610afc9190613bdf565b60405180910390f35b348015610b1157600080fd5b50610b2c6004803603810190610b279190613b84565b6117a3565b604051610b399190613bdf565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190613e39565b6117bf565b005b348015610b7757600080fd5b50610b806117e4565b604051610b8d9190613a28565b60405180910390f35b348015610ba257600080fd5b50610bab6117ea565b604051610bb89190613a28565b60405180910390f35b348015610bcd57600080fd5b50610be86004803603810190610be39190613e39565b6117f0565b005b348015610bf657600080fd5b50610c116004803603810190610c0c9190613e66565b611815565b604051610c1e9190613c09565b60405180910390f35b348015610c3357600080fd5b50610c3c61188a565b604051610c499190613a28565b60405180910390f35b348015610c5e57600080fd5b50610c67611890565b005b348015610c7557600080fd5b50610c906004803603810190610c8b9190613c77565b6119a3565b604051610c9d9190613bdf565b60405180910390f35b348015610cb257600080fd5b50610cbb611a37565b604051610cc89190613e1e565b60405180910390f35b348015610cdd57600080fd5b50610ce6611a5d565b604051610cf39190613a28565b60405180910390f35b348015610d0857600080fd5b50610d236004803603810190610d1e9190613e66565b611a63565b005b348015610d3157600080fd5b50610d3a611a75565b604051610d479190613a28565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d729190613e93565b611a7b565b005b348015610d8557600080fd5b50610d8e611b4b565b604051610d9b9190613bdf565b60405180910390f35b348015610db057600080fd5b50610dcb6004803603810190610dc69190613ee6565b611b5e565b604051610dd89190613a28565b60405180910390f35b348015610ded57600080fd5b50610e086004803603810190610e039190613e39565b611be5565b005b348015610e1657600080fd5b50610e316004803603810190610e2c9190613c77565b611c0a565b604051610e3e9190613bdf565b60405180910390f35b348015610e5357600080fd5b50610e6e6004803603810190610e699190613c77565b611c27565b005b348015610e7c57600080fd5b50610e85611caa565b604051610e929190613a28565b60405180910390f35b610ea3611cb0565b600060245414610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613f72565b60405180910390fd5b4360248190555042602581905550565b60115481565b6000610f0a6027611d2e565b905090565b606060038054610f1e90613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4a90613fc1565b8015610f975780601f10610f6c57610100808354040283529160200191610f97565b820191906000526020600020905b815481529060010190602001808311610f7a57829003601f168201915b5050505050905090565b600080610fac611d43565b9050610fb9818585611d4b565b600191505092915050565b60195481565b601c5481565b60125481565b60105481565b6000600254905090565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60008061101d611d43565b905061102a858285611f14565b611035858585611fa0565b9150509392505050565b611047611cb0565b602660009054906101000a900460ff1615611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e9061403e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539683306040518363ffffffff1660e01b81526004016110f492919061405e565b6020604051808303816000875af1158015611113573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611137919061409c565b905061114d81602761229790919063ffffffff16565b506001602660006101000a81548160ff0219169083151502179055505050565b60006111796000611423565b61118461dead611423565b61118c610fdc565b61119691906140f8565b6111a091906140f8565b905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006006905090565b6000806111df611d43565b90506112008185856111f18589611b5e565b6111fb919061412c565b611d4b565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b611233611cb0565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906141ac565b60405180910390fd5b611345338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112de9190613c09565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f91906141e1565b8373ffffffffffffffffffffffffffffffffffffffff166122c79092919063ffffffff16565b50565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113af611cb0565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b600560149054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611473611cb0565b61147d600061234d565b565b600560169054906101000a900460ff1681565b61149a611cb0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061425a565b60405180910390fd5b80602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b600560159054906101000a900460ff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115e4611cb0565b6115ec612413565b565b6060600480546115fd90613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461162990613fc1565b80156116765780601f1061164b57610100808354040283529160200191611676565b820191906000526020600020905b81548152906001019060200180831161165957829003601f168201915b5050505050905090565b60096020528060005260406000206000915090505481565b6000806116a3611d43565b905060006116b18286611b5e565b9050838110156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed906142ec565b60405180910390fd5b6117038286868403611d4b565b60019250505092915050565b6000611719611cb0565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614358565b60405180910390fd5b61179c826027612b3890919063ffffffff16565b9050919050565b60006117b76117b0611d43565b8484611fa0565b905092915050565b6117c7611cb0565b80600560156101000a81548160ff02191690831515021790555050565b601b5481565b601a5481565b6117f8611cb0565b80600560146101000a81548160ff02191690831515021790555050565b600060016118236027611d2e565b61182d91906140f8565b82111561186f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611866906143c4565b60405180910390fd5b611883826027612b6890919063ffffffff16565b9050919050565b60245481565b611898611cb0565b600047905060006118a7611d43565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff8111156118d9576118d86143e4565b5b6040519080825280601f01601f19166020018201604052801561190b5781602001600182028036833780820191505090505b50604051611919919061445a565b60006040518083038185875af1925050503d8060008114611956576040519150601f19603f3d011682016040523d82523d6000602084013e61195b565b606091505b505090508061199f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611996906144bd565b60405180910390fd5b5050565b60006119ad611cb0565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1390614358565b60405180910390fd5b611a3082602761229790919063ffffffff16565b9050919050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60255481565b611a6b611cb0565b8060118190555050565b60165481565b611a83611cb0565b82601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600560179054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bed611cb0565b80600560166101000a81548160ff02191690831515021790555050565b6000611c20826027612b8290919063ffffffff16565b9050919050565b611c2f611cb0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c959061454f565b60405180910390fd5b611ca78161234d565b50565b60175481565b611cb8611d43565b73ffffffffffffffffffffffffffffffffffffffff16611cd66115b2565b73ffffffffffffffffffffffffffffffffffffffff1614611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d23906145bb565b60405180910390fd5b565b6000611d3c82600001612bb2565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db19061464d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e20906146df565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f079190613a28565b60405180910390a3505050565b6000611f208484611b5e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f9a5781811015611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061474b565b60405180910390fd5b611f998484848403611d4b565b5b50505050565b6000600560179054906101000a900460ff1615611fcb57611fc2848484612bc3565b60019050612290565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661206457612024612e39565b612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906147b7565b60405180910390fd5b5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561210a5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561211a5750612119612e39565b5b9050600080869050600086905061213088611c0a565b156121d55761213d612e46565b60019250869150879050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab35127088886040518363ffffffff1660e01b81526004016121a49291906147d7565b600060405180830381600087803b1580156121be57600080fd5b505af19250505080156121cf575060015b506121fa565b6121de87611c0a565b156121f4576121eb612e7e565b600292506121f9565b600093505b5b61220388612eb6565b1561221157612210612413565b5b60008461221e5786612229565b6122288988612f80565b5b9050612236898983612bc3565b6000841115612286577fe0b736dda314e2582531850d21df6cf2e51c84c4c27ffeca38bbb029332fba8c82888661226b61116d565b4260405161227d959493929190614800565b60405180910390a15b6001955050505050505b9392505050565b60006122bf836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612fc0565b905092915050565b6123488363a9059cbb60e01b84846040516024016122e69291906147d7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613030565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600560176101000a81548160ff021916908315150217905550600061243930611423565b9050600047905061246b307f000000000000000000000000000000000000000000000000000000000000000084611d4b565b6000600f549050600081600a54856124839190614853565b61248d91906148c4565b9050600082600b54866124a09190614853565b6124aa91906148c4565b9050600083600e54876124bd9190614853565b6124c791906148c4565b905082866124d591906140f8565b955081866124e391906140f8565b955080866124f191906140f8565b95506000600367ffffffffffffffff8111156125105761250f6143e4565b5b60405190808252806020026020018201604052801561253e5781602001602082028036833780820191505090505b5090503081600081518110612556576125556148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106125c7576125c66148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110612638576126376148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126d09190613c09565b602060405180830381865afa1580156126ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271191906141e1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac3893ba8a600086306000426040518763ffffffff1660e01b815260040161277896959493929190614a1d565b600060405180830381600087803b15801561279257600080fd5b505af19250505080156127a3575060015b156127ad57600191505b816127c057505050505050505050612b1b565b6127cd3061dead88612bc3565b6127fa30601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686612bc3565b600081602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128589190613c09565b602060405180830381865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289991906141e1565b6128a391906140f8565b90506000600e54600b54600a548b6128bb91906140f8565b6128c591906140f8565b6128cf91906140f8565b9050600081600c54846128e29190614853565b6128ec91906148c4565b9050600081846128fc91906140f8565b9050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161297d9291906147d7565b6020604051808303816000875af115801561299c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c09190614a9a565b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612a409291906147d7565b6020604051808303816000875af1158015612a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a839190614a9a565b50600560159054906101000a900460ff1615612aa257612aa16130f7565b5b600560169054906101000a900460ff168015612abe575060008c115b15612acc57612acb61342f565b5b7ffc18969df35ccba802c14035d6d6273bf5bb4d8b9de8faa7aba1044c813b13008a8a848b8542604051612b0596959493929190614ac7565b60405180910390a1505050505050505050505050505b6000600560176101000a81548160ff021916908315150217905550565b6000612b60836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6136d6565b905092915050565b6000612b7783600001836137ea565b60001c905092915050565b6000612baa836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613815565b905092915050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614b9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9890614c2c565b60405180910390fd5b612cac838383613838565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2990614cbe565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e209190613a28565b60405180910390a3612e3384848461383d565b50505050565b6000806024541415905090565b601254600a81905550601354600b81905550601454600c81905550601554600e81905550601654600d81905550601754600f81905550565b601854600a81905550601954600b81905550601a54600c81905550601b54600e81905550601c54600d81905550601d54600f81905550565b6000600560179054906101000a900460ff16158015612ee15750600560149054906101000a900460ff165b8015612ef15750612ef0612e39565b5b8015612f065750601154612f0430611423565b115b8015612f1f5750612f1d612f18611d43565b611c0a565b155b8015612f795750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600080601054600f5484612f949190614853565b612f9e91906148c4565b9050612fab843083612bc3565b8083612fb791906140f8565b91505092915050565b6000612fcc8383613815565b61302557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061302a565b600090505b92915050565b6000613092826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138429092919063ffffffff16565b90506000815111156130f257808060200190518101906130b29190614a9a565b6130f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e890614d50565b60405180910390fd5b5b505050565b6000600267ffffffffffffffff811115613114576131136143e4565b5b6040519080825280602002602001820160405280156131425781602001602082028036833780820191505090505b509050308160008151811061315a576131596148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106131cb576131ca6148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061321030611423565b9050600060028261322191906148c4565b90506103e88110156132355750505061342d565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac3893ba83600087602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000426040518763ffffffff1660e01b81526004016132be96959493929190614a1d565b600060405180830381600087803b1580156132d857600080fd5b505af19250505080156132e9575060015b156132f357600190505b80613301575050505061342d565b61332e30602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bc3565b61337b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000084611d4b565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1217cf30602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b81526004016133fc93929190614d70565b600060405180830381600087803b15801561341657600080fd5b505af1925050508015613427575060015b50505050505b565b6001600560176101000a81548160ff0219169083151502179055506000600367ffffffffffffffff811115613467576134666143e4565b5b6040519080825280602002602001820160405280156134955781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106134cd576134cc6148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061353e5761353d6148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160028151811061358d5761358c6148f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4822be382600085601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000426040518763ffffffff1660e01b8152600401613652959493929190614da7565b6000604051808303818588803b15801561366b57600080fd5b505af19350505050801561367d575060015b507f8cdedd0db303ea9c88fd5b41969d212021edaf8efc5982d62a426e273145273a81426040516136af929190614e01565b60405180910390a150506000600560176101000a81548160ff021916908315150217905550565b600080836001016000848152602001908152602001600020549050600081146137de57600060018261370891906140f8565b905060006001866000018054905061372091906140f8565b905081811461378f576000866000018281548110613741576137406148f5565b5b9060005260206000200154905080876000018481548110613765576137646148f5565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806137a3576137a2614e2a565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506137e4565b60009150505b92915050565b6000826000018281548110613802576138016148f5565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b505050565b6060613851848460008561385a565b90509392505050565b60608247101561389f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389690614ecb565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516138c8919061445a565b60006040518083038185875af1925050503d8060008114613905576040519150601f19603f3d011682016040523d82523d6000602084013e61390a565b606091505b509150915061391b87838387613927565b92505050949350505050565b60608315613989576000835103613981576139418561399c565b613980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397790614f37565b60405180910390fd5b5b829050613994565b61399383836139bf565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156139d25781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a069190613ad3565b60405180910390fd5b6000819050919050565b613a2281613a0f565b82525050565b6000602082019050613a3d6000830184613a19565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a7d578082015181840152602081019050613a62565b60008484015250505050565b6000601f19601f8301169050919050565b6000613aa582613a43565b613aaf8185613a4e565b9350613abf818560208601613a5f565b613ac881613a89565b840191505092915050565b60006020820190508181036000830152613aed8184613a9a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b2582613afa565b9050919050565b613b3581613b1a565b8114613b4057600080fd5b50565b600081359050613b5281613b2c565b92915050565b613b6181613a0f565b8114613b6c57600080fd5b50565b600081359050613b7e81613b58565b92915050565b60008060408385031215613b9b57613b9a613af5565b5b6000613ba985828601613b43565b9250506020613bba85828601613b6f565b9150509250929050565b60008115159050919050565b613bd981613bc4565b82525050565b6000602082019050613bf46000830184613bd0565b92915050565b613c0381613b1a565b82525050565b6000602082019050613c1e6000830184613bfa565b92915050565b600080600060608486031215613c3d57613c3c613af5565b5b6000613c4b86828701613b43565b9350506020613c5c86828701613b43565b9250506040613c6d86828701613b6f565b9150509250925092565b600060208284031215613c8d57613c8c613af5565b5b6000613c9b84828501613b43565b91505092915050565b6000819050919050565b6000613cc9613cc4613cbf84613afa565b613ca4565b613afa565b9050919050565b6000613cdb82613cae565b9050919050565b6000613ced82613cd0565b9050919050565b613cfd81613ce2565b82525050565b6000602082019050613d186000830184613cf4565b92915050565b600060ff82169050919050565b613d3481613d1e565b82525050565b6000602082019050613d4f6000830184613d2b565b92915050565b6000613d6082613cd0565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613bc4565b8114613da557600080fd5b50565b600081359050613db781613d91565b92915050565b60008060408385031215613dd457613dd3613af5565b5b6000613de285828601613b43565b9250506020613df385828601613da8565b9150509250929050565b6000613e0882613cd0565b9050919050565b613e1881613dfd565b82525050565b6000602082019050613e336000830184613e0f565b92915050565b600060208284031215613e4f57613e4e613af5565b5b6000613e5d84828501613da8565b91505092915050565b600060208284031215613e7c57613e7b613af5565b5b6000613e8a84828501613b6f565b91505092915050565b600080600060608486031215613eac57613eab613af5565b5b6000613eba86828701613b43565b9350506020613ecb86828701613b43565b9250506040613edc86828701613b43565b9150509250925092565b60008060408385031215613efd57613efc613af5565b5b6000613f0b85828601613b43565b9250506020613f1c85828601613b43565b9150509250929050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000613f5c601083613a4e565b9150613f6782613f26565b602082019050919050565b60006020820190508181036000830152613f8b81613f4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fd957607f821691505b602082108103613fec57613feb613f92565b5b50919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b6000614028601383613a4e565b915061403382613ff2565b602082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b60006040820190506140736000830185613bfa565b6140806020830184613bfa565b9392505050565b60008151905061409681613b2c565b92915050565b6000602082840312156140b2576140b1613af5565b5b60006140c084828501614087565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410382613a0f565b915061410e83613a0f565b9250828203905081811115614126576141256140c9565b5b92915050565b600061413782613a0f565b915061414283613a0f565b925082820190508082111561415a576141596140c9565b5b92915050565b7f43414e5420524553515545204f574e20544f4b454e0000000000000000000000600082015250565b6000614196601583613a4e565b91506141a182614160565b602082019050919050565b600060208201905081810360008301526141c581614189565b9050919050565b6000815190506141db81613b58565b92915050565b6000602082840312156141f7576141f6613af5565b5b6000614205848285016141cc565b91505092915050565b7f5a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614244600c83613a4e565b915061424f8261420e565b602082019050919050565b6000602082019050818103600083015261427381614237565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142d6602583613a4e565b91506142e18261427a565b604082019050919050565b60006020820190508181036000830152614305816142c9565b9050919050565b7f7061697220697320746865207a65726f20616464726573730000000000000000600082015250565b6000614342601883613a4e565b915061434d8261430c565b602082019050919050565b6000602082019050818103600083015261437181614335565b9050919050565b7f696e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b60006143ae601383613a4e565b91506143b982614378565b602082019050919050565b600060208201905081810360008301526143dd816143a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b600061443482614413565b61443e818561441e565b935061444e818560208601613a5f565b80840191505092915050565b60006144668284614429565b915081905092915050565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b60006144a7601383613a4e565b91506144b282614471565b602082019050919050565b600060208201905081810360008301526144d68161449a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614539602683613a4e565b9150614544826144dd565b604082019050919050565b600060208201905081810360008301526145688161452c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145a5602083613a4e565b91506145b08261456f565b602082019050919050565b600060208201905081810360008301526145d481614598565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614637602483613a4e565b9150614642826145db565b604082019050919050565b600060208201905081810360008301526146668161462a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c9602283613a4e565b91506146d48261466d565b604082019050919050565b600060208201905081810360008301526146f8816146bc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614735601d83613a4e565b9150614740826146ff565b602082019050919050565b6000602082019050818103600083015261476481614728565b9050919050565b7f50726f6a656374204e6f74207965742073746172746564212100000000000000600082015250565b60006147a1601983613a4e565b91506147ac8261476b565b602082019050919050565b600060208201905081810360008301526147d081614794565b9050919050565b60006040820190506147ec6000830185613bfa565b6147f96020830184613a19565b9392505050565b600060a0820190506148156000830188613bfa565b6148226020830187613a19565b61482f6040830186613a19565b61483c6060830185613a19565b6148496080830184613a19565b9695505050505050565b600061485e82613a0f565b915061486983613a0f565b925082820261487781613a0f565b9150828204841483151761488e5761488d6140c9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148cf82613a0f565b91506148da83613a0f565b9250826148ea576148e9614895565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061494961494461493f84614924565b613ca4565b613a0f565b9050919050565b6149598161492e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61499481613b1a565b82525050565b60006149a6838361498b565b60208301905092915050565b6000602082019050919050565b60006149ca8261495f565b6149d4818561496a565b93506149df8361497b565b8060005b83811015614a105781516149f7888261499a565b9750614a02836149b2565b9250506001810190506149e3565b5085935050505092915050565b600060c082019050614a326000830189613a19565b614a3f6020830188614950565b8181036040830152614a5181876149bf565b9050614a606060830186613bfa565b614a6d6080830185613bfa565b614a7a60a0830184613a19565b979650505050505050565b600081519050614a9481613d91565b92915050565b600060208284031215614ab057614aaf613af5565b5b6000614abe84828501614a85565b91505092915050565b600060c082019050614adc6000830189613a19565b614ae96020830188613a19565b614af66040830187613a19565b614b036060830186613a19565b614b106080830185613a19565b614b1d60a0830184613a19565b979650505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b84602583613a4e565b9150614b8f82614b28565b604082019050919050565b60006020820190508181036000830152614bb381614b77565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c16602383613a4e565b9150614c2182614bba565b604082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614ca8602683613a4e565b9150614cb382614c4c565b604082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614d3a602a83613a4e565b9150614d4582614cde565b604082019050919050565b60006020820190508181036000830152614d6981614d2d565b9050919050565b6000606082019050614d856000830186613bfa565b614d926020830185613bfa565b614d9f6040830184613a19565b949350505050565b600060a082019050614dbc6000830188614950565b8181036020830152614dce81876149bf565b9050614ddd6040830186613bfa565b614dea6060830185613bfa565b614df76080830184613a19565b9695505050505050565b6000604082019050614e166000830185613a19565b614e236020830184613a19565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614eb5602683613a4e565b9150614ec082614e59565b604082019050919050565b60006020820190508181036000830152614ee481614ea8565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614f21601d83613a4e565b9150614f2c82614eeb565b602082019050919050565b60006020820190508181036000830152614f5081614f14565b905091905056fea2646970667358221220616de49c44730b4a0c403b3628bc8956ccab5c1b9e5416d8ba3a61cb9da049d264736f6c63430008130033000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc80000000000000000000000006eccab422d763ac031210895c81787e87b43a652000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc80000000000000000000000006eccab422d763ac031210895c81787e87b43a652000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
-----Decoded View---------------
Arg [0] : _backToken (address): 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
Arg [1] : _factory (address): 0x6EcCab422D763aC031210895C81787E87B43A652
Arg [2] : _swapRouter (address): 0xc873fEcbd354f5A56E00E710B90EF4201db2448d
Arg [3] : _weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [4] : _usdt (address): 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8
Arg [1] : 0000000000000000000000006eccab422d763ac031210895c81787e87b43a652
Arg [2] : 000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d
Arg [3] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [4] : 000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
Deployed ByteCode Sourcemap
58789:12740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68855:182;;;;;;;;;;;;;:::i;:::-;;59985:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;71208:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8512:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10863:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60336:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60462:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60042;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59944:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9632:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60565:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60297:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62418:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61909:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68679:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60598:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62160:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12348:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59530:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69045:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59646:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60634:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70244:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60123:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59283:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9803:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37868:103;;;;;;;;;;;;;:::i;:::-;;59362:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69840:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59580:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60080:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59320:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60728:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60164:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37220:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67753:68;;;;;;;;;;;;;:::i;:::-;;8731:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59695:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13089:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;71026:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62260:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70483:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60422:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60380:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70371:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;71314:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60783:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69299:249;;;;;;;;;;;;;:::i;:::-;;70847:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60758:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60815:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70095:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60203:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69559:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59408:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10392:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70607:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;70729:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38126:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60240:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68855:182;37106:13;:11;:13::i;:::-;68923:1:::1;68909:10;;:15;68901:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;68969:12;68956:10;:25;;;;69014:15;68992:19;:37;;;;68855:182::o:0;59985:31::-;;;;:::o;71208:98::-;71256:7;71283:15;:6;:13;:15::i;:::-;71276:22;;71208:98;:::o;8512:100::-;8566:13;8599:5;8592:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8512:100;:::o;10863:201::-;10946:4;10963:13;10979:12;:10;:12::i;:::-;10963:28;;11002:32;11011:5;11018:7;11027:6;11002:8;:32::i;:::-;11052:4;11045:11;;;10863:201;;;;:::o;60336:37::-;;;;:::o;60462:31::-;;;;:::o;60042:::-;;;;:::o;59944:37::-;;;;:::o;9632:108::-;9693:7;9720:12;;9713:19;;9632:108;:::o;60565:26::-;;;;;;;;;;;;;:::o;60297:32::-;;;;:::o;62418:270::-;62524:4;62541:15;62559:12;:10;:12::i;:::-;62541:30;;62582:40;62598:6;62606:7;62615:6;62582:15;:40::i;:::-;62640;62654:6;62662:9;62673:6;62640:13;:40::i;:::-;62633:47;;;62418:270;;;;;:::o;61909:243::-;37106:13;:11;:13::i;:::-;61987:11:::1;;;;;;;;;;;61986:12;61978:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;62033:12;62048:7;:18;;;62067:5;62082:4;62048:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62033:55;;62099:16;62110:4;62099:6;:10;;:16;;;;:::i;:::-;;62140:4;62126:11;;:18;;;;;;;;;;;;;;;;;;61967:185;61909:243:::0;:::o;68679:137::-;68732:7;68793:15;61135:42;68793:9;:15::i;:::-;68775;61054:42;68775:9;:15::i;:::-;68759:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:49;;;;:::i;:::-;68752:56;;68679:137;:::o;60598:29::-;;;;;;;;;;;;;:::o;62160:92::-;62218:5;62243:1;62236:8;;62160:92;:::o;12348:238::-;12436:4;12453:13;12469:12;:10;:12::i;:::-;12453:28;;12492:64;12501:5;12508:7;12545:10;12517:25;12527:5;12534:7;12517:9;:25::i;:::-;:38;;;;:::i;:::-;12492:8;:64::i;:::-;12574:4;12567:11;;;12348:238;;;;:::o;59530:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;69045:246::-;37106:13;:11;:13::i;:::-;69150:4:::1;69126:29;;:12;:29;;::::0;69118:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;69192:91;69226:10;69244:12;69237:30;;;69276:4;69237:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;69199:12;69192:33;;;;:91;;;;;:::i;:::-;69045:246:::0;:::o;59646:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;60500:33::-;;;;:::o;60634:51::-;;;;;;;;;;;;;:::o;70244:119::-;37106:13;:11;:13::i;:::-;70349:6:::1;70327:11;:19;70339:6;70327:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;70244:119:::0;;:::o;60123:34::-;;;;:::o;59283:30::-;;;;;;;;;;;;;:::o;9803:127::-;9877:7;9904:9;:18;9914:7;9904:18;;;;;;;;;;;;;;;;9897:25;;9803:127;;;:::o;37868:103::-;37106:13;:11;:13::i;:::-;37933:30:::1;37960:1;37933:18;:30::i;:::-;37868:103::o:0;59362:37::-;;;;;;;;;;;;;:::o;69840:246::-;37106:13;:11;:13::i;:::-;69978:1:::1;69944:36;;:22;:36;;::::0;69936:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;70055:22;70008:21;;:70;;;;;;;;;;;;;;;;;;69840:246:::0;:::o;59580:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;60080:36::-;;;;:::o;59320:38::-;;;;;;;;;;;;;:::o;60728:23::-;;;;;;;;;;;;;:::o;60164:32::-;;;;:::o;37220:87::-;37266:7;37293:6;;;;;;;;;;;37286:13;;37220:87;:::o;67753:68::-;37106:13;:11;:13::i;:::-;67803:10:::1;:8;:10::i;:::-;67753:68::o:0;8731:104::-;8787:13;8820:7;8813:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8731:104;:::o;59695:51::-;;;;;;;;;;;;;;;;;:::o;13089:436::-;13182:4;13199:13;13215:12;:10;:12::i;:::-;13199:28;;13238:24;13265:25;13275:5;13282:7;13265:9;:25::i;:::-;13238:52;;13329:15;13309:16;:35;;13301:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13422:60;13431:5;13438:7;13466:15;13447:16;:34;13422:8;:60::i;:::-;13513:4;13506:11;;;;13089:436;;;;:::o;71026:174::-;71083:4;37106:13;:11;:13::i;:::-;71124:1:::1;71108:18;;:4;:18;;::::0;71100:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;71173:19;71187:4;71173:6;:13;;:19;;;;:::i;:::-;71166:26;;71026:174:::0;;;:::o;62260:150::-;62339:4;62363:39;62377:12;:10;:12::i;:::-;62391:2;62395:6;62363:13;:39::i;:::-;62356:46;;62260:150;;;;:::o;70483:115::-;37106:13;:11;:13::i;:::-;70582:8:::1;70560:19;;:30;;;;;;;;;;;;;;;;;;70483:115:::0;:::o;60422:33::-;;;;:::o;60380:35::-;;;;:::o;70371:104::-;37106:13;:11;:13::i;:::-;70459:8:::1;70445:11;;:22;;;;;;;;;;;;;;;;;;70371:104:::0;:::o;71314:175::-;71367:7;71422:1;71404:15;:6;:13;:15::i;:::-;:19;;;;:::i;:::-;71395:5;:28;;71387:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;71465:16;71475:5;71465:6;:9;;:16;;;;:::i;:::-;71458:23;;71314:175;;;:::o;60783:25::-;;;;:::o;69299:249::-;37106:13;:11;:13::i;:::-;69361:17:::1;69381:21;69361:41;;69414:12;69440;:10;:12::i;:::-;69432:26;;69466:9;69487:1;69477:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69432:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69413:77;;;69509:7;69501:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;69350:198;;69299:249::o:0;70847:171::-;70904:4;37106:13;:11;:13::i;:::-;70945:1:::1;70929:18;;:4;:18;;::::0;70921:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;70994:16;71005:4;70994:6;:10;;:16;;;;:::i;:::-;70987:23;;70847:171:::0;;;:::o;60758:18::-;;;;;;;;;;;;;:::o;60815:34::-;;;;:::o;70095:141::-;37106:13;:11;:13::i;:::-;70206:22:::1;70187:16;:41;;;;70095:141:::0;:::o;60203:30::-;;;;:::o;69559:273::-;37106:13;:11;:13::i;:::-;69728:12:::1;69714:11;;:26;;;;;;;;;;;;;;;;;;69776:14;69751:13;;:40;;;;;;;;;;;;;;;;;;69814:10;69802:9;;:22;;;;;;;;;;;;;;;;;;69559:273:::0;;;:::o;59408:18::-;;;;;;;;;;;;;:::o;10392:151::-;10481:7;10508:11;:18;10520:5;10508:18;;;;;;;;;;;;;;;:27;10527:7;10508:27;;;;;;;;;;;;;;;;10501:34;;10392:151;;;;:::o;70607:113::-;37106:13;:11;:13::i;:::-;70704:8:::1;70683:18;;:29;;;;;;;;;;;;;;;;;;70607:113:::0;:::o;70729:110::-;70783:4;70807:24;70823:7;70807:6;:15;;:24;;;;:::i;:::-;70800:31;;70729:110;;;:::o;38126:201::-;37106:13;:11;:13::i;:::-;38235:1:::1;38215:22;;:8;:22;;::::0;38207:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38291:28;38310:8;38291:18;:28::i;:::-;38126:201:::0;:::o;60240:32::-;;;;:::o;37385:132::-;37460:12;:10;:12::i;:::-;37449:23;;:7;:5;:7::i;:::-;:23;;;37441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37385:132::o;48084:117::-;48147:7;48174:19;48182:3;:10;;48174:7;:19::i;:::-;48167:26;;48084:117;;;:::o;6158:98::-;6211:7;6238:10;6231:17;;6158:98;:::o;17116:380::-;17269:1;17252:19;;:5;:19;;;17244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17350:1;17331:21;;:7;:21;;;17323:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17434:6;17404:11;:18;17416:5;17404:18;;;;;;;;;;;;;;;:27;17423:7;17404:27;;;;;;;;;;;;;;;:36;;;;17472:7;17456:32;;17465:5;17456:32;;;17481:6;17456:32;;;;;;:::i;:::-;;;;;;;;17116:380;;;:::o;17787:453::-;17922:24;17949:25;17959:5;17966:7;17949:9;:25::i;:::-;17922:52;;18009:17;17989:16;:37;17985:248;;18071:6;18051:16;:26;;18043:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:51;18164:5;18171:7;18199:6;18180:16;:25;18155:8;:51::i;:::-;17985:248;17911:329;17787:453;;;:::o;62696:1288::-;62788:4;62809:6;;;;;;;;;;;62805:101;;;62832:36;62842:6;62850:9;62861:6;62832:9;:36::i;:::-;62890:4;62883:11;;;;62805:101;62921:27;:35;62949:6;62921:35;;;;;;;;;;;;;;;;;;;;;;;;;62916:117;;62981:10;:8;:10::i;:::-;62973:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;62916:117;63045:18;63068:11;:19;63080:6;63068:19;;;;;;;;;;;;;;;;;;;;;;;;;63067:20;:47;;;;;63092:11;:22;63104:9;63092:22;;;;;;;;;;;;;;;;;;;;;;;;;63091:23;63067:47;63066:63;;;;;63119:10;:8;:10::i;:::-;63066:63;63045:84;;63140:9;63164:13;63180:6;63164:22;;63197:13;63213:9;63197:25;;63258:14;63265:6;63258;:14::i;:::-;63254:349;;;63289:9;:7;:9::i;:::-;63320:1;63313:8;;63344:9;63336:17;;63376:6;63368:14;;63401:13;;;;;;;;;;;:21;;;63423:9;63434:6;63401:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63397:56;63254:349;;;63470:17;63477:9;63470:6;:17::i;:::-;63466:137;;;63504:10;:8;:10::i;:::-;63536:1;63529:8;;63466:137;;;63586:5;63570:21;;63466:137;63254:349;63619:31;63642:6;63619:14;:31::i;:::-;63615:74;;;63667:10;:8;:10::i;:::-;63615:74;63701:22;63726:13;:48;;63768:6;63726:48;;;63742:23;63750:6;63758;63742:7;:23::i;:::-;63726:48;63701:73;;63785:44;63795:6;63803:9;63814:14;63785:9;:44::i;:::-;63853:1;63846:4;:8;63842:113;;;63876:67;63882:5;63889:6;63897:4;63903:22;:20;:22::i;:::-;63927:15;63876:67;;;;;;;;;;:::i;:::-;;;;;;;;63842:113;63972:4;63965:11;;;;;;;62696:1288;;;;;;:::o;47259:152::-;47329:4;47353:50;47358:3;:10;;47394:5;47378:23;;47370:32;;47353:4;:50::i;:::-;47346:57;;47259:152;;;;:::o;32199:211::-;32316:86;32336:5;32366:23;;;32391:2;32395:5;32343:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32316:19;:86::i;:::-;32199:211;;;:::o;38487:191::-;38561:16;38580:6;;;;;;;;;;;38561:25;;38606:8;38597:6;;:17;;;;;;;;;;;;;;;;;;38661:8;38630:40;;38651:8;38630:40;;;;;;;;;;;;38550:128;38487:191;:::o;64228:2068::-;59473:4;59464:6;;:13;;;;;;;;;;;;;;;;;;64277:16:::1;64296:24;64314:4;64296:9;:24::i;:::-;64277:43;;64331:18;64352:21;64331:42;;64384:54;64401:4;64416:10;64429:8;64384;:54::i;:::-;64451:17;64471:8;;64451:28;;64492:22;64541:9;64529:7;;64518:8;:18;;;;:::i;:::-;64517:34;;;;:::i;:::-;64492:59;;64562:20;64614:9;64597:12;;64586:8;:23;;;;:::i;:::-;64585:39;;;;:::i;:::-;64562:62;;64635:23;64686:9;64673:8;;64662;:19;;;;:::i;:::-;64661:35;;;;:::i;:::-;64635:61;;64719:14;64707:26;;;;;:::i;:::-;;;64756:12;64744:24;;;;;:::i;:::-;;;64791:15;64779:27;;;;;:::i;:::-;;;64859:21;64897:1;64883:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64859:40;;64928:4;64910;64915:1;64910:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;64962:4;;;;;;;;;;;64944;64949:1;64944:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;64996:9;;;;;;;;;;;64978:4;64983:1;64978:7;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;::::0;::::1;65027:12;65058:21:::0;65082:9:::1;;;;;;;;;;;:19;;;65110:4;65082:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65058:58;;65131:10;:64;;;65196:8;65205:1;65207:4;65220;65234:1;65237:15;65131:122;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;65127:177:::0;::::1;;65279:4;65269:14;;65127:177;65319:7;65314:47;;65343:7;;;;;;;;;;;65314:47;65373:46;65391:4;61054:42;65404:14;65373:9;:46::i;:::-;65430:63;65448:4;65463:11;;;;;;;;;;;65477:15;65430:9;:63::i;:::-;65514:23;65577:13;65540:9;;;;;;;;;;;:19;;;65568:4;65540:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;65514:76;;65601:25;65666:8;;65651:12;;65641:7;;65629:9;:19;;;;:::i;:::-;:34;;;;:::i;:::-;:45;;;;:::i;:::-;65601:73;;65685:30;65751:17;65737:10;;65719:15;:28;;;;:::i;:::-;65718:50;;;;:::i;:::-;65685:83;;65779:26;65826:22;65808:15;:40;;;;:::i;:::-;65779:69;;65861:9;;;;;;;;;;;:18;;;65888:13;;;;;;;;;;;65904:22;65861:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;65938:9;;;;;;;;;;;:18;;;65957:9;;;;;;;;;;;65968:18;65938:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;66004:19;;;;;;;;;;;66000:62;;;66040:10;:8;:10::i;:::-;66000:62;66074:18;;;;;;;;;;;:36;;;;;66109:1;66096:10;:14;66074:36;66070:83;;;66126:15;:13;:15::i;:::-;66070:83;66172:116;66181:14;66197:12;66211:22;66235:15;66252:18;66272:15;66172:116;;;;;;;;;;;:::i;:::-;;;;;;;;64266:2030;;;;;;;;;;;;;59488:1;59509:5:::0;59500:6;;:14;;;;;;;;;;;;;;;;;;64228:2068::o;47587:158::-;47660:4;47684:53;47692:3;:10;;47728:5;47712:23;;47704:32;;47684:7;:53::i;:::-;47677:60;;47587:158;;;;:::o;48555:::-;48629:7;48680:22;48684:3;:10;;48696:5;48680:3;:22::i;:::-;48672:31;;48649:56;;48555:158;;;;:::o;47831:167::-;47911:4;47935:55;47945:3;:10;;47981:5;47965:23;;47957:32;;47935:9;:55::i;:::-;47928:62;;47831:167;;;;:::o;43301:109::-;43357:7;43384:3;:11;;:18;;;;43377:25;;43301:109;;;:::o;13995:840::-;14142:1;14126:18;;:4;:18;;;14118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14219:1;14205:16;;:2;:16;;;14197:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14274:38;14295:4;14301:2;14305:6;14274:20;:38::i;:::-;14325:19;14347:9;:15;14357:4;14347:15;;;;;;;;;;;;;;;;14325:37;;14396:6;14381:11;:21;;14373:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14513:6;14499:11;:20;14481:9;:15;14491:4;14481:15;;;;;;;;;;;;;;;:38;;;;14716:6;14699:9;:13;14709:2;14699:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;14766:2;14751:26;;14760:4;14751:26;;;14770:6;14751:26;;;;;;:::i;:::-;;;;;;;;14790:37;14810:4;14816:2;14820:6;14790:19;:37::i;:::-;14107:728;13995:840;;;:::o;67829:90::-;67872:4;67910:1;67896:10;;:15;;67889:22;;67829:90;:::o;67927:240::-;67976:10;;67966:7;:20;;;;68012:15;;67997:12;:30;;;;68051:13;;68038:10;:26;;;;68086:11;;68075:8;:22;;;;68117:9;;68108:6;:18;;;;68148:11;;68137:8;:22;;;;67927:240::o;68175:247::-;68225:11;;68215:7;:21;;;;68262:16;;68247:12;:31;;;;68302:14;;68289:10;:27;;;;68338:12;;68327:8;:23;;;;68370:10;;68361:6;:19;;;;68402:12;;68391:8;:23;;;;68175:247::o;63992:228::-;64055:4;64080:6;;;;;;;;;;;64079:7;:22;;;;;64090:11;;;;;;;;;;;64079:22;:36;;;;;64105:10;:8;:10::i;:::-;64079:36;:83;;;;;64146:16;;64119:24;64137:4;64119:9;:24::i;:::-;:43;64079:83;:108;;;;;64167:20;64174:12;:10;:12::i;:::-;64167:6;:20::i;:::-;64166:21;64079:108;:133;;;;;64201:11;;;;;;;;;;;64191:21;;:6;:21;;;;64079:133;64072:140;;63992:228;;;:::o;68430:241::-;68497:7;68517:17;68559:14;;68547:8;;68538:6;:17;;;;:::i;:::-;68537:36;;;;:::i;:::-;68517:56;;68584:43;68594:6;68610:4;68617:9;68584;:43::i;:::-;68654:9;68645:6;:18;;;;:::i;:::-;68638:25;;;68430:241;;;;:::o;40990:414::-;41053:4;41075:21;41085:3;41090:5;41075:9;:21::i;:::-;41070:327;;41113:3;:11;;41130:5;41113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41296:3;:11;;:18;;;;41274:3;:12;;:19;41287:5;41274:19;;;;;;;;;;;:40;;;;41336:4;41329:11;;;;41070:327;41380:5;41373:12;;40990:414;;;;;:::o;35266:716::-;35690:23;35716:69;35744:4;35716:69;;;;;;;;;;;;;;;;;35724:5;35716:27;;;;:69;;;;;:::i;:::-;35690:95;;35820:1;35800:10;:17;:21;35796:179;;;35897:10;35886:30;;;;;;;;;;;;:::i;:::-;35878:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35796:179;35336:646;35266:716;;:::o;66304:958::-;66390:24;66431:1;66417:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66390:43;;66465:4;66444:7;66452:1;66444:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;66502:4;;;;;;;;;;;66481:7;66489:1;66481:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;66520:19;66542:24;66560:4;66542:9;:24::i;:::-;66520:46;;66577:12;66606:1;66592:11;:15;;;;:::i;:::-;66577:30;;66628:4;66621;:11;66618:23;;;66634:7;;;;;66618:23;66686:12;66721:10;:64;;;66786:4;66791:1;66794:7;66810:21;;;;;;;;;;;66841:1;66844:15;66721:139;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66717:203;;;66895:4;66885:14;;66717:203;66935:7;66930:47;;66959:7;;;;;;66930:47;67014:62;67032:4;67047:21;;;;;;;;;;;67071:4;67014:9;:62::i;:::-;67087:67;67104:21;;;;;;;;;;;67136:10;67149:4;67087:8;:67::i;:::-;67169:21;;;;;;;;;;;:38;;;67216:4;67231;;;;;;;;;;;67238;67169:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67165:90;66333:929;;;;66304:958;:::o;67268:477::-;59473:4;59464:6;;:13;;;;;;;;;;;;;;;;;;67323:21:::1;67361:1;67347:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67323:40;;67392:4;67374;67379:1;67374:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;67426:4;;;;;;;;;;;67408;67413:1;67408:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;67454:4;67436;67441:1;67436:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;67474;67500:21;67474:47;;67534:10;:61;;;67603:15;67620:1;67623:4;67629:11;;;;;;;;;;;67650:1;67654:15;67534:136;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;67530:152:::0;67696:41:::1;67704:15;67721;67696:41;;;;;;;:::i;:::-;;;;;;;;67311:434;;59509:5:::0;59500:6;;:14;;;;;;;;;;;;;;;;;;67268:477::o;41580:1420::-;41646:4;41764:18;41785:3;:12;;:19;41798:5;41785:19;;;;;;;;;;;;41764:40;;41835:1;41821:10;:15;41817:1176;;42196:21;42233:1;42220:10;:14;;;;:::i;:::-;42196:38;;42249:17;42290:1;42269:3;:11;;:18;;;;:22;;;;:::i;:::-;42249:42;;42325:13;42312:9;:26;42308:405;;42359:17;42379:3;:11;;42391:9;42379:22;;;;;;;;:::i;:::-;;;;;;;;;;42359:42;;42533:9;42504:3;:11;;42516:13;42504:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;42644:10;42618:3;:12;;:23;42631:9;42618:23;;;;;;;;;;;:36;;;;42340:373;42308:405;42794:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42889:3;:12;;:19;42902:5;42889:19;;;;;;;;;;;42882:26;;;42932:4;42925:11;;;;;;;41817:1176;42976:5;42969:12;;;41580:1420;;;;;:::o;43764:120::-;43831:7;43858:3;:11;;43870:5;43858:18;;;;;;;;:::i;:::-;;;;;;;;;;43851:25;;43764:120;;;;:::o;43086:129::-;43159:4;43206:1;43183:3;:12;;:19;43196:5;43183:19;;;;;;;;;;;;:24;;43176:31;;43086:129;;;;:::o;18840:125::-;;;;:::o;19569:124::-;;;;:::o;26051:229::-;26188:12;26220:52;26242:6;26250:4;26256:1;26259:12;26220:21;:52::i;:::-;26213:59;;26051:229;;;;;:::o;27171:455::-;27341:12;27399:5;27374:21;:30;;27366:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27459:12;27473:23;27500:6;:11;;27519:5;27526:4;27500:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27458:73;;;;27549:69;27576:6;27584:7;27593:10;27605:12;27549:26;:69::i;:::-;27542:76;;;;27171:455;;;;;;:::o;29744:644::-;29929:12;29958:7;29954:427;;;30007:1;29986:10;:17;:22;29982:290;;30204:18;30215:6;30204:10;:18::i;:::-;30196:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:290;30293:10;30286:17;;;;29954:427;30336:33;30344:10;30356:12;30336:7;:33::i;:::-;29744:644;;;;;;;:::o;23294:326::-;23354:4;23611:1;23589:7;:19;;;:23;23582:30;;23294:326;;;:::o;30930:552::-;31111:1;31091:10;:17;:21;31087:388;;;31323:10;31317:17;31380:15;31367:10;31363:2;31359:19;31352:44;31087:388;31450:12;31443:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:77:1;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:329::-;4834:6;4883:2;4871:9;4862:7;4858:23;4854:32;4851:119;;;4889:79;;:::i;:::-;4851:119;5009:1;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4980:117;4775:329;;;;:::o;5110:60::-;5138:3;5159:5;5152:12;;5110:60;;;:::o;5176:142::-;5226:9;5259:53;5277:34;5286:24;5304:5;5286:24;:::i;:::-;5277:34;:::i;:::-;5259:53;:::i;:::-;5246:66;;5176:142;;;:::o;5324:126::-;5374:9;5407:37;5438:5;5407:37;:::i;:::-;5394:50;;5324:126;;;:::o;5456:143::-;5523:9;5556:37;5587:5;5556:37;:::i;:::-;5543:50;;5456:143;;;:::o;5605:165::-;5709:54;5757:5;5709:54;:::i;:::-;5704:3;5697:67;5605:165;;:::o;5776:256::-;5886:4;5924:2;5913:9;5909:18;5901:26;;5937:88;6022:1;6011:9;6007:17;5998:6;5937:88;:::i;:::-;5776:256;;;;:::o;6038:86::-;6073:7;6113:4;6106:5;6102:16;6091:27;;6038:86;;;:::o;6130:112::-;6213:22;6229:5;6213:22;:::i;:::-;6208:3;6201:35;6130:112;;:::o;6248:214::-;6337:4;6375:2;6364:9;6360:18;6352:26;;6388:67;6452:1;6441:9;6437:17;6428:6;6388:67;:::i;:::-;6248:214;;;;:::o;6468:157::-;6549:9;6582:37;6613:5;6582:37;:::i;:::-;6569:50;;6468:157;;;:::o;6631:193::-;6749:68;6811:5;6749:68;:::i;:::-;6744:3;6737:81;6631:193;;:::o;6830:284::-;6954:4;6992:2;6981:9;6977:18;6969:26;;7005:102;7104:1;7093:9;7089:17;7080:6;7005:102;:::i;:::-;6830:284;;;;:::o;7120:116::-;7190:21;7205:5;7190:21;:::i;:::-;7183:5;7180:32;7170:60;;7226:1;7223;7216:12;7170:60;7120:116;:::o;7242:133::-;7285:5;7323:6;7310:20;7301:29;;7339:30;7363:5;7339:30;:::i;:::-;7242:133;;;;:::o;7381:468::-;7446:6;7454;7503:2;7491:9;7482:7;7478:23;7474:32;7471:119;;;7509:79;;:::i;:::-;7471:119;7629:1;7654:53;7699:7;7690:6;7679:9;7675:22;7654:53;:::i;:::-;7644:63;;7600:117;7756:2;7782:50;7824:7;7815:6;7804:9;7800:22;7782:50;:::i;:::-;7772:60;;7727:115;7381:468;;;;;:::o;7855:139::-;7918:9;7951:37;7982:5;7951:37;:::i;:::-;7938:50;;7855:139;;;:::o;8000:157::-;8100:50;8144:5;8100:50;:::i;:::-;8095:3;8088:63;8000:157;;:::o;8163:248::-;8269:4;8307:2;8296:9;8292:18;8284:26;;8320:84;8401:1;8390:9;8386:17;8377:6;8320:84;:::i;:::-;8163:248;;;;:::o;8417:323::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:50;8715:7;8706:6;8695:9;8691:22;8673:50;:::i;:::-;8663:60;;8619:114;8417:323;;;;:::o;8746:329::-;8805:6;8854:2;8842:9;8833:7;8829:23;8825:32;8822:119;;;8860:79;;:::i;:::-;8822:119;8980:1;9005:53;9050:7;9041:6;9030:9;9026:22;9005:53;:::i;:::-;8995:63;;8951:117;8746:329;;;;:::o;9081:619::-;9158:6;9166;9174;9223:2;9211:9;9202:7;9198:23;9194:32;9191:119;;;9229:79;;:::i;:::-;9191:119;9349:1;9374:53;9419:7;9410:6;9399:9;9395:22;9374:53;:::i;:::-;9364:63;;9320:117;9476:2;9502:53;9547:7;9538:6;9527:9;9523:22;9502:53;:::i;:::-;9492:63;;9447:118;9604:2;9630:53;9675:7;9666:6;9655:9;9651:22;9630:53;:::i;:::-;9620:63;;9575:118;9081:619;;;;;:::o;9706:474::-;9774:6;9782;9831:2;9819:9;9810:7;9806:23;9802:32;9799:119;;;9837:79;;:::i;:::-;9799:119;9957:1;9982:53;10027:7;10018:6;10007:9;10003:22;9982:53;:::i;:::-;9972:63;;9928:117;10084:2;10110:53;10155:7;10146:6;10135:9;10131:22;10110:53;:::i;:::-;10100:63;;10055:118;9706:474;;;;;:::o;10186:166::-;10326:18;10322:1;10314:6;10310:14;10303:42;10186:166;:::o;10358:366::-;10500:3;10521:67;10585:2;10580:3;10521:67;:::i;:::-;10514:74;;10597:93;10686:3;10597:93;:::i;:::-;10715:2;10710:3;10706:12;10699:19;;10358:366;;;:::o;10730:419::-;10896:4;10934:2;10923:9;10919:18;10911:26;;10983:9;10977:4;10973:20;10969:1;10958:9;10954:17;10947:47;11011:131;11137:4;11011:131;:::i;:::-;11003:139;;10730:419;;;:::o;11155:180::-;11203:77;11200:1;11193:88;11300:4;11297:1;11290:15;11324:4;11321:1;11314:15;11341:320;11385:6;11422:1;11416:4;11412:12;11402:22;;11469:1;11463:4;11459:12;11490:18;11480:81;;11546:4;11538:6;11534:17;11524:27;;11480:81;11608:2;11600:6;11597:14;11577:18;11574:38;11571:84;;11627:18;;:::i;:::-;11571:84;11392:269;11341:320;;;:::o;11667:169::-;11807:21;11803:1;11795:6;11791:14;11784:45;11667:169;:::o;11842:366::-;11984:3;12005:67;12069:2;12064:3;12005:67;:::i;:::-;11998:74;;12081:93;12170:3;12081:93;:::i;:::-;12199:2;12194:3;12190:12;12183:19;;11842:366;;;:::o;12214:419::-;12380:4;12418:2;12407:9;12403:18;12395:26;;12467:9;12461:4;12457:20;12453:1;12442:9;12438:17;12431:47;12495:131;12621:4;12495:131;:::i;:::-;12487:139;;12214:419;;;:::o;12639:332::-;12760:4;12798:2;12787:9;12783:18;12775:26;;12811:71;12879:1;12868:9;12864:17;12855:6;12811:71;:::i;:::-;12892:72;12960:2;12949:9;12945:18;12936:6;12892:72;:::i;:::-;12639:332;;;;;:::o;12977:143::-;13034:5;13065:6;13059:13;13050:22;;13081:33;13108:5;13081:33;:::i;:::-;12977:143;;;;:::o;13126:351::-;13196:6;13245:2;13233:9;13224:7;13220:23;13216:32;13213:119;;;13251:79;;:::i;:::-;13213:119;13371:1;13396:64;13452:7;13443:6;13432:9;13428:22;13396:64;:::i;:::-;13386:74;;13342:128;13126:351;;;;:::o;13483:180::-;13531:77;13528:1;13521:88;13628:4;13625:1;13618:15;13652:4;13649:1;13642:15;13669:194;13709:4;13729:20;13747:1;13729:20;:::i;:::-;13724:25;;13763:20;13781:1;13763:20;:::i;:::-;13758:25;;13807:1;13804;13800:9;13792:17;;13831:1;13825:4;13822:11;13819:37;;;13836:18;;:::i;:::-;13819:37;13669:194;;;;:::o;13869:191::-;13909:3;13928:20;13946:1;13928:20;:::i;:::-;13923:25;;13962:20;13980:1;13962:20;:::i;:::-;13957:25;;14005:1;14002;13998:9;13991:16;;14026:3;14023:1;14020:10;14017:36;;;14033:18;;:::i;:::-;14017:36;13869:191;;;;:::o;14066:171::-;14206:23;14202:1;14194:6;14190:14;14183:47;14066:171;:::o;14243:366::-;14385:3;14406:67;14470:2;14465:3;14406:67;:::i;:::-;14399:74;;14482:93;14571:3;14482:93;:::i;:::-;14600:2;14595:3;14591:12;14584:19;;14243:366;;;:::o;14615:419::-;14781:4;14819:2;14808:9;14804:18;14796:26;;14868:9;14862:4;14858:20;14854:1;14843:9;14839:17;14832:47;14896:131;15022:4;14896:131;:::i;:::-;14888:139;;14615:419;;;:::o;15040:143::-;15097:5;15128:6;15122:13;15113:22;;15144:33;15171:5;15144:33;:::i;:::-;15040:143;;;;:::o;15189:351::-;15259:6;15308:2;15296:9;15287:7;15283:23;15279:32;15276:119;;;15314:79;;:::i;:::-;15276:119;15434:1;15459:64;15515:7;15506:6;15495:9;15491:22;15459:64;:::i;:::-;15449:74;;15405:128;15189:351;;;;:::o;15546:162::-;15686:14;15682:1;15674:6;15670:14;15663:38;15546:162;:::o;15714:366::-;15856:3;15877:67;15941:2;15936:3;15877:67;:::i;:::-;15870:74;;15953:93;16042:3;15953:93;:::i;:::-;16071:2;16066:3;16062:12;16055:19;;15714:366;;;:::o;16086:419::-;16252:4;16290:2;16279:9;16275:18;16267:26;;16339:9;16333:4;16329:20;16325:1;16314:9;16310:17;16303:47;16367:131;16493:4;16367:131;:::i;:::-;16359:139;;16086:419;;;:::o;16511:224::-;16651:34;16647:1;16639:6;16635:14;16628:58;16720:7;16715:2;16707:6;16703:15;16696:32;16511:224;:::o;16741:366::-;16883:3;16904:67;16968:2;16963:3;16904:67;:::i;:::-;16897:74;;16980:93;17069:3;16980:93;:::i;:::-;17098:2;17093:3;17089:12;17082:19;;16741:366;;;:::o;17113:419::-;17279:4;17317:2;17306:9;17302:18;17294:26;;17366:9;17360:4;17356:20;17352:1;17341:9;17337:17;17330:47;17394:131;17520:4;17394:131;:::i;:::-;17386:139;;17113:419;;;:::o;17538:174::-;17678:26;17674:1;17666:6;17662:14;17655:50;17538:174;:::o;17718:366::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17718:366;;;:::o;18090:419::-;18256:4;18294:2;18283:9;18279:18;18271:26;;18343:9;18337:4;18333:20;18329:1;18318:9;18314:17;18307:47;18371:131;18497:4;18371:131;:::i;:::-;18363:139;;18090:419;;;:::o;18515:169::-;18655:21;18651:1;18643:6;18639:14;18632:45;18515:169;:::o;18690:366::-;18832:3;18853:67;18917:2;18912:3;18853:67;:::i;:::-;18846:74;;18929:93;19018:3;18929:93;:::i;:::-;19047:2;19042:3;19038:12;19031:19;;18690:366;;;:::o;19062:419::-;19228:4;19266:2;19255:9;19251:18;19243:26;;19315:9;19309:4;19305:20;19301:1;19290:9;19286:17;19279:47;19343:131;19469:4;19343:131;:::i;:::-;19335:139;;19062:419;;;:::o;19487:180::-;19535:77;19532:1;19525:88;19632:4;19629:1;19622:15;19656:4;19653:1;19646:15;19673:98;19724:6;19758:5;19752:12;19742:22;;19673:98;;;:::o;19777:147::-;19878:11;19915:3;19900:18;;19777:147;;;;:::o;19930:386::-;20034:3;20062:38;20094:5;20062:38;:::i;:::-;20116:88;20197:6;20192:3;20116:88;:::i;:::-;20109:95;;20213:65;20271:6;20266:3;20259:4;20252:5;20248:16;20213:65;:::i;:::-;20303:6;20298:3;20294:16;20287:23;;20038:278;19930:386;;;;:::o;20322:271::-;20452:3;20474:93;20563:3;20554:6;20474:93;:::i;:::-;20467:100;;20584:3;20577:10;;20322:271;;;;:::o;20599:169::-;20739:21;20735:1;20727:6;20723:14;20716:45;20599:169;:::o;20774:366::-;20916:3;20937:67;21001:2;20996:3;20937:67;:::i;:::-;20930:74;;21013:93;21102:3;21013:93;:::i;:::-;21131:2;21126:3;21122:12;21115:19;;20774:366;;;:::o;21146:419::-;21312:4;21350:2;21339:9;21335:18;21327:26;;21399:9;21393:4;21389:20;21385:1;21374:9;21370:17;21363:47;21427:131;21553:4;21427:131;:::i;:::-;21419:139;;21146:419;;;:::o;21571:225::-;21711:34;21707:1;21699:6;21695:14;21688:58;21780:8;21775:2;21767:6;21763:15;21756:33;21571:225;:::o;21802:366::-;21944:3;21965:67;22029:2;22024:3;21965:67;:::i;:::-;21958:74;;22041:93;22130:3;22041:93;:::i;:::-;22159:2;22154:3;22150:12;22143:19;;21802:366;;;:::o;22174:419::-;22340:4;22378:2;22367:9;22363:18;22355:26;;22427:9;22421:4;22417:20;22413:1;22402:9;22398:17;22391:47;22455:131;22581:4;22455:131;:::i;:::-;22447:139;;22174:419;;;:::o;22599:182::-;22739:34;22735:1;22727:6;22723:14;22716:58;22599:182;:::o;22787:366::-;22929:3;22950:67;23014:2;23009:3;22950:67;:::i;:::-;22943:74;;23026:93;23115:3;23026:93;:::i;:::-;23144:2;23139:3;23135:12;23128:19;;22787:366;;;:::o;23159:419::-;23325:4;23363:2;23352:9;23348:18;23340:26;;23412:9;23406:4;23402:20;23398:1;23387:9;23383:17;23376:47;23440:131;23566:4;23440:131;:::i;:::-;23432:139;;23159:419;;;:::o;23584:223::-;23724:34;23720:1;23712:6;23708:14;23701:58;23793:6;23788:2;23780:6;23776:15;23769:31;23584:223;:::o;23813:366::-;23955:3;23976:67;24040:2;24035:3;23976:67;:::i;:::-;23969:74;;24052:93;24141:3;24052:93;:::i;:::-;24170:2;24165:3;24161:12;24154:19;;23813:366;;;:::o;24185:419::-;24351:4;24389:2;24378:9;24374:18;24366:26;;24438:9;24432:4;24428:20;24424:1;24413:9;24409:17;24402:47;24466:131;24592:4;24466:131;:::i;:::-;24458:139;;24185:419;;;:::o;24610:221::-;24750:34;24746:1;24738:6;24734:14;24727:58;24819:4;24814:2;24806:6;24802:15;24795:29;24610:221;:::o;24837:366::-;24979:3;25000:67;25064:2;25059:3;25000:67;:::i;:::-;24993:74;;25076:93;25165:3;25076:93;:::i;:::-;25194:2;25189:3;25185:12;25178:19;;24837:366;;;:::o;25209:419::-;25375:4;25413:2;25402:9;25398:18;25390:26;;25462:9;25456:4;25452:20;25448:1;25437:9;25433:17;25426:47;25490:131;25616:4;25490:131;:::i;:::-;25482:139;;25209:419;;;:::o;25634:179::-;25774:31;25770:1;25762:6;25758:14;25751:55;25634:179;:::o;25819:366::-;25961:3;25982:67;26046:2;26041:3;25982:67;:::i;:::-;25975:74;;26058:93;26147:3;26058:93;:::i;:::-;26176:2;26171:3;26167:12;26160:19;;25819:366;;;:::o;26191:419::-;26357:4;26395:2;26384:9;26380:18;26372:26;;26444:9;26438:4;26434:20;26430:1;26419:9;26415:17;26408:47;26472:131;26598:4;26472:131;:::i;:::-;26464:139;;26191:419;;;:::o;26616:175::-;26756:27;26752:1;26744:6;26740:14;26733:51;26616:175;:::o;26797:366::-;26939:3;26960:67;27024:2;27019:3;26960:67;:::i;:::-;26953:74;;27036:93;27125:3;27036:93;:::i;:::-;27154:2;27149:3;27145:12;27138:19;;26797:366;;;:::o;27169:419::-;27335:4;27373:2;27362:9;27358:18;27350:26;;27422:9;27416:4;27412:20;27408:1;27397:9;27393:17;27386:47;27450:131;27576:4;27450:131;:::i;:::-;27442:139;;27169:419;;;:::o;27594:332::-;27715:4;27753:2;27742:9;27738:18;27730:26;;27766:71;27834:1;27823:9;27819:17;27810:6;27766:71;:::i;:::-;27847:72;27915:2;27904:9;27900:18;27891:6;27847:72;:::i;:::-;27594:332;;;;;:::o;27932:664::-;28137:4;28175:3;28164:9;28160:19;28152:27;;28189:71;28257:1;28246:9;28242:17;28233:6;28189:71;:::i;:::-;28270:72;28338:2;28327:9;28323:18;28314:6;28270:72;:::i;:::-;28352;28420:2;28409:9;28405:18;28396:6;28352:72;:::i;:::-;28434;28502:2;28491:9;28487:18;28478:6;28434:72;:::i;:::-;28516:73;28584:3;28573:9;28569:19;28560:6;28516:73;:::i;:::-;27932:664;;;;;;;;:::o;28602:410::-;28642:7;28665:20;28683:1;28665:20;:::i;:::-;28660:25;;28699:20;28717:1;28699:20;:::i;:::-;28694:25;;28754:1;28751;28747:9;28776:30;28794:11;28776:30;:::i;:::-;28765:41;;28955:1;28946:7;28942:15;28939:1;28936:22;28916:1;28909:9;28889:83;28866:139;;28985:18;;:::i;:::-;28866:139;28650:362;28602:410;;;;:::o;29018:180::-;29066:77;29063:1;29056:88;29163:4;29160:1;29153:15;29187:4;29184:1;29177:15;29204:185;29244:1;29261:20;29279:1;29261:20;:::i;:::-;29256:25;;29295:20;29313:1;29295:20;:::i;:::-;29290:25;;29334:1;29324:35;;29339:18;;:::i;:::-;29324:35;29381:1;29378;29374:9;29369:14;;29204:185;;;;:::o;29395:180::-;29443:77;29440:1;29433:88;29540:4;29537:1;29530:15;29564:4;29561:1;29554:15;29581:85;29626:7;29655:5;29644:16;;29581:85;;;:::o;29672:158::-;29730:9;29763:61;29781:42;29790:32;29816:5;29790:32;:::i;:::-;29781:42;:::i;:::-;29763:61;:::i;:::-;29750:74;;29672:158;;;:::o;29836:147::-;29931:45;29970:5;29931:45;:::i;:::-;29926:3;29919:58;29836:147;;:::o;29989:114::-;30056:6;30090:5;30084:12;30074:22;;29989:114;;;:::o;30109:184::-;30208:11;30242:6;30237:3;30230:19;30282:4;30277:3;30273:14;30258:29;;30109:184;;;;:::o;30299:132::-;30366:4;30389:3;30381:11;;30419:4;30414:3;30410:14;30402:22;;30299:132;;;:::o;30437:108::-;30514:24;30532:5;30514:24;:::i;:::-;30509:3;30502:37;30437:108;;:::o;30551:179::-;30620:10;30641:46;30683:3;30675:6;30641:46;:::i;:::-;30719:4;30714:3;30710:14;30696:28;;30551:179;;;;:::o;30736:113::-;30806:4;30838;30833:3;30829:14;30821:22;;30736:113;;;:::o;30885:732::-;31004:3;31033:54;31081:5;31033:54;:::i;:::-;31103:86;31182:6;31177:3;31103:86;:::i;:::-;31096:93;;31213:56;31263:5;31213:56;:::i;:::-;31292:7;31323:1;31308:284;31333:6;31330:1;31327:13;31308:284;;;31409:6;31403:13;31436:63;31495:3;31480:13;31436:63;:::i;:::-;31429:70;;31522:60;31575:6;31522:60;:::i;:::-;31512:70;;31368:224;31355:1;31352;31348:9;31343:14;;31308:284;;;31312:14;31608:3;31601:10;;31009:608;;;30885:732;;;;:::o;31623:942::-;31914:4;31952:3;31941:9;31937:19;31929:27;;31966:71;32034:1;32023:9;32019:17;32010:6;31966:71;:::i;:::-;32047:80;32123:2;32112:9;32108:18;32099:6;32047:80;:::i;:::-;32174:9;32168:4;32164:20;32159:2;32148:9;32144:18;32137:48;32202:108;32305:4;32296:6;32202:108;:::i;:::-;32194:116;;32320:72;32388:2;32377:9;32373:18;32364:6;32320:72;:::i;:::-;32402:73;32470:3;32459:9;32455:19;32446:6;32402:73;:::i;:::-;32485;32553:3;32542:9;32538:19;32529:6;32485:73;:::i;:::-;31623:942;;;;;;;;;:::o;32571:137::-;32625:5;32656:6;32650:13;32641:22;;32672:30;32696:5;32672:30;:::i;:::-;32571:137;;;;:::o;32714:345::-;32781:6;32830:2;32818:9;32809:7;32805:23;32801:32;32798:119;;;32836:79;;:::i;:::-;32798:119;32956:1;32981:61;33034:7;33025:6;33014:9;33010:22;32981:61;:::i;:::-;32971:71;;32927:125;32714:345;;;;:::o;33065:775::-;33298:4;33336:3;33325:9;33321:19;33313:27;;33350:71;33418:1;33407:9;33403:17;33394:6;33350:71;:::i;:::-;33431:72;33499:2;33488:9;33484:18;33475:6;33431:72;:::i;:::-;33513;33581:2;33570:9;33566:18;33557:6;33513:72;:::i;:::-;33595;33663:2;33652:9;33648:18;33639:6;33595:72;:::i;:::-;33677:73;33745:3;33734:9;33730:19;33721:6;33677:73;:::i;:::-;33760;33828:3;33817:9;33813:19;33804:6;33760:73;:::i;:::-;33065:775;;;;;;;;;:::o;33846:224::-;33986:34;33982:1;33974:6;33970:14;33963:58;34055:7;34050:2;34042:6;34038:15;34031:32;33846:224;:::o;34076:366::-;34218:3;34239:67;34303:2;34298:3;34239:67;:::i;:::-;34232:74;;34315:93;34404:3;34315:93;:::i;:::-;34433:2;34428:3;34424:12;34417:19;;34076:366;;;:::o;34448:419::-;34614:4;34652:2;34641:9;34637:18;34629:26;;34701:9;34695:4;34691:20;34687:1;34676:9;34672:17;34665:47;34729:131;34855:4;34729:131;:::i;:::-;34721:139;;34448:419;;;:::o;34873:222::-;35013:34;35009:1;35001:6;34997:14;34990:58;35082:5;35077:2;35069:6;35065:15;35058:30;34873:222;:::o;35101:366::-;35243:3;35264:67;35328:2;35323:3;35264:67;:::i;:::-;35257:74;;35340:93;35429:3;35340:93;:::i;:::-;35458:2;35453:3;35449:12;35442:19;;35101:366;;;:::o;35473:419::-;35639:4;35677:2;35666:9;35662:18;35654:26;;35726:9;35720:4;35716:20;35712:1;35701:9;35697:17;35690:47;35754:131;35880:4;35754:131;:::i;:::-;35746:139;;35473:419;;;:::o;35898:225::-;36038:34;36034:1;36026:6;36022:14;36015:58;36107:8;36102:2;36094:6;36090:15;36083:33;35898:225;:::o;36129:366::-;36271:3;36292:67;36356:2;36351:3;36292:67;:::i;:::-;36285:74;;36368:93;36457:3;36368:93;:::i;:::-;36486:2;36481:3;36477:12;36470:19;;36129:366;;;:::o;36501:419::-;36667:4;36705:2;36694:9;36690:18;36682:26;;36754:9;36748:4;36744:20;36740:1;36729:9;36725:17;36718:47;36782:131;36908:4;36782:131;:::i;:::-;36774:139;;36501:419;;;:::o;36926:229::-;37066:34;37062:1;37054:6;37050:14;37043:58;37135:12;37130:2;37122:6;37118:15;37111:37;36926:229;:::o;37161:366::-;37303:3;37324:67;37388:2;37383:3;37324:67;:::i;:::-;37317:74;;37400:93;37489:3;37400:93;:::i;:::-;37518:2;37513:3;37509:12;37502:19;;37161:366;;;:::o;37533:419::-;37699:4;37737:2;37726:9;37722:18;37714:26;;37786:9;37780:4;37776:20;37772:1;37761:9;37757:17;37750:47;37814:131;37940:4;37814:131;:::i;:::-;37806:139;;37533:419;;;:::o;37958:442::-;38107:4;38145:2;38134:9;38130:18;38122:26;;38158:71;38226:1;38215:9;38211:17;38202:6;38158:71;:::i;:::-;38239:72;38307:2;38296:9;38292:18;38283:6;38239:72;:::i;:::-;38321;38389:2;38378:9;38374:18;38365:6;38321:72;:::i;:::-;37958:442;;;;;;:::o;38406:831::-;38669:4;38707:3;38696:9;38692:19;38684:27;;38721:79;38797:1;38786:9;38782:17;38773:6;38721:79;:::i;:::-;38847:9;38841:4;38837:20;38832:2;38821:9;38817:18;38810:48;38875:108;38978:4;38969:6;38875:108;:::i;:::-;38867:116;;38993:72;39061:2;39050:9;39046:18;39037:6;38993:72;:::i;:::-;39075;39143:2;39132:9;39128:18;39119:6;39075:72;:::i;:::-;39157:73;39225:3;39214:9;39210:19;39201:6;39157:73;:::i;:::-;38406:831;;;;;;;;:::o;39243:332::-;39364:4;39402:2;39391:9;39387:18;39379:26;;39415:71;39483:1;39472:9;39468:17;39459:6;39415:71;:::i;:::-;39496:72;39564:2;39553:9;39549:18;39540:6;39496:72;:::i;:::-;39243:332;;;;;:::o;39581:180::-;39629:77;39626:1;39619:88;39726:4;39723:1;39716:15;39750:4;39747:1;39740:15;39767:225;39907:34;39903:1;39895:6;39891:14;39884:58;39976:8;39971:2;39963:6;39959:15;39952:33;39767:225;:::o;39998:366::-;40140:3;40161:67;40225:2;40220:3;40161:67;:::i;:::-;40154:74;;40237:93;40326:3;40237:93;:::i;:::-;40355:2;40350:3;40346:12;40339:19;;39998:366;;;:::o;40370:419::-;40536:4;40574:2;40563:9;40559:18;40551:26;;40623:9;40617:4;40613:20;40609:1;40598:9;40594:17;40587:47;40651:131;40777:4;40651:131;:::i;:::-;40643:139;;40370:419;;;:::o;40795:179::-;40935:31;40931:1;40923:6;40919:14;40912:55;40795:179;:::o;40980:366::-;41122:3;41143:67;41207:2;41202:3;41143:67;:::i;:::-;41136:74;;41219:93;41308:3;41219:93;:::i;:::-;41337:2;41332:3;41328:12;41321:19;;40980:366;;;:::o;41352:419::-;41518:4;41556:2;41545:9;41541:18;41533:26;;41605:9;41599:4;41595:20;41591:1;41580:9;41576:17;41569:47;41633:131;41759:4;41633:131;:::i;:::-;41625:139;;41352:419;;;:::o
Metadata Hash
616de49c44730b4a0c403b3628bc8956ccab5c1b9e5416d8ba3a61cb9da049d2
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.