Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 534 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21304764 | 2 days ago | IN | 0 ETH | 0.00046764 | ||||
Approve | 21290833 | 4 days ago | IN | 0 ETH | 0.00017235 | ||||
Approve | 21290832 | 4 days ago | IN | 0 ETH | 0.00017431 | ||||
Approve | 21290830 | 4 days ago | IN | 0 ETH | 0.00014131 | ||||
Approve | 21290830 | 4 days ago | IN | 0 ETH | 0.00014131 | ||||
Transfer | 21284099 | 5 days ago | IN | 0 ETH | 0.00074685 | ||||
Transfer | 21284091 | 5 days ago | IN | 0 ETH | 0.00055431 | ||||
Transfer | 21208169 | 16 days ago | IN | 0 ETH | 0.00069121 | ||||
Approve | 21157482 | 23 days ago | IN | 0 ETH | 0.00090198 | ||||
Approve | 21153837 | 23 days ago | IN | 0 ETH | 0.00062606 | ||||
Transfer | 21113736 | 29 days ago | IN | 0 ETH | 0.0002485 | ||||
Approve | 21106464 | 30 days ago | IN | 0 ETH | 0.0002741 | ||||
Approve | 21106257 | 30 days ago | IN | 0 ETH | 0.00032054 | ||||
Approve | 21076567 | 34 days ago | IN | 0 ETH | 0.00069682 | ||||
Approve | 21071599 | 35 days ago | IN | 0 ETH | 0.00076382 | ||||
Approve | 21054298 | 37 days ago | IN | 0 ETH | 0.00026427 | ||||
Approve | 21051018 | 38 days ago | IN | 0 ETH | 0.00051654 | ||||
Approve | 21034285 | 40 days ago | IN | 0 ETH | 0.00044402 | ||||
Approve | 21030394 | 41 days ago | IN | 0 ETH | 0.00132157 | ||||
Transfer | 21030390 | 41 days ago | IN | 0 ETH | 0.00090478 | ||||
Approve | 21024627 | 41 days ago | IN | 0 ETH | 0.00035835 | ||||
Approve | 21019312 | 42 days ago | IN | 0 ETH | 0.00037397 | ||||
Approve | 21007537 | 44 days ago | IN | 0 ETH | 0.00069408 | ||||
Approve | 21007052 | 44 days ago | IN | 0 ETH | 0.00086031 | ||||
Approve | 20999691 | 45 days ago | IN | 0 ETH | 0.00057657 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20930779 | 54 days ago | 0.12215068 ETH | ||||
20930779 | 54 days ago | 0.12215068 ETH | ||||
20930776 | 54 days ago | 0.14310145 ETH | ||||
20930776 | 54 days ago | 0.14310145 ETH | ||||
20930774 | 54 days ago | 0.16199202 ETH | ||||
20930774 | 54 days ago | 0.16199202 ETH | ||||
20930768 | 54 days ago | 0.16224259 ETH | ||||
20930768 | 54 days ago | 0.16224259 ETH | ||||
20930766 | 54 days ago | 0.20506032 ETH | ||||
20930766 | 54 days ago | 0.20506032 ETH | ||||
20930762 | 54 days ago | 0.06145232 ETH | ||||
20930762 | 54 days ago | 0.06145232 ETH | ||||
20930761 | 54 days ago | 0.25146188 ETH | ||||
20930761 | 54 days ago | 0.25146188 ETH | ||||
20930760 | 54 days ago | 0.05169673 ETH | ||||
20930760 | 54 days ago | 0.05169673 ETH | ||||
20930758 | 54 days ago | 0.02725561 ETH | ||||
20930758 | 54 days ago | 0.02725561 ETH | ||||
20930757 | 54 days ago | 0.03859702 ETH | ||||
20930757 | 54 days ago | 0.03859702 ETH | ||||
20930754 | 54 days ago | 0.08707702 ETH | ||||
20930754 | 54 days ago | 0.08707702 ETH | ||||
20930752 | 54 days ago | 0.0347951 ETH | ||||
20930752 | 54 days ago | 0.0347951 ETH | ||||
20930751 | 54 days ago | 0.35633226 ETH |
Loading...
Loading
Contract Name:
Cybercab
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-09 */ /* * SPDX-License-Identifier: MIT * https://www.cybercab.wtf/ * https://x.com/CyberCabETH * https://t.me/CyberCabETH */ pragma solidity 0.8.19; 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 Cybercab 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; uint256 private lastContractSell; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fees address private marketingWallet; uint256 private buyTaxTotal; uint256 private sellTaxTotal; uint256 private transferTaxTotal; /******************/ // 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 SetPairLPool(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 BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Cybercab", "CAB") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); limitscc_setExcluded(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); limitscc_setExcluded(address(dexPair), true); _setPairLPool(address(dexPair), true); uint256 _totalSupply = 1_000_000 * 10 ** decimals(); lastContractSell = block.timestamp; maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyTaxTotal = 30; sellTaxTotal = 30; transferTaxTotal = 0; marketingWallet = address(0xB0b0A210A8A20FF41B1Eff9e051a448b669E9344); // exclude from paying fees or having max transaction amount taxescbc_setExcluded(msg.sender, true); taxescbc_setExcluded(address(this), true); taxescbc_setExcluded(address(0xdead), true); taxescbc_setExcluded(marketingWallet, true); limitscc_setExcluded(msg.sender, true); limitscc_setExcluded(address(this), true); limitscc_setExcluded(address(0xdead), true); limitscc_setExcluded(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 openTrading() 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 limitscc_remove() external onlyOwner { limitsEnabled = false; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _caSBcEnabled If swapback is enabled * @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swapbCC_setRange( bool _caSBcEnabled, uint256 _caSBcTrigger, uint256 _caSBcLimit ) external onlyOwner { require( _caSBcTrigger >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require( _caSBcLimit >= _caSBcTrigger, "maximum amount cant be higher than minimum" ); swapbackEnabled = _caSBcEnabled; swapBackValueMin = (totalSupply() * _caSBcTrigger) / 10000; swapBackValueMax = (totalSupply() * _caSBcLimit) / 10000; emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param _lmtTxNew Base 1000, so 1% = 10 */ function limitscc_maxTx_set(uint256 _lmtTxNew) external onlyOwner { require(_lmtTxNew >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (_lmtTxNew * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param _limitWalletNew Base 1000, so 1% = 10 */ function limitscc_walletLimit_set( uint256 _limitWalletNew ) external onlyOwner { require(_limitWalletNew >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (_limitWalletNew * 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 _add The wallet to update * @param _excluded If the wallet is excluded or not */ function limitscc_setExcluded( address _add, bool _excluded ) public onlyOwner { transferLimitExempt[_add] = _excluded; emit ExcludeFromLimits(_add, _excluded); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function taxescbc_buy_set(uint256 _newSwapTax) external onlyOwner { buyTaxTotal = _newSwapTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function taxescbc_sell_set(uint256 _newSwapTax) external onlyOwner { sellTaxTotal = _newSwapTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal); } function taxescbc_transfer_set(uint256 _newSwapTax) external onlyOwner { transferTaxTotal = _newSwapTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param _add The wallet to update * @param _excluded If the wallet is excluded or not */ function taxescbc_setExcluded( address _add, bool _excluded ) public onlyOwner { transferTaxExempt[_add] = _excluded; emit ExcludeFromFees(_add, _excluded); } function _setPairLPool(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetPairLPool(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param _newWallet The new marketing wallet */ function taxescbc_receiver(address _newWallet) external onlyOwner { emit MarketingWalletUpdated(_newWallet, marketingWallet); marketingWallet = _newWallet; } bool anti = true; function anticbc_set(bool _anti) external onlyOwner { anti = _anti; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function swapbCC_infodv() external view returns ( bool _swapbackEnabled, uint256 _caSBcackValueMin, uint256 _caSBcackValueMax ) { _swapbackEnabled = swapbackEnabled; _caSBcackValueMin = swapBackValueMin; _caSBcackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @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 limitscc_infodv() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees */ function receiver_infodv() external view returns (address _marketingWallet) { return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _sellTaxTotal The total fee for sells * @return _transferTaxTotal The total fee for transfers */ function taxescbc_infodv() external view returns ( uint256 _buyTaxTotal, uint256 _sellTaxTotal, uint256 _transferTaxTotal ) { _buyTaxTotal = buyTaxTotal; _sellTaxTotal = sellTaxTotal; _transferTaxTotal = transferTaxTotal; } /** * @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 wallet_infodv( 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." ); } //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] && lastContractSell != block.timestamp ) { swapping = true; swapBack(amount); lastContractSell = block.timestamp; 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); } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); } // on transfers else if ( transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] ) { fees = amount.mul(transferTaxTotal).div(100); } 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 manualSwap(uint256 percent) external { require( marketingWallet == msg.sender, "Only marketing wallet can call this function" ); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = (contractBalance * percent) / 100; swapTokensForEth(totalTokensToSwap); } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 10) { contractBalance = amount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (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":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":"SetPairLPool","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":"bool","name":"_anti","type":"bool"}],"name":"anticbc_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":"limitscc_infodv","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lmtTxNew","type":"uint256"}],"name":"limitscc_maxTx_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitscc_remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"limitscc_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limitWalletNew","type":"uint256"}],"name":"limitscc_walletLimit_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver_infodv","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbCC_infodv","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcackValueMin","type":"uint256"},{"internalType":"uint256","name":"_caSBcackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_caSBcEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcTrigger","type":"uint256"},{"internalType":"uint256","name":"_caSBcLimit","type":"uint256"}],"name":"swapbCC_setRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"taxescbc_buy_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxescbc_infodv","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"taxescbc_receiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"taxescbc_sell_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"taxescbc_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"taxescbc_transfer_set","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"wallet_infodv","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600960006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001601460006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f43796265726361620000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43414200000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000eb9565b5080600490816200010d919062000eb9565b50505062000130620001246200059260201b60201c565b6200059a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200066060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200100a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200100a565b6040518363ffffffff1660e01b8152600401620002af9291906200104d565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200100a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200066060201b60201c565b6200035260a05160016200079a60201b60201c565b6000620003646200083b60201b60201c565b600a6200037291906200120a565b620f42406200038291906200125b565b9050426008819055506103e8600a826200039d91906200125b565b620003a99190620012d5565b600b819055506103e8600a82620003c191906200125b565b620003cd9190620012d5565b600a819055506103e8600182620003e591906200125b565b620003f19190620012d5565b60068190555060646002826200040891906200125b565b620004149190620012d5565b600781905550601e600e81905550601e600f81905550600060108190555073b0b0a210a8a20ff41b1eff9e051a448b669e9344600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049a3360016200084460201b60201c565b620004ad3060016200084460201b60201c565b620004c261dead60016200084460201b60201c565b620004f7600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084460201b60201c565b6200050a3360016200066060201b60201c565b6200051d3060016200066060201b60201c565b6200053261dead60016200066060201b60201c565b62000567600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066060201b60201c565b62000578336200097e60201b60201c565b6200058a338262000a9360201b60201c565b50506200153d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006706200059260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200069662000c0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e6906200136e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200078e9190620013ad565b60405180910390a25050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b260405160405180910390a35050565b60006012905090565b620008546200059260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200087a62000c0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ca906200136e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009729190620013ad565b60405180910390a25050565b6200098e6200059260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009b462000c0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a04906200136e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a769062001440565b60405180910390fd5b62000a90816200059a60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afc90620014b2565b60405180910390fd5b62000b196000838362000c3560201b60201c565b806002600082825462000b2d9190620014d4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b849190620014d4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000beb919062001520565b60405180910390a362000c076000838362000c3a60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cc157607f821691505b60208210810362000cd75762000cd662000c79565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d02565b62000d4d868362000d02565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d9a62000d9462000d8e8462000d65565b62000d6f565b62000d65565b9050919050565b6000819050919050565b62000db68362000d79565b62000dce62000dc58262000da1565b84845462000d0f565b825550505050565b600090565b62000de562000dd6565b62000df281848462000dab565b505050565b5b8181101562000e1a5762000e0e60008262000ddb565b60018101905062000df8565b5050565b601f82111562000e695762000e338162000cdd565b62000e3e8462000cf2565b8101602085101562000e4e578190505b62000e6662000e5d8562000cf2565b83018262000df7565b50505b505050565b600082821c905092915050565b600062000e8e6000198460080262000e6e565b1980831691505092915050565b600062000ea9838362000e7b565b9150826002028217905092915050565b62000ec48262000c3f565b67ffffffffffffffff81111562000ee05762000edf62000c4a565b5b62000eec825462000ca8565b62000ef982828562000e1e565b600060209050601f83116001811462000f31576000841562000f1c578287015190505b62000f28858262000e9b565b86555062000f98565b601f19841662000f418662000cdd565b60005b8281101562000f6b5784890151825560018201915060208501945060208101905062000f44565b8683101562000f8b578489015162000f87601f89168262000e7b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fd28262000fa5565b9050919050565b62000fe48162000fc5565b811462000ff057600080fd5b50565b600081519050620010048162000fd9565b92915050565b60006020828403121562001023576200102262000fa0565b5b6000620010338482850162000ff3565b91505092915050565b620010478162000fc5565b82525050565b60006040820190506200106460008301856200103c565b6200107360208301846200103c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200110857808604811115620010e057620010df6200107a565b5b6001851615620010f05780820291505b80810290506200110085620010a9565b9450620010c0565b94509492505050565b600082620011235760019050620011f6565b81620011335760009050620011f6565b81600181146200114c576002811462001157576200118d565b6001915050620011f6565b60ff8411156200116c576200116b6200107a565b5b8360020a9150848211156200118657620011856200107a565b5b50620011f6565b5060208310610133831016604e8410600b8410161715620011c75782820a905083811115620011c157620011c06200107a565b5b620011f6565b620011d68484846001620010b6565b92509050818404811115620011f057620011ef6200107a565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012178262000d65565b91506200122483620011fd565b9250620012537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001111565b905092915050565b6000620012688262000d65565b9150620012758362000d65565b9250828202620012858162000d65565b915082820484148315176200129f576200129e6200107a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012e28262000d65565b9150620012ef8362000d65565b925082620013025762001301620012a6565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013566020836200130d565b915062001363826200131e565b602082019050919050565b60006020820190508181036000830152620013898162001347565b9050919050565b60008115159050919050565b620013a78162001390565b82525050565b6000602082019050620013c460008301846200139c565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014286026836200130d565b91506200143582620013ca565b604082019050919050565b600060208201905081810360008301526200145b8162001419565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200149a601f836200130d565b9150620014a78262001462565b602082019050919050565b60006020820190508181036000830152620014cd816200148b565b9050919050565b6000620014e18262000d65565b9150620014ee8362000d65565b92508282019050808211156200150957620015086200107a565b5b92915050565b6200151a8162000d65565b82525050565b60006020820190506200153760008301846200150f565b92915050565b60805160a051614537620015716000396000611b69015260008181612b7401528181612c550152612c7c01526145376000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b70143c9116100a0578063dd62ed3e1161006f578063dd62ed3e14610720578063e997d25c1461075d578063f242ab4114610786578063f2fde38b146107b1578063fb6205dd146107da57610204565b8063b70143c9146106a0578063c9567bf9146106c9578063d0fb018a146106e0578063d955ed69146106f757610204565b8063a457c2d7116100dc578063a457c2d7146105d4578063a6f8e27514610611578063a9059cbb1461063a578063b08b6baf1461067757610204565b80638da5cb5b1461052857806395d89b4114610553578063960485e71461057e57806397938acb146105ab57610204565b8063313ce56711610190578063691cefb41161015f578063691cefb4146104555780636d844aad1461047e57806370a08231146104ab578063715018a6146104e85780637c82741b146104ff57610204565b8063313ce5671461039957806339509351146103c45780634ada218b146104015780635619eabc1461042c57610204565b806318160ddd116101cc57806318160ddd146102c75780631b54ad7d146102f257806323b872dd146103315780632e7546c81461036e57610204565b806302a0da1b14610209578063060f79f01461023257806306fdde031461025f578063095ea7b31461028a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613110565b610803565b005b34801561023e57600080fd5b5061024761089c565b60405161025693929190613165565b60405180910390f35b34801561026b57600080fd5b506102746108c2565b604051610281919061322c565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac91906132d8565b610954565b6040516102be9190613318565b60405180910390f35b3480156102d357600080fd5b506102dc610972565b6040516102e99190613333565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061334e565b61097c565b6040516103289392919061337b565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906133b2565b610a75565b6040516103659190613318565b60405180910390f35b34801561037a57600080fd5b50610383610b6d565b6040516103909190613414565b60405180910390f35b3480156103a557600080fd5b506103ae610b97565b6040516103bb919061344b565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906132d8565b610ba0565b6040516103f89190613318565b60405180910390f35b34801561040d57600080fd5b50610416610c4c565b6040516104239190613318565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613466565b610c5f565b005b34801561046157600080fd5b5061047c60048036038101906104779190613493565b610d2b565b005b34801561048a57600080fd5b50610493610e50565b6040516104a293929190613165565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd919061334e565b610e76565b6040516104df9190613333565b60405180910390f35b3480156104f457600080fd5b506104fd610ebe565b005b34801561050b57600080fd5b50610526600480360381019061052191906134d3565b610f46565b005b34801561053457600080fd5b5061053d6110ef565b60405161054a9190613414565b60405180910390f35b34801561055f57600080fd5b50610568611119565b604051610575919061322c565b60405180910390f35b34801561058a57600080fd5b506105936111ab565b6040516105a293929190613526565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613493565b6111c4565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906132d8565b6112e9565b6040516106089190613318565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190613466565b6113d4565b005b34801561064657600080fd5b50610661600480360381019061065c91906132d8565b6114f6565b60405161066e9190613318565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613466565b611514565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613466565b611621565b005b3480156106d557600080fd5b506106de6116e8565b005b3480156106ec57600080fd5b506106f56117c9565b005b34801561070357600080fd5b5061071e60048036038101906107199190613466565b611897565b005b34801561072c57600080fd5b506107476004803603810190610742919061355d565b6119a4565b6040516107549190613333565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f919061334e565b611a2b565b005b34801561079257600080fd5b5061079b611b67565b6040516107a89190613414565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d3919061334e565b611b8b565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613466565b611c82565b005b61080b611da4565b73ffffffffffffffffffffffffffffffffffffffff166108296110ef565b73ffffffffffffffffffffffffffffffffffffffff161461087f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610876906135e9565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6060600380546108d190613638565b80601f01602080910402602001604051908101604052809291908181526020018280546108fd90613638565b801561094a5780601f1061091f5761010080835404028352916020019161094a565b820191906000526020600020905b81548152906001019060200180831161092d57829003601f168201915b5050505050905090565b6000610968610961611da4565b8484611dac565b6001905092915050565b6000600254905090565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b6000610a82848484611f75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610acd611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b44906136db565b60405180910390fd5b610b6185610b59611da4565b858403611dac565b60019150509392505050565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b6000610c42610bad611da4565b848460016000610bbb611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3d919061372a565b611dac565b6001905092915050565b600d60009054906101000a900460ff1681565b610c67611da4565b73ffffffffffffffffffffffffffffffffffffffff16610c856110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd2906135e9565b60405180910390fd5b8060108190555060646010541115610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906137d0565b60405180910390fd5b50565b610d33611da4565b73ffffffffffffffffffffffffffffffffffffffff16610d516110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906135e9565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610e449190613318565b60405180910390a25050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec6611da4565b73ffffffffffffffffffffffffffffffffffffffff16610ee46110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f31906135e9565b60405180910390fd5b610f446000612a0f565b565b610f4e611da4565b73ffffffffffffffffffffffffffffffffffffffff16610f6c6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906135e9565b60405180910390fd5b6001821015611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613862565b60405180910390fd5b81811015611049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611040906138f4565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261106f610972565b6110799190613914565b6110839190613985565b60068190555061271081611095610972565b61109f9190613914565b6110a99190613985565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516110e293929190613165565b60405180910390a1505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461112890613638565b80601f016020809104026020016040519081016040528092919081815260200182805461115490613638565b80156111a15780601f10611176576101008083540402835291602001916111a1565b820191906000526020600020905b81548152906001019060200180831161118457829003601f168201915b5050505050905090565b6000806000600e549250600f5491506010549050909192565b6111cc611da4565b73ffffffffffffffffffffffffffffffffffffffff166111ea6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611237906135e9565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516112dd9190613318565b60405180910390a25050565b600080600160006112f8611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90613a28565b60405180910390fd5b6113c96113c0611da4565b85858403611dac565b600191505092915050565b6113dc611da4565b73ffffffffffffffffffffffffffffffffffffffff166113fa6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611447906135e9565b60405180910390fd5b6005811015611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613aba565b60405180910390fd5b6103e861149f610972565b826114aa9190613914565b6114b49190613985565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a546040516114eb9190613333565b60405180910390a150565b600061150a611503611da4565b8484611f75565b6001905092915050565b61151c611da4565b73ffffffffffffffffffffffffffffffffffffffff1661153a6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906135e9565b60405180910390fd5b80600f819055506064600f5411156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613b4c565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f5460405161161693929190613526565b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890613bde565b60405180910390fd5b60006116bc30610e76565b90506000606483836116ce9190613914565b6116d89190613985565b90506116e381612ad5565b505050565b6116f0611da4565b73ffffffffffffffffffffffffffffffffffffffff1661170e6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b906135e9565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6117d1611da4565b73ffffffffffffffffffffffffffffffffffffffff166117ef6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c906135e9565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b61189f611da4565b73ffffffffffffffffffffffffffffffffffffffff166118bd6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906135e9565b60405180910390fd5b80600e819055506064600e541115611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613c70565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e5460405161199993929190613526565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a33611da4565b73ffffffffffffffffffffffffffffffffffffffff16611a516110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906135e9565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b93611da4565b73ffffffffffffffffffffffffffffffffffffffff16611bb16110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613d02565b60405180910390fd5b611c7f81612a0f565b50565b611c8a611da4565b73ffffffffffffffffffffffffffffffffffffffff16611ca86110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf5906135e9565b60405180910390fd5b6002811015611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613d6e565b60405180910390fd5b6103e8611d4d610972565b82611d589190613914565b611d629190613985565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051611d999190613333565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613e92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f689190613333565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613fb6565b60405180910390fd5b6000810361206c5761206783836000612d12565b612a0a565b600960009054906101000a900460ff1615612567576120896110ef565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f757506120c76110ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561216a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121835750600560149054906101000a900460ff16155b1561256657600d60009054906101000a900460ff1661227d57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223d5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614048565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123205750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c757600b5481111561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906140da565b60405180910390fd5b600a5461237683610e76565b82612381919061372a565b11156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614146565b60405180910390fd5b612565565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b957600b548111156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab906141d8565b60405180910390fd5b612564565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661256357600a5461251683610e76565b82612521919061372a565b1115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614146565b60405180910390fd5b5b5b5b5b5b600061257230610e76565b9050600060065482101590508080156125975750600560159054906101000a900460ff165b80156125b05750600560149054906101000a900460ff16155b80156126065750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561265c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c057504260085414155b1561270c576001600560146101000a81548160ff0219169083151502179055506126e983612f91565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b600081156129fa57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282f57506000600f54115b156128635761285c606461284e600f548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d6565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128be57506000600e54115b156128f2576128eb60646128dd600e548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d5565b600060105411801561294e5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a45750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d4576129d160646129c36010548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90505b5b5b60008111156129eb576129ea873083612d12565b5b80856129f791906141f8565b94505b612a05878787612d12565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612af257612af161422c565b5b604051908082528060200260200182016040528015612b205781602001602082028036833780820191505090505b5090503081600081518110612b3857612b3761425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c01919061429f565b81600181518110612c1557612c1461425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7a307f000000000000000000000000000000000000000000000000000000000000000084611dac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cdc9594939291906143cf565b600060405180830381600087803b158015612cf657600080fd5b505af1158015612d0a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790613fb6565b60405180910390fd5b612dfb8383836130c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061449b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f14919061372a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f789190613333565b60405180910390a3612f8b8484846130ce565b50505050565b6000612f9c30610e76565b90506000808203612fae57505061309a565b600754821115612fbe5760075491505b601460009054906101000a900460ff168015612fe55750600a83612fe29190613914565b82115b15612ffa57600a83612ff79190613914565b91505b600082905061300881612ad5565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161304e906144ec565b60006040518083038185875af1925050503d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b5050809250505050505b50565b600081836130ab9190613914565b905092915050565b600081836130c19190613985565b905092915050565b505050565b505050565b600080fd5b60008115159050919050565b6130ed816130d8565b81146130f857600080fd5b50565b60008135905061310a816130e4565b92915050565b600060208284031215613126576131256130d3565b5b6000613134848285016130fb565b91505092915050565b613146816130d8565b82525050565b6000819050919050565b61315f8161314c565b82525050565b600060608201905061317a600083018661313d565b6131876020830185613156565b6131946040830184613156565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131d65780820151818401526020810190506131bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006131fe8261319c565b61320881856131a7565b93506132188185602086016131b8565b613221816131e2565b840191505092915050565b6000602082019050818103600083015261324681846131f3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132798261324e565b9050919050565b6132898161326e565b811461329457600080fd5b50565b6000813590506132a681613280565b92915050565b6132b58161314c565b81146132c057600080fd5b50565b6000813590506132d2816132ac565b92915050565b600080604083850312156132ef576132ee6130d3565b5b60006132fd85828601613297565b925050602061330e858286016132c3565b9150509250929050565b600060208201905061332d600083018461313d565b92915050565b60006020820190506133486000830184613156565b92915050565b600060208284031215613364576133636130d3565b5b600061337284828501613297565b91505092915050565b6000606082019050613390600083018661313d565b61339d602083018561313d565b6133aa604083018461313d565b949350505050565b6000806000606084860312156133cb576133ca6130d3565b5b60006133d986828701613297565b93505060206133ea86828701613297565b92505060406133fb868287016132c3565b9150509250925092565b61340e8161326e565b82525050565b60006020820190506134296000830184613405565b92915050565b600060ff82169050919050565b6134458161342f565b82525050565b6000602082019050613460600083018461343c565b92915050565b60006020828403121561347c5761347b6130d3565b5b600061348a848285016132c3565b91505092915050565b600080604083850312156134aa576134a96130d3565b5b60006134b885828601613297565b92505060206134c9858286016130fb565b9150509250929050565b6000806000606084860312156134ec576134eb6130d3565b5b60006134fa868287016130fb565b935050602061350b868287016132c3565b925050604061351c868287016132c3565b9150509250925092565b600060608201905061353b6000830186613156565b6135486020830185613156565b6135556040830184613156565b949350505050565b60008060408385031215613574576135736130d3565b5b600061358285828601613297565b925050602061359385828601613297565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135d36020836131a7565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365057607f821691505b60208210810361366357613662613609565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136c56028836131a7565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137358261314c565b91506137408361314c565b9250828201905080821115613758576137576136fb565b5b92915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006137ba602d836131a7565b91506137c58261375e565b604082019050919050565b600060208201905081810360008301526137e9816137ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061384c6034836131a7565b9150613857826137f0565b604082019050919050565b6000602082019050818103600083015261387b8161383f565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b60006138de602a836131a7565b91506138e982613882565b604082019050919050565b6000602082019050818103600083015261390d816138d1565b9050919050565b600061391f8261314c565b915061392a8361314c565b92508282026139388161314c565b9150828204841483151761394f5761394e6136fb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139908261314c565b915061399b8361314c565b9250826139ab576139aa613956565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a126025836131a7565b9150613a1d826139b6565b604082019050919050565b60006020820190508181036000830152613a4181613a05565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613aa46024836131a7565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613b366029836131a7565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613bc8602c836131a7565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613c5a6028836131a7565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cec6026836131a7565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613d586020836131a7565b9150613d6382613d22565b602082019050919050565b60006020820190508181036000830152613d8781613d4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dea6024836131a7565b9150613df582613d8e565b604082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7c6022836131a7565b9150613e8782613e20565b604082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0e6025836131a7565b9150613f1982613eb2565b604082019050919050565b60006020820190508181036000830152613f3d81613f01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa06023836131a7565b9150613fab82613f44565b604082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006140326022836131a7565b915061403d82613fd6565b604082019050919050565b6000602082019050818103600083015261406181614025565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006140c46026836131a7565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141306013836131a7565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006141c26027836131a7565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b60006142038261314c565b915061420e8361314c565b9250828203905081811115614226576142256136fb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061429981613280565b92915050565b6000602082840312156142b5576142b46130d3565b5b60006142c38482850161428a565b91505092915050565b6000819050919050565b6000819050919050565b60006142fb6142f66142f1846142cc565b6142d6565b61314c565b9050919050565b61430b816142e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143468161326e565b82525050565b6000614358838361433d565b60208301905092915050565b6000602082019050919050565b600061437c82614311565b614386818561431c565b93506143918361432d565b8060005b838110156143c25781516143a9888261434c565b97506143b483614364565b925050600181019050614395565b5085935050505092915050565b600060a0820190506143e46000830188613156565b6143f16020830187614302565b81810360408301526144038186614371565b90506144126060830185613405565b61441f6080830184613156565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144856026836131a7565b915061449082614429565b604082019050919050565b600060208201905081810360008301526144b481614478565b9050919050565b600081905092915050565b50565b60006144d66000836144bb565b91506144e1826144c6565b600082019050919050565b60006144f7826144c9565b915081905091905056fea2646970667358221220a31ee572fb78d386c9c6ac4dd770f1dea6616f032a97a219e8890361581ebb7564736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b70143c9116100a0578063dd62ed3e1161006f578063dd62ed3e14610720578063e997d25c1461075d578063f242ab4114610786578063f2fde38b146107b1578063fb6205dd146107da57610204565b8063b70143c9146106a0578063c9567bf9146106c9578063d0fb018a146106e0578063d955ed69146106f757610204565b8063a457c2d7116100dc578063a457c2d7146105d4578063a6f8e27514610611578063a9059cbb1461063a578063b08b6baf1461067757610204565b80638da5cb5b1461052857806395d89b4114610553578063960485e71461057e57806397938acb146105ab57610204565b8063313ce56711610190578063691cefb41161015f578063691cefb4146104555780636d844aad1461047e57806370a08231146104ab578063715018a6146104e85780637c82741b146104ff57610204565b8063313ce5671461039957806339509351146103c45780634ada218b146104015780635619eabc1461042c57610204565b806318160ddd116101cc57806318160ddd146102c75780631b54ad7d146102f257806323b872dd146103315780632e7546c81461036e57610204565b806302a0da1b14610209578063060f79f01461023257806306fdde031461025f578063095ea7b31461028a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613110565b610803565b005b34801561023e57600080fd5b5061024761089c565b60405161025693929190613165565b60405180910390f35b34801561026b57600080fd5b506102746108c2565b604051610281919061322c565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac91906132d8565b610954565b6040516102be9190613318565b60405180910390f35b3480156102d357600080fd5b506102dc610972565b6040516102e99190613333565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061334e565b61097c565b6040516103289392919061337b565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906133b2565b610a75565b6040516103659190613318565b60405180910390f35b34801561037a57600080fd5b50610383610b6d565b6040516103909190613414565b60405180910390f35b3480156103a557600080fd5b506103ae610b97565b6040516103bb919061344b565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e691906132d8565b610ba0565b6040516103f89190613318565b60405180910390f35b34801561040d57600080fd5b50610416610c4c565b6040516104239190613318565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613466565b610c5f565b005b34801561046157600080fd5b5061047c60048036038101906104779190613493565b610d2b565b005b34801561048a57600080fd5b50610493610e50565b6040516104a293929190613165565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd919061334e565b610e76565b6040516104df9190613333565b60405180910390f35b3480156104f457600080fd5b506104fd610ebe565b005b34801561050b57600080fd5b50610526600480360381019061052191906134d3565b610f46565b005b34801561053457600080fd5b5061053d6110ef565b60405161054a9190613414565b60405180910390f35b34801561055f57600080fd5b50610568611119565b604051610575919061322c565b60405180910390f35b34801561058a57600080fd5b506105936111ab565b6040516105a293929190613526565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613493565b6111c4565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906132d8565b6112e9565b6040516106089190613318565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190613466565b6113d4565b005b34801561064657600080fd5b50610661600480360381019061065c91906132d8565b6114f6565b60405161066e9190613318565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613466565b611514565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190613466565b611621565b005b3480156106d557600080fd5b506106de6116e8565b005b3480156106ec57600080fd5b506106f56117c9565b005b34801561070357600080fd5b5061071e60048036038101906107199190613466565b611897565b005b34801561072c57600080fd5b506107476004803603810190610742919061355d565b6119a4565b6040516107549190613333565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f919061334e565b611a2b565b005b34801561079257600080fd5b5061079b611b67565b6040516107a89190613414565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d3919061334e565b611b8b565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613466565b611c82565b005b61080b611da4565b73ffffffffffffffffffffffffffffffffffffffff166108296110ef565b73ffffffffffffffffffffffffffffffffffffffff161461087f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610876906135e9565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6060600380546108d190613638565b80601f01602080910402602001604051908101604052809291908181526020018280546108fd90613638565b801561094a5780601f1061091f5761010080835404028352916020019161094a565b820191906000526020600020905b81548152906001019060200180831161092d57829003601f168201915b5050505050905090565b6000610968610961611da4565b8484611dac565b6001905092915050565b6000600254905090565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b6000610a82848484611f75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610acd611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b44906136db565b60405180910390fd5b610b6185610b59611da4565b858403611dac565b60019150509392505050565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b6000610c42610bad611da4565b848460016000610bbb611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3d919061372a565b611dac565b6001905092915050565b600d60009054906101000a900460ff1681565b610c67611da4565b73ffffffffffffffffffffffffffffffffffffffff16610c856110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd2906135e9565b60405180910390fd5b8060108190555060646010541115610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906137d0565b60405180910390fd5b50565b610d33611da4565b73ffffffffffffffffffffffffffffffffffffffff16610d516110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906135e9565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610e449190613318565b60405180910390a25050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec6611da4565b73ffffffffffffffffffffffffffffffffffffffff16610ee46110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f31906135e9565b60405180910390fd5b610f446000612a0f565b565b610f4e611da4565b73ffffffffffffffffffffffffffffffffffffffff16610f6c6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb9906135e9565b60405180910390fd5b6001821015611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613862565b60405180910390fd5b81811015611049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611040906138f4565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261106f610972565b6110799190613914565b6110839190613985565b60068190555061271081611095610972565b61109f9190613914565b6110a99190613985565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516110e293929190613165565b60405180910390a1505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461112890613638565b80601f016020809104026020016040519081016040528092919081815260200182805461115490613638565b80156111a15780601f10611176576101008083540402835291602001916111a1565b820191906000526020600020905b81548152906001019060200180831161118457829003601f168201915b5050505050905090565b6000806000600e549250600f5491506010549050909192565b6111cc611da4565b73ffffffffffffffffffffffffffffffffffffffff166111ea6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611237906135e9565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516112dd9190613318565b60405180910390a25050565b600080600160006112f8611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90613a28565b60405180910390fd5b6113c96113c0611da4565b85858403611dac565b600191505092915050565b6113dc611da4565b73ffffffffffffffffffffffffffffffffffffffff166113fa6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611447906135e9565b60405180910390fd5b6005811015611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613aba565b60405180910390fd5b6103e861149f610972565b826114aa9190613914565b6114b49190613985565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a546040516114eb9190613333565b60405180910390a150565b600061150a611503611da4565b8484611f75565b6001905092915050565b61151c611da4565b73ffffffffffffffffffffffffffffffffffffffff1661153a6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906135e9565b60405180910390fd5b80600f819055506064600f5411156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613b4c565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f5460405161161693929190613526565b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890613bde565b60405180910390fd5b60006116bc30610e76565b90506000606483836116ce9190613914565b6116d89190613985565b90506116e381612ad5565b505050565b6116f0611da4565b73ffffffffffffffffffffffffffffffffffffffff1661170e6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b906135e9565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6117d1611da4565b73ffffffffffffffffffffffffffffffffffffffff166117ef6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c906135e9565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b61189f611da4565b73ffffffffffffffffffffffffffffffffffffffff166118bd6110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906135e9565b60405180910390fd5b80600e819055506064600e541115611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613c70565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e5460405161199993929190613526565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a33611da4565b73ffffffffffffffffffffffffffffffffffffffff16611a516110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906135e9565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000006f4c12507fdd42e9ee5ae8ecdb155f943732da9481565b611b93611da4565b73ffffffffffffffffffffffffffffffffffffffff16611bb16110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613d02565b60405180910390fd5b611c7f81612a0f565b50565b611c8a611da4565b73ffffffffffffffffffffffffffffffffffffffff16611ca86110ef565b73ffffffffffffffffffffffffffffffffffffffff1614611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf5906135e9565b60405180910390fd5b6002811015611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613d6e565b60405180910390fd5b6103e8611d4d610972565b82611d589190613914565b611d629190613985565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051611d999190613333565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613e92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f689190613333565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613fb6565b60405180910390fd5b6000810361206c5761206783836000612d12565b612a0a565b600960009054906101000a900460ff1615612567576120896110ef565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f757506120c76110ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561216a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121835750600560149054906101000a900460ff16155b1561256657600d60009054906101000a900460ff1661227d57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223d5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614048565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123205750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c757600b5481111561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906140da565b60405180910390fd5b600a5461237683610e76565b82612381919061372a565b11156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614146565b60405180910390fd5b612565565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b957600b548111156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab906141d8565b60405180910390fd5b612564565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661256357600a5461251683610e76565b82612521919061372a565b1115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614146565b60405180910390fd5b5b5b5b5b5b600061257230610e76565b9050600060065482101590508080156125975750600560159054906101000a900460ff165b80156125b05750600560149054906101000a900460ff16155b80156126065750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561265c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c057504260085414155b1561270c576001600560146101000a81548160ff0219169083151502179055506126e983612f91565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b600081156129fa57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282f57506000600f54115b156128635761285c606461284e600f548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d6565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128be57506000600e54115b156128f2576128eb60646128dd600e548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d5565b600060105411801561294e5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a45750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d4576129d160646129c36010548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90505b5b5b60008111156129eb576129ea873083612d12565b5b80856129f791906141f8565b94505b612a05878787612d12565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612af257612af161422c565b5b604051908082528060200260200182016040528015612b205781602001602082028036833780820191505090505b5090503081600081518110612b3857612b3761425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c01919061429f565b81600181518110612c1557612c1461425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611dac565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cdc9594939291906143cf565b600060405180830381600087803b158015612cf657600080fd5b505af1158015612d0a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790613fb6565b60405180910390fd5b612dfb8383836130c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061449b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f14919061372a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f789190613333565b60405180910390a3612f8b8484846130ce565b50505050565b6000612f9c30610e76565b90506000808203612fae57505061309a565b600754821115612fbe5760075491505b601460009054906101000a900460ff168015612fe55750600a83612fe29190613914565b82115b15612ffa57600a83612ff79190613914565b91505b600082905061300881612ad5565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161304e906144ec565b60006040518083038185875af1925050503d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b5050809250505050505b50565b600081836130ab9190613914565b905092915050565b600081836130c19190613985565b905092915050565b505050565b505050565b600080fd5b60008115159050919050565b6130ed816130d8565b81146130f857600080fd5b50565b60008135905061310a816130e4565b92915050565b600060208284031215613126576131256130d3565b5b6000613134848285016130fb565b91505092915050565b613146816130d8565b82525050565b6000819050919050565b61315f8161314c565b82525050565b600060608201905061317a600083018661313d565b6131876020830185613156565b6131946040830184613156565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131d65780820151818401526020810190506131bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006131fe8261319c565b61320881856131a7565b93506132188185602086016131b8565b613221816131e2565b840191505092915050565b6000602082019050818103600083015261324681846131f3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132798261324e565b9050919050565b6132898161326e565b811461329457600080fd5b50565b6000813590506132a681613280565b92915050565b6132b58161314c565b81146132c057600080fd5b50565b6000813590506132d2816132ac565b92915050565b600080604083850312156132ef576132ee6130d3565b5b60006132fd85828601613297565b925050602061330e858286016132c3565b9150509250929050565b600060208201905061332d600083018461313d565b92915050565b60006020820190506133486000830184613156565b92915050565b600060208284031215613364576133636130d3565b5b600061337284828501613297565b91505092915050565b6000606082019050613390600083018661313d565b61339d602083018561313d565b6133aa604083018461313d565b949350505050565b6000806000606084860312156133cb576133ca6130d3565b5b60006133d986828701613297565b93505060206133ea86828701613297565b92505060406133fb868287016132c3565b9150509250925092565b61340e8161326e565b82525050565b60006020820190506134296000830184613405565b92915050565b600060ff82169050919050565b6134458161342f565b82525050565b6000602082019050613460600083018461343c565b92915050565b60006020828403121561347c5761347b6130d3565b5b600061348a848285016132c3565b91505092915050565b600080604083850312156134aa576134a96130d3565b5b60006134b885828601613297565b92505060206134c9858286016130fb565b9150509250929050565b6000806000606084860312156134ec576134eb6130d3565b5b60006134fa868287016130fb565b935050602061350b868287016132c3565b925050604061351c868287016132c3565b9150509250925092565b600060608201905061353b6000830186613156565b6135486020830185613156565b6135556040830184613156565b949350505050565b60008060408385031215613574576135736130d3565b5b600061358285828601613297565b925050602061359385828601613297565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135d36020836131a7565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365057607f821691505b60208210810361366357613662613609565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006136c56028836131a7565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137358261314c565b91506137408361314c565b9250828201905080821115613758576137576136fb565b5b92915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006137ba602d836131a7565b91506137c58261375e565b604082019050919050565b600060208201905081810360008301526137e9816137ad565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061384c6034836131a7565b9150613857826137f0565b604082019050919050565b6000602082019050818103600083015261387b8161383f565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b60006138de602a836131a7565b91506138e982613882565b604082019050919050565b6000602082019050818103600083015261390d816138d1565b9050919050565b600061391f8261314c565b915061392a8361314c565b92508282026139388161314c565b9150828204841483151761394f5761394e6136fb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139908261314c565b915061399b8361314c565b9250826139ab576139aa613956565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a126025836131a7565b9150613a1d826139b6565b604082019050919050565b60006020820190508181036000830152613a4181613a05565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613aa46024836131a7565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613b366029836131a7565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613bc8602c836131a7565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613c5a6028836131a7565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cec6026836131a7565b9150613cf782613c90565b604082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613d586020836131a7565b9150613d6382613d22565b602082019050919050565b60006020820190508181036000830152613d8781613d4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dea6024836131a7565b9150613df582613d8e565b604082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7c6022836131a7565b9150613e8782613e20565b604082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0e6025836131a7565b9150613f1982613eb2565b604082019050919050565b60006020820190508181036000830152613f3d81613f01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa06023836131a7565b9150613fab82613f44565b604082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006140326022836131a7565b915061403d82613fd6565b604082019050919050565b6000602082019050818103600083015261406181614025565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006140c46026836131a7565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141306013836131a7565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006141c26027836131a7565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b60006142038261314c565b915061420e8361314c565b9250828203905081811115614226576142256136fb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061429981613280565b92915050565b6000602082840312156142b5576142b46130d3565b5b60006142c38482850161428a565b91505092915050565b6000819050919050565b6000819050919050565b60006142fb6142f66142f1846142cc565b6142d6565b61314c565b9050919050565b61430b816142e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143468161326e565b82525050565b6000614358838361433d565b60208301905092915050565b6000602082019050919050565b600061437c82614311565b614386818561431c565b93506143918361432d565b8060005b838110156143c25781516143a9888261434c565b97506143b483614364565b925050600181019050614395565b5085935050505092915050565b600060a0820190506143e46000830188613156565b6143f16020830187614302565b81810360408301526144038186614371565b90506144126060830185613405565b61441f6080830184613156565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144856026836131a7565b915061449082614429565b604082019050919050565b600060208201905081810360008301526144b481614478565b9050919050565b600081905092915050565b50565b60006144d66000836144bb565b91506144e1826144c6565b600082019050919050565b60006144f7826144c9565b915081905091905056fea2646970667358221220a31ee572fb78d386c9c6ac4dd770f1dea6616f032a97a219e8890361581ebb7564736f6c63430008130033
Deployed Bytecode Sourcemap
25411:18154:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35026:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36172:246;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11009:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13242:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12129:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37773:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13914:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36581:151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11971:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14848:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26027:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33752:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34248:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35470:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12300:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22348:103;;;;;;;;;;;;;:::i;:::-;;30578:675;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21697:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11228:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36978:335;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;32499:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15637:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31940:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12656:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33439:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42536:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29612:162;;;;;;;;;;;;;:::i;:::-;;29929:163;;;;;;;;;;;;;:::i;:::-;;32942:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12919:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34809:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25534:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22606:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31492:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35026:83;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35096:5:::1;35089:4;;:12;;;;;;;;;;;;;;;;;;35026:83:::0;:::o;36172:246::-;36249:19;36270:18;36290:14;36339:13;;;;;;;;;;;36322:30;;36376:9;;36363:22;;36405:5;;36396:14;;36172:246;;;:::o;11009:100::-;11063:13;11096:5;11089:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11009:100;:::o;13242:194::-;13350:4;13367:39;13376:12;:10;:12::i;:::-;13390:7;13399:6;13367:8;:39::i;:::-;13424:4;13417:11;;13242:194;;;;:::o;12129:108::-;12190:7;12217:12;;12210:19;;12129:108;:::o;37773:448::-;37893:23;37931:25;37971:31;38051:17;:26;38069:7;38051:26;;;;;;;;;;;;;;;;;;;;;;;;;38030:47;;38111:19;:28;38131:7;38111:28;;;;;;;;;;;;;;;;;;;;;;;;;38088:51;;38179:25;:34;38205:7;38179:34;;;;;;;;;;;;;;;;;;;;;;;;;38150:63;;37773:448;;;;;:::o;13914:529::-;14054:4;14071:36;14081:6;14089:9;14100:6;14071:9;:36::i;:::-;14120:24;14147:11;:19;14159:6;14147:19;;;;;;;;;;;;;;;:33;14167:12;:10;:12::i;:::-;14147:33;;;;;;;;;;;;;;;;14120:60;;14233:6;14213:16;:26;;14191:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14343:57;14352:6;14360:12;:10;:12::i;:::-;14393:6;14374:16;:25;14343:8;:57::i;:::-;14431:4;14424:11;;;13914:529;;;;;:::o;36581:151::-;36658:24;36708:15;;;;;;;;;;;36700:24;;36581:151;:::o;11971:93::-;12029:5;12054:2;12047:9;;11971:93;:::o;14848:290::-;14961:4;14978:130;15001:12;:10;:12::i;:::-;15028:7;15087:10;15050:11;:25;15062:12;:10;:12::i;:::-;15050:25;;;;;;;;;;;;;;;:34;15076:7;15050:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14978:8;:130::i;:::-;15126:4;15119:11;;14848:290;;;;:::o;26027:34::-;;;;;;;;;;;;;:::o;33752:249::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33853:11:::1;33834:16;:30;;;;33917:3;33897:16;;:23;;33875:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33752:249:::0;:::o;34248:204::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34387:9:::1;34361:17;:23;34379:4;34361:23;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34428:4;34412:32;;;34434:9;34412:32;;;;;;:::i;:::-;;;;;;;;34248:204:::0;;:::o;35470:355::-;35560:21;35596:25;35636;35708:15;;;;;;;;;;;35689:34;;35754:16;;35734:36;;35801:16;;35781:36;;35470:355;;;:::o;12300:143::-;12390:7;12417:9;:18;12427:7;12417:18;;;;;;;;;;;;;;;;12410:25;;12300:143;;;:::o;22348:103::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:30:::1;22440:1;22413:18;:30::i;:::-;22348:103::o:0;30578:675::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30771:1:::1;30754:13;:18;;30732:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30900:13;30885:11;:28;;30863:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;31014:13;30996:15;;:31;;;;;;;;;;;;;;;;;;31091:5;31074:13;31058;:11;:13::i;:::-;:29;;;;:::i;:::-;31057:39;;;;:::i;:::-;31038:16;:58;;;;31158:5;31143:11;31127:13;:11;:13::i;:::-;:27;;;;:::i;:::-;31126:37;;;;:::i;:::-;31107:16;:56;;;;31179:66;31203:13;31218;31233:11;31179:66;;;;;;;;:::i;:::-;;;;;;;;30578:675:::0;;;:::o;21697:87::-;21743:7;21770:6;;;;;;;;;;;21763:13;;21697:87;:::o;11228:104::-;11284:13;11317:7;11310:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11228:104;:::o;36978:335::-;37069:20;37104:21;37140:25;37208:11;;37193:26;;37246:12;;37230:28;;37289:16;;37269:36;;36978:335;;;:::o;32499:208::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32640:9:::1;32612:19;:25;32632:4;32612:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32683:4;32665:34;;;32689:9;32665:34;;;;;;:::i;:::-;;;;;;;;32499:208:::0;;:::o;15637:475::-;15755:4;15772:24;15799:11;:25;15811:12;:10;:12::i;:::-;15799:25;;;;;;;;;;;;;;;:34;15825:7;15799:34;;;;;;;;;;;;;;;;15772:61;;15886:15;15866:16;:35;;15844:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16002:67;16011:12;:10;:12::i;:::-;16025:7;16053:15;16034:16;:34;16002:8;:67::i;:::-;16100:4;16093:11;;;15637:475;;;;:::o;31940:288::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32072:1:::1;32053:15;:20;;32045:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32173:4;32156:13;:11;:13::i;:::-;32138:15;:31;;;;:::i;:::-;32137:40;;;;:::i;:::-;32125:9;:52;;;;32193:27;32210:9;;32193:27;;;;;;:::i;:::-;;;;;;;;31940:288:::0;:::o;12656:200::-;12767:4;12784:42;12794:12;:10;:12::i;:::-;12808:9;12819:6;12784:9;:42::i;:::-;12844:4;12837:11;;12656:200;;;;:::o;33439:305::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33532:11:::1;33517:12;:26;;;;33592:3;33576:12;;:19;;33554:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33680:56;33695:12;;33709;;33723;;33680:56;;;;;;;;:::i;:::-;;;;;;;;33439:305:::0;:::o;42536:369::-;42634:10;42615:29;;:15;;;;;;;;;;;:29;;;42593:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;42729:23;42755:24;42773:4;42755:9;:24::i;:::-;42729:50;;42790:25;42848:3;42837:7;42819:15;:25;;;;:::i;:::-;42818:33;;;;:::i;:::-;42790:61;;42862:35;42879:17;42862:16;:35::i;:::-;42582:323;;42536:369;:::o;29612:162::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29682:4:::1;29665:14;;:21;;;;;;;;;;;;;;;;;;29715:4;29697:15;;:22;;;;;;;;;;;;;;;;;;29750:15;29735:31;;;;;;;;;;29612:162::o:0;29929:163::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30002:5:::1;29986:13;;:21;;;;;;;;;;;;;;;;;;30037:1;30018:16;:20;;;;30068:15;30054:30;;;;;;;;;;29929:163::o:0;32942:260::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33033:11:::1;33019;:25;;;;33078:3;33063:11;;:18;;33055:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33142:52;33156:11;;33169;;33182;;33142:52;;;;;;;;:::i;:::-;;;;;;;;32942:260:::0;:::o;12919:176::-;13033:7;13060:11;:18;13072:5;13060:18;;;;;;;;;;;;;;;:27;13079:7;13060:27;;;;;;;;;;;;;;;;13053:34;;12919:176;;;;:::o;34809:180::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34926:15:::1;;;;;;;;;;;34891:51;;34914:10;34891:51;;;;;;;;;;;;34971:10;34953:15;;:28;;;;;;;;;;;;;;;;;;34809:180:::0;:::o;25534:32::-;;;:::o;22606:238::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22729:1:::1;22709:22;;:8;:22;;::::0;22687:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22808:28;22827:8;22808:18;:28::i;:::-;22606:238:::0;:::o;31492:232::-;21928:12;:10;:12::i;:::-;21917:23;;:7;:5;:7::i;:::-;:23;;;21909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31590:1:::1;31577:9;:14;;31569:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31677:4;31660:13;:11;:13::i;:::-;31648:9;:25;;;;:::i;:::-;31647:34;;;;:::i;:::-;31639:5;:42;;;;31697:19;31710:5;;31697:19;;;;;;:::i;:::-;;;;;;;;31492:232:::0;:::o;10015:98::-;10068:7;10095:10;10088:17;;10015:98;:::o;19420:380::-;19573:1;19556:19;;:5;:19;;;19548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19654:1;19635:21;;:7;:21;;;19627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19738:6;19708:11;:18;19720:5;19708:18;;;;;;;;;;;;;;;:27;19727:7;19708:27;;;;;;;;;;;;;;;:36;;;;19776:7;19760:32;;19769:5;19760:32;;;19785:6;19760:32;;;;;;:::i;:::-;;;;;;;;19420:380;;;:::o;38229:3720::-;38377:1;38361:18;;:4;:18;;;38353:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38454:1;38440:16;;:2;:16;;;38432:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38523:1;38513:6;:11;38509:93;;38541:28;38557:4;38563:2;38567:1;38541:15;:28::i;:::-;38584:7;;38509:93;38618:13;;;;;;;;;;;38614:1564;;;38678:7;:5;:7::i;:::-;38670:15;;:4;:15;;;;:49;;;;;38712:7;:5;:7::i;:::-;38706:13;;:2;:13;;;;38670:49;:86;;;;;38754:1;38740:16;;:2;:16;;;;38670:86;:128;;;;;38791:6;38777:21;;:2;:21;;;;38670:128;:158;;;;;38820:8;;;;;;;;;;;38819:9;38670:158;38648:1519;;;38868:14;;;;;;;;;;;38863:232;;38941:17;:23;38959:4;38941:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;38968:17;:21;38986:2;38968:21;;;;;;;;;;;;;;;;;;;;;;;;;38941:48;38907:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;38863:232;39169:25;:31;39195:4;39169:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39205:19;:23;39225:2;39205:23;;;;;;;;;;;;;;;;;;;;;;;;;39204:24;39169:59;39143:1009;;;39315:5;;39305:6;:15;;39271:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;39493:9;;39476:13;39486:2;39476:9;:13::i;:::-;39467:6;:22;;;;:::i;:::-;:35;;39433:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39143:1009;;;39671:25;:29;39697:2;39671:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39705:19;:25;39725:4;39705:25;;;;;;;;;;;;;;;;;;;;;;;;;39704:26;39671:59;39645:507;;;39817:5;;39807:6;:15;;39773:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39645:507;;;39944:19;:23;39964:2;39944:23;;;;;;;;;;;;;;;;;;;;;;;;;39939:213;;40052:9;;40035:13;40045:2;40035:9;:13::i;:::-;40026:6;:22;;;;:::i;:::-;:35;;39992:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39939:213;39645:507;39143:1009;38648:1519;38614:1564;40190:28;40221:24;40239:4;40221:9;:24::i;:::-;40190:55;;40258:12;40297:16;;40273:20;:40;;40258:55;;40344:7;:39;;;;;40368:15;;;;;;;;;;;40344:39;:65;;;;;40401:8;;;;;;;;;;;40400:9;40344:65;:114;;;;;40427:25;:31;40453:4;40427:31;;;;;;;;;;;;;;;;;;;;;;;;;40426:32;40344:114;:155;;;;;40476:17;:23;40494:4;40476:23;;;;;;;;;;;;;;;;;;;;;;;;;40475:24;40344:155;:194;;;;;40517:17;:21;40535:2;40517:21;;;;;;;;;;;;;;;;;;;;;;;;;40516:22;40344:194;:246;;;;;40575:15;40555:16;;:35;;40344:246;40326:435;;;40628:4;40617:8;;:15;;;;;;;;;;;;;;;;;;40649:16;40658:6;40649:8;:16::i;:::-;40701:15;40682:16;:34;;;;40744:5;40733:8;;:16;;;;;;;;;;;;;;;;;;40326:435;40773:12;40789:8;;;;;;;;;;;40788:9;40773:24;;40899:17;:23;40917:4;40899:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;40926:17;:21;40944:2;40926:21;;;;;;;;;;;;;;;;;;;;;;;;;40899:48;40895:96;;;40974:5;40964:15;;40895:96;41003:12;41108:7;41104:792;;;41160:25;:29;41186:2;41160:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;41208:1;41193:12;;:16;41160:49;41156:591;;;41237:33;41266:3;41237:24;41248:12;;41237:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41230:40;;41156:591;;;41332:25;:31;41358:4;41332:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41381:1;41367:11;;:15;41332:50;41328:419;;;41410:32;41438:3;41410:23;41421:11;;41410:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;41403:39;;41328:419;;;41547:1;41528:16;;:20;:73;;;;;41570:25;:31;41596:4;41570:31;;;;;;;;;;;;;;;;;;;;;;;;;41569:32;41528:73;:124;;;;;41623:25;:29;41649:2;41623:29;;;;;;;;;;;;;;;;;;;;;;;;;41622:30;41528:124;41506:241;;;41694:37;41727:3;41694:28;41705:16;;41694:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;41687:44;;41506:241;41328:419;41156:591;41774:1;41767:4;:8;41763:91;;;41796:42;41812:4;41826;41833;41796:15;:42::i;:::-;41763:91;41880:4;41870:14;;;;;:::i;:::-;;;41104:792;41908:33;41924:4;41930:2;41934:6;41908:15;:33::i;:::-;38342:3607;;;;38229:3720;;;;:::o;23004:191::-;23078:16;23097:6;;;;;;;;;;;23078:25;;23123:8;23114:6;;:17;;;;;;;;;;;;;;;;;;23178:8;23147:40;;23168:8;23147:40;;;;;;;;;;;;23067:128;23004:191;:::o;41957:571::-;42083:21;42121:1;42107:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42083:40;;42152:4;42134;42139:1;42134:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42178:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42168:4;42173:1;42168:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;42207:56;42224:4;42239:9;42251:11;42207:8;:56::i;:::-;42302:9;:60;;;42377:11;42403:1;42447:4;42474;42494:15;42302:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42012:516;41957:571;:::o;16602:770::-;16760:1;16742:20;;:6;:20;;;16734:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16844:1;16823:23;;:9;:23;;;16815:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16899:47;16920:6;16928:9;16939:6;16899:20;:47::i;:::-;16959:21;16983:9;:17;16993:6;16983:17;;;;;;;;;;;;;;;;16959:41;;17050:6;17033:13;:23;;17011:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17194:6;17178:13;:22;17158:9;:17;17168:6;17158:17;;;;;;;;;;;;;;;:42;;;;17246:6;17222:9;:20;17232:9;17222:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17287:9;17270:35;;17279:6;17270:35;;;17298:6;17270:35;;;;;;:::i;:::-;;;;;;;;17318:46;17338:6;17346:9;17357:6;17318:19;:46::i;:::-;16723:649;16602:770;;;:::o;42913:649::-;42966:23;42992:24;43010:4;42992:9;:24::i;:::-;42966:50;;43027:12;43075:1;43056:15;:20;43052:59;;43093:7;;;;43052:59;43145:16;;43127:15;:34;43123:101;;;43196:16;;43178:34;;43123:101;43240:4;;;;;;;;;;;:37;;;;;43275:2;43266:6;:11;;;;:::i;:::-;43248:15;:29;43240:37;43236:99;;;43321:2;43312:6;:11;;;;:::i;:::-;43294:29;;43236:99;43347:26;43376:15;43347:44;;43404:36;43421:18;43404:16;:36::i;:::-;43475:15;;;;;;;;;;;43467:29;;43518:21;43467:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43453:101;;;;;42955:607;;;42913:649;;:::o;3374:98::-;3432:7;3463:1;3459;:5;;;;:::i;:::-;3452:12;;3374:98;;;;:::o;3773:::-;3831:7;3862:1;3858;:5;;;;:::i;:::-;3851:12;;3773:98;;;;:::o;20400:125::-;;;;:::o;21129:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:90;368:7;411:5;404:13;397:21;386:32;;334:90;;;:::o;430:116::-;500:21;515:5;500:21;:::i;:::-;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:133::-;595:5;633:6;620:20;611:29;;649:30;673:5;649:30;:::i;:::-;552:133;;;;:::o;691:323::-;747:6;796:2;784:9;775:7;771:23;767:32;764:119;;;802:79;;:::i;:::-;764:119;922:1;947:50;989:7;980:6;969:9;965:22;947:50;:::i;:::-;937:60;;893:114;691:323;;;;:::o;1020:109::-;1101:21;1116:5;1101:21;:::i;:::-;1096:3;1089:34;1020:109;;:::o;1135:77::-;1172:7;1201:5;1190:16;;1135:77;;;:::o;1218:118::-;1305:24;1323:5;1305:24;:::i;:::-;1300:3;1293:37;1218:118;;:::o;1342:430::-;1485:4;1523:2;1512:9;1508:18;1500:26;;1536:65;1598:1;1587:9;1583:17;1574:6;1536:65;:::i;:::-;1611:72;1679:2;1668:9;1664:18;1655:6;1611:72;:::i;:::-;1693;1761:2;1750:9;1746:18;1737:6;1693:72;:::i;:::-;1342:430;;;;;;:::o;1778:99::-;1830:6;1864:5;1858:12;1848:22;;1778:99;;;:::o;1883:169::-;1967:11;2001:6;1996:3;1989:19;2041:4;2036:3;2032:14;2017:29;;1883:169;;;;:::o;2058:246::-;2139:1;2149:113;2163:6;2160:1;2157:13;2149:113;;;2248:1;2243:3;2239:11;2233:18;2229:1;2224:3;2220:11;2213:39;2185:2;2182:1;2178:10;2173:15;;2149:113;;;2296:1;2287:6;2282:3;2278:16;2271:27;2120:184;2058:246;;;:::o;2310:102::-;2351:6;2402:2;2398:7;2393:2;2386:5;2382:14;2378:28;2368:38;;2310:102;;;:::o;2418:377::-;2506:3;2534:39;2567:5;2534:39;:::i;:::-;2589:71;2653:6;2648:3;2589:71;:::i;:::-;2582:78;;2669:65;2727:6;2722:3;2715:4;2708:5;2704:16;2669:65;:::i;:::-;2759:29;2781:6;2759:29;:::i;:::-;2754:3;2750:39;2743:46;;2510:285;2418:377;;;;:::o;2801:313::-;2914:4;2952:2;2941:9;2937:18;2929:26;;3001:9;2995:4;2991:20;2987:1;2976:9;2972:17;2965:47;3029:78;3102:4;3093:6;3029:78;:::i;:::-;3021:86;;2801:313;;;;:::o;3120:126::-;3157:7;3197:42;3190:5;3186:54;3175:65;;3120:126;;;:::o;3252:96::-;3289:7;3318:24;3336:5;3318:24;:::i;:::-;3307:35;;3252:96;;;:::o;3354:122::-;3427:24;3445:5;3427:24;:::i;:::-;3420:5;3417:35;3407:63;;3466:1;3463;3456:12;3407:63;3354:122;:::o;3482:139::-;3528:5;3566:6;3553:20;3544:29;;3582:33;3609:5;3582:33;:::i;:::-;3482:139;;;;:::o;3627:122::-;3700:24;3718:5;3700:24;:::i;:::-;3693:5;3690:35;3680:63;;3739:1;3736;3729:12;3680:63;3627:122;:::o;3755:139::-;3801:5;3839:6;3826:20;3817:29;;3855:33;3882:5;3855:33;:::i;:::-;3755:139;;;;:::o;3900:474::-;3968:6;3976;4025:2;4013:9;4004:7;4000:23;3996:32;3993:119;;;4031:79;;:::i;:::-;3993:119;4151:1;4176:53;4221:7;4212:6;4201:9;4197:22;4176:53;:::i;:::-;4166:63;;4122:117;4278:2;4304:53;4349:7;4340:6;4329:9;4325:22;4304:53;:::i;:::-;4294:63;;4249:118;3900:474;;;;;:::o;4380:210::-;4467:4;4505:2;4494:9;4490:18;4482:26;;4518:65;4580:1;4569:9;4565:17;4556:6;4518:65;:::i;:::-;4380:210;;;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:406::-;5290:4;5328:2;5317:9;5313:18;5305:26;;5341:65;5403:1;5392:9;5388:17;5379:6;5341:65;:::i;:::-;5416:66;5478:2;5467:9;5463:18;5454:6;5416:66;:::i;:::-;5492;5554:2;5543:9;5539:18;5530:6;5492:66;:::i;:::-;5159:406;;;;;;:::o;5571:619::-;5648:6;5656;5664;5713:2;5701:9;5692:7;5688:23;5684:32;5681:119;;;5719:79;;:::i;:::-;5681:119;5839:1;5864:53;5909:7;5900:6;5889:9;5885:22;5864:53;:::i;:::-;5854:63;;5810:117;5966:2;5992:53;6037:7;6028:6;6017:9;6013:22;5992:53;:::i;:::-;5982:63;;5937:118;6094:2;6120:53;6165:7;6156:6;6145:9;6141:22;6120:53;:::i;:::-;6110:63;;6065:118;5571:619;;;;;:::o;6196:118::-;6283:24;6301:5;6283:24;:::i;:::-;6278:3;6271:37;6196:118;;:::o;6320:222::-;6413:4;6451:2;6440:9;6436:18;6428:26;;6464:71;6532:1;6521:9;6517:17;6508:6;6464:71;:::i;:::-;6320:222;;;;:::o;6548:86::-;6583:7;6623:4;6616:5;6612:16;6601:27;;6548:86;;;:::o;6640:112::-;6723:22;6739:5;6723:22;:::i;:::-;6718:3;6711:35;6640:112;;:::o;6758:214::-;6847:4;6885:2;6874:9;6870:18;6862:26;;6898:67;6962:1;6951:9;6947:17;6938:6;6898:67;:::i;:::-;6758:214;;;;:::o;6978:329::-;7037:6;7086:2;7074:9;7065:7;7061:23;7057:32;7054:119;;;7092:79;;:::i;:::-;7054:119;7212:1;7237:53;7282:7;7273:6;7262:9;7258:22;7237:53;:::i;:::-;7227:63;;7183:117;6978:329;;;;:::o;7313:468::-;7378:6;7386;7435:2;7423:9;7414:7;7410:23;7406:32;7403:119;;;7441:79;;:::i;:::-;7403:119;7561:1;7586:53;7631:7;7622:6;7611:9;7607:22;7586:53;:::i;:::-;7576:63;;7532:117;7688:2;7714:50;7756:7;7747:6;7736:9;7732:22;7714:50;:::i;:::-;7704:60;;7659:115;7313:468;;;;;:::o;7787:613::-;7861:6;7869;7877;7926:2;7914:9;7905:7;7901:23;7897:32;7894:119;;;7932:79;;:::i;:::-;7894:119;8052:1;8077:50;8119:7;8110:6;8099:9;8095:22;8077:50;:::i;:::-;8067:60;;8023:114;8176:2;8202:53;8247:7;8238:6;8227:9;8223:22;8202:53;:::i;:::-;8192:63;;8147:118;8304:2;8330:53;8375:7;8366:6;8355:9;8351:22;8330:53;:::i;:::-;8320:63;;8275:118;7787:613;;;;;:::o;8406:442::-;8555:4;8593:2;8582:9;8578:18;8570:26;;8606:71;8674:1;8663:9;8659:17;8650:6;8606:71;:::i;:::-;8687:72;8755:2;8744:9;8740:18;8731:6;8687:72;:::i;:::-;8769;8837:2;8826:9;8822:18;8813:6;8769:72;:::i;:::-;8406:442;;;;;;:::o;8854:474::-;8922:6;8930;8979:2;8967:9;8958:7;8954:23;8950:32;8947:119;;;8985:79;;:::i;:::-;8947:119;9105:1;9130:53;9175:7;9166:6;9155:9;9151:22;9130:53;:::i;:::-;9120:63;;9076:117;9232:2;9258:53;9303:7;9294:6;9283:9;9279:22;9258:53;:::i;:::-;9248:63;;9203:118;8854:474;;;;;:::o;9334:182::-;9474:34;9470:1;9462:6;9458:14;9451:58;9334:182;:::o;9522:366::-;9664:3;9685:67;9749:2;9744:3;9685:67;:::i;:::-;9678:74;;9761:93;9850:3;9761:93;:::i;:::-;9879:2;9874:3;9870:12;9863:19;;9522:366;;;:::o;9894:419::-;10060:4;10098:2;10087:9;10083:18;10075:26;;10147:9;10141:4;10137:20;10133:1;10122:9;10118:17;10111:47;10175:131;10301:4;10175:131;:::i;:::-;10167:139;;9894:419;;;:::o;10319:180::-;10367:77;10364:1;10357:88;10464:4;10461:1;10454:15;10488:4;10485:1;10478:15;10505:320;10549:6;10586:1;10580:4;10576:12;10566:22;;10633:1;10627:4;10623:12;10654:18;10644:81;;10710:4;10702:6;10698:17;10688:27;;10644:81;10772:2;10764:6;10761:14;10741:18;10738:38;10735:84;;10791:18;;:::i;:::-;10735:84;10556:269;10505:320;;;:::o;10831:227::-;10971:34;10967:1;10959:6;10955:14;10948:58;11040:10;11035:2;11027:6;11023:15;11016:35;10831:227;:::o;11064:366::-;11206:3;11227:67;11291:2;11286:3;11227:67;:::i;:::-;11220:74;;11303:93;11392:3;11303:93;:::i;:::-;11421:2;11416:3;11412:12;11405:19;;11064:366;;;:::o;11436:419::-;11602:4;11640:2;11629:9;11625:18;11617:26;;11689:9;11683:4;11679:20;11675:1;11664:9;11660:17;11653:47;11717:131;11843:4;11717:131;:::i;:::-;11709:139;;11436:419;;;:::o;11861:180::-;11909:77;11906:1;11899:88;12006:4;12003:1;11996:15;12030:4;12027:1;12020:15;12047:191;12087:3;12106:20;12124:1;12106:20;:::i;:::-;12101:25;;12140:20;12158:1;12140:20;:::i;:::-;12135:25;;12183:1;12180;12176:9;12169:16;;12204:3;12201:1;12198:10;12195:36;;;12211:18;;:::i;:::-;12195:36;12047:191;;;;:::o;12244:232::-;12384:34;12380:1;12372:6;12368:14;12361:58;12453:15;12448:2;12440:6;12436:15;12429:40;12244:232;:::o;12482:366::-;12624:3;12645:67;12709:2;12704:3;12645:67;:::i;:::-;12638:74;;12721:93;12810:3;12721:93;:::i;:::-;12839:2;12834:3;12830:12;12823:19;;12482:366;;;:::o;12854:419::-;13020:4;13058:2;13047:9;13043:18;13035:26;;13107:9;13101:4;13097:20;13093:1;13082:9;13078:17;13071:47;13135:131;13261:4;13135:131;:::i;:::-;13127:139;;12854:419;;;:::o;13279:239::-;13419:34;13415:1;13407:6;13403:14;13396:58;13488:22;13483:2;13475:6;13471:15;13464:47;13279:239;:::o;13524:366::-;13666:3;13687:67;13751:2;13746:3;13687:67;:::i;:::-;13680:74;;13763:93;13852:3;13763:93;:::i;:::-;13881:2;13876:3;13872:12;13865:19;;13524:366;;;:::o;13896:419::-;14062:4;14100:2;14089:9;14085:18;14077:26;;14149:9;14143:4;14139:20;14135:1;14124:9;14120:17;14113:47;14177:131;14303:4;14177:131;:::i;:::-;14169:139;;13896:419;;;:::o;14321:229::-;14461:34;14457:1;14449:6;14445:14;14438:58;14530:12;14525:2;14517:6;14513:15;14506:37;14321:229;:::o;14556:366::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:419::-;15094:4;15132:2;15121:9;15117:18;15109:26;;15181:9;15175:4;15171:20;15167:1;15156:9;15152:17;15145:47;15209:131;15335:4;15209:131;:::i;:::-;15201:139;;14928:419;;;:::o;15353:410::-;15393:7;15416:20;15434:1;15416:20;:::i;:::-;15411:25;;15450:20;15468:1;15450:20;:::i;:::-;15445:25;;15505:1;15502;15498:9;15527:30;15545:11;15527:30;:::i;:::-;15516:41;;15706:1;15697:7;15693:15;15690:1;15687:22;15667:1;15660:9;15640:83;15617:139;;15736:18;;:::i;:::-;15617:139;15401:362;15353:410;;;;:::o;15769:180::-;15817:77;15814:1;15807:88;15914:4;15911:1;15904:15;15938:4;15935:1;15928:15;15955:185;15995:1;16012:20;16030:1;16012:20;:::i;:::-;16007:25;;16046:20;16064:1;16046:20;:::i;:::-;16041:25;;16085:1;16075:35;;16090:18;;:::i;:::-;16075:35;16132:1;16129;16125:9;16120:14;;15955:185;;;;:::o;16146:224::-;16286:34;16282:1;16274:6;16270:14;16263:58;16355:7;16350:2;16342:6;16338:15;16331:32;16146:224;:::o;16376:366::-;16518:3;16539:67;16603:2;16598:3;16539:67;:::i;:::-;16532:74;;16615:93;16704:3;16615:93;:::i;:::-;16733:2;16728:3;16724:12;16717:19;;16376:366;;;:::o;16748:419::-;16914:4;16952:2;16941:9;16937:18;16929:26;;17001:9;16995:4;16991:20;16987:1;16976:9;16972:17;16965:47;17029:131;17155:4;17029:131;:::i;:::-;17021:139;;16748:419;;;:::o;17173:223::-;17313:34;17309:1;17301:6;17297:14;17290:58;17382:6;17377:2;17369:6;17365:15;17358:31;17173:223;:::o;17402:366::-;17544:3;17565:67;17629:2;17624:3;17565:67;:::i;:::-;17558:74;;17641:93;17730:3;17641:93;:::i;:::-;17759:2;17754:3;17750:12;17743:19;;17402:366;;;:::o;17774:419::-;17940:4;17978:2;17967:9;17963:18;17955:26;;18027:9;18021:4;18017:20;18013:1;18002:9;17998:17;17991:47;18055:131;18181:4;18055:131;:::i;:::-;18047:139;;17774:419;;;:::o;18199:228::-;18339:34;18335:1;18327:6;18323:14;18316:58;18408:11;18403:2;18395:6;18391:15;18384:36;18199:228;:::o;18433:366::-;18575:3;18596:67;18660:2;18655:3;18596:67;:::i;:::-;18589:74;;18672:93;18761:3;18672:93;:::i;:::-;18790:2;18785:3;18781:12;18774:19;;18433:366;;;:::o;18805:419::-;18971:4;19009:2;18998:9;18994:18;18986:26;;19058:9;19052:4;19048:20;19044:1;19033:9;19029:17;19022:47;19086:131;19212:4;19086:131;:::i;:::-;19078:139;;18805:419;;;:::o;19230:231::-;19370:34;19366:1;19358:6;19354:14;19347:58;19439:14;19434:2;19426:6;19422:15;19415:39;19230:231;:::o;19467:366::-;19609:3;19630:67;19694:2;19689:3;19630:67;:::i;:::-;19623:74;;19706:93;19795:3;19706:93;:::i;:::-;19824:2;19819:3;19815:12;19808:19;;19467:366;;;:::o;19839:419::-;20005:4;20043:2;20032:9;20028:18;20020:26;;20092:9;20086:4;20082:20;20078:1;20067:9;20063:17;20056:47;20120:131;20246:4;20120:131;:::i;:::-;20112:139;;19839:419;;;:::o;20264:227::-;20404:34;20400:1;20392:6;20388:14;20381:58;20473:10;20468:2;20460:6;20456:15;20449:35;20264:227;:::o;20497:366::-;20639:3;20660:67;20724:2;20719:3;20660:67;:::i;:::-;20653:74;;20736:93;20825:3;20736:93;:::i;:::-;20854:2;20849:3;20845:12;20838:19;;20497:366;;;:::o;20869:419::-;21035:4;21073:2;21062:9;21058:18;21050:26;;21122:9;21116:4;21112:20;21108:1;21097:9;21093:17;21086:47;21150:131;21276:4;21150:131;:::i;:::-;21142:139;;20869:419;;;:::o;21294:225::-;21434:34;21430:1;21422:6;21418:14;21411:58;21503:8;21498:2;21490:6;21486:15;21479:33;21294:225;:::o;21525:366::-;21667:3;21688:67;21752:2;21747:3;21688:67;:::i;:::-;21681:74;;21764:93;21853:3;21764:93;:::i;:::-;21882:2;21877:3;21873:12;21866:19;;21525:366;;;:::o;21897:419::-;22063:4;22101:2;22090:9;22086:18;22078:26;;22150:9;22144:4;22140:20;22136:1;22125:9;22121:17;22114:47;22178:131;22304:4;22178:131;:::i;:::-;22170:139;;21897:419;;;:::o;22322:182::-;22462:34;22458:1;22450:6;22446:14;22439:58;22322:182;:::o;22510:366::-;22652:3;22673:67;22737:2;22732:3;22673:67;:::i;:::-;22666:74;;22749:93;22838:3;22749:93;:::i;:::-;22867:2;22862:3;22858:12;22851:19;;22510:366;;;:::o;22882:419::-;23048:4;23086:2;23075:9;23071:18;23063:26;;23135:9;23129:4;23125:20;23121:1;23110:9;23106:17;23099:47;23163:131;23289:4;23163:131;:::i;:::-;23155:139;;22882:419;;;:::o;23307:223::-;23447:34;23443:1;23435:6;23431:14;23424:58;23516:6;23511:2;23503:6;23499:15;23492:31;23307:223;:::o;23536:366::-;23678:3;23699:67;23763:2;23758:3;23699:67;:::i;:::-;23692:74;;23775:93;23864:3;23775:93;:::i;:::-;23893:2;23888:3;23884:12;23877:19;;23536:366;;;:::o;23908:419::-;24074:4;24112:2;24101:9;24097:18;24089:26;;24161:9;24155:4;24151:20;24147:1;24136:9;24132:17;24125:47;24189:131;24315:4;24189:131;:::i;:::-;24181:139;;23908:419;;;:::o;24333:221::-;24473:34;24469:1;24461:6;24457:14;24450:58;24542:4;24537:2;24529:6;24525:15;24518:29;24333:221;:::o;24560:366::-;24702:3;24723:67;24787:2;24782:3;24723:67;:::i;:::-;24716:74;;24799:93;24888:3;24799:93;:::i;:::-;24917:2;24912:3;24908:12;24901:19;;24560:366;;;:::o;24932:419::-;25098:4;25136:2;25125:9;25121:18;25113:26;;25185:9;25179:4;25175:20;25171:1;25160:9;25156:17;25149:47;25213:131;25339:4;25213:131;:::i;:::-;25205:139;;24932:419;;;:::o;25357:224::-;25497:34;25493:1;25485:6;25481:14;25474:58;25566:7;25561:2;25553:6;25549:15;25542:32;25357:224;:::o;25587:366::-;25729:3;25750:67;25814:2;25809:3;25750:67;:::i;:::-;25743:74;;25826:93;25915:3;25826:93;:::i;:::-;25944:2;25939:3;25935:12;25928:19;;25587:366;;;:::o;25959:419::-;26125:4;26163:2;26152:9;26148:18;26140:26;;26212:9;26206:4;26202:20;26198:1;26187:9;26183:17;26176:47;26240:131;26366:4;26240:131;:::i;:::-;26232:139;;25959:419;;;:::o;26384:222::-;26524:34;26520:1;26512:6;26508:14;26501:58;26593:5;26588:2;26580:6;26576:15;26569:30;26384:222;:::o;26612:366::-;26754:3;26775:67;26839:2;26834:3;26775:67;:::i;:::-;26768:74;;26851:93;26940:3;26851:93;:::i;:::-;26969:2;26964:3;26960:12;26953:19;;26612:366;;;:::o;26984:419::-;27150:4;27188:2;27177:9;27173:18;27165:26;;27237:9;27231:4;27227:20;27223:1;27212:9;27208:17;27201:47;27265:131;27391:4;27265:131;:::i;:::-;27257:139;;26984:419;;;:::o;27409:221::-;27549:34;27545:1;27537:6;27533:14;27526:58;27618:4;27613:2;27605:6;27601:15;27594:29;27409:221;:::o;27636:366::-;27778:3;27799:67;27863:2;27858:3;27799:67;:::i;:::-;27792:74;;27875:93;27964:3;27875:93;:::i;:::-;27993:2;27988:3;27984:12;27977:19;;27636:366;;;:::o;28008:419::-;28174:4;28212:2;28201:9;28197:18;28189:26;;28261:9;28255:4;28251:20;28247:1;28236:9;28232:17;28225:47;28289:131;28415:4;28289:131;:::i;:::-;28281:139;;28008:419;;;:::o;28433:225::-;28573:34;28569:1;28561:6;28557:14;28550:58;28642:8;28637:2;28629:6;28625:15;28618:33;28433:225;:::o;28664:366::-;28806:3;28827:67;28891:2;28886:3;28827:67;:::i;:::-;28820:74;;28903:93;28992:3;28903:93;:::i;:::-;29021:2;29016:3;29012:12;29005:19;;28664:366;;;:::o;29036:419::-;29202:4;29240:2;29229:9;29225:18;29217:26;;29289:9;29283:4;29279:20;29275:1;29264:9;29260:17;29253:47;29317:131;29443:4;29317:131;:::i;:::-;29309:139;;29036:419;;;:::o;29461:169::-;29601:21;29597:1;29589:6;29585:14;29578:45;29461:169;:::o;29636:366::-;29778:3;29799:67;29863:2;29858:3;29799:67;:::i;:::-;29792:74;;29875:93;29964:3;29875:93;:::i;:::-;29993:2;29988:3;29984:12;29977:19;;29636:366;;;:::o;30008:419::-;30174:4;30212:2;30201:9;30197:18;30189:26;;30261:9;30255:4;30251:20;30247:1;30236:9;30232:17;30225:47;30289:131;30415:4;30289:131;:::i;:::-;30281:139;;30008:419;;;:::o;30433:226::-;30573:34;30569:1;30561:6;30557:14;30550:58;30642:9;30637:2;30629:6;30625:15;30618:34;30433:226;:::o;30665:366::-;30807:3;30828:67;30892:2;30887:3;30828:67;:::i;:::-;30821:74;;30904:93;30993:3;30904:93;:::i;:::-;31022:2;31017:3;31013:12;31006:19;;30665:366;;;:::o;31037:419::-;31203:4;31241:2;31230:9;31226:18;31218:26;;31290:9;31284:4;31280:20;31276:1;31265:9;31261:17;31254:47;31318:131;31444:4;31318:131;:::i;:::-;31310:139;;31037:419;;;:::o;31462:194::-;31502:4;31522:20;31540:1;31522:20;:::i;:::-;31517:25;;31556:20;31574:1;31556:20;:::i;:::-;31551:25;;31600:1;31597;31593:9;31585:17;;31624:1;31618:4;31615:11;31612:37;;;31629:18;;:::i;:::-;31612:37;31462:194;;;;:::o;31662:180::-;31710:77;31707:1;31700:88;31807:4;31804:1;31797:15;31831:4;31828:1;31821:15;31848:180;31896:77;31893:1;31886:88;31993:4;31990:1;31983:15;32017:4;32014:1;32007:15;32034:143;32091:5;32122:6;32116:13;32107:22;;32138:33;32165:5;32138:33;:::i;:::-;32034:143;;;;:::o;32183:351::-;32253:6;32302:2;32290:9;32281:7;32277:23;32273:32;32270:119;;;32308:79;;:::i;:::-;32270:119;32428:1;32453:64;32509:7;32500:6;32489:9;32485:22;32453:64;:::i;:::-;32443:74;;32399:128;32183:351;;;;:::o;32540:85::-;32585:7;32614:5;32603:16;;32540:85;;;:::o;32631:60::-;32659:3;32680:5;32673:12;;32631:60;;;:::o;32697:158::-;32755:9;32788:61;32806:42;32815:32;32841:5;32815:32;:::i;:::-;32806:42;:::i;:::-;32788:61;:::i;:::-;32775:74;;32697:158;;;:::o;32861:147::-;32956:45;32995:5;32956:45;:::i;:::-;32951:3;32944:58;32861:147;;:::o;33014:114::-;33081:6;33115:5;33109:12;33099:22;;33014:114;;;:::o;33134:184::-;33233:11;33267:6;33262:3;33255:19;33307:4;33302:3;33298:14;33283:29;;33134:184;;;;:::o;33324:132::-;33391:4;33414:3;33406:11;;33444:4;33439:3;33435:14;33427:22;;33324:132;;;:::o;33462:108::-;33539:24;33557:5;33539:24;:::i;:::-;33534:3;33527:37;33462:108;;:::o;33576:179::-;33645:10;33666:46;33708:3;33700:6;33666:46;:::i;:::-;33744:4;33739:3;33735:14;33721:28;;33576:179;;;;:::o;33761:113::-;33831:4;33863;33858:3;33854:14;33846:22;;33761:113;;;:::o;33910:732::-;34029:3;34058:54;34106:5;34058:54;:::i;:::-;34128:86;34207:6;34202:3;34128:86;:::i;:::-;34121:93;;34238:56;34288:5;34238:56;:::i;:::-;34317:7;34348:1;34333:284;34358:6;34355:1;34352:13;34333:284;;;34434:6;34428:13;34461:63;34520:3;34505:13;34461:63;:::i;:::-;34454:70;;34547:60;34600:6;34547:60;:::i;:::-;34537:70;;34393:224;34380:1;34377;34373:9;34368:14;;34333:284;;;34337:14;34633:3;34626:10;;34034:608;;;33910:732;;;;:::o;34648:831::-;34911:4;34949:3;34938:9;34934:19;34926:27;;34963:71;35031:1;35020:9;35016:17;35007:6;34963:71;:::i;:::-;35044:80;35120:2;35109:9;35105:18;35096:6;35044:80;:::i;:::-;35171:9;35165:4;35161:20;35156:2;35145:9;35141:18;35134:48;35199:108;35302:4;35293:6;35199:108;:::i;:::-;35191:116;;35317:72;35385:2;35374:9;35370:18;35361:6;35317:72;:::i;:::-;35399:73;35467:3;35456:9;35452:19;35443:6;35399:73;:::i;:::-;34648:831;;;;;;;;:::o;35485:225::-;35625:34;35621:1;35613:6;35609:14;35602:58;35694:8;35689:2;35681:6;35677:15;35670:33;35485:225;:::o;35716:366::-;35858:3;35879:67;35943:2;35938:3;35879:67;:::i;:::-;35872:74;;35955:93;36044:3;35955:93;:::i;:::-;36073:2;36068:3;36064:12;36057:19;;35716:366;;;:::o;36088:419::-;36254:4;36292:2;36281:9;36277:18;36269:26;;36341:9;36335:4;36331:20;36327:1;36316:9;36312:17;36305:47;36369:131;36495:4;36369:131;:::i;:::-;36361:139;;36088:419;;;:::o;36513:147::-;36614:11;36651:3;36636:18;;36513:147;;;;:::o;36666:114::-;;:::o;36786:398::-;36945:3;36966:83;37047:1;37042:3;36966:83;:::i;:::-;36959:90;;37058:93;37147:3;37058:93;:::i;:::-;37176:1;37171:3;37167:11;37160:18;;36786:398;;;:::o;37190:379::-;37374:3;37396:147;37539:3;37396:147;:::i;:::-;37389:154;;37560:3;37553:10;;37190:379;;;:::o
Swarm Source
ipfs://a31ee572fb78d386c9c6ac4dd770f1dea6616f032a97a219e8890361581ebb75
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 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.