More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 138 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20155855 | 13 days ago | IN | 0 ETH | 0.0001168 | ||||
Approve | 19884972 | 51 days ago | IN | 0 ETH | 0.0002044 | ||||
Approve | 19834918 | 58 days ago | IN | 0 ETH | 0.0002962 | ||||
Transfer | 19817566 | 60 days ago | IN | 0 ETH | 0.00033367 | ||||
Transfer | 19802898 | 62 days ago | IN | 0 ETH | 0.00032734 | ||||
Approve | 19801726 | 62 days ago | IN | 0 ETH | 0.00021991 | ||||
Transfer | 19801578 | 62 days ago | IN | 0 ETH | 0.00018669 | ||||
Transfer | 19801565 | 62 days ago | IN | 0 ETH | 0.00019661 | ||||
Transfer | 19801546 | 62 days ago | IN | 0 ETH | 0.00020191 | ||||
Transfer | 19801525 | 62 days ago | IN | 0 ETH | 0.00019532 | ||||
Approve | 19797814 | 63 days ago | IN | 0 ETH | 0.00031384 | ||||
Approve | 19796342 | 63 days ago | IN | 0 ETH | 0.00037748 | ||||
Transfer Ownersh... | 19792076 | 64 days ago | IN | 0 ETH | 0.00021997 | ||||
Approve | 19791981 | 64 days ago | IN | 0 ETH | 0.00035298 | ||||
Approve | 19791960 | 64 days ago | IN | 0 ETH | 0.00033376 | ||||
Approve | 19791912 | 64 days ago | IN | 0 ETH | 0.00029548 | ||||
Transfer | 19790786 | 64 days ago | IN | 0 ETH | 0.00045651 | ||||
Transfer | 19790730 | 64 days ago | IN | 0 ETH | 0.00046664 | ||||
Transfer | 19790600 | 64 days ago | IN | 0 ETH | 0.00056804 | ||||
Transfer | 19790366 | 64 days ago | IN | 0 ETH | 0.00065763 | ||||
Approve | 19790097 | 64 days ago | IN | 0 ETH | 0.00067119 | ||||
Approve | 19790043 | 64 days ago | IN | 0 ETH | 0.00053774 | ||||
Transfer | 19789939 | 64 days ago | IN | 0 ETH | 0.00073191 | ||||
Transfer | 19789907 | 64 days ago | IN | 0 ETH | 0.00073492 | ||||
Approve | 19789724 | 64 days ago | IN | 0 ETH | 0.00045374 |
Latest 21 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
19877871 | 52 days ago | 0.00050957 ETH | ||||
19877871 | 52 days ago | 0.00025478 ETH | ||||
19877871 | 52 days ago | 0.00076436 ETH | ||||
19792438 | 64 days ago | 0.0056167 ETH | ||||
19792438 | 64 days ago | 0.00280835 ETH | ||||
19792438 | 64 days ago | 0.00842506 ETH | ||||
19791983 | 64 days ago | 0.02025905 ETH | ||||
19791983 | 64 days ago | 0.01012952 ETH | ||||
19791983 | 64 days ago | 0.03038857 ETH | ||||
19763979 | 68 days ago | 0.04824106 ETH | ||||
19763979 | 68 days ago | 0.02412053 ETH | ||||
19763979 | 68 days ago | 0.0723616 ETH | ||||
19721507 | 74 days ago | 0.10999432 ETH | ||||
19721507 | 74 days ago | 0.05499716 ETH | ||||
19721507 | 74 days ago | 0.16499148 ETH | ||||
19714509 | 74 days ago | 0.45688555 ETH | ||||
19714509 | 74 days ago | 0.22844277 ETH | ||||
19714509 | 74 days ago | 0.68532833 ETH | ||||
19693915 | 77 days ago | 0.2274693 ETH | ||||
19693915 | 77 days ago | 0.2274693 ETH | ||||
19693915 | 77 days ago | 0.45493861 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FUA
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-20 */ /* * SPDX-License-Identifier: MIT * https://fuatoken.io/ * https://twitter.com/FUA_Token * https://t.me/FUA_Eth */ pragma solidity 0.8.25; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract FUA is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; bool private transferDelayEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTaxTotal; uint256 private buyMarketingTax; uint256 private buyProjectTax; uint256 private sellTaxTotal; uint256 private sellMarketingTax; uint256 private sellProjectTax; uint256 private tokensForMarketing; uint256 private tokensForProject; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("FUA Token", "FUA") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); exemptFromLimits(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); exemptFromLimits(address(dexPair), true); _setAutomatedMarketMakerPair(address(dexPair), true); uint256 _buyMarketingTax = 0; uint256 _buyProjectTax = 0; uint256 _sellMarketingTax = 3; uint256 _sellProjectTax = 0; uint256 _totalSupply = 177_000_000_000 * 10 ** decimals(); maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyMarketingTax = _buyMarketingTax; buyProjectTax = _buyProjectTax; buyTaxTotal = buyMarketingTax + buyProjectTax; sellMarketingTax = _sellMarketingTax; sellProjectTax = _sellProjectTax; sellTaxTotal = sellMarketingTax + sellProjectTax; marketingWallet = address(0xE4F138fFcd521cc754F5e166F1a0f57873fD9920); projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount exemptFromFees(msg.sender, true); exemptFromFees(address(this), true); exemptFromFees(address(0xdead), true); exemptFromFees(marketingWallet, true); exemptFromLimits(msg.sender, true); exemptFromLimits(address(this), true); exemptFromLimits(address(0xdead), true); exemptFromLimits(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function startTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function removeAllLimits() external onlyOwner { limitsEnabled = false; emit LimitsRemoved(block.timestamp); } /** * @notice Removes the transfer delay * @dev onlyOwner. * Emits an {DisabledTransferDelay} event */ function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; emit DisabledTransferDelay(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enabled If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function setSwapBackSettings( bool _enabled, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enabled; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enabled, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newNum Base 1000, so 1% = 10 */ function setTheMaxTx(uint256 newNum) external onlyOwner { require(newNum >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newNum * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newNum Base 1000, so 1% = 10 */ function setTheMaxWallet(uint256 newNum) external onlyOwner { require(newNum >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newNum * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function exemptFromLimits( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function setFeesBuy( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { buyMarketingTax = _marketingFee; buyProjectTax = _devFee; buyTaxTotal = buyMarketingTax + buyProjectTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function setFeesSell( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { sellMarketingTax = _marketingFee; sellProjectTax = _devFee; sellTaxTotal = sellMarketingTax + sellProjectTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function exemptFromFees(address account, bool excluded) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetAutomatedMarketMakerPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newWallet The new marketing wallet */ function changeMarketingWallet(address newWallet) external onlyOwner { emit MarketingWalletUpdated(newWallet, marketingWallet); marketingWallet = newWallet; } /** * @notice Sets the project wallet * @dev onlyOwner. * Emits an {ProjectWalletUpdated} event * @param newWallet The new dev wallet */ function changeProjectWallet(address newWallet) external onlyOwner { emit ProjectWalletUpdated(newWallet, projectWallet); projectWallet = newWallet; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function swapbackValues() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _transferDelayEnabled if the transfer delay is enabled * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function maxTxValues() external view returns ( bool _limitsEnabled, bool _transferDelayEnabled, uint256 _maxWallet, uint256 _maxTx ) { _limitsEnabled = limitsEnabled; _transferDelayEnabled = transferDelayEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees * @return _projectWallet The wallet that receives the dev fees */ function receiverwallets() external view returns (address _marketingWallet, address _projectWallet) { return (marketingWallet, projectWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _buyMarketingTax The fee for buys that gets sent to marketing * @return _buyProjectTax The fee for buys that gets sent to dev * @return _sellTaxTotal The total fee for sells * @return _sellMarketingTax The fee for sells that gets sent to marketing * @return _sellProjectTax The fee for sells that gets sent to dev */ function taxValues() external view returns ( uint256 _buyTaxTotal, uint256 _buyMarketingTax, uint256 _buyProjectTax, uint256 _sellTaxTotal, uint256 _sellMarketingTax, uint256 _sellProjectTax ) { _buyTaxTotal = buyTaxTotal; _buyMarketingTax = buyMarketingTax; _buyProjectTax = buyProjectTax; _sellTaxTotal = sellTaxTotal; _sellMarketingTax = sellMarketingTax; _sellProjectTax = sellProjectTax; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function checkMappings( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(dexRouter) && to != address(dexPair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); tokensForProject += (fees * sellProjectTax) / sellTaxTotal; tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal; } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); tokensForProject += (fees * buyProjectTax) / buyTaxTotal; tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForProject).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForProject = 0; (success, ) = address(projectWallet).call{value: ethForDev}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040525f600560156101000a81548160ff021916908315150217905550600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600981526020017f46554120546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f465541000000000000000000000000000000000000000000000000000000000081525081600390816100f39190610e59565b5080600490816101039190610e59565b5050506101226101176105b660201b60201c565b6105bd60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014b81600161068060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ec9190610f86565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610251573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102759190610f86565b6040518363ffffffff1660e01b8152600401610292929190610fc0565b6020604051808303815f875af11580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d29190610f86565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061031860a051600161068060201b60201c565b61032b60a05160016107ae60201b60201c565b5f805f600390505f8061034261084c60201b60201c565b600a61034e919061114f565b64293605aa0061035e9190611199565b90506103e8600a826103709190611199565b61037a9190611207565b600a819055506103e8600a826103909190611199565b61039a9190611207565b6009819055506103e86001826103b09190611199565b6103ba9190611207565b60068190555060646002826103cf9190611199565b6103d99190611207565b60078190555084600f8190555083601081905550601054600f546103fd9190611237565b600e8190555082601281905550816013819055506013546012546104219190611237565b60118190555073e4f138ffcd521cc754f5e166f1a0f57873fd9920600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104cd33600161085460201b60201c565b6104de30600161085460201b60201c565b6104f161dead600161085460201b60201c565b610524600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161085460201b60201c565b61053533600161068060201b60201c565b61054630600161068060201b60201c565b61055961dead600161068060201b60201c565b61058c600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161068060201b60201c565b61059b3361098260201b60201c565b6105ab3382610a8a60201b60201c565b505050505050611433565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61068e6105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106b2610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff906112c4565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516107a291906112fc565b60405180910390a25050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6012905090565b6108626105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16610886610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d3906112c4565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161097691906112fc565b60405180910390a25050565b6109906105b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109b4610bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906112c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90611385565b60405180910390fd5b610a87816105bd60201b60201c565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef906113ed565b60405180910390fd5b610b095f8383610c1560201b60201c565b8060025f828254610b1a9190611237565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b6c9190611237565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd0919061141a565b60405180910390a3610be95f8383610c1a60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c9a57607f821691505b602082108103610cad57610cac610c56565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cd4565b610d198683610cd4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d5d610d58610d5384610d31565b610d3a565b610d31565b9050919050565b5f819050919050565b610d7683610d43565b610d8a610d8282610d64565b848454610ce0565b825550505050565b5f90565b610d9e610d92565b610da9818484610d6d565b505050565b5b81811015610dcc57610dc15f82610d96565b600181019050610daf565b5050565b601f821115610e1157610de281610cb3565b610deb84610cc5565b81016020851015610dfa578190505b610e0e610e0685610cc5565b830182610dae565b50505b505050565b5f82821c905092915050565b5f610e315f1984600802610e16565b1980831691505092915050565b5f610e498383610e22565b9150826002028217905092915050565b610e6282610c1f565b67ffffffffffffffff811115610e7b57610e7a610c29565b5b610e858254610c83565b610e90828285610dd0565b5f60209050601f831160018114610ec1575f8415610eaf578287015190505b610eb98582610e3e565b865550610f20565b601f198416610ecf86610cb3565b5f5b82811015610ef657848901518255600182019150602085019450602081019050610ed1565b86831015610f135784890151610f0f601f891682610e22565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f5582610f2c565b9050919050565b610f6581610f4b565b8114610f6f575f80fd5b50565b5f81519050610f8081610f5c565b92915050565b5f60208284031215610f9b57610f9a610f28565b5b5f610fa884828501610f72565b91505092915050565b610fba81610f4b565b82525050565b5f604082019050610fd35f830185610fb1565b610fe06020830184610fb1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156110695780860481111561104557611044610fe7565b5b60018516156110545780820291505b808102905061106285611014565b9450611029565b94509492505050565b5f82611081576001905061113c565b8161108e575f905061113c565b81600181146110a457600281146110ae576110dd565b600191505061113c565b60ff8411156110c0576110bf610fe7565b5b8360020a9150848211156110d7576110d6610fe7565b5b5061113c565b5060208310610133831016604e8410600b84101617156111125782820a90508381111561110d5761110c610fe7565b5b61113c565b61111f8484846001611020565b9250905081840481111561113657611135610fe7565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61115982610d31565b915061116483611143565b92506111917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611072565b905092915050565b5f6111a382610d31565b91506111ae83610d31565b92508282026111bc81610d31565b915082820484148315176111d3576111d2610fe7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61121182610d31565b915061121c83610d31565b92508261122c5761122b6111da565b5b828204905092915050565b5f61124182610d31565b915061124c83610d31565b925082820190508082111561126457611263610fe7565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6112ae60208361126a565b91506112b98261127a565b602082019050919050565b5f6020820190508181035f8301526112db816112a2565b9050919050565b5f8115159050919050565b6112f6816112e2565b82525050565b5f60208201905061130f5f8301846112ed565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61136f60268361126a565b915061137a82611315565b604082019050919050565b5f6020820190508181035f83015261139c81611363565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6113d7601f8361126a565b91506113e2826113a3565b602082019050919050565b5f6020820190508181035f830152611404816113cb565b9050919050565b61141481610d31565b82525050565b5f60208201905061142d5f83018461140b565b92915050565b60805160a0516148fa6114775f395f818161122101528181611beb015261241201525f81816123ba015281816132ae0152818161338d01526133b401526148fa5ff3fe6080604052600436106101fc575f3560e01c806399e5b5c81161010c578063db05e5cb1161009f578063f242ab411161006e578063f242ab41146106fe578063f2fde38b14610728578063f3dc390214610750578063fab82a8e1461077f578063fcbb7607146107aa57610203565b8063db05e5cb14610658578063dd62ed3e1461066e578063e13b2007146106aa578063e884f260146106e857610203565b8063a457c2d7116100db578063a457c2d714610590578063a9059cbb146105cc578063bb85c6d114610608578063d08893581461063057610203565b806399e5b5c8146104f05780639a7a23d6146105185780639b6b5499146105405780639fe640941461056857610203565b80634ada218b1161018f57806370a082311161015e57806370a082311461041e578063715018a61461045a57806377b5312c146104705780638da5cb5b1461049c57806395d89b41146104c657610203565b80634ada218b1461037c5780634b896a3e146103a657806352d65858146103ce5780635580145f146103f657610203565b8063293230b8116101cb578063293230b8146102d3578063313ce567146102e957806331f8151114610313578063395093511461034057610203565b806306fdde0314610207578063095ea7b31461023157806318160ddd1461026d57806323b872dd1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b6107d2565b60405161022891906134c9565b60405180910390f35b34801561023c575f80fd5b506102576004803603810190610252919061357a565b610862565b60405161026491906135d2565b60405180910390f35b348015610278575f80fd5b5061028161087f565b60405161028e91906135fa565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190613613565b610888565b6040516102ca91906135d2565b60405180910390f35b3480156102de575f80fd5b506102e761097a565b005b3480156102f4575f80fd5b506102fd610a5a565b60405161030a919061367e565b60405180910390f35b34801561031e575f80fd5b50610327610a62565b6040516103379493929190613697565b60405180910390f35b34801561034b575f80fd5b506103666004803603810190610361919061357a565b610a99565b60405161037391906135d2565b60405180910390f35b348015610387575f80fd5b50610390610b40565b60405161039d91906135d2565b60405180910390f35b3480156103b1575f80fd5b506103cc60048036038101906103c791906136da565b610b52565b005b3480156103d9575f80fd5b506103f460048036038101906103ef9190613705565b610c74565b005b348015610401575f80fd5b5061041c600480360381019061041791906136da565b610d9f565b005b348015610429575f80fd5b50610444600480360381019061043f9190613743565b610ec1565b60405161045191906135fa565b60405180910390f35b348015610465575f80fd5b5061046e610f06565b005b34801561047b575f80fd5b50610484610f8d565b6040516104939392919061376e565b60405180910390f35b3480156104a7575f80fd5b506104b0610fb1565b6040516104bd91906137b2565b60405180910390f35b3480156104d1575f80fd5b506104da610fd9565b6040516104e791906134c9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190613743565b611069565b005b348015610523575f80fd5b5061053e600480360381019061053991906137f5565b6111a3565b005b34801561054b575f80fd5b50610566600480360381019061056191906137f5565b6112bb565b005b348015610573575f80fd5b5061058e60048036038101906105899190613705565b6113dd565b005b34801561059b575f80fd5b506105b660048036038101906105b1919061357a565b611508565b6040516105c391906135d2565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed919061357a565b6115ee565b6040516105ff91906135d2565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190613743565b61160b565b005b34801561063b575f80fd5b5061065660048036038101906106519190613833565b611747565b005b348015610663575f80fd5b5061066c6118f0565b005b348015610679575f80fd5b50610694600480360381019061068f9190613883565b6119b4565b6040516106a191906135fa565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190613743565b611a36565b6040516106df939291906138c1565b60405180910390f35b3480156106f3575f80fd5b506106fc611b24565b005b348015610709575f80fd5b50610712611be9565b60405161071f91906137b2565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190613743565b611c0d565b005b34801561075b575f80fd5b50610764611d03565b604051610776969594939291906138f6565b60405180910390f35b34801561078a575f80fd5b50610793611d2f565b6040516107a1929190613955565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906137f5565b611d7e565b005b6060600380546107e1906139a9565b80601f016020809104026020016040519081016040528092919081815260200182805461080d906139a9565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f61087561086e611ea0565b8484611ea7565b6001905092915050565b5f600254905090565b5f61089484848461206a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108db611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190613a49565b60405180910390fd5b61096e85610966611ea0565b858403611ea7565b60019150509392505050565b610982611ea0565b73ffffffffffffffffffffffffffffffffffffffff166109a0610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613ab1565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b5f6012905090565b5f805f8060085f9054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b5f610b36610aa5611ea0565b848460015f610ab2611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b319190613afc565b611ea7565b6001905092915050565b600c5f9054906101000a900460ff1681565b610b5a611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610b78610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613ab1565b60405180910390fd5b6005811015610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b9f565b60405180910390fd5b6103e8610c1d61087f565b82610c289190613bbd565b610c329190613c2b565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610c6991906135fa565b60405180910390a150565b610c7c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610c9a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613ab1565b60405180910390fd5b81600f8190555080601081905550601054600f54610d0e9190613afc565b600e819055506064600e541115610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613ccb565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610d9393929190613ce9565b60405180910390a15050565b610da7611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613ab1565b60405180910390fd5b6002811015610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613d68565b60405180910390fd5b6103e8610e6a61087f565b82610e759190613bbd565b610e7f9190613c2b565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eb691906135fa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f0e611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610f2c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613ab1565b60405180910390fd5b610f8b5f612c59565b565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fe8906139a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611014906139a9565b801561105f5780601f106110365761010080835404028352916020019161105f565b820191905f5260205f20905b81548152906001019060200180831161104257829003601f168201915b5050505050905090565b611071611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661108f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613ab1565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ab611ea0565b73ffffffffffffffffffffffffffffffffffffffff166111c9610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613ab1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613df6565b60405180910390fd5b6112b78282612d1c565b5050565b6112c3611ea0565b73ffffffffffffffffffffffffffffffffffffffff166112e1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90613ab1565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113d191906135d2565b60405180910390a25050565b6113e5611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611403610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613ab1565b60405180910390fd5b81601281905550806013819055506013546012546114779190613afc565b601181905550606460115411156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613e84565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516114fc93929190613ce9565b60405180910390a15050565b5f8060015f611515611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613f12565b60405180910390fd5b6115e36115da611ea0565b85858403611ea7565b600191505092915050565b5f6116016115fa611ea0565b848461206a565b6001905092915050565b611613611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611631610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613ab1565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174f611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661176d610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613ab1565b60405180910390fd5b6001821015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613fa0565b60405180910390fd5b8181101561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118419061402e565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261187061087f565b61187a9190613bbd565b6118849190613c2b565b6006819055506127108161189661087f565b6118a09190613bbd565b6118aa9190613c2b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516118e39392919061376e565b60405180910390a1505050565b6118f8611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611916610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390613ab1565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16925060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16915060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b611b2c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611b4a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613ab1565b60405180910390fd5b5f600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c15611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611c33610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906140bc565b60405180910390fd5b611d0081612c59565b50565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611d86611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611da4610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613ab1565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611e9491906135d2565b60405180910390a25050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061414a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906141d8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161205d91906135fa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906142f4565b60405180910390fd5b5f810361215d5761215883835f612dba565b612c54565b60085f9054906101000a900460ff161561280457612179610fb1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121e757506121b7610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612259575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122725750600560149054906101000a900460ff16155b1561280357600c5f9054906101000a900460ff166123655760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614382565b60405180910390fd5b5b600860019054906101000a900460ff161561252957612382610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561240957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125285743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614436565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c6575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561266d57600a54811115612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906144c4565b60405180910390fd5b60095461261c83610ec1565b826126279190613afc565b1115612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f9061452c565b60405180910390fd5b612802565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561270a575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561275957600a54811115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906145ba565b60405180910390fd5b612801565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612800576009546127b383610ec1565b826127be9190613afc565b11156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f69061452c565b60405180910390fd5b5b5b5b5b5b5f61280e30610ec1565b90505f60065482101590508080156128325750600560159054906101000a900460ff165b801561284b5750600560149054906101000a900460ff16155b801561289e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128f1575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612944575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612987576001600560146101000a81548160ff02191690831515021790555061296c61302f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a36575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3f575f90505b5f8115612c445760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9d57505f601154115b15612b3557612aca6064612abc601154886131dd90919063ffffffff16565b6131f290919063ffffffff16565b905060115460135482612add9190613bbd565b612ae79190613c2b565b60155f828254612af79190613afc565b9250508190555060115460125482612b0f9190613bbd565b612b199190613c2b565b60145f828254612b299190613afc565b92505081905550612c21565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8c57505f600e54115b15612c2057612bb96064612bab600e54886131dd90919063ffffffff16565b6131f290919063ffffffff16565b9050600e5460105482612bcc9190613bbd565b612bd69190613c2b565b60155f828254612be69190613afc565b92505081905550600e54600f5482612bfe9190613bbd565b612c089190613c2b565b60145f828254612c189190613afc565b925050819055505b5b5f811115612c3557612c34873083612dba565b5b8085612c4191906145d8565b94505b612c4f878787612dba565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906142f4565b60405180910390fd5b612ea1838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b9061467b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612fb29190613afc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301691906135fa565b60405180910390a361302984848461320c565b50505050565b5f61303930610ec1565b90505f8190505f80830361304f575050506131db565b60075483111561305f5760075492505b5f8390505f47905061307082613211565b5f613084824761344490919063ffffffff16565b90505f6130ae866130a0601554856131dd90919063ffffffff16565b6131f290919063ffffffff16565b90505f6014819055505f601581905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613103906146c6565b5f6040518083038185875af1925050503d805f811461313d576040519150601f19603f3d011682016040523d82523d5f602084013e613142565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318e906146c6565b5f6040518083038185875af1925050503d805f81146131c8576040519150601f19603f3d011682016040523d82523d5f602084013e6131cd565b606091505b505080955050505050505050505b565b5f81836131ea9190613bbd565b905092915050565b5f81836131ff9190613c2b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561322d5761322c6146da565b5b60405190808252806020026020018201604052801561325b5781602001602082028036833780820191505090505b50905030815f8151811061327257613271614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133399190614748565b8160018151811061334d5761334c614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b2307f000000000000000000000000000000000000000000000000000000000000000084611ea7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341395949392919061486c565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b505050505050565b5f818361345191906145d8565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61349b82613459565b6134a58185613463565b93506134b5818560208601613473565b6134be81613481565b840191505092915050565b5f6020820190508181035f8301526134e18184613491565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613516826134ed565b9050919050565b6135268161350c565b8114613530575f80fd5b50565b5f813590506135418161351d565b92915050565b5f819050919050565b61355981613547565b8114613563575f80fd5b50565b5f8135905061357481613550565b92915050565b5f80604083850312156135905761358f6134e9565b5b5f61359d85828601613533565b92505060206135ae85828601613566565b9150509250929050565b5f8115159050919050565b6135cc816135b8565b82525050565b5f6020820190506135e55f8301846135c3565b92915050565b6135f481613547565b82525050565b5f60208201905061360d5f8301846135eb565b92915050565b5f805f6060848603121561362a576136296134e9565b5b5f61363786828701613533565b935050602061364886828701613533565b925050604061365986828701613566565b9150509250925092565b5f60ff82169050919050565b61367881613663565b82525050565b5f6020820190506136915f83018461366f565b92915050565b5f6080820190506136aa5f8301876135c3565b6136b760208301866135c3565b6136c460408301856135eb565b6136d160608301846135eb565b95945050505050565b5f602082840312156136ef576136ee6134e9565b5b5f6136fc84828501613566565b91505092915050565b5f806040838503121561371b5761371a6134e9565b5b5f61372885828601613566565b925050602061373985828601613566565b9150509250929050565b5f60208284031215613758576137576134e9565b5b5f61376584828501613533565b91505092915050565b5f6060820190506137815f8301866135c3565b61378e60208301856135eb565b61379b60408301846135eb565b949350505050565b6137ac8161350c565b82525050565b5f6020820190506137c55f8301846137a3565b92915050565b6137d4816135b8565b81146137de575f80fd5b50565b5f813590506137ef816137cb565b92915050565b5f806040838503121561380b5761380a6134e9565b5b5f61381885828601613533565b9250506020613829858286016137e1565b9150509250929050565b5f805f6060848603121561384a576138496134e9565b5b5f613857868287016137e1565b935050602061386886828701613566565b925050604061387986828701613566565b9150509250925092565b5f8060408385031215613899576138986134e9565b5b5f6138a685828601613533565b92505060206138b785828601613533565b9150509250929050565b5f6060820190506138d45f8301866135c3565b6138e160208301856135c3565b6138ee60408301846135c3565b949350505050565b5f60c0820190506139095f8301896135eb565b61391660208301886135eb565b61392360408301876135eb565b61393060608301866135eb565b61393d60808301856135eb565b61394a60a08301846135eb565b979650505050505050565b5f6040820190506139685f8301856137a3565b61397560208301846137a3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139c057607f821691505b6020821081036139d3576139d261397c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613a33602883613463565b9150613a3e826139d9565b604082019050919050565b5f6020820190508181035f830152613a6081613a27565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a9b602083613463565b9150613aa682613a67565b602082019050919050565b5f6020820190508181035f830152613ac881613a8f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b0682613547565b9150613b1183613547565b9250828201905080821115613b2957613b28613acf565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b89602483613463565b9150613b9482613b2f565b604082019050919050565b5f6020820190508181035f830152613bb681613b7d565b9050919050565b5f613bc782613547565b9150613bd283613547565b9250828202613be081613547565b91508282048414831517613bf757613bf6613acf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3582613547565b9150613c4083613547565b925082613c5057613c4f613bfe565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f613cb5602883613463565b9150613cc082613c5b565b604082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b5f606082019050613cfc5f8301866135eb565b613d0960208301856135eb565b613d1660408301846135eb565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f613d52602083613463565b9150613d5d82613d1e565b602082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613de0603983613463565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f613e6e602983613463565b9150613e7982613e14565b604082019050919050565b5f6020820190508181035f830152613e9b81613e62565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583613463565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613f8a603483613463565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f614018602a83613463565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140a6602683613463565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614134602483613463565b915061413f826140da565b604082019050919050565b5f6020820190508181035f83015261416181614128565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c2602283613463565b91506141cd82614168565b604082019050919050565b5f6020820190508181035f8301526141ef816141b6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614250602583613463565b915061425b826141f6565b604082019050919050565b5f6020820190508181035f83015261427d81614244565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142de602383613463565b91506142e982614284565b604082019050919050565b5f6020820190508181035f83015261430b816142d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f61436c602283613463565b915061437782614312565b604082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614420604983613463565b915061442b826143a0565b606082019050919050565b5f6020820190508181035f83015261444d81614414565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6144ae602683613463565b91506144b982614454565b604082019050919050565b5f6020820190508181035f8301526144db816144a2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614516601383613463565b9150614521826144e2565b602082019050919050565b5f6020820190508181035f8301526145438161450a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f6145a4602783613463565b91506145af8261454a565b604082019050919050565b5f6020820190508181035f8301526145d181614598565b9050919050565b5f6145e282613547565b91506145ed83613547565b925082820390508181111561460557614604613acf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614665602683613463565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f81905092915050565b50565b5f6146b15f83614699565b91506146bc826146a3565b5f82019050919050565b5f6146d0826146a6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506147428161351d565b92915050565b5f6020828403121561475d5761475c6134e9565b5b5f61476a84828501614734565b91505092915050565b5f819050919050565b5f819050919050565b5f61479f61479a61479584614773565b61477c565b613547565b9050919050565b6147af81614785565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147e78161350c565b82525050565b5f6147f883836147de565b60208301905092915050565b5f602082019050919050565b5f61481a826147b5565b61482481856147bf565b935061482f836147cf565b805f5b8381101561485f57815161484688826147ed565b975061485183614804565b925050600181019050614832565b5085935050505092915050565b5f60a08201905061487f5f8301886135eb565b61488c60208301876147a6565b818103604083015261489e8186614810565b90506148ad60608301856137a3565b6148ba60808301846135eb565b969550505050505056fea26469706673582212205a10bbf0c6ec9420f05dfb1208455ad23bfc14fba50242414d06c73cd891f2f364736f6c63430008190033
Deployed Bytecode
0x6080604052600436106101fc575f3560e01c806399e5b5c81161010c578063db05e5cb1161009f578063f242ab411161006e578063f242ab41146106fe578063f2fde38b14610728578063f3dc390214610750578063fab82a8e1461077f578063fcbb7607146107aa57610203565b8063db05e5cb14610658578063dd62ed3e1461066e578063e13b2007146106aa578063e884f260146106e857610203565b8063a457c2d7116100db578063a457c2d714610590578063a9059cbb146105cc578063bb85c6d114610608578063d08893581461063057610203565b806399e5b5c8146104f05780639a7a23d6146105185780639b6b5499146105405780639fe640941461056857610203565b80634ada218b1161018f57806370a082311161015e57806370a082311461041e578063715018a61461045a57806377b5312c146104705780638da5cb5b1461049c57806395d89b41146104c657610203565b80634ada218b1461037c5780634b896a3e146103a657806352d65858146103ce5780635580145f146103f657610203565b8063293230b8116101cb578063293230b8146102d3578063313ce567146102e957806331f8151114610313578063395093511461034057610203565b806306fdde0314610207578063095ea7b31461023157806318160ddd1461026d57806323b872dd1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b6107d2565b60405161022891906134c9565b60405180910390f35b34801561023c575f80fd5b506102576004803603810190610252919061357a565b610862565b60405161026491906135d2565b60405180910390f35b348015610278575f80fd5b5061028161087f565b60405161028e91906135fa565b60405180910390f35b3480156102a2575f80fd5b506102bd60048036038101906102b89190613613565b610888565b6040516102ca91906135d2565b60405180910390f35b3480156102de575f80fd5b506102e761097a565b005b3480156102f4575f80fd5b506102fd610a5a565b60405161030a919061367e565b60405180910390f35b34801561031e575f80fd5b50610327610a62565b6040516103379493929190613697565b60405180910390f35b34801561034b575f80fd5b506103666004803603810190610361919061357a565b610a99565b60405161037391906135d2565b60405180910390f35b348015610387575f80fd5b50610390610b40565b60405161039d91906135d2565b60405180910390f35b3480156103b1575f80fd5b506103cc60048036038101906103c791906136da565b610b52565b005b3480156103d9575f80fd5b506103f460048036038101906103ef9190613705565b610c74565b005b348015610401575f80fd5b5061041c600480360381019061041791906136da565b610d9f565b005b348015610429575f80fd5b50610444600480360381019061043f9190613743565b610ec1565b60405161045191906135fa565b60405180910390f35b348015610465575f80fd5b5061046e610f06565b005b34801561047b575f80fd5b50610484610f8d565b6040516104939392919061376e565b60405180910390f35b3480156104a7575f80fd5b506104b0610fb1565b6040516104bd91906137b2565b60405180910390f35b3480156104d1575f80fd5b506104da610fd9565b6040516104e791906134c9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190613743565b611069565b005b348015610523575f80fd5b5061053e600480360381019061053991906137f5565b6111a3565b005b34801561054b575f80fd5b50610566600480360381019061056191906137f5565b6112bb565b005b348015610573575f80fd5b5061058e60048036038101906105899190613705565b6113dd565b005b34801561059b575f80fd5b506105b660048036038101906105b1919061357a565b611508565b6040516105c391906135d2565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed919061357a565b6115ee565b6040516105ff91906135d2565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190613743565b61160b565b005b34801561063b575f80fd5b5061065660048036038101906106519190613833565b611747565b005b348015610663575f80fd5b5061066c6118f0565b005b348015610679575f80fd5b50610694600480360381019061068f9190613883565b6119b4565b6040516106a191906135fa565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb9190613743565b611a36565b6040516106df939291906138c1565b60405180910390f35b3480156106f3575f80fd5b506106fc611b24565b005b348015610709575f80fd5b50610712611be9565b60405161071f91906137b2565b60405180910390f35b348015610733575f80fd5b5061074e60048036038101906107499190613743565b611c0d565b005b34801561075b575f80fd5b50610764611d03565b604051610776969594939291906138f6565b60405180910390f35b34801561078a575f80fd5b50610793611d2f565b6040516107a1929190613955565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906137f5565b611d7e565b005b6060600380546107e1906139a9565b80601f016020809104026020016040519081016040528092919081815260200182805461080d906139a9565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f61087561086e611ea0565b8484611ea7565b6001905092915050565b5f600254905090565b5f61089484848461206a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108db611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190613a49565b60405180910390fd5b61096e85610966611ea0565b858403611ea7565b60019150509392505050565b610982611ea0565b73ffffffffffffffffffffffffffffffffffffffff166109a0610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613ab1565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b5f6012905090565b5f805f8060085f9054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b5f610b36610aa5611ea0565b848460015f610ab2611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b319190613afc565b611ea7565b6001905092915050565b600c5f9054906101000a900460ff1681565b610b5a611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610b78610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613ab1565b60405180910390fd5b6005811015610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b9f565b60405180910390fd5b6103e8610c1d61087f565b82610c289190613bbd565b610c329190613c2b565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610c6991906135fa565b60405180910390a150565b610c7c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610c9a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613ab1565b60405180910390fd5b81600f8190555080601081905550601054600f54610d0e9190613afc565b600e819055506064600e541115610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613ccb565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610d9393929190613ce9565b60405180910390a15050565b610da7611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613ab1565b60405180910390fd5b6002811015610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613d68565b60405180910390fd5b6103e8610e6a61087f565b82610e759190613bbd565b610e7f9190613c2b565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eb691906135fa565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f0e611ea0565b73ffffffffffffffffffffffffffffffffffffffff16610f2c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613ab1565b60405180910390fd5b610f8b5f612c59565b565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fe8906139a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611014906139a9565b801561105f5780601f106110365761010080835404028352916020019161105f565b820191905f5260205f20905b81548152906001019060200180831161104257829003601f168201915b5050505050905090565b611071611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661108f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613ab1565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ab611ea0565b73ffffffffffffffffffffffffffffffffffffffff166111c9610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121690613ab1565b60405180910390fd5b7f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613df6565b60405180910390fd5b6112b78282612d1c565b5050565b6112c3611ea0565b73ffffffffffffffffffffffffffffffffffffffff166112e1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90613ab1565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113d191906135d2565b60405180910390a25050565b6113e5611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611403610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613ab1565b60405180910390fd5b81601281905550806013819055506013546012546114779190613afc565b601181905550606460115411156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613e84565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516114fc93929190613ce9565b60405180910390a15050565b5f8060015f611515611ea0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690613f12565b60405180910390fd5b6115e36115da611ea0565b85858403611ea7565b600191505092915050565b5f6116016115fa611ea0565b848461206a565b6001905092915050565b611613611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611631610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613ab1565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174f611ea0565b73ffffffffffffffffffffffffffffffffffffffff1661176d610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613ab1565b60405180910390fd5b6001821015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90613fa0565b60405180910390fd5b8181101561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118419061402e565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261187061087f565b61187a9190613bbd565b6118849190613c2b565b6006819055506127108161189661087f565b6118a09190613bbd565b6118aa9190613c2b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516118e39392919061376e565b60405180910390a1505050565b6118f8611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611916610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390613ab1565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16925060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16915060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b611b2c611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611b4a610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613ab1565b60405180910390fd5b5f600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c81565b611c15611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611c33610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613ab1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906140bc565b60405180910390fd5b611d0081612c59565b50565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611d86611ea0565b73ffffffffffffffffffffffffffffffffffffffff16611da4610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613ab1565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611e9491906135d2565b60405180910390a25050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c9061414a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906141d8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161205d91906135fa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906142f4565b60405180910390fd5b5f810361215d5761215883835f612dba565b612c54565b60085f9054906101000a900460ff161561280457612179610fb1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121e757506121b7610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612259575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122725750600560149054906101000a900460ff16155b1561280357600c5f9054906101000a900460ff166123655760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614382565b60405180910390fd5b5b600860019054906101000a900460ff161561252957612382610fb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561240957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246157507f0000000000000000000000002926cd2cfb05ab4f6da8178bb2a02098bbd0b73c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125285743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614436565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125c6575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561266d57600a54811115612610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612607906144c4565b60405180910390fd5b60095461261c83610ec1565b826126279190613afc565b1115612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f9061452c565b60405180910390fd5b612802565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561270a575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561275957600a54811115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906145ba565b60405180910390fd5b612801565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612800576009546127b383610ec1565b826127be9190613afc565b11156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f69061452c565b60405180910390fd5b5b5b5b5b5b5f61280e30610ec1565b90505f60065482101590508080156128325750600560159054906101000a900460ff165b801561284b5750600560149054906101000a900460ff16155b801561289e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128f1575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612944575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612987576001600560146101000a81548160ff02191690831515021790555061296c61302f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a36575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a3f575f90505b5f8115612c445760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a9d57505f601154115b15612b3557612aca6064612abc601154886131dd90919063ffffffff16565b6131f290919063ffffffff16565b905060115460135482612add9190613bbd565b612ae79190613c2b565b60155f828254612af79190613afc565b9250508190555060115460125482612b0f9190613bbd565b612b199190613c2b565b60145f828254612b299190613afc565b92505081905550612c21565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b8c57505f600e54115b15612c2057612bb96064612bab600e54886131dd90919063ffffffff16565b6131f290919063ffffffff16565b9050600e5460105482612bcc9190613bbd565b612bd69190613c2b565b60155f828254612be69190613afc565b92505081905550600e54600f5482612bfe9190613bbd565b612c089190613c2b565b60145f828254612c189190613afc565b925050819055505b5b5f811115612c3557612c34873083612dba565b5b8085612c4191906145d8565b94505b612c4f878787612dba565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f90614266565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906142f4565b60405180910390fd5b612ea1838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b9061467b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612fb29190613afc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301691906135fa565b60405180910390a361302984848461320c565b50505050565b5f61303930610ec1565b90505f8190505f80830361304f575050506131db565b60075483111561305f5760075492505b5f8390505f47905061307082613211565b5f613084824761344490919063ffffffff16565b90505f6130ae866130a0601554856131dd90919063ffffffff16565b6131f290919063ffffffff16565b90505f6014819055505f601581905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613103906146c6565b5f6040518083038185875af1925050503d805f811461313d576040519150601f19603f3d011682016040523d82523d5f602084013e613142565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161318e906146c6565b5f6040518083038185875af1925050503d805f81146131c8576040519150601f19603f3d011682016040523d82523d5f602084013e6131cd565b606091505b505080955050505050505050505b565b5f81836131ea9190613bbd565b905092915050565b5f81836131ff9190613c2b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561322d5761322c6146da565b5b60405190808252806020026020018201604052801561325b5781602001602082028036833780820191505090505b50905030815f8151811061327257613271614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133399190614748565b8160018151811061334d5761334c614707565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ea7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161341395949392919061486c565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b505050505050565b5f818361345191906145d8565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61349b82613459565b6134a58185613463565b93506134b5818560208601613473565b6134be81613481565b840191505092915050565b5f6020820190508181035f8301526134e18184613491565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613516826134ed565b9050919050565b6135268161350c565b8114613530575f80fd5b50565b5f813590506135418161351d565b92915050565b5f819050919050565b61355981613547565b8114613563575f80fd5b50565b5f8135905061357481613550565b92915050565b5f80604083850312156135905761358f6134e9565b5b5f61359d85828601613533565b92505060206135ae85828601613566565b9150509250929050565b5f8115159050919050565b6135cc816135b8565b82525050565b5f6020820190506135e55f8301846135c3565b92915050565b6135f481613547565b82525050565b5f60208201905061360d5f8301846135eb565b92915050565b5f805f6060848603121561362a576136296134e9565b5b5f61363786828701613533565b935050602061364886828701613533565b925050604061365986828701613566565b9150509250925092565b5f60ff82169050919050565b61367881613663565b82525050565b5f6020820190506136915f83018461366f565b92915050565b5f6080820190506136aa5f8301876135c3565b6136b760208301866135c3565b6136c460408301856135eb565b6136d160608301846135eb565b95945050505050565b5f602082840312156136ef576136ee6134e9565b5b5f6136fc84828501613566565b91505092915050565b5f806040838503121561371b5761371a6134e9565b5b5f61372885828601613566565b925050602061373985828601613566565b9150509250929050565b5f60208284031215613758576137576134e9565b5b5f61376584828501613533565b91505092915050565b5f6060820190506137815f8301866135c3565b61378e60208301856135eb565b61379b60408301846135eb565b949350505050565b6137ac8161350c565b82525050565b5f6020820190506137c55f8301846137a3565b92915050565b6137d4816135b8565b81146137de575f80fd5b50565b5f813590506137ef816137cb565b92915050565b5f806040838503121561380b5761380a6134e9565b5b5f61381885828601613533565b9250506020613829858286016137e1565b9150509250929050565b5f805f6060848603121561384a576138496134e9565b5b5f613857868287016137e1565b935050602061386886828701613566565b925050604061387986828701613566565b9150509250925092565b5f8060408385031215613899576138986134e9565b5b5f6138a685828601613533565b92505060206138b785828601613533565b9150509250929050565b5f6060820190506138d45f8301866135c3565b6138e160208301856135c3565b6138ee60408301846135c3565b949350505050565b5f60c0820190506139095f8301896135eb565b61391660208301886135eb565b61392360408301876135eb565b61393060608301866135eb565b61393d60808301856135eb565b61394a60a08301846135eb565b979650505050505050565b5f6040820190506139685f8301856137a3565b61397560208301846137a3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139c057607f821691505b6020821081036139d3576139d261397c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613a33602883613463565b9150613a3e826139d9565b604082019050919050565b5f6020820190508181035f830152613a6081613a27565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a9b602083613463565b9150613aa682613a67565b602082019050919050565b5f6020820190508181035f830152613ac881613a8f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b0682613547565b9150613b1183613547565b9250828201905080821115613b2957613b28613acf565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b89602483613463565b9150613b9482613b2f565b604082019050919050565b5f6020820190508181035f830152613bb681613b7d565b9050919050565b5f613bc782613547565b9150613bd283613547565b9250828202613be081613547565b91508282048414831517613bf757613bf6613acf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3582613547565b9150613c4083613547565b925082613c5057613c4f613bfe565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f613cb5602883613463565b9150613cc082613c5b565b604082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b5f606082019050613cfc5f8301866135eb565b613d0960208301856135eb565b613d1660408301846135eb565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f613d52602083613463565b9150613d5d82613d1e565b602082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613de0603983613463565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f613e6e602983613463565b9150613e7982613e14565b604082019050919050565b5f6020820190508181035f830152613e9b81613e62565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613efc602583613463565b9150613f0782613ea2565b604082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613f8a603483613463565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f614018602a83613463565b915061402382613fbe565b604082019050919050565b5f6020820190508181035f8301526140458161400c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140a6602683613463565b91506140b18261404c565b604082019050919050565b5f6020820190508181035f8301526140d38161409a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614134602483613463565b915061413f826140da565b604082019050919050565b5f6020820190508181035f83015261416181614128565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141c2602283613463565b91506141cd82614168565b604082019050919050565b5f6020820190508181035f8301526141ef816141b6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614250602583613463565b915061425b826141f6565b604082019050919050565b5f6020820190508181035f83015261427d81614244565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6142de602383613463565b91506142e982614284565b604082019050919050565b5f6020820190508181035f83015261430b816142d2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f61436c602283613463565b915061437782614312565b604082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614420604983613463565b915061442b826143a0565b606082019050919050565b5f6020820190508181035f83015261444d81614414565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f6144ae602683613463565b91506144b982614454565b604082019050919050565b5f6020820190508181035f8301526144db816144a2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614516601383613463565b9150614521826144e2565b602082019050919050565b5f6020820190508181035f8301526145438161450a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f6145a4602783613463565b91506145af8261454a565b604082019050919050565b5f6020820190508181035f8301526145d181614598565b9050919050565b5f6145e282613547565b91506145ed83613547565b925082820390508181111561460557614604613acf565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614665602683613463565b91506146708261460b565b604082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b5f81905092915050565b50565b5f6146b15f83614699565b91506146bc826146a3565b5f82019050919050565b5f6146d0826146a6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506147428161351d565b92915050565b5f6020828403121561475d5761475c6134e9565b5b5f61476a84828501614734565b91505092915050565b5f819050919050565b5f819050919050565b5f61479f61479a61479584614773565b61477c565b613547565b9050919050565b6147af81614785565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6147e78161350c565b82525050565b5f6147f883836147de565b60208301905092915050565b5f602082019050919050565b5f61481a826147b5565b61482481856147bf565b935061482f836147cf565b805f5b8381101561485f57815161484688826147ed565b975061485183614804565b925050600181019050614832565b5085935050505092915050565b5f60a08201905061487f5f8301886135eb565b61488c60208301876147a6565b818103604083015261489e8186614810565b90506148ad60608301856137a3565b6148ba60808301846135eb565b969550505050505056fea26469706673582212205a10bbf0c6ec9420f05dfb1208455ad23bfc14fba50242414d06c73cd891f2f364736f6c63430008190033
Deployed Bytecode Sourcemap
25406:21300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11004:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13237:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12124:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13909:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30311:163;;;;;;;;;;;;;:::i;:::-;;11966:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37947:388;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14843:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32730:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32307:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12295:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22343:103;;;;;;;;;;;;;:::i;:::-;;37172:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21692:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11223:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36640:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35593:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35103:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34405:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15632:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12651:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36279:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31518:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30629:132;;;;;;;;;;;;;:::i;:::-;;12914:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30901:152;;;;;;;;;;;;;:::i;:::-;;25524:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22601:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39241:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38567:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33234:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11004:100;11058:13;11091:5;11084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11004:100;:::o;13237:194::-;13345:4;13362:39;13371:12;:10;:12::i;:::-;13385:7;13394:6;13362:8;:39::i;:::-;13419:4;13412:11;;13237:194;;;;:::o;12124:108::-;12185:7;12212:12;;12205:19;;12124:108;:::o;13909:529::-;14049:4;14066:36;14076:6;14084:9;14095:6;14066:9;:36::i;:::-;14115:24;14142:11;:19;14154:6;14142:19;;;;;;;;;;;;;;;:33;14162:12;:10;:12::i;:::-;14142:33;;;;;;;;;;;;;;;;14115:60;;14228:6;14208:16;:26;;14186:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14338:57;14347:6;14355:12;:10;:12::i;:::-;14388:6;14369:16;:25;14338:8;:57::i;:::-;14426:4;14419:11;;;13909:529;;;;;:::o;30311:163::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30382:4:::1;30365:14;;:21;;;;;;;;;;;;;;;;;;30415:4;30397:15;;:22;;;;;;;;;;;;;;;;;;30450:15;30435:31;;;;;;;;;;30311:163::o:0;11966:93::-;12024:5;12049:2;12042:9;;11966:93;:::o;37947:388::-;38034:19;38068:26;38109:18;38142:14;38201:13;;;;;;;;;;;38184:30;;38249:20;;;;;;;;;;;38225:44;;38293:9;;38280:22;;38322:5;;38313:14;;37947:388;;;;:::o;14843:290::-;14956:4;14973:130;14996:12;:10;:12::i;:::-;15023:7;15082:10;15045:11;:25;15057:12;:10;:12::i;:::-;15045:25;;;;;;;;;;;;;;;:34;15071:7;15045:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14973:8;:130::i;:::-;15121:4;15114:11;;14843:290;;;;:::o;26025:34::-;;;;;;;;;;;;;:::o;32730:236::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32819:1:::1;32809:6;:11;;32801:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32911:4;32894:13;:11;:13::i;:::-;32885:6;:22;;;;:::i;:::-;32884:31;;;;:::i;:::-;32872:9;:43;;;;32931:27;32948:9;;32931:27;;;;;;:::i;:::-;;;;;;;;32730:236:::0;:::o;33716:400::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:13:::1;33831:15;:31;;;;33889:7;33873:13;:23;;;;33939:13;;33921:15;;:31;;;;:::i;:::-;33907:11;:45;;;;33986:3;33971:11;;:18;;33963:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34050:58;34064:11;;34077:15;;34094:13;;34050:58;;;;;;;;:::i;:::-;;;;;;;;33716:400:::0;;:::o;32307:216::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32392:1:::1;32382:6;:11;;32374:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32476:4;32459:13;:11;:13::i;:::-;32450:6;:22;;;;:::i;:::-;32449:31;;;;:::i;:::-;32441:5;:39;;;;32496:19;32509:5;;32496:19;;;;;;:::i;:::-;;;;;;;;32307:216:::0;:::o;12295:143::-;12385:7;12412:9;:18;12422:7;12412:18;;;;;;;;;;;;;;;;12405:25;;12295:143;;;:::o;22343:103::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22408:30:::1;22435:1;22408:18;:30::i;:::-;22343:103::o:0;37172:355::-;37262:21;37298:25;37338;37410:15;;;;;;;;;;;37391:34;;37456:16;;37436:36;;37503:16;;37483:36;;37172:355;;;:::o;21692:87::-;21738:7;21765:6;;;;;;;;;;;21758:13;;21692:87;:::o;11223:104::-;11279:13;11312:7;11305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11223:104;:::o;36640:173::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36755:13:::1;;;;;;;;;;;36723:46;;36744:9;36723:46;;;;;;;;;;;;36796:9;36780:13;;:25;;;;;;;;;;;;;;;;;;36640:173:::0;:::o;35593:300::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35739:7:::1;35731:15;;:4;:15;;::::0;35709:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:41;35873:4;35879:5;35844:28;:41::i;:::-;35593:300:::0;;:::o;35103:179::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35216:8:::1;35187:17;:26;35205:7;35187:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35256:7;35240:34;;;35265:8;35240:34;;;;;;:::i;:::-;;;;;;;;35103:179:::0;;:::o;34405:449::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34540:13:::1;34521:16;:32;;;;34581:7;34564:14;:24;;;;34633:14;;34614:16;;:33;;;;:::i;:::-;34599:12;:48;;;;34696:3;34680:12;;:19;;34658:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34784:62;34799:12;;34813:16;;34831:14;;34784:62;;;;;;;;:::i;:::-;;;;;;;;34405:449:::0;;:::o;15632:475::-;15750:4;15767:24;15794:11;:25;15806:12;:10;:12::i;:::-;15794:25;;;;;;;;;;;;;;;:34;15820:7;15794:34;;;;;;;;;;;;;;;;15767:61;;15881:15;15861:16;:35;;15839:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15997:67;16006:12;:10;:12::i;:::-;16020:7;16048:15;16029:16;:34;15997:8;:67::i;:::-;16095:4;16088:11;;;15632:475;;;;:::o;12651:200::-;12762:4;12779:42;12789:12;:10;:12::i;:::-;12803:9;12814:6;12779:9;:42::i;:::-;12839:4;12832:11;;12651:200;;;;:::o;36279:181::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36398:15:::1;;;;;;;;;;;36364:50;;36387:9;36364:50;;;;;;;;;;;;36443:9;36425:15;;:27;;;;;;;;;;;;;;;;;;36279:181:::0;:::o;31518:553::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31684:1:::1;31676:4;:9;;31654:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31792:4;31784;:12;;31776:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31874:8;31856:15;;:26;;;;;;;;;;;;;;;;;;31937:5;31929:4;31913:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31912:30;;;;:::i;:::-;31893:16;:49;;;;31997:5;31989:4;31973:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31972:30;;;;:::i;:::-;31953:16;:49;;;;32018:45;32042:8;32052:4;32058;32018:45;;;;;;;;:::i;:::-;;;;;;;;31518:553:::0;;;:::o;30629:132::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30702:5:::1;30686:13;;:21;;;;;;;;;;;;;;;;;;30737:15;30723:30;;;;;;;;;;30629:132::o:0;12914:176::-;13028:7;13055:11;:18;13067:5;13055:18;;;;;;;;;;;;;;;:27;13074:7;13055:27;;;;;;;;;;;;;;;;13048:34;;12914:176;;;;:::o;40273:448::-;40393:23;40431:25;40471:31;40551:17;:26;40569:7;40551:26;;;;;;;;;;;;;;;;;;;;;;;;;40530:47;;40611:19;:28;40631:7;40611:28;;;;;;;;;;;;;;;;;;;;;;;;;40588:51;;40679:25;:34;40705:7;40679:34;;;;;;;;;;;;;;;;;;;;;;;;;40650:63;;40273:448;;;;;:::o;30901:152::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30986:5:::1;30963:20;;:28;;;;;;;;;;;;;;;;;;31029:15;31007:38;;;;;;;;;;30901:152::o:0;25524:32::-;;;:::o;22601:238::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22724:1:::1;22704:22;;:8;:22;;::::0;22682:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22803:28;22822:8;22803:18;:28::i;:::-;22601:238:::0;:::o;39241:572::-;39326:20;39361:24;39400:22;39437:21;39473:25;39513:23;39579:11;;39564:26;;39620:15;;39601:34;;39663:13;;39646:30;;39703:12;;39687:28;;39746:16;;39726:36;;39791:14;;39773:32;;39241:572;;;;;;:::o;38567:190::-;38644:24;38670:22;38718:15;;;;;;;;;;;38735:13;;;;;;;;;;;38710:39;;;;38567:190;;:::o;33234:195::-;21923:12;:10;:12::i;:::-;21912:23;;:7;:5;:7::i;:::-;:23;;;21904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33370:4:::1;33340:19;:27;33360:6;33340:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33408:6;33390:31;;;33416:4;33390:31;;;;;;:::i;:::-;;;;;;;;33234:195:::0;;:::o;10010:98::-;10063:7;10090:10;10083:17;;10010:98;:::o;19415:380::-;19568:1;19551:19;;:5;:19;;;19543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19649:1;19630:21;;:7;:21;;;19622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19733:6;19703:11;:18;19715:5;19703:18;;;;;;;;;;;;;;;:27;19722:7;19703:27;;;;;;;;;;;;;;;:36;;;;19771:7;19755:32;;19764:5;19755:32;;;19780:6;19755:32;;;;;;:::i;:::-;;;;;;;;19415:380;;;:::o;40729:4415::-;40877:1;40861:18;;:4;:18;;;40853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40954:1;40940:16;;:2;:16;;;40932:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:1;41013:6;:11;41009:93;;41041:28;41057:4;41063:2;41067:1;41041:15;:28::i;:::-;41084:7;;41009:93;41118:13;;;;;;;;;;;41114:2345;;;41178:7;:5;:7::i;:::-;41170:15;;:4;:15;;;;:49;;;;;41212:7;:5;:7::i;:::-;41206:13;;:2;:13;;;;41170:49;:86;;;;;41254:1;41240:16;;:2;:16;;;;41170:86;:128;;;;;41291:6;41277:21;;:2;:21;;;;41170:128;:158;;;;;41320:8;;;;;;;;;;;41319:9;41170:158;41148:2300;;;41368:14;;;;;;;;;;;41363:232;;41441:17;:23;41459:4;41441:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41468:17;:21;41486:2;41468:21;;;;;;;;;;;;;;;;;;;;;;;;;41441:48;41407:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41363:232;41751:20;;;;;;;;;;;41747:629;;;41832:7;:5;:7::i;:::-;41826:13;;:2;:13;;;;:66;;;;;41882:9;41868:24;;:2;:24;;;;41826:66;:117;;;;;41935:7;41921:22;;:2;:22;;;;41826:117;41796:561;;;42107:12;42032:28;:39;42061:9;42032:39;;;;;;;;;;;;;;;;:87;41994:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42321:12;42279:28;:39;42308:9;42279:39;;;;;;;;;;;;;;;:54;;;;41796:561;41747:629;42450:25;:31;42476:4;42450:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42486:19;:23;42506:2;42486:23;;;;;;;;;;;;;;;;;;;;;;;;;42485:24;42450:59;42424:1009;;;42596:5;;42586:6;:15;;42552:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42774:9;;42757:13;42767:2;42757:9;:13::i;:::-;42748:6;:22;;;;:::i;:::-;:35;;42714:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42424:1009;;;42952:25;:29;42978:2;42952:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42986:19;:25;43006:4;42986:25;;;;;;;;;;;;;;;;;;;;;;;;;42985:26;42952:59;42926:507;;;43098:5;;43088:6;:15;;43054:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42926:507;;;43225:19;:23;43245:2;43225:23;;;;;;;;;;;;;;;;;;;;;;;;;43220:213;;43333:9;;43316:13;43326:2;43316:9;:13::i;:::-;43307:6;:22;;;;:::i;:::-;:35;;43273:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43220:213;42926:507;42424:1009;41148:2300;41114:2345;43471:28;43502:24;43520:4;43502:9;:24::i;:::-;43471:55;;43539:12;43578:16;;43554:20;:40;;43539:55;;43625:7;:39;;;;;43649:15;;;;;;;;;;;43625:39;:65;;;;;43682:8;;;;;;;;;;;43681:9;43625:65;:114;;;;;43708:25;:31;43734:4;43708:31;;;;;;;;;;;;;;;;;;;;;;;;;43707:32;43625:114;:155;;;;;43757:17;:23;43775:4;43757:23;;;;;;;;;;;;;;;;;;;;;;;;;43756:24;43625:155;:194;;;;;43798:17;:21;43816:2;43798:21;;;;;;;;;;;;;;;;;;;;;;;;;43797:22;43625:194;43607:326;;;43857:4;43846:8;;:15;;;;;;;;;;;;;;;;;;43878:10;:8;:10::i;:::-;43916:5;43905:8;;:16;;;;;;;;;;;;;;;;;;43607:326;43945:12;43961:8;;;;;;;;;;;43960:9;43945:24;;44071:17;:23;44089:4;44071:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44098:17;:21;44116:2;44098:21;;;;;;;;;;;;;;;;;;;;;;;;;44071:48;44067:96;;;44146:5;44136:15;;44067:96;44175:12;44280:7;44276:815;;;44332:25;:29;44358:2;44332:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;44380:1;44365:12;;:16;44332:49;44328:614;;;44409:33;44438:3;44409:24;44420:12;;44409:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44402:40;;44507:12;;44489:14;;44482:4;:21;;;;:::i;:::-;44481:38;;;;:::i;:::-;44461:16;;:58;;;;;;;:::i;:::-;;;;;;;;44588:12;;44568:16;;44561:4;:23;;;;:::i;:::-;44560:40;;;;:::i;:::-;44538:18;;:62;;;;;;;:::i;:::-;;;;;;;;44328:614;;;44662:25;:31;44688:4;44662:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44711:1;44697:11;;:15;44662:50;44658:284;;;44740:32;44768:3;44740:23;44751:11;;44740:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44733:39;;44836:11;;44819:13;;44812:4;:20;;;;:::i;:::-;44811:36;;;;:::i;:::-;44791:16;;:56;;;;;;;:::i;:::-;;;;;;;;44915:11;;44896:15;;44889:4;:22;;;;:::i;:::-;44888:38;;;;:::i;:::-;44866:18;;:60;;;;;;;:::i;:::-;;;;;;;;44658:284;44328:614;44969:1;44962:4;:8;44958:91;;;44991:42;45007:4;45021;45028;44991:15;:42::i;:::-;44958:91;45075:4;45065:14;;;;;:::i;:::-;;;44276:815;45103:33;45119:4;45125:2;45129:6;45103:15;:33::i;:::-;40842:4302;;;;40729:4415;;;;:::o;22999:191::-;23073:16;23092:6;;;;;;;;;;;23073:25;;23118:8;23109:6;;:17;;;;;;;;;;;;;;;;;;23173:8;23142:40;;23163:8;23142:40;;;;;;;;;;;;23062:128;22999:191;:::o;35901:188::-;36018:5;35984:25;:31;36010:4;35984:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36075:5;36041:40;;36069:4;36041:40;;;;;;;;;;;;35901:188;;:::o;16597:770::-;16755:1;16737:20;;:6;:20;;;16729:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16839:1;16818:23;;:9;:23;;;16810:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16894:47;16915:6;16923:9;16934:6;16894:20;:47::i;:::-;16954:21;16978:9;:17;16988:6;16978:17;;;;;;;;;;;;;;;;16954:41;;17045:6;17028:13;:23;;17006:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17189:6;17173:13;:22;17153:9;:17;17163:6;17153:17;;;;;;;;;;;;;;;:42;;;;17241:6;17217:9;:20;17227:9;17217:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17282:9;17265:35;;17274:6;17265:35;;;17293:6;17265:35;;;;;;:::i;:::-;;;;;;;;17313:46;17333:6;17341:9;17352:6;17313:19;:46::i;:::-;16718:649;16597:770;;;:::o;45731:972::-;45770:23;45796:24;45814:4;45796:9;:24::i;:::-;45770:50;;45831:25;45859:15;45831:43;;45885:12;45933:1;45914:15;:20;45910:59;;45951:7;;;;;45910:59;46003:16;;45985:15;:34;45981:101;;;46054:16;;46036:34;;45981:101;46094:26;46123:15;46094:44;;46151:25;46179:21;46151:49;;46213:36;46230:18;46213:16;:36::i;:::-;46262:18;46283:44;46309:17;46283:21;:25;;:44;;;;:::i;:::-;46262:65;;46340:17;46360:79;46411:17;46360:32;46375:16;;46360:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;46340:99;;46473:1;46452:18;:22;;;;46504:1;46485:16;:20;;;;46540:13;;;;;;;;;;;46532:27;;46567:9;46532:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46518:63;;;;;46616:15;;;;;;;;;;;46608:29;;46659:21;46608:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46594:101;;;;;45759:944;;;;;;;45731:972;:::o;3369:98::-;3427:7;3458:1;3454;:5;;;;:::i;:::-;3447:12;;3369:98;;;;:::o;3768:::-;3826:7;3857:1;3853;:5;;;;:::i;:::-;3846:12;;3768:98;;;;:::o;20395:125::-;;;;:::o;21124:124::-;;;;:::o;45152:571::-;45278:21;45316:1;45302:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45278:40;;45347:4;45329;45334:1;45329:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45373:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45363:4;45368:1;45363:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;45402:56;45419:4;45434:9;45446:11;45402:8;:56::i;:::-;45497:9;:60;;;45572:11;45598:1;45642:4;45669;45689:15;45497:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45207:516;45152:571;:::o;3012:98::-;3070:7;3101:1;3097;:5;;;;:::i;:::-;3090:12;;3012:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:529::-;4911:4;4949:3;4938:9;4934:19;4926:27;;4963:65;5025:1;5014:9;5010:17;5001:6;4963:65;:::i;:::-;5038:66;5100:2;5089:9;5085:18;5076:6;5038:66;:::i;:::-;5114:72;5182:2;5171:9;5167:18;5158:6;5114:72;:::i;:::-;5196;5264:2;5253:9;5249:18;5240:6;5196:72;:::i;:::-;4746:529;;;;;;;:::o;5281:329::-;5340:6;5389:2;5377:9;5368:7;5364:23;5360:32;5357:119;;;5395:79;;:::i;:::-;5357:119;5515:1;5540:53;5585:7;5576:6;5565:9;5561:22;5540:53;:::i;:::-;5530:63;;5486:117;5281:329;;;;:::o;5616:474::-;5684:6;5692;5741:2;5729:9;5720:7;5716:23;5712:32;5709:119;;;5747:79;;:::i;:::-;5709:119;5867:1;5892:53;5937:7;5928:6;5917:9;5913:22;5892:53;:::i;:::-;5882:63;;5838:117;5994:2;6020:53;6065:7;6056:6;6045:9;6041:22;6020:53;:::i;:::-;6010:63;;5965:118;5616:474;;;;;:::o;6096:329::-;6155:6;6204:2;6192:9;6183:7;6179:23;6175:32;6172:119;;;6210:79;;:::i;:::-;6172:119;6330:1;6355:53;6400:7;6391:6;6380:9;6376:22;6355:53;:::i;:::-;6345:63;;6301:117;6096:329;;;;:::o;6431:430::-;6574:4;6612:2;6601:9;6597:18;6589:26;;6625:65;6687:1;6676:9;6672:17;6663:6;6625:65;:::i;:::-;6700:72;6768:2;6757:9;6753:18;6744:6;6700:72;:::i;:::-;6782;6850:2;6839:9;6835:18;6826:6;6782:72;:::i;:::-;6431:430;;;;;;:::o;6867:118::-;6954:24;6972:5;6954:24;:::i;:::-;6949:3;6942:37;6867:118;;:::o;6991:222::-;7084:4;7122:2;7111:9;7107:18;7099:26;;7135:71;7203:1;7192:9;7188:17;7179:6;7135:71;:::i;:::-;6991:222;;;;:::o;7219:116::-;7289:21;7304:5;7289:21;:::i;:::-;7282:5;7279:32;7269:60;;7325:1;7322;7315:12;7269:60;7219:116;:::o;7341:133::-;7384:5;7422:6;7409:20;7400:29;;7438:30;7462:5;7438:30;:::i;:::-;7341:133;;;;:::o;7480:468::-;7545:6;7553;7602:2;7590:9;7581:7;7577:23;7573:32;7570:119;;;7608:79;;:::i;:::-;7570:119;7728:1;7753:53;7798:7;7789:6;7778:9;7774:22;7753:53;:::i;:::-;7743:63;;7699:117;7855:2;7881:50;7923:7;7914:6;7903:9;7899:22;7881:50;:::i;:::-;7871:60;;7826:115;7480:468;;;;;:::o;7954:613::-;8028:6;8036;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:50;8286:7;8277:6;8266:9;8262:22;8244:50;:::i;:::-;8234:60;;8190:114;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;8471:2;8497:53;8542:7;8533:6;8522:9;8518:22;8497:53;:::i;:::-;8487:63;;8442:118;7954:613;;;;;:::o;8573:474::-;8641:6;8649;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8824:1;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8795:117;8951:2;8977:53;9022:7;9013:6;9002:9;8998:22;8977:53;:::i;:::-;8967:63;;8922:118;8573:474;;;;;:::o;9053:406::-;9184:4;9222:2;9211:9;9207:18;9199:26;;9235:65;9297:1;9286:9;9282:17;9273:6;9235:65;:::i;:::-;9310:66;9372:2;9361:9;9357:18;9348:6;9310:66;:::i;:::-;9386;9448:2;9437:9;9433:18;9424:6;9386:66;:::i;:::-;9053:406;;;;;;:::o;9465:775::-;9698:4;9736:3;9725:9;9721:19;9713:27;;9750:71;9818:1;9807:9;9803:17;9794:6;9750:71;:::i;:::-;9831:72;9899:2;9888:9;9884:18;9875:6;9831:72;:::i;:::-;9913;9981:2;9970:9;9966:18;9957:6;9913:72;:::i;:::-;9995;10063:2;10052:9;10048:18;10039:6;9995:72;:::i;:::-;10077:73;10145:3;10134:9;10130:19;10121:6;10077:73;:::i;:::-;10160;10228:3;10217:9;10213:19;10204:6;10160:73;:::i;:::-;9465:775;;;;;;;;;:::o;10246:332::-;10367:4;10405:2;10394:9;10390:18;10382:26;;10418:71;10486:1;10475:9;10471:17;10462:6;10418:71;:::i;:::-;10499:72;10567:2;10556:9;10552:18;10543:6;10499:72;:::i;:::-;10246:332;;;;;:::o;10584:180::-;10632:77;10629:1;10622:88;10729:4;10726:1;10719:15;10753:4;10750:1;10743:15;10770:320;10814:6;10851:1;10845:4;10841:12;10831:22;;10898:1;10892:4;10888:12;10919:18;10909:81;;10975:4;10967:6;10963:17;10953:27;;10909:81;11037:2;11029:6;11026:14;11006:18;11003:38;11000:84;;11056:18;;:::i;:::-;11000:84;10821:269;10770:320;;;:::o;11096:227::-;11236:34;11232:1;11224:6;11220:14;11213:58;11305:10;11300:2;11292:6;11288:15;11281:35;11096:227;:::o;11329:366::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:419::-;11867:4;11905:2;11894:9;11890:18;11882:26;;11954:9;11948:4;11944:20;11940:1;11929:9;11925:17;11918:47;11982:131;12108:4;11982:131;:::i;:::-;11974:139;;11701:419;;;:::o;12126:182::-;12266:34;12262:1;12254:6;12250:14;12243:58;12126:182;:::o;12314:366::-;12456:3;12477:67;12541:2;12536:3;12477:67;:::i;:::-;12470:74;;12553:93;12642:3;12553:93;:::i;:::-;12671:2;12666:3;12662:12;12655:19;;12314:366;;;:::o;12686:419::-;12852:4;12890:2;12879:9;12875:18;12867:26;;12939:9;12933:4;12929:20;12925:1;12914:9;12910:17;12903:47;12967:131;13093:4;12967:131;:::i;:::-;12959:139;;12686:419;;;:::o;13111:180::-;13159:77;13156:1;13149:88;13256:4;13253:1;13246:15;13280:4;13277:1;13270:15;13297:191;13337:3;13356:20;13374:1;13356:20;:::i;:::-;13351:25;;13390:20;13408:1;13390:20;:::i;:::-;13385:25;;13433:1;13430;13426:9;13419:16;;13454:3;13451:1;13448:10;13445:36;;;13461:18;;:::i;:::-;13445:36;13297:191;;;;:::o;13494:223::-;13634:34;13630:1;13622:6;13618:14;13611:58;13703:6;13698:2;13690:6;13686:15;13679:31;13494:223;:::o;13723:366::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13723:366;;;:::o;14095:419::-;14261:4;14299:2;14288:9;14284:18;14276:26;;14348:9;14342:4;14338:20;14334:1;14323:9;14319:17;14312:47;14376:131;14502:4;14376:131;:::i;:::-;14368:139;;14095:419;;;:::o;14520:410::-;14560:7;14583:20;14601:1;14583:20;:::i;:::-;14578:25;;14617:20;14635:1;14617:20;:::i;:::-;14612:25;;14672:1;14669;14665:9;14694:30;14712:11;14694:30;:::i;:::-;14683:41;;14873:1;14864:7;14860:15;14857:1;14854:22;14834:1;14827:9;14807:83;14784:139;;14903:18;;:::i;:::-;14784:139;14568:362;14520:410;;;;:::o;14936:180::-;14984:77;14981:1;14974:88;15081:4;15078:1;15071:15;15105:4;15102:1;15095:15;15122:185;15162:1;15179:20;15197:1;15179:20;:::i;:::-;15174:25;;15213:20;15231:1;15213:20;:::i;:::-;15208:25;;15252:1;15242:35;;15257:18;;:::i;:::-;15242:35;15299:1;15296;15292:9;15287:14;;15122:185;;;;:::o;15313:227::-;15453:34;15449:1;15441:6;15437:14;15430:58;15522:10;15517:2;15509:6;15505:15;15498:35;15313:227;:::o;15546:366::-;15688:3;15709:67;15773:2;15768:3;15709:67;:::i;:::-;15702:74;;15785:93;15874:3;15785:93;:::i;:::-;15903:2;15898:3;15894:12;15887:19;;15546:366;;;:::o;15918:419::-;16084:4;16122:2;16111:9;16107:18;16099:26;;16171:9;16165:4;16161:20;16157:1;16146:9;16142:17;16135:47;16199:131;16325:4;16199:131;:::i;:::-;16191:139;;15918:419;;;:::o;16343:442::-;16492:4;16530:2;16519:9;16515:18;16507:26;;16543:71;16611:1;16600:9;16596:17;16587:6;16543:71;:::i;:::-;16624:72;16692:2;16681:9;16677:18;16668:6;16624:72;:::i;:::-;16706;16774:2;16763:9;16759:18;16750:6;16706:72;:::i;:::-;16343:442;;;;;;:::o;16791:182::-;16931:34;16927:1;16919:6;16915:14;16908:58;16791:182;:::o;16979:366::-;17121:3;17142:67;17206:2;17201:3;17142:67;:::i;:::-;17135:74;;17218:93;17307:3;17218:93;:::i;:::-;17336:2;17331:3;17327:12;17320:19;;16979:366;;;:::o;17351:419::-;17517:4;17555:2;17544:9;17540:18;17532:26;;17604:9;17598:4;17594:20;17590:1;17579:9;17575:17;17568:47;17632:131;17758:4;17632:131;:::i;:::-;17624:139;;17351:419;;;:::o;17776:244::-;17916:34;17912:1;17904:6;17900:14;17893:58;17985:27;17980:2;17972:6;17968:15;17961:52;17776:244;:::o;18026:366::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:419::-;18564:4;18602:2;18591:9;18587:18;18579:26;;18651:9;18645:4;18641:20;18637:1;18626:9;18622:17;18615:47;18679:131;18805:4;18679:131;:::i;:::-;18671:139;;18398:419;;;:::o;18823:228::-;18963:34;18959:1;18951:6;18947:14;18940:58;19032:11;19027:2;19019:6;19015:15;19008:36;18823:228;:::o;19057:366::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:419::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19682:9;19676:4;19672:20;19668:1;19657:9;19653:17;19646:47;19710:131;19836:4;19710:131;:::i;:::-;19702:139;;19429:419;;;:::o;19854:224::-;19994:34;19990:1;19982:6;19978:14;19971:58;20063:7;20058:2;20050:6;20046:15;20039:32;19854:224;:::o;20084:366::-;20226:3;20247:67;20311:2;20306:3;20247:67;:::i;:::-;20240:74;;20323:93;20412:3;20323:93;:::i;:::-;20441:2;20436:3;20432:12;20425:19;;20084:366;;;:::o;20456:419::-;20622:4;20660:2;20649:9;20645:18;20637:26;;20709:9;20703:4;20699:20;20695:1;20684:9;20680:17;20673:47;20737:131;20863:4;20737:131;:::i;:::-;20729:139;;20456:419;;;:::o;20881:239::-;21021:34;21017:1;21009:6;21005:14;20998:58;21090:22;21085:2;21077:6;21073:15;21066:47;20881:239;:::o;21126:366::-;21268:3;21289:67;21353:2;21348:3;21289:67;:::i;:::-;21282:74;;21365:93;21454:3;21365:93;:::i;:::-;21483:2;21478:3;21474:12;21467:19;;21126:366;;;:::o;21498:419::-;21664:4;21702:2;21691:9;21687:18;21679:26;;21751:9;21745:4;21741:20;21737:1;21726:9;21722:17;21715:47;21779:131;21905:4;21779:131;:::i;:::-;21771:139;;21498:419;;;:::o;21923:229::-;22063:34;22059:1;22051:6;22047:14;22040:58;22132:12;22127:2;22119:6;22115:15;22108:37;21923:229;:::o;22158:366::-;22300:3;22321:67;22385:2;22380:3;22321:67;:::i;:::-;22314:74;;22397:93;22486:3;22397:93;:::i;:::-;22515:2;22510:3;22506:12;22499:19;;22158:366;;;:::o;22530:419::-;22696:4;22734:2;22723:9;22719:18;22711:26;;22783:9;22777:4;22773:20;22769:1;22758:9;22754:17;22747:47;22811:131;22937:4;22811:131;:::i;:::-;22803:139;;22530:419;;;:::o;22955:225::-;23095:34;23091:1;23083:6;23079:14;23072:58;23164:8;23159:2;23151:6;23147:15;23140:33;22955:225;:::o;23186:366::-;23328:3;23349:67;23413:2;23408:3;23349:67;:::i;:::-;23342:74;;23425:93;23514:3;23425:93;:::i;:::-;23543:2;23538:3;23534:12;23527:19;;23186:366;;;:::o;23558:419::-;23724:4;23762:2;23751:9;23747:18;23739:26;;23811:9;23805:4;23801:20;23797:1;23786:9;23782:17;23775:47;23839:131;23965:4;23839:131;:::i;:::-;23831:139;;23558:419;;;:::o;23983:223::-;24123:34;24119:1;24111:6;24107:14;24100:58;24192:6;24187:2;24179:6;24175:15;24168:31;23983:223;:::o;24212:366::-;24354:3;24375:67;24439:2;24434:3;24375:67;:::i;:::-;24368:74;;24451:93;24540:3;24451:93;:::i;:::-;24569:2;24564:3;24560:12;24553:19;;24212:366;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:221::-;25149:34;25145:1;25137:6;25133:14;25126:58;25218:4;25213:2;25205:6;25201:15;25194:29;25009:221;:::o;25236:366::-;25378:3;25399:67;25463:2;25458:3;25399:67;:::i;:::-;25392:74;;25475:93;25564:3;25475:93;:::i;:::-;25593:2;25588:3;25584:12;25577:19;;25236:366;;;:::o;25608:419::-;25774:4;25812:2;25801:9;25797:18;25789:26;;25861:9;25855:4;25851:20;25847:1;25836:9;25832:17;25825:47;25889:131;26015:4;25889:131;:::i;:::-;25881:139;;25608:419;;;:::o;26033:224::-;26173:34;26169:1;26161:6;26157:14;26150:58;26242:7;26237:2;26229:6;26225:15;26218:32;26033:224;:::o;26263:366::-;26405:3;26426:67;26490:2;26485:3;26426:67;:::i;:::-;26419:74;;26502:93;26591:3;26502:93;:::i;:::-;26620:2;26615:3;26611:12;26604:19;;26263:366;;;:::o;26635:419::-;26801:4;26839:2;26828:9;26824:18;26816:26;;26888:9;26882:4;26878:20;26874:1;26863:9;26859:17;26852:47;26916:131;27042:4;26916:131;:::i;:::-;26908:139;;26635:419;;;:::o;27060:222::-;27200:34;27196:1;27188:6;27184:14;27177:58;27269:5;27264:2;27256:6;27252:15;27245:30;27060:222;:::o;27288:366::-;27430:3;27451:67;27515:2;27510:3;27451:67;:::i;:::-;27444:74;;27527:93;27616:3;27527:93;:::i;:::-;27645:2;27640:3;27636:12;27629:19;;27288:366;;;:::o;27660:419::-;27826:4;27864:2;27853:9;27849:18;27841:26;;27913:9;27907:4;27903:20;27899:1;27888:9;27884:17;27877:47;27941:131;28067:4;27941:131;:::i;:::-;27933:139;;27660:419;;;:::o;28085:221::-;28225:34;28221:1;28213:6;28209:14;28202:58;28294:4;28289:2;28281:6;28277:15;28270:29;28085:221;:::o;28312:366::-;28454:3;28475:67;28539:2;28534:3;28475:67;:::i;:::-;28468:74;;28551:93;28640:3;28551:93;:::i;:::-;28669:2;28664:3;28660:12;28653:19;;28312:366;;;:::o;28684:419::-;28850:4;28888:2;28877:9;28873:18;28865:26;;28937:9;28931:4;28927:20;28923:1;28912:9;28908:17;28901:47;28965:131;29091:4;28965:131;:::i;:::-;28957:139;;28684:419;;;:::o;29109:297::-;29249:34;29245:1;29237:6;29233:14;29226:58;29318:34;29313:2;29305:6;29301:15;29294:59;29387:11;29382:2;29374:6;29370:15;29363:36;29109:297;:::o;29412:366::-;29554:3;29575:67;29639:2;29634:3;29575:67;:::i;:::-;29568:74;;29651:93;29740:3;29651:93;:::i;:::-;29769:2;29764:3;29760:12;29753:19;;29412:366;;;:::o;29784:419::-;29950:4;29988:2;29977:9;29973:18;29965:26;;30037:9;30031:4;30027:20;30023:1;30012:9;30008:17;30001:47;30065:131;30191:4;30065:131;:::i;:::-;30057:139;;29784:419;;;:::o;30209:225::-;30349:34;30345:1;30337:6;30333:14;30326:58;30418:8;30413:2;30405:6;30401:15;30394:33;30209:225;:::o;30440:366::-;30582:3;30603:67;30667:2;30662:3;30603:67;:::i;:::-;30596:74;;30679:93;30768:3;30679:93;:::i;:::-;30797:2;30792:3;30788:12;30781:19;;30440:366;;;:::o;30812:419::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:169::-;31377:21;31373:1;31365:6;31361:14;31354:45;31237:169;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o;32209:226::-;32349:34;32345:1;32337:6;32333:14;32326:58;32418:9;32413:2;32405:6;32401:15;32394:34;32209:226;:::o;32441:366::-;32583:3;32604:67;32668:2;32663:3;32604:67;:::i;:::-;32597:74;;32680:93;32769:3;32680:93;:::i;:::-;32798:2;32793:3;32789:12;32782:19;;32441:366;;;:::o;32813:419::-;32979:4;33017:2;33006:9;33002:18;32994:26;;33066:9;33060:4;33056:20;33052:1;33041:9;33037:17;33030:47;33094:131;33220:4;33094:131;:::i;:::-;33086:139;;32813:419;;;:::o;33238:194::-;33278:4;33298:20;33316:1;33298:20;:::i;:::-;33293:25;;33332:20;33350:1;33332:20;:::i;:::-;33327:25;;33376:1;33373;33369:9;33361:17;;33400:1;33394:4;33391:11;33388:37;;;33405:18;;:::i;:::-;33388:37;33238:194;;;;:::o;33438:225::-;33578:34;33574:1;33566:6;33562:14;33555:58;33647:8;33642:2;33634:6;33630:15;33623:33;33438:225;:::o;33669:366::-;33811:3;33832:67;33896:2;33891:3;33832:67;:::i;:::-;33825:74;;33908:93;33997:3;33908:93;:::i;:::-;34026:2;34021:3;34017:12;34010:19;;33669:366;;;:::o;34041:419::-;34207:4;34245:2;34234:9;34230:18;34222:26;;34294:9;34288:4;34284:20;34280:1;34269:9;34265:17;34258:47;34322:131;34448:4;34322:131;:::i;:::-;34314:139;;34041:419;;;:::o;34466:147::-;34567:11;34604:3;34589:18;;34466:147;;;;:::o;34619:114::-;;:::o;34739:398::-;34898:3;34919:83;35000:1;34995:3;34919:83;:::i;:::-;34912:90;;35011:93;35100:3;35011:93;:::i;:::-;35129:1;35124:3;35120:11;35113:18;;34739:398;;;:::o;35143:379::-;35327:3;35349:147;35492:3;35349:147;:::i;:::-;35342:154;;35513:3;35506:10;;35143:379;;;:::o;35528:180::-;35576:77;35573:1;35566:88;35673:4;35670:1;35663:15;35697:4;35694:1;35687:15;35714:180;35762:77;35759:1;35752:88;35859:4;35856:1;35849:15;35883:4;35880:1;35873:15;35900:143;35957:5;35988:6;35982:13;35973:22;;36004:33;36031:5;36004:33;:::i;:::-;35900:143;;;;:::o;36049:351::-;36119:6;36168:2;36156:9;36147:7;36143:23;36139:32;36136:119;;;36174:79;;:::i;:::-;36136:119;36294:1;36319:64;36375:7;36366:6;36355:9;36351:22;36319:64;:::i;:::-;36309:74;;36265:128;36049:351;;;;:::o;36406:85::-;36451:7;36480:5;36469:16;;36406:85;;;:::o;36497:60::-;36525:3;36546:5;36539:12;;36497:60;;;:::o;36563:158::-;36621:9;36654:61;36672:42;36681:32;36707:5;36681:32;:::i;:::-;36672:42;:::i;:::-;36654:61;:::i;:::-;36641:74;;36563:158;;;:::o;36727:147::-;36822:45;36861:5;36822:45;:::i;:::-;36817:3;36810:58;36727:147;;:::o;36880:114::-;36947:6;36981:5;36975:12;36965:22;;36880:114;;;:::o;37000:184::-;37099:11;37133:6;37128:3;37121:19;37173:4;37168:3;37164:14;37149:29;;37000:184;;;;:::o;37190:132::-;37257:4;37280:3;37272:11;;37310:4;37305:3;37301:14;37293:22;;37190:132;;;:::o;37328:108::-;37405:24;37423:5;37405:24;:::i;:::-;37400:3;37393:37;37328:108;;:::o;37442:179::-;37511:10;37532:46;37574:3;37566:6;37532:46;:::i;:::-;37610:4;37605:3;37601:14;37587:28;;37442:179;;;;:::o;37627:113::-;37697:4;37729;37724:3;37720:14;37712:22;;37627:113;;;:::o;37776:732::-;37895:3;37924:54;37972:5;37924:54;:::i;:::-;37994:86;38073:6;38068:3;37994:86;:::i;:::-;37987:93;;38104:56;38154:5;38104:56;:::i;:::-;38183:7;38214:1;38199:284;38224:6;38221:1;38218:13;38199:284;;;38300:6;38294:13;38327:63;38386:3;38371:13;38327:63;:::i;:::-;38320:70;;38413:60;38466:6;38413:60;:::i;:::-;38403:70;;38259:224;38246:1;38243;38239:9;38234:14;;38199:284;;;38203:14;38499:3;38492:10;;37900:608;;;37776:732;;;;:::o;38514:831::-;38777:4;38815:3;38804:9;38800:19;38792:27;;38829:71;38897:1;38886:9;38882:17;38873:6;38829:71;:::i;:::-;38910:80;38986:2;38975:9;38971:18;38962:6;38910:80;:::i;:::-;39037:9;39031:4;39027:20;39022:2;39011:9;39007:18;39000:48;39065:108;39168:4;39159:6;39065:108;:::i;:::-;39057:116;;39183:72;39251:2;39240:9;39236:18;39227:6;39183:72;:::i;:::-;39265:73;39333:3;39322:9;39318:19;39309:6;39265:73;:::i;:::-;38514:831;;;;;;;;:::o
Swarm Source
ipfs://5a10bbf0c6ec9420f05dfb1208455ad23bfc14fba50242414d06c73cd891f2f3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.