ERC-20
Overview
Max Total Supply
1,000,000,000 $DCAT
Holders
12
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DarkCat
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-07-23 */ 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 DarkCat is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTaxTotal; uint256 private buyMarketingTax; uint256 private buyProjectTax; uint256 private sellTaxTotal; uint256 private sellMarketingTax; uint256 private sellProjectTax; uint256 private transferTaxTotal; uint256 private transferMarketingTax; uint256 private transferProjectTax; uint256 private tokensForMarketing; uint256 private tokensForProject; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetDexPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Dark Cat", "$DCAT") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); tLimitsExempt(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); tLimitsExempt(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 _buyMarketingTax = 20; uint256 _buyProjectTax = 0; uint256 _sellMarketingTax = 30; uint256 _sellProjectTax = 0; uint256 _transferMarketingTax = 0; uint256 _transferProjectTax = 0; uint256 _totalSupply = 1_000_000_000 * 10 ** decimals(); maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyMarketingTax = _buyMarketingTax; buyProjectTax = _buyProjectTax; buyTaxTotal = buyMarketingTax + buyProjectTax; sellMarketingTax = _sellMarketingTax; sellProjectTax = _sellProjectTax; sellTaxTotal = sellMarketingTax + sellProjectTax; transferMarketingTax = _transferMarketingTax; transferProjectTax = _transferProjectTax; transferTaxTotal = transferMarketingTax + transferProjectTax; marketingWallet = address(0xEdAe5f2CD05b1427850F34632DCD3fA156c76958); projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount tTaxesExempt(msg.sender, true); tTaxesExempt(address(this), true); tTaxesExempt(address(0xdead), true); tTaxesExempt(marketingWallet, true); tLimitsExempt(msg.sender, true); tLimitsExempt(address(this), true); tLimitsExempt(address(0xdead), true); tLimitsExempt(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 removeTLimits() external onlyOwner { limitsEnabled = false; transferMarketingTax = 0; transferProjectTax = 0; 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 _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function setMMEnbledSB( bool _enable, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newMaxTxLimit Base 1000, so 1% = 10 */ function mxTLimitA( uint256 newMaxTxLimit ) external onlyOwner { require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newMaxTxLimit * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newMaxWalletLimit Base 1000, so 1% = 10 */ function mxWLimitA( uint256 newMaxWalletLimit ) external onlyOwner { require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newMaxWalletLimit * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function tLimitsExempt( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feBuyAS( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { buyMarketingTax = _marketingFee; buyProjectTax = _devFee; buyTaxTotal = buyMarketingTax + buyProjectTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feSellAS( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { sellMarketingTax = _marketingFee; sellProjectTax = _devFee; sellTaxTotal = sellMarketingTax + sellProjectTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax); } function feesTAS( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { transferMarketingTax = _marketingFee; transferProjectTax = _devFee; transferTaxTotal = transferMarketingTax + transferProjectTax; 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 account The wallet to update * @param excluded If the wallet is excluded or not */ function tTaxesExempt( address account, bool excluded ) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetDexPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setDexPair(address pair, bool value) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setDexPair(pair, value); } function _setDexPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetDexPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newMktWal The new marketing wallet */ function mkWAS(address newMktWal) external onlyOwner { emit MarketingWalletUpdated(newMktWal, marketingWallet); marketingWallet = newMktWal; } /** * @notice Sets the project wallet * @dev onlyOwner. * Emits an {ProjectWalletUpdated} event * @param newDevWal The new dev wallet */ function dWAs(address newDevWal) external onlyOwner { emit ProjectWalletUpdated(newDevWal, projectWallet); projectWallet = newDevWal; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function sbInf() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _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 lmtInf() 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 * @return _projectWallet The wallet that receives the dev fees */ function recInf() external view returns (address _marketingWallet, address _projectWallet) { return (marketingWallet, projectWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _buyMarketingTax The fee for buys that gets sent to marketing * @return _buyProjectTax The fee for buys that gets sent to dev * @return _sellTaxTotal The total fee for sells * @return _sellMarketingTax The fee for sells that gets sent to marketing * @return _sellProjectTax The fee for sells that gets sent to dev */ function taxesInf() external view returns ( uint256 _buyTaxTotal, uint256 _buyMarketingTax, uint256 _buyProjectTax, uint256 _sellTaxTotal, uint256 _sellMarketingTax, uint256 _sellProjectTax ) { _buyTaxTotal = buyTaxTotal; _buyMarketingTax = buyMarketingTax; _buyProjectTax = buyProjectTax; _sellTaxTotal = sellTaxTotal; _sellMarketingTax = sellMarketingTax; _sellProjectTax = sellProjectTax; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function mappngsInf( 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] ) { swapping = true; swapBack(amount); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); tokensForProject += (fees * sellProjectTax) / sellTaxTotal; tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal; } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); tokensForProject += (fees * buyProjectTax) / buyTaxTotal; tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal; } // on transfers else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { fees = amount.mul(transferTaxTotal).div(100); tokensForProject += (fees * transferProjectTax) / transferTaxTotal; tokensForMarketing += (fees * transferMarketingTax) / transferTaxTotal; } 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 ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 5) { contractBalance = amount * 5; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForProject).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForProject = 0; (success, ) = address(projectWallet).call{value: ethForDev}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWal","type":"address"}],"name":"dWAs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feBuyAS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feSellAS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesTAS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lmtInf","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":"address","name":"_target","type":"address"}],"name":"mappngsInf","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWal","type":"address"}],"name":"mkWAS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"mxTLimitA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"mxWLimitA","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":"recInf","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sbInf","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMMEnbledSB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"tLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"tTaxesExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxesInf","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f4461726b204361740000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f24444341540000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f65565b5080600490816200010d919062000f65565b50505062000130620001246200063e60201b60201c565b6200064660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200070c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002029190620010b6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002909190620010b6565b6040518363ffffffff1660e01b8152600401620002af929190620010f9565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f59190620010b6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200070c60201b60201c565b6200035260a05160016200084660201b60201c565b600060149050600080601e905060008060008062000375620008e760201b60201c565b600a620003839190620012b6565b633b9aca0062000394919062001307565b90506103e8600a82620003a8919062001307565b620003b4919062001381565b600a819055506103e8600a82620003cc919062001307565b620003d8919062001381565b6009819055506103e8600182620003f0919062001307565b620003fc919062001381565b600681905550606460028262000413919062001307565b6200041f919062001381565b60078190555086600f8190555085601081905550601054600f54620004459190620013b9565b600e8190555084601281905550836013819055506013546012546200046b9190620013b9565b6011819055508260158190555081601681905550601654601554620004919190620013b9565b60148190555073edae5f2cd05b1427850f34632dcd3fa156c76958600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000540336001620008f060201b60201c565b62000553306001620008f060201b60201c565b6200056861dead6001620008f060201b60201c565b6200059d600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008f060201b60201c565b620005b03360016200070c60201b60201c565b620005c33060016200070c60201b60201c565b620005d861dead60016200070c60201b60201c565b6200060d600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070c60201b60201c565b6200061e3362000a2a60201b60201c565b62000630338262000b3f60201b60201c565b5050505050505050620015e9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200071c6200063e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200074262000cb760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200079b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007929062001455565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200083a919062001494565b60405180910390a25050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b60006012905090565b620009006200063e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200092662000cb760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200097f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009769062001455565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a1e919062001494565b60405180910390a25050565b62000a3a6200063e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a6062000cb760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab09062001455565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b229062001527565b60405180910390fd5b62000b3c816200064660201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba89062001599565b60405180910390fd5b62000bc56000838362000ce160201b60201c565b806002600082825462000bd99190620013b9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c309190620013b9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c979190620015cc565b60405180910390a362000cb36000838362000ce660201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d6d57607f821691505b60208210810362000d835762000d8262000d25565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ded7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dae565b62000df9868362000dae565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e4662000e4062000e3a8462000e11565b62000e1b565b62000e11565b9050919050565b6000819050919050565b62000e628362000e25565b62000e7a62000e718262000e4d565b84845462000dbb565b825550505050565b600090565b62000e9162000e82565b62000e9e81848462000e57565b505050565b5b8181101562000ec65762000eba60008262000e87565b60018101905062000ea4565b5050565b601f82111562000f155762000edf8162000d89565b62000eea8462000d9e565b8101602085101562000efa578190505b62000f1262000f098562000d9e565b83018262000ea3565b50505b505050565b600082821c905092915050565b600062000f3a6000198460080262000f1a565b1980831691505092915050565b600062000f55838362000f27565b9150826002028217905092915050565b62000f708262000ceb565b67ffffffffffffffff81111562000f8c5762000f8b62000cf6565b5b62000f98825462000d54565b62000fa582828562000eca565b600060209050601f83116001811462000fdd576000841562000fc8578287015190505b62000fd4858262000f47565b86555062001044565b601f19841662000fed8662000d89565b60005b82811015620010175784890151825560018201915060208501945060208101905062000ff0565b8683101562001037578489015162001033601f89168262000f27565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200107e8262001051565b9050919050565b620010908162001071565b81146200109c57600080fd5b50565b600081519050620010b08162001085565b92915050565b600060208284031215620010cf57620010ce6200104c565b5b6000620010df848285016200109f565b91505092915050565b620010f38162001071565b82525050565b6000604082019050620011106000830185620010e8565b6200111f6020830184620010e8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620011b4578086048111156200118c576200118b62001126565b5b60018516156200119c5780820291505b8081029050620011ac8562001155565b94506200116c565b94509492505050565b600082620011cf5760019050620012a2565b81620011df5760009050620012a2565b8160018114620011f85760028114620012035762001239565b6001915050620012a2565b60ff84111562001218576200121762001126565b5b8360020a91508482111562001232576200123162001126565b5b50620012a2565b5060208310610133831016604e8410600b8410161715620012735782820a9050838111156200126d576200126c62001126565b5b620012a2565b62001282848484600162001162565b925090508184048111156200129c576200129b62001126565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012c38262000e11565b9150620012d083620012a9565b9250620012ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011bd565b905092915050565b6000620013148262000e11565b9150620013218362000e11565b9250828202620013318162000e11565b915082820484148315176200134b576200134a62001126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200138e8262000e11565b91506200139b8362000e11565b925082620013ae57620013ad62001352565b5b828204905092915050565b6000620013c68262000e11565b9150620013d38362000e11565b9250828201905080821115620013ee57620013ed62001126565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200143d602083620013f4565b91506200144a8262001405565b602082019050919050565b6000602082019050818103600083015262001470816200142e565b9050919050565b60008115159050919050565b6200148e8162001477565b82525050565b6000602082019050620014ab600083018462001483565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200150f602683620013f4565b91506200151c82620014b1565b604082019050919050565b60006020820190508181036000830152620015428162001500565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001581601f83620013f4565b91506200158e8262001549565b602082019050919050565b60006020820190508181036000830152620015b48162001572565b9050919050565b620015c68162000e11565b82525050565b6000602082019050620015e36000830184620015bb565b92915050565b60805160a051614b306200162460003960008181611bd70152611c9901526000818161344e0152818161352f01526135560152614b306000f3fe6080604052600436106102085760003560e01c80638da5cb5b11610118578063c4e0303b116100a0578063ea62d9451161006f578063ea62d94514610768578063f242ab4114610795578063f2fde38b146107c0578063f418c881146107e9578063ff2fdda0146108125761020f565b8063c4e0303b146106c2578063c9567bf9146106eb578063dd62ed3e14610702578063e55648f41461073f5761020f565b8063a457c2d7116100e7578063a457c2d7146105d8578063a612dd9714610615578063a9059cbb1461063e578063b0566cbc1461067b578063b42a403b146106ab5761020f565b80638da5cb5b1461053057806390f0b85c1461055b57806395d89b41146105845780639c78d130146105af5761020f565b8063478f5f6e1161019b578063715018a61161016a578063715018a61461046e57806374e5c6f7146104855780637d803e7f146104b15780637ff6f7b9146104de57806384082c90146105075761020f565b8063478f5f6e146103b45780634ada218b146103dd5780635c6d18ab1461040857806370a08231146104315761020f565b806323b872dd116101d757806323b872dd146102d0578063313ce5671461030d57806339509351146103385780633b30551b146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630d0f1b991461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961083b565b6040516102369190613692565b60405180910390f35b34801561024b57600080fd5b506102666004803603810190610261919061374d565b6108cd565b60405161027391906137a8565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906137c3565b6108eb565b005b3480156102b157600080fd5b506102ba610a16565b6040516102c79190613812565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f2919061382d565b610a20565b60405161030491906137a8565b60405180910390f35b34801561031957600080fd5b50610322610b18565b60405161032f919061389c565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a919061374d565b610b21565b60405161036c91906137a8565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906138b7565b610bcd565b6040516103ab939291906138e4565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906137c3565b610cc6565b005b3480156103e957600080fd5b506103f2610df1565b6040516103ff91906137a8565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906138b7565b610e04565b005b34801561043d57600080fd5b50610458600480360381019061045391906138b7565b610f40565b6040516104659190613812565b60405180910390f35b34801561047a57600080fd5b50610483610f88565b005b34801561049157600080fd5b5061049a611010565b6040516104a892919061392a565b60405180910390f35b3480156104bd57600080fd5b506104c6611061565b6040516104d593929190613953565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906139b6565b611087565b005b34801561051357600080fd5b5061052e600480360381019061052991906139e3565b611120565b005b34801561053c57600080fd5b506105456112c9565b6040516105529190613a36565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190613a51565b6112f3565b005b34801561059057600080fd5b50610599611418565b6040516105a69190613692565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d191906137c3565b6114aa565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061374d565b611594565b60405161060c91906137a8565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613a91565b61167f565b005b34801561064a57600080fd5b506106656004803603810190610660919061374d565b6117a1565b60405161067291906137a8565b60405180910390f35b34801561068757600080fd5b506106906117bf565b6040516106a296959493929190613abe565b60405180910390f35b3480156106b757600080fd5b506106c06117ee565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190613a51565b6118cc565b005b3480156106f757600080fd5b506107006119f1565b005b34801561070e57600080fd5b5061072960048036038101906107249190613b1f565b611ad2565b6040516107369190613812565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613a51565b611b59565b005b34801561077457600080fd5b5061077d611c71565b60405161078c93929190613953565b60405180910390f35b3480156107a157600080fd5b506107aa611c97565b6040516107b79190613a36565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906138b7565b611cbb565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613a91565b611db2565b005b34801561081e57600080fd5b50610839600480360381019061083491906138b7565b611ed4565b005b60606003805461084a90613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461087690613b8e565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108e16108da612010565b8484612018565b6001905092915050565b6108f3612010565b73ffffffffffffffffffffffffffffffffffffffff166109116112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90613c0b565b60405180910390fd5b81600f8190555080601081905550601054600f546109859190613c5a565b600e819055506064600e5411156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890613d00565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610a0a93929190613d20565b60405180910390a15050565b6000600254905090565b6000610a2d8484846121e1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a78612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613dc9565b60405180910390fd5b610b0c85610b04612010565b858403612018565b60019150509392505050565b60006012905090565b6000610bc3610b2e612010565b848460016000610b3c612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbe9190613c5a565b612018565b6001905092915050565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610cce612010565b73ffffffffffffffffffffffffffffffffffffffff16610cec6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613c0b565b60405180910390fd5b8160128190555080601381905550601354601254610d609190613c5a565b60118190555060646011541115610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613e5b565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610de593929190613d20565b60405180910390a15050565b600c60009054906101000a900460ff1681565b610e0c612010565b73ffffffffffffffffffffffffffffffffffffffff16610e2a6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613c0b565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f90612010565b73ffffffffffffffffffffffffffffffffffffffff16610fae6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613c0b565b60405180910390fd5b61100e6000612d98565b565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61108f612010565b73ffffffffffffffffffffffffffffffffffffffff166110ad6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90613c0b565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b611128612010565b73ffffffffffffffffffffffffffffffffffffffff166111466112c9565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613c0b565b60405180910390fd5b60018210156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613eed565b60405180910390fd5b81811015611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613f7f565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611249610a16565b6112539190613f9f565b61125d9190614010565b6006819055506127108161126f610a16565b6112799190613f9f565b6112839190614010565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516112bc93929190613953565b60405180910390a1505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112fb612010565b73ffffffffffffffffffffffffffffffffffffffff166113196112c9565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613c0b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161140c91906137a8565b60405180910390a25050565b60606004805461142790613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461145390613b8e565b80156114a05780601f10611475576101008083540402835291602001916114a0565b820191906000526020600020905b81548152906001019060200180831161148357829003601f168201915b5050505050905090565b6114b2612010565b73ffffffffffffffffffffffffffffffffffffffff166114d06112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613c0b565b60405180910390fd5b81601581905550806016819055506016546015546115449190613c5a565b60148190555060646014541115611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906140b3565b60405180910390fd5b5050565b600080600160006115a3612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614145565b60405180910390fd5b61167461166b612010565b85858403612018565b600191505092915050565b611687612010565b73ffffffffffffffffffffffffffffffffffffffff166116a56112c9565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613c0b565b60405180910390fd5b600281101561173f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611736906141b1565b60405180910390fd5b6103e861174a610a16565b826117559190613f9f565b61175f9190614010565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516117969190613812565b60405180910390a150565b60006117b56117ae612010565b84846121e1565b6001905092915050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6117f6612010565b73ffffffffffffffffffffffffffffffffffffffff166118146112c9565b73ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613c0b565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550600060158190555060006016819055506000601481905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6118d4612010565b73ffffffffffffffffffffffffffffffffffffffff166118f26112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613c0b565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516119e591906137a8565b60405180910390a25050565b6119f9612010565b73ffffffffffffffffffffffffffffffffffffffff16611a176112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613c0b565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b61612010565b73ffffffffffffffffffffffffffffffffffffffff16611b7f6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613c0b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90614243565b60405180910390fd5b611c6d8282612e5e565b5050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b7f000000000000000000000000000000000000000000000000000000000000000081565b611cc3612010565b73ffffffffffffffffffffffffffffffffffffffff16611ce16112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90613c0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d906142d5565b60405180910390fd5b611daf81612d98565b50565b611dba612010565b73ffffffffffffffffffffffffffffffffffffffff16611dd86112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c0b565b60405180910390fd5b6005811015611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614367565b60405180910390fd5b6103e8611e7d610a16565b82611e889190613f9f565b611e929190614010565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611ec99190613812565b60405180910390a150565b611edc612010565b73ffffffffffffffffffffffffffffffffffffffff16611efa6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613c0b565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e906143f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061448b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d49190613812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122479061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906145af565b60405180910390fd5b600081036122d8576122d383836000612eff565b612d93565b600860009054906101000a900460ff16156127d3576122f56112c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561236357506123336112c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123ef5750600560149054906101000a900460ff16155b156127d257600c60009054906101000a900460ff166124e957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614641565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263357600a548111156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd906146d3565b60405180910390fd5b6009546125e283610f40565b826125ed9190613c5a565b111561262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126259061473f565b60405180910390fd5b6127d1565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d65750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272557600a54811115612720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612717906147d1565b60405180910390fd5b6127d0565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127cf5760095461278283610f40565b8261278d9190613c5a565b11156127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c59061473f565b60405180910390fd5b5b5b5b5b5b60006127de30610f40565b9050600060065482101590508080156128035750600560159054906101000a900460ff165b801561281c5750600560149054906101000a900460ff16155b80156128725750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291e5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600560146101000a81548160ff0219169083151502179055506129478361317e565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612d8357601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000601154115b15612b2057612ab36064612aa56011548861337990919063ffffffff16565b61338f90919063ffffffff16565b905060115460135482612ac69190613f9f565b612ad09190614010565b60186000828254612ae19190613c5a565b9250508190555060115460125482612af99190613f9f565b612b039190614010565b60176000828254612b149190613c5a565b92505081905550612d5f565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7b57506000600e54115b15612c1557612ba86064612b9a600e548861337990919063ffffffff16565b61338f90919063ffffffff16565b9050600e5460105482612bbb9190613f9f565b612bc59190614010565b60186000828254612bd69190613c5a565b92505081905550600e54600f5482612bee9190613f9f565b612bf89190614010565b60176000828254612c099190613c5a565b92505081905550612d5e565b6000601454118015612c715750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cc75750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5d57612cf46064612ce66014548861337990919063ffffffff16565b61338f90919063ffffffff16565b905060145460165482612d079190613f9f565b612d119190614010565b60186000828254612d229190613c5a565b9250508190555060145460155482612d3a9190613f9f565b612d449190614010565b60176000828254612d559190613c5a565b925050819055505b5b5b6000811115612d7457612d73873083612eff565b5b8085612d8091906147f1565b94505b612d8e878787612eff565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f659061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906145af565b60405180910390fd5b612fe88383836133a5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561306e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306590614897565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131019190613c5a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131659190613812565b60405180910390a36131788484846133aa565b50505050565b600061318930610f40565b9050600081905060008083036131a157505050613376565b6007548311156131b15760075492505b601c60009054906101000a900460ff1680156131d857506005846131d59190613f9f565b83115b156131ed576005846131ea9190613f9f565b92505b60008390506000479050613200826133af565b600061321582476135ec90919063ffffffff16565b90506000613240866132326018548561337990919063ffffffff16565b61338f90919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613298906148e8565b60006040518083038185875af1925050503d80600081146132d5576040519150601f19603f3d011682016040523d82523d6000602084013e6132da565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613326906148e8565b60006040518083038185875af1925050503d8060008114613363576040519150601f19603f3d011682016040523d82523d6000602084013e613368565b606091505b505080955050505050505050505b50565b600081836133879190613f9f565b905092915050565b6000818361339d9190614010565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156133cc576133cb6148fd565b5b6040519080825280602002602001820160405280156133fa5781602001602082028036833780820191505090505b50905030816000815181106134125761341161492c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134db9190614970565b816001815181106134ef576134ee61492c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613554307f000000000000000000000000000000000000000000000000000000000000000084612018565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b6959493929190614aa0565b600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b505050505050565b600081836135fa91906147f1565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561363c578082015181840152602081019050613621565b60008484015250505050565b6000601f19601f8301169050919050565b600061366482613602565b61366e818561360d565b935061367e81856020860161361e565b61368781613648565b840191505092915050565b600060208201905081810360008301526136ac8184613659565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e4826136b9565b9050919050565b6136f4816136d9565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000819050919050565b61372a81613717565b811461373557600080fd5b50565b60008135905061374781613721565b92915050565b60008060408385031215613764576137636136b4565b5b600061377285828601613702565b925050602061378385828601613738565b9150509250929050565b60008115159050919050565b6137a28161378d565b82525050565b60006020820190506137bd6000830184613799565b92915050565b600080604083850312156137da576137d96136b4565b5b60006137e885828601613738565b92505060206137f985828601613738565b9150509250929050565b61380c81613717565b82525050565b60006020820190506138276000830184613803565b92915050565b600080600060608486031215613846576138456136b4565b5b600061385486828701613702565b935050602061386586828701613702565b925050604061387686828701613738565b9150509250925092565b600060ff82169050919050565b61389681613880565b82525050565b60006020820190506138b1600083018461388d565b92915050565b6000602082840312156138cd576138cc6136b4565b5b60006138db84828501613702565b91505092915050565b60006060820190506138f96000830186613799565b6139066020830185613799565b6139136040830184613799565b949350505050565b613924816136d9565b82525050565b600060408201905061393f600083018561391b565b61394c602083018461391b565b9392505050565b60006060820190506139686000830186613799565b6139756020830185613803565b6139826040830184613803565b949350505050565b6139938161378d565b811461399e57600080fd5b50565b6000813590506139b08161398a565b92915050565b6000602082840312156139cc576139cb6136b4565b5b60006139da848285016139a1565b91505092915050565b6000806000606084860312156139fc576139fb6136b4565b5b6000613a0a868287016139a1565b9350506020613a1b86828701613738565b9250506040613a2c86828701613738565b9150509250925092565b6000602082019050613a4b600083018461391b565b92915050565b60008060408385031215613a6857613a676136b4565b5b6000613a7685828601613702565b9250506020613a87858286016139a1565b9150509250929050565b600060208284031215613aa757613aa66136b4565b5b6000613ab584828501613738565b91505092915050565b600060c082019050613ad36000830189613803565b613ae06020830188613803565b613aed6040830187613803565b613afa6060830186613803565b613b076080830185613803565b613b1460a0830184613803565b979650505050505050565b60008060408385031215613b3657613b356136b4565b5b6000613b4485828601613702565b9250506020613b5585828601613702565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ba657607f821691505b602082108103613bb957613bb8613b5f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf560208361360d565b9150613c0082613bbf565b602082019050919050565b60006020820190508181036000830152613c2481613be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c6582613717565b9150613c7083613717565b9250828201905080821115613c8857613c87613c2b565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613cea60288361360d565b9150613cf582613c8e565b604082019050919050565b60006020820190508181036000830152613d1981613cdd565b9050919050565b6000606082019050613d356000830186613803565b613d426020830185613803565b613d4f6040830184613803565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613db360288361360d565b9150613dbe82613d57565b604082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613e4560298361360d565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613ed760348361360d565b9150613ee282613e7b565b604082019050919050565b60006020820190508181036000830152613f0681613eca565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613f69602a8361360d565b9150613f7482613f0d565b604082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b6000613faa82613717565b9150613fb583613717565b9250828202613fc381613717565b91508282048414831517613fda57613fd9613c2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061401b82613717565b915061402683613717565b92508261403657614035613fe1565b5b828204905092915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b600061409d602d8361360d565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061412f60258361360d565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061419b60208361360d565b91506141a682614165565b602082019050919050565b600060208201905081810360008301526141ca8161418e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422d60398361360d565b9150614238826141d1565b604082019050919050565b6000602082019050818103600083015261425c81614220565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142bf60268361360d565b91506142ca82614263565b604082019050919050565b600060208201905081810360008301526142ee816142b2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061435160248361360d565b915061435c826142f5565b604082019050919050565b6000602082019050818103600083015261438081614344565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143e360248361360d565b91506143ee82614387565b604082019050919050565b60006020820190508181036000830152614412816143d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061447560228361360d565b915061448082614419565b604082019050919050565b600060208201905081810360008301526144a481614468565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061450760258361360d565b9150614512826144ab565b604082019050919050565b60006020820190508181036000830152614536816144fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061459960238361360d565b91506145a48261453d565b604082019050919050565b600060208201905081810360008301526145c88161458c565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061462b60228361360d565b9150614636826145cf565b604082019050919050565b6000602082019050818103600083015261465a8161461e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006146bd60268361360d565b91506146c882614661565b604082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061472960138361360d565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006147bb60278361360d565b91506147c68261475f565b604082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b60006147fc82613717565b915061480783613717565b925082820390508181111561481f5761481e613c2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061488160268361360d565b915061488c82614825565b604082019050919050565b600060208201905081810360008301526148b081614874565b9050919050565b600081905092915050565b50565b60006148d26000836148b7565b91506148dd826148c2565b600082019050919050565b60006148f3826148c5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061496a816136eb565b92915050565b600060208284031215614986576149856136b4565b5b60006149948482850161495b565b91505092915050565b6000819050919050565b6000819050919050565b60006149cc6149c76149c28461499d565b6149a7565b613717565b9050919050565b6149dc816149b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a17816136d9565b82525050565b6000614a298383614a0e565b60208301905092915050565b6000602082019050919050565b6000614a4d826149e2565b614a5781856149ed565b9350614a62836149fe565b8060005b83811015614a93578151614a7a8882614a1d565b9750614a8583614a35565b925050600181019050614a66565b5085935050505092915050565b600060a082019050614ab56000830188613803565b614ac260208301876149d3565b8181036040830152614ad48186614a42565b9050614ae3606083018561391b565b614af06080830184613803565b969550505050505056fea264697066735822122092940f4e445b6e53399568c580aff73b5a3693c38c4015f65b75a6d4db10f35264736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102085760003560e01c80638da5cb5b11610118578063c4e0303b116100a0578063ea62d9451161006f578063ea62d94514610768578063f242ab4114610795578063f2fde38b146107c0578063f418c881146107e9578063ff2fdda0146108125761020f565b8063c4e0303b146106c2578063c9567bf9146106eb578063dd62ed3e14610702578063e55648f41461073f5761020f565b8063a457c2d7116100e7578063a457c2d7146105d8578063a612dd9714610615578063a9059cbb1461063e578063b0566cbc1461067b578063b42a403b146106ab5761020f565b80638da5cb5b1461053057806390f0b85c1461055b57806395d89b41146105845780639c78d130146105af5761020f565b8063478f5f6e1161019b578063715018a61161016a578063715018a61461046e57806374e5c6f7146104855780637d803e7f146104b15780637ff6f7b9146104de57806384082c90146105075761020f565b8063478f5f6e146103b45780634ada218b146103dd5780635c6d18ab1461040857806370a08231146104315761020f565b806323b872dd116101d757806323b872dd146102d0578063313ce5671461030d57806339509351146103385780633b30551b146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630d0f1b991461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961083b565b6040516102369190613692565b60405180910390f35b34801561024b57600080fd5b506102666004803603810190610261919061374d565b6108cd565b60405161027391906137a8565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906137c3565b6108eb565b005b3480156102b157600080fd5b506102ba610a16565b6040516102c79190613812565b60405180910390f35b3480156102dc57600080fd5b506102f760048036038101906102f2919061382d565b610a20565b60405161030491906137a8565b60405180910390f35b34801561031957600080fd5b50610322610b18565b60405161032f919061389c565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a919061374d565b610b21565b60405161036c91906137a8565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906138b7565b610bcd565b6040516103ab939291906138e4565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906137c3565b610cc6565b005b3480156103e957600080fd5b506103f2610df1565b6040516103ff91906137a8565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906138b7565b610e04565b005b34801561043d57600080fd5b50610458600480360381019061045391906138b7565b610f40565b6040516104659190613812565b60405180910390f35b34801561047a57600080fd5b50610483610f88565b005b34801561049157600080fd5b5061049a611010565b6040516104a892919061392a565b60405180910390f35b3480156104bd57600080fd5b506104c6611061565b6040516104d593929190613953565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906139b6565b611087565b005b34801561051357600080fd5b5061052e600480360381019061052991906139e3565b611120565b005b34801561053c57600080fd5b506105456112c9565b6040516105529190613a36565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190613a51565b6112f3565b005b34801561059057600080fd5b50610599611418565b6040516105a69190613692565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d191906137c3565b6114aa565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061374d565b611594565b60405161060c91906137a8565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613a91565b61167f565b005b34801561064a57600080fd5b506106656004803603810190610660919061374d565b6117a1565b60405161067291906137a8565b60405180910390f35b34801561068757600080fd5b506106906117bf565b6040516106a296959493929190613abe565b60405180910390f35b3480156106b757600080fd5b506106c06117ee565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190613a51565b6118cc565b005b3480156106f757600080fd5b506107006119f1565b005b34801561070e57600080fd5b5061072960048036038101906107249190613b1f565b611ad2565b6040516107369190613812565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613a51565b611b59565b005b34801561077457600080fd5b5061077d611c71565b60405161078c93929190613953565b60405180910390f35b3480156107a157600080fd5b506107aa611c97565b6040516107b79190613a36565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906138b7565b611cbb565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613a91565b611db2565b005b34801561081e57600080fd5b50610839600480360381019061083491906138b7565b611ed4565b005b60606003805461084a90613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461087690613b8e565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108e16108da612010565b8484612018565b6001905092915050565b6108f3612010565b73ffffffffffffffffffffffffffffffffffffffff166109116112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90613c0b565b60405180910390fd5b81600f8190555080601081905550601054600f546109859190613c5a565b600e819055506064600e5411156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890613d00565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610a0a93929190613d20565b60405180910390a15050565b6000600254905090565b6000610a2d8484846121e1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a78612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613dc9565b60405180910390fd5b610b0c85610b04612010565b858403612018565b60019150509392505050565b60006012905090565b6000610bc3610b2e612010565b848460016000610b3c612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbe9190613c5a565b612018565b6001905092915050565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610cce612010565b73ffffffffffffffffffffffffffffffffffffffff16610cec6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613c0b565b60405180910390fd5b8160128190555080601381905550601354601254610d609190613c5a565b60118190555060646011541115610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613e5b565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610de593929190613d20565b60405180910390a15050565b600c60009054906101000a900460ff1681565b610e0c612010565b73ffffffffffffffffffffffffffffffffffffffff16610e2a6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613c0b565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f90612010565b73ffffffffffffffffffffffffffffffffffffffff16610fae6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613c0b565b60405180910390fd5b61100e6000612d98565b565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b61108f612010565b73ffffffffffffffffffffffffffffffffffffffff166110ad6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90613c0b565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b611128612010565b73ffffffffffffffffffffffffffffffffffffffff166111466112c9565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613c0b565b60405180910390fd5b60018210156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613eed565b60405180910390fd5b81811015611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613f7f565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611249610a16565b6112539190613f9f565b61125d9190614010565b6006819055506127108161126f610a16565b6112799190613f9f565b6112839190614010565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516112bc93929190613953565b60405180910390a1505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112fb612010565b73ffffffffffffffffffffffffffffffffffffffff166113196112c9565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613c0b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161140c91906137a8565b60405180910390a25050565b60606004805461142790613b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461145390613b8e565b80156114a05780601f10611475576101008083540402835291602001916114a0565b820191906000526020600020905b81548152906001019060200180831161148357829003601f168201915b5050505050905090565b6114b2612010565b73ffffffffffffffffffffffffffffffffffffffff166114d06112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613c0b565b60405180910390fd5b81601581905550806016819055506016546015546115449190613c5a565b60148190555060646014541115611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906140b3565b60405180910390fd5b5050565b600080600160006115a3612010565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614145565b60405180910390fd5b61167461166b612010565b85858403612018565b600191505092915050565b611687612010565b73ffffffffffffffffffffffffffffffffffffffff166116a56112c9565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613c0b565b60405180910390fd5b600281101561173f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611736906141b1565b60405180910390fd5b6103e861174a610a16565b826117559190613f9f565b61175f9190614010565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516117969190613812565b60405180910390a150565b60006117b56117ae612010565b84846121e1565b6001905092915050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6117f6612010565b73ffffffffffffffffffffffffffffffffffffffff166118146112c9565b73ffffffffffffffffffffffffffffffffffffffff161461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613c0b565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550600060158190555060006016819055506000601481905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6118d4612010565b73ffffffffffffffffffffffffffffffffffffffff166118f26112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613c0b565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516119e591906137a8565b60405180910390a25050565b6119f9612010565b73ffffffffffffffffffffffffffffffffffffffff16611a176112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613c0b565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b61612010565b73ffffffffffffffffffffffffffffffffffffffff16611b7f6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613c0b565b60405180910390fd5b7f0000000000000000000000007506e54c12d144b61c0dd8c051110f7e2a2e746973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90614243565b60405180910390fd5b611c6d8282612e5e565b5050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b7f0000000000000000000000007506e54c12d144b61c0dd8c051110f7e2a2e746981565b611cc3612010565b73ffffffffffffffffffffffffffffffffffffffff16611ce16112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90613c0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d906142d5565b60405180910390fd5b611daf81612d98565b50565b611dba612010565b73ffffffffffffffffffffffffffffffffffffffff16611dd86112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c0b565b60405180910390fd5b6005811015611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614367565b60405180910390fd5b6103e8611e7d610a16565b82611e889190613f9f565b611e929190614010565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611ec99190613812565b60405180910390a150565b611edc612010565b73ffffffffffffffffffffffffffffffffffffffff16611efa6112c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613c0b565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e906143f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed9061448b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121d49190613812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122479061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906145af565b60405180910390fd5b600081036122d8576122d383836000612eff565b612d93565b600860009054906101000a900460ff16156127d3576122f56112c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561236357506123336112c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123ef5750600560149054906101000a900460ff16155b156127d257600c60009054906101000a900460ff166124e957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614641565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263357600a548111156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd906146d3565b60405180910390fd5b6009546125e283610f40565b826125ed9190613c5a565b111561262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126259061473f565b60405180910390fd5b6127d1565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d65750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272557600a54811115612720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612717906147d1565b60405180910390fd5b6127d0565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127cf5760095461278283610f40565b8261278d9190613c5a565b11156127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c59061473f565b60405180910390fd5b5b5b5b5b5b60006127de30610f40565b9050600060065482101590508080156128035750600560159054906101000a900460ff165b801561281c5750600560149054906101000a900460ff16155b80156128725750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c85750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291e5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600560146101000a81548160ff0219169083151502179055506129478361317e565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612d8357601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000601154115b15612b2057612ab36064612aa56011548861337990919063ffffffff16565b61338f90919063ffffffff16565b905060115460135482612ac69190613f9f565b612ad09190614010565b60186000828254612ae19190613c5a565b9250508190555060115460125482612af99190613f9f565b612b039190614010565b60176000828254612b149190613c5a565b92505081905550612d5f565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7b57506000600e54115b15612c1557612ba86064612b9a600e548861337990919063ffffffff16565b61338f90919063ffffffff16565b9050600e5460105482612bbb9190613f9f565b612bc59190614010565b60186000828254612bd69190613c5a565b92505081905550600e54600f5482612bee9190613f9f565b612bf89190614010565b60176000828254612c099190613c5a565b92505081905550612d5e565b6000601454118015612c715750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cc75750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5d57612cf46064612ce66014548861337990919063ffffffff16565b61338f90919063ffffffff16565b905060145460165482612d079190613f9f565b612d119190614010565b60186000828254612d229190613c5a565b9250508190555060145460155482612d3a9190613f9f565b612d449190614010565b60176000828254612d559190613c5a565b925050819055505b5b5b6000811115612d7457612d73873083612eff565b5b8085612d8091906147f1565b94505b612d8e878787612eff565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f659061451d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906145af565b60405180910390fd5b612fe88383836133a5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561306e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306590614897565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131019190613c5a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131659190613812565b60405180910390a36131788484846133aa565b50505050565b600061318930610f40565b9050600081905060008083036131a157505050613376565b6007548311156131b15760075492505b601c60009054906101000a900460ff1680156131d857506005846131d59190613f9f565b83115b156131ed576005846131ea9190613f9f565b92505b60008390506000479050613200826133af565b600061321582476135ec90919063ffffffff16565b90506000613240866132326018548561337990919063ffffffff16565b61338f90919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613298906148e8565b60006040518083038185875af1925050503d80600081146132d5576040519150601f19603f3d011682016040523d82523d6000602084013e6132da565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613326906148e8565b60006040518083038185875af1925050503d8060008114613363576040519150601f19603f3d011682016040523d82523d6000602084013e613368565b606091505b505080955050505050505050505b50565b600081836133879190613f9f565b905092915050565b6000818361339d9190614010565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156133cc576133cb6148fd565b5b6040519080825280602002602001820160405280156133fa5781602001602082028036833780820191505090505b50905030816000815181106134125761341161492c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134db9190614970565b816001815181106134ef576134ee61492c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613554307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612018565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b6959493929190614aa0565b600060405180830381600087803b1580156135d057600080fd5b505af11580156135e4573d6000803e3d6000fd5b505050505050565b600081836135fa91906147f1565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561363c578082015181840152602081019050613621565b60008484015250505050565b6000601f19601f8301169050919050565b600061366482613602565b61366e818561360d565b935061367e81856020860161361e565b61368781613648565b840191505092915050565b600060208201905081810360008301526136ac8184613659565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e4826136b9565b9050919050565b6136f4816136d9565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000819050919050565b61372a81613717565b811461373557600080fd5b50565b60008135905061374781613721565b92915050565b60008060408385031215613764576137636136b4565b5b600061377285828601613702565b925050602061378385828601613738565b9150509250929050565b60008115159050919050565b6137a28161378d565b82525050565b60006020820190506137bd6000830184613799565b92915050565b600080604083850312156137da576137d96136b4565b5b60006137e885828601613738565b92505060206137f985828601613738565b9150509250929050565b61380c81613717565b82525050565b60006020820190506138276000830184613803565b92915050565b600080600060608486031215613846576138456136b4565b5b600061385486828701613702565b935050602061386586828701613702565b925050604061387686828701613738565b9150509250925092565b600060ff82169050919050565b61389681613880565b82525050565b60006020820190506138b1600083018461388d565b92915050565b6000602082840312156138cd576138cc6136b4565b5b60006138db84828501613702565b91505092915050565b60006060820190506138f96000830186613799565b6139066020830185613799565b6139136040830184613799565b949350505050565b613924816136d9565b82525050565b600060408201905061393f600083018561391b565b61394c602083018461391b565b9392505050565b60006060820190506139686000830186613799565b6139756020830185613803565b6139826040830184613803565b949350505050565b6139938161378d565b811461399e57600080fd5b50565b6000813590506139b08161398a565b92915050565b6000602082840312156139cc576139cb6136b4565b5b60006139da848285016139a1565b91505092915050565b6000806000606084860312156139fc576139fb6136b4565b5b6000613a0a868287016139a1565b9350506020613a1b86828701613738565b9250506040613a2c86828701613738565b9150509250925092565b6000602082019050613a4b600083018461391b565b92915050565b60008060408385031215613a6857613a676136b4565b5b6000613a7685828601613702565b9250506020613a87858286016139a1565b9150509250929050565b600060208284031215613aa757613aa66136b4565b5b6000613ab584828501613738565b91505092915050565b600060c082019050613ad36000830189613803565b613ae06020830188613803565b613aed6040830187613803565b613afa6060830186613803565b613b076080830185613803565b613b1460a0830184613803565b979650505050505050565b60008060408385031215613b3657613b356136b4565b5b6000613b4485828601613702565b9250506020613b5585828601613702565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ba657607f821691505b602082108103613bb957613bb8613b5f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf560208361360d565b9150613c0082613bbf565b602082019050919050565b60006020820190508181036000830152613c2481613be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c6582613717565b9150613c7083613717565b9250828201905080821115613c8857613c87613c2b565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613cea60288361360d565b9150613cf582613c8e565b604082019050919050565b60006020820190508181036000830152613d1981613cdd565b9050919050565b6000606082019050613d356000830186613803565b613d426020830185613803565b613d4f6040830184613803565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613db360288361360d565b9150613dbe82613d57565b604082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613e4560298361360d565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613ed760348361360d565b9150613ee282613e7b565b604082019050919050565b60006020820190508181036000830152613f0681613eca565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613f69602a8361360d565b9150613f7482613f0d565b604082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b6000613faa82613717565b9150613fb583613717565b9250828202613fc381613717565b91508282048414831517613fda57613fd9613c2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061401b82613717565b915061402683613717565b92508261403657614035613fe1565b5b828204905092915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b600061409d602d8361360d565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061412f60258361360d565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061419b60208361360d565b91506141a682614165565b602082019050919050565b600060208201905081810360008301526141ca8161418e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061422d60398361360d565b9150614238826141d1565b604082019050919050565b6000602082019050818103600083015261425c81614220565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142bf60268361360d565b91506142ca82614263565b604082019050919050565b600060208201905081810360008301526142ee816142b2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061435160248361360d565b915061435c826142f5565b604082019050919050565b6000602082019050818103600083015261438081614344565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143e360248361360d565b91506143ee82614387565b604082019050919050565b60006020820190508181036000830152614412816143d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061447560228361360d565b915061448082614419565b604082019050919050565b600060208201905081810360008301526144a481614468565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061450760258361360d565b9150614512826144ab565b604082019050919050565b60006020820190508181036000830152614536816144fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061459960238361360d565b91506145a48261453d565b604082019050919050565b600060208201905081810360008301526145c88161458c565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061462b60228361360d565b9150614636826145cf565b604082019050919050565b6000602082019050818103600083015261465a8161461e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006146bd60268361360d565b91506146c882614661565b604082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061472960138361360d565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006147bb60278361360d565b91506147c68261475f565b604082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b60006147fc82613717565b915061480783613717565b925082820390508181111561481f5761481e613c2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061488160268361360d565b915061488c82614825565b604082019050919050565b600060208201905081810360008301526148b081614874565b9050919050565b600081905092915050565b50565b60006148d26000836148b7565b91506148dd826148c2565b600082019050919050565b60006148f3826148c5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061496a816136eb565b92915050565b600060208284031215614986576149856136b4565b5b60006149948482850161495b565b91505092915050565b6000819050919050565b6000819050919050565b60006149cc6149c76149c28461499d565b6149a7565b613717565b9050919050565b6149dc816149b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a17816136d9565b82525050565b6000614a298383614a0e565b60208301905092915050565b6000602082019050919050565b6000614a4d826149e2565b614a5781856149ed565b9350614a62836149fe565b8060005b83811015614a93578151614a7a8882614a1d565b9750614a8583614a35565b925050600181019050614a66565b5085935050505092915050565b600060a082019050614ab56000830188613803565b614ac260208301876149d3565b8181036040830152614ad48186614a42565b9050614ae3606083018561391b565b614af06080830184613803565b969550505050505056fea264697066735822122092940f4e445b6e53399568c580aff73b5a3693c38c4015f65b75a6d4db10f35264736f6c63430008130033
Deployed Bytecode Sourcemap
25278:21373:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10876:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13109:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33769:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11996:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13781:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11838:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14715:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40362:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;34455:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25854:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36987:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12167:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22215:103;;;;;;;;;;;;;:::i;:::-;;38666:181;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;38197:237;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;45466:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31487:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21564:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35553:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11095:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34909:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15504:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32274:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12523:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39331:571;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;30794:229;;;;;;;;;;;;;:::i;:::-;;33290:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30477:162;;;;;;;;;;;;;:::i;:::-;;12786:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36049:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37504:346;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25400:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22473:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32743:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36642:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10876:100;10930:13;10963:5;10956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10876:100;:::o;13109:194::-;13217:4;13234:39;13243:12;:10;:12::i;:::-;13257:7;13266:6;13234:8;:39::i;:::-;13291:4;13284:11;;13109:194;;;;:::o;33769:397::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33899:13:::1;33881:15;:31;;;;33939:7;33923:13;:23;;;;33989:13;;33971:15;;:31;;;;:::i;:::-;33957:11;:45;;;;34036:3;34021:11;;:18;;34013:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34100:58;34114:11;;34127:15;;34144:13;;34100:58;;;;;;;;:::i;:::-;;;;;;;;33769:397:::0;;:::o;11996:108::-;12057:7;12084:12;;12077:19;;11996:108;:::o;13781:529::-;13921:4;13938:36;13948:6;13956:9;13967:6;13938:9;:36::i;:::-;13987:24;14014:11;:19;14026:6;14014:19;;;;;;;;;;;;;;;:33;14034:12;:10;:12::i;:::-;14014:33;;;;;;;;;;;;;;;;13987:60;;14100:6;14080:16;:26;;14058:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14210:57;14219:6;14227:12;:10;:12::i;:::-;14260:6;14241:16;:25;14210:8;:57::i;:::-;14298:4;14291:11;;;13781:529;;;;;:::o;11838:93::-;11896:5;11921:2;11914:9;;11838:93;:::o;14715:290::-;14828:4;14845:130;14868:12;:10;:12::i;:::-;14895:7;14954:10;14917:11;:25;14929:12;:10;:12::i;:::-;14917:25;;;;;;;;;;;;;;;:34;14943:7;14917:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14845:8;:130::i;:::-;14993:4;14986:11;;14715:290;;;;:::o;40362:445::-;40479:23;40517:25;40557:31;40637:17;:26;40655:7;40637:26;;;;;;;;;;;;;;;;;;;;;;;;;40616:47;;40697:19;:28;40717:7;40697:28;;;;;;;;;;;;;;;;;;;;;;;;;40674:51;;40765:25;:34;40791:7;40765:34;;;;;;;;;;;;;;;;;;;;;;;;;40736:63;;40362:445;;;;;:::o;34455:446::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34587:13:::1;34568:16;:32;;;;34628:7;34611:14;:24;;;;34680:14;;34661:16;;:33;;;;:::i;:::-;34646:12;:48;;;;34743:3;34727:12;;:19;;34705:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34831:62;34846:12;;34860:16;;34878:14;;34831:62;;;;;;;;:::i;:::-;;;;;;;;34455:446:::0;;:::o;25854:34::-;;;;;;;;;;;;;:::o;36987:158::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37087:13:::1;;;;;;;;;;;37055:46;;37076:9;37055:46;;;;;;;;;;;;37128:9;37112:13;;:25;;;;;;;;;;;;;;;;;;36987:158:::0;:::o;12167:143::-;12257:7;12284:9;:18;12294:7;12284:18;;;;;;;;;;;;;;;;12277:25;;12167:143;;;:::o;22215:103::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22280:30:::1;22307:1;22280:18;:30::i;:::-;22215:103::o:0;38666:181::-;38734:24;38760:22;38808:15;;;;;;;;;;;38825:13;;;;;;;;;;;38800:39;;;;38666:181;;:::o;38197:237::-;38265:19;38286:18;38306:14;38355:13;;;;;;;;;;;38338:30;;38392:9;;38379:22;;38421:5;;38412:14;;38197:237;;;:::o;45466:79::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45532:5:::1;45525:4;;:12;;;;;;;;;;;;;;;;;;45466:79:::0;:::o;31487:544::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31646:1:::1;31638:4;:9;;31616:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:4;31746;:12;;31738:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31836:7;31818:15;;:25;;;;;;;;;;;;;;;;;;31898:5;31890:4;31874:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31873:30;;;;:::i;:::-;31854:16;:49;;;;31958:5;31950:4;31934:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31933:30;;;;:::i;:::-;31914:16;:49;;;;31979:44;32003:7;32012:4;32018;31979:44;;;;;;;;:::i;:::-;;;;;;;;31487:544:::0;;;:::o;21564:87::-;21610:7;21637:6;;;;;;;;;;;21630:13;;21564:87;:::o;35553:202::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:8:::1;35660:17;:26;35678:7;35660:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35729:7;35713:34;;;35738:8;35713:34;;;;;;:::i;:::-;;;;;;;;35553:202:::0;;:::o;11095:104::-;11151:13;11184:7;11177:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11095:104;:::o;34909:395::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35044:13:::1;35021:20;:36;;;;35089:7;35068:18;:28;;;;35149:18;;35126:20;;:41;;;;:::i;:::-;35107:16;:60;;;;35220:3;35200:16;;:23;;35178:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34909:395:::0;;:::o;15504:475::-;15622:4;15639:24;15666:11;:25;15678:12;:10;:12::i;:::-;15666:25;;;;;;;;;;;;;;;:34;15692:7;15666:34;;;;;;;;;;;;;;;;15639:61;;15753:15;15733:16;:35;;15711:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15869:67;15878:12;:10;:12::i;:::-;15892:7;15920:15;15901:16;:34;15869:8;:67::i;:::-;15967:4;15960:11;;;15504:475;;;;:::o;32274:251::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32387:1:::1;32370:13;:18;;32362:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32478:4;32461:13;:11;:13::i;:::-;32445;:29;;;;:::i;:::-;32444:38;;;;:::i;:::-;32436:5;:46;;;;32498:19;32511:5;;32498:19;;;;;;:::i;:::-;;;;;;;;32274:251:::0;:::o;12523:200::-;12634:4;12651:42;12661:12;:10;:12::i;:::-;12675:9;12686:6;12651:9;:42::i;:::-;12711:4;12704:11;;12523:200;;;;:::o;39331:571::-;39415:20;39450:24;39489:22;39526:21;39562:25;39602:23;39668:11;;39653:26;;39709:15;;39690:34;;39752:13;;39735:30;;39792:12;;39776:28;;39835:16;;39815:36;;39880:14;;39862:32;;39331:571;;;;;;:::o;30794:229::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30865:5:::1;30849:13;;:21;;;;;;;;;;;;;;;;;;30904:1;30881:20;:24;;;;30937:1;30916:18;:22;;;;30968:1;30949:16;:20;;;;30999:15;30985:30;;;;;;;;;;30794:229::o:0;33290:192::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:4:::1;33393:19;:27;33413:6;33393:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33461:6;33443:31;;;33469:4;33443:31;;;;;;:::i;:::-;;;;;;;;33290:192:::0;;:::o;30477:162::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30547:4:::1;30530:14;;:21;;;;;;;;;;;;;;;;;;30580:4;30562:15;;:22;;;;;;;;;;;;;;;;;;30615:15;30600:31;;;;;;;;;;30477:162::o:0;12786:176::-;12900:7;12927:11;:18;12939:5;12927:18;;;;;;;;;;;;;;;:27;12946:7;12927:27;;;;;;;;;;;;;;;;12920:34;;12786:176;;;;:::o;36049:241::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36153:7:::1;36145:15;;:4;:15;;::::0;36123:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36258:24;36270:4;36276:5;36258:11;:24::i;:::-;36049:241:::0;;:::o;37504:346::-;37585:21;37621:25;37661;37733:15;;;;;;;;;;;37714:34;;37779:16;;37759:36;;37826:16;;37806:36;;37504:346;;;:::o;25400:32::-;;;:::o;22473:238::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22596:1:::1;22576:22;;:8;:22;;::::0;22554:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22675:28;22694:8;22675:18;:28::i;:::-;22473:238:::0;:::o;32743:279::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32864:1:::1;32843:17;:22;;32835:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32967:4;32950:13;:11;:13::i;:::-;32930:17;:33;;;;:::i;:::-;32929:42;;;;:::i;:::-;32917:9;:54;;;;32987:27;33004:9;;32987:27;;;;;;:::i;:::-;;;;;;;;32743:279:::0;:::o;36642:165::-;21795:12;:10;:12::i;:::-;21784:23;;:7;:5;:7::i;:::-;:23;;;21776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36745:15:::1;;;;;;;;;;;36711:50;;36734:9;36711:50;;;;;;;;;;;;36790:9;36772:15;;:27;;;;;;;;;;;;;;;;;;36642:165:::0;:::o;9882:98::-;9935:7;9962:10;9955:17;;9882:98;:::o;19287:380::-;19440:1;19423:19;;:5;:19;;;19415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19521:1;19502:21;;:7;:21;;;19494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19605:6;19575:11;:18;19587:5;19575:18;;;;;;;;;;;;;;;:27;19594:7;19575:27;;;;;;;;;;;;;;;:36;;;;19643:7;19627:32;;19636:5;19627:32;;;19652:6;19627:32;;;;;;:::i;:::-;;;;;;;;19287:380;;;:::o;40815:4039::-;40963:1;40947:18;;:4;:18;;;40939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41040:1;41026:16;;:2;:16;;;41018:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41109:1;41099:6;:11;41095:93;;41127:28;41143:4;41149:2;41153:1;41127:15;:28::i;:::-;41170:7;;41095:93;41204:13;;;;;;;;;;;41200:1564;;;41264:7;:5;:7::i;:::-;41256:15;;:4;:15;;;;:49;;;;;41298:7;:5;:7::i;:::-;41292:13;;:2;:13;;;;41256:49;:86;;;;;41340:1;41326:16;;:2;:16;;;;41256:86;:128;;;;;41377:6;41363:21;;:2;:21;;;;41256:128;:158;;;;;41406:8;;;;;;;;;;;41405:9;41256:158;41234:1519;;;41454:14;;;;;;;;;;;41449:232;;41527:17;:23;41545:4;41527:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41554:17;:21;41572:2;41554:21;;;;;;;;;;;;;;;;;;;;;;;;;41527:48;41493:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41449:232;41755:25;:31;41781:4;41755:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41791:19;:23;41811:2;41791:23;;;;;;;;;;;;;;;;;;;;;;;;;41790:24;41755:59;41729:1009;;;41901:5;;41891:6;:15;;41857:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42079:9;;42062:13;42072:2;42062:9;:13::i;:::-;42053:6;:22;;;;:::i;:::-;:35;;42019:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41729:1009;;;42257:25;:29;42283:2;42257:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42291:19;:25;42311:4;42291:25;;;;;;;;;;;;;;;;;;;;;;;;;42290:26;42257:59;42231:507;;;42403:5;;42393:6;:15;;42359:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42231:507;;;42530:19;:23;42550:2;42530:23;;;;;;;;;;;;;;;;;;;;;;;;;42525:213;;42638:9;;42621:13;42631:2;42621:9;:13::i;:::-;42612:6;:22;;;;:::i;:::-;:35;;42578:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42525:213;42231:507;41729:1009;41234:1519;41200:1564;42776:28;42807:24;42825:4;42807:9;:24::i;:::-;42776:55;;42844:12;42883:16;;42859:20;:40;;42844:55;;42930:7;:39;;;;;42954:15;;;;;;;;;;;42930:39;:65;;;;;42987:8;;;;;;;;;;;42986:9;42930:65;:114;;;;;43013:25;:31;43039:4;43013:31;;;;;;;;;;;;;;;;;;;;;;;;;43012:32;42930:114;:155;;;;;43062:17;:23;43080:4;43062:23;;;;;;;;;;;;;;;;;;;;;;;;;43061:24;42930:155;:194;;;;;43103:17;:21;43121:2;43103:21;;;;;;;;;;;;;;;;;;;;;;;;;43102:22;42930:194;42912:332;;;43162:4;43151:8;;:15;;;;;;;;;;;;;;;;;;43183:16;43192:6;43183:8;:16::i;:::-;43227:5;43216:8;;:16;;;;;;;;;;;;;;;;;;42912:332;43256:12;43272:8;;;;;;;;;;;43271:9;43256:24;;43382:17;:23;43400:4;43382:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;43409:17;:21;43427:2;43409:21;;;;;;;;;;;;;;;;;;;;;;;;;43382:48;43378:96;;;43457:5;43447:15;;43378:96;43486:12;43591:7;43587:1214;;;43643:25;:29;43669:2;43643:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;43691:1;43676:12;;:16;43643:49;43639:1011;;;43720:33;43749:3;43720:24;43731:12;;43720:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43713:40;;43818:12;;43800:14;;43793:4;:21;;;;:::i;:::-;43792:38;;;;:::i;:::-;43772:16;;:58;;;;;;;:::i;:::-;;;;;;;;43899:12;;43879:16;;43872:4;:23;;;;:::i;:::-;43871:40;;;;:::i;:::-;43849:18;;:62;;;;;;;:::i;:::-;;;;;;;;43639:1011;;;43973:25;:31;43999:4;43973:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44022:1;44008:11;;:15;43973:50;43969:681;;;44051:32;44079:3;44051:23;44062:11;;44051:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44044:39;;44147:11;;44130:13;;44123:4;:20;;;;:::i;:::-;44122:36;;;;:::i;:::-;44102:16;;:56;;;;;;;:::i;:::-;;;;;;;;44226:11;;44207:15;;44200:4;:22;;;;:::i;:::-;44199:38;;;;:::i;:::-;44177:18;;:60;;;;;;;:::i;:::-;;;;;;;;43969:681;;;44324:1;44305:16;;:20;:56;;;;;44330:25;:31;44356:4;44330:31;;;;;;;;;;;;;;;;;;;;;;;;;44329:32;44305:56;:90;;;;;44366:25;:29;44392:2;44366:29;;;;;;;;;;;;;;;;;;;;;;;;;44365:30;44305:90;44301:349;;;44423:37;44456:3;44423:28;44434:16;;44423:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;44416:44;;44529:16;;44507:18;;44500:4;:25;;;;:::i;:::-;44499:46;;;;:::i;:::-;44479:16;;:66;;;;;;;:::i;:::-;;;;;;;;44618:16;;44594:20;;44587:4;:27;;;;:::i;:::-;44586:48;;;;:::i;:::-;44564:18;;:70;;;;;;;:::i;:::-;;;;;;;;44301:349;43969:681;43639:1011;44679:1;44672:4;:8;44668:91;;;44701:42;44717:4;44731;44738;44701:15;:42::i;:::-;44668:91;44785:4;44775:14;;;;;:::i;:::-;;;43587:1214;44813:33;44829:4;44835:2;44839:6;44813:15;:33::i;:::-;40928:3926;;;;40815:4039;;;;:::o;22871:191::-;22945:16;22964:6;;;;;;;;;;;22945:25;;22990:8;22981:6;;:17;;;;;;;;;;;;;;;;;;23045:8;23014:40;;23035:8;23014:40;;;;;;;;;;;;22934:128;22871:191;:::o;36298:154::-;36398:5;36364:25;:31;36390:4;36364:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36438:5;36421:23;;36432:4;36421:23;;;;;;;;;;;;36298:154;;:::o;16469:770::-;16627:1;16609:20;;:6;:20;;;16601:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16711:1;16690:23;;:9;:23;;;16682:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16766:47;16787:6;16795:9;16806:6;16766:20;:47::i;:::-;16826:21;16850:9;:17;16860:6;16850:17;;;;;;;;;;;;;;;;16826:41;;16917:6;16900:13;:23;;16878:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17061:6;17045:13;:22;17025:9;:17;17035:6;17025:17;;;;;;;;;;;;;;;:42;;;;17113:6;17089:9;:20;17099:9;17089:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17154:9;17137:35;;17146:6;17137:35;;;17165:6;17137:35;;;;;;:::i;:::-;;;;;;;;17185:46;17205:6;17213:9;17224:6;17185:19;:46::i;:::-;16590:649;16469:770;;;:::o;45553:1095::-;45606:23;45632:24;45650:4;45632:9;:24::i;:::-;45606:50;;45667:25;45695:15;45667:43;;45721:12;45769:1;45750:15;:20;45746:59;;45787:7;;;;;45746:59;45839:16;;45821:15;:34;45817:101;;;45890:16;;45872:34;;45817:101;45934:4;;;;;;;;;;;:36;;;;;45969:1;45960:6;:10;;;;:::i;:::-;45942:15;:28;45934:36;45930:97;;;46014:1;46005:6;:10;;;;:::i;:::-;45987:28;;45930:97;46039:26;46068:15;46039:44;;46096:25;46124:21;46096:49;;46158:36;46175:18;46158:16;:36::i;:::-;46207:18;46228:44;46254:17;46228:21;:25;;:44;;;;:::i;:::-;46207:65;;46285:17;46305:79;46356:17;46305:32;46320:16;;46305:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;46285:99;;46418:1;46397:18;:22;;;;46449:1;46430:16;:20;;;;46485:13;;;;;;;;;;;46477:27;;46512:9;46477:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46463:63;;;;;46561:15;;;;;;;;;;;46553:29;;46604:21;46553:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46539:101;;;;;45595:1053;;;;;;;45553:1095;;:::o;3241:98::-;3299:7;3330:1;3326;:5;;;;:::i;:::-;3319:12;;3241:98;;;;:::o;3640:::-;3698:7;3729:1;3725;:5;;;;:::i;:::-;3718:12;;3640:98;;;;:::o;20267:125::-;;;;:::o;20996:124::-;;;;:::o;44862:571::-;44988:21;45026:1;45012:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44988:40;;45057:4;45039;45044:1;45039:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45083:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45073:4;45078:1;45073:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;45112:56;45129:4;45144:9;45156:11;45112:8;:56::i;:::-;45207:9;:60;;;45282:11;45308:1;45352:4;45379;45399:15;45207:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44917:516;44862:571;:::o;2884:98::-;2942:7;2973:1;2969;:5;;;;:::i;:::-;2962:12;;2884:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:619::-;4355:6;4363;4371;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4517:117;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4278:619;;;;;:::o;4903:86::-;4938:7;4978:4;4971:5;4967:16;4956:27;;4903:86;;;:::o;4995:112::-;5078:22;5094:5;5078:22;:::i;:::-;5073:3;5066:35;4995:112;;:::o;5113:214::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:67;5317:1;5306:9;5302:17;5293:6;5253:67;:::i;:::-;5113:214;;;;:::o;5333:329::-;5392:6;5441:2;5429:9;5420:7;5416:23;5412:32;5409:119;;;5447:79;;:::i;:::-;5409:119;5567:1;5592:53;5637:7;5628:6;5617:9;5613:22;5592:53;:::i;:::-;5582:63;;5538:117;5333:329;;;;:::o;5668:406::-;5799:4;5837:2;5826:9;5822:18;5814:26;;5850:65;5912:1;5901:9;5897:17;5888:6;5850:65;:::i;:::-;5925:66;5987:2;5976:9;5972:18;5963:6;5925:66;:::i;:::-;6001;6063:2;6052:9;6048:18;6039:6;6001:66;:::i;:::-;5668:406;;;;;;:::o;6080:118::-;6167:24;6185:5;6167:24;:::i;:::-;6162:3;6155:37;6080:118;;:::o;6204:332::-;6325:4;6363:2;6352:9;6348:18;6340:26;;6376:71;6444:1;6433:9;6429:17;6420:6;6376:71;:::i;:::-;6457:72;6525:2;6514:9;6510:18;6501:6;6457:72;:::i;:::-;6204:332;;;;;:::o;6542:430::-;6685:4;6723:2;6712:9;6708:18;6700:26;;6736:65;6798:1;6787:9;6783:17;6774:6;6736:65;:::i;:::-;6811:72;6879:2;6868:9;6864:18;6855:6;6811:72;:::i;:::-;6893;6961:2;6950:9;6946:18;6937:6;6893:72;:::i;:::-;6542:430;;;;;;:::o;6978:116::-;7048:21;7063:5;7048:21;:::i;:::-;7041:5;7038:32;7028:60;;7084:1;7081;7074:12;7028:60;6978:116;:::o;7100:133::-;7143:5;7181:6;7168:20;7159:29;;7197:30;7221:5;7197:30;:::i;:::-;7100:133;;;;:::o;7239:323::-;7295:6;7344:2;7332:9;7323:7;7319:23;7315:32;7312:119;;;7350:79;;:::i;:::-;7312:119;7470:1;7495:50;7537:7;7528:6;7517:9;7513:22;7495:50;:::i;:::-;7485:60;;7441:114;7239:323;;;;:::o;7568:613::-;7642:6;7650;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:50;7900:7;7891:6;7880:9;7876:22;7858:50;:::i;:::-;7848:60;;7804:114;7957:2;7983:53;8028:7;8019:6;8008:9;8004:22;7983:53;:::i;:::-;7973:63;;7928:118;8085:2;8111:53;8156:7;8147:6;8136:9;8132:22;8111:53;:::i;:::-;8101:63;;8056:118;7568:613;;;;;:::o;8187:222::-;8280:4;8318:2;8307:9;8303:18;8295:26;;8331:71;8399:1;8388:9;8384:17;8375:6;8331:71;:::i;:::-;8187:222;;;;:::o;8415:468::-;8480:6;8488;8537:2;8525:9;8516:7;8512:23;8508:32;8505:119;;;8543:79;;:::i;:::-;8505:119;8663:1;8688:53;8733:7;8724:6;8713:9;8709:22;8688:53;:::i;:::-;8678:63;;8634:117;8790:2;8816:50;8858:7;8849:6;8838:9;8834:22;8816:50;:::i;:::-;8806:60;;8761:115;8415:468;;;;;:::o;8889:329::-;8948:6;8997:2;8985:9;8976:7;8972:23;8968:32;8965:119;;;9003:79;;:::i;:::-;8965:119;9123:1;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9094:117;8889:329;;;;:::o;9224:775::-;9457:4;9495:3;9484:9;9480:19;9472:27;;9509:71;9577:1;9566:9;9562:17;9553:6;9509:71;:::i;:::-;9590:72;9658:2;9647:9;9643:18;9634:6;9590:72;:::i;:::-;9672;9740:2;9729:9;9725:18;9716:6;9672:72;:::i;:::-;9754;9822:2;9811:9;9807:18;9798:6;9754:72;:::i;:::-;9836:73;9904:3;9893:9;9889:19;9880:6;9836:73;:::i;:::-;9919;9987:3;9976:9;9972:19;9963:6;9919:73;:::i;:::-;9224:775;;;;;;;;;:::o;10005:474::-;10073:6;10081;10130:2;10118:9;10109:7;10105:23;10101:32;10098:119;;;10136:79;;:::i;:::-;10098:119;10256:1;10281:53;10326:7;10317:6;10306:9;10302:22;10281:53;:::i;:::-;10271:63;;10227:117;10383:2;10409:53;10454:7;10445:6;10434:9;10430:22;10409:53;:::i;:::-;10399:63;;10354:118;10005:474;;;;;:::o;10485:180::-;10533:77;10530:1;10523:88;10630:4;10627:1;10620:15;10654:4;10651:1;10644:15;10671:320;10715:6;10752:1;10746:4;10742:12;10732:22;;10799:1;10793:4;10789:12;10820:18;10810:81;;10876:4;10868:6;10864:17;10854:27;;10810:81;10938:2;10930:6;10927:14;10907:18;10904:38;10901:84;;10957:18;;:::i;:::-;10901:84;10722:269;10671:320;;;:::o;10997:182::-;11137:34;11133:1;11125:6;11121:14;11114:58;10997:182;:::o;11185:366::-;11327:3;11348:67;11412:2;11407:3;11348:67;:::i;:::-;11341:74;;11424:93;11513:3;11424:93;:::i;:::-;11542:2;11537:3;11533:12;11526:19;;11185:366;;;:::o;11557:419::-;11723:4;11761:2;11750:9;11746:18;11738:26;;11810:9;11804:4;11800:20;11796:1;11785:9;11781:17;11774:47;11838:131;11964:4;11838:131;:::i;:::-;11830:139;;11557:419;;;:::o;11982:180::-;12030:77;12027:1;12020:88;12127:4;12124:1;12117:15;12151:4;12148:1;12141:15;12168:191;12208:3;12227:20;12245:1;12227:20;:::i;:::-;12222:25;;12261:20;12279:1;12261:20;:::i;:::-;12256:25;;12304:1;12301;12297:9;12290:16;;12325:3;12322:1;12319:10;12316:36;;;12332:18;;:::i;:::-;12316:36;12168:191;;;;:::o;12365:227::-;12505:34;12501:1;12493:6;12489:14;12482:58;12574:10;12569:2;12561:6;12557:15;12550:35;12365:227;:::o;12598:366::-;12740:3;12761:67;12825:2;12820:3;12761:67;:::i;:::-;12754:74;;12837:93;12926:3;12837:93;:::i;:::-;12955:2;12950:3;12946:12;12939:19;;12598:366;;;:::o;12970:419::-;13136:4;13174:2;13163:9;13159:18;13151:26;;13223:9;13217:4;13213:20;13209:1;13198:9;13194:17;13187:47;13251:131;13377:4;13251:131;:::i;:::-;13243:139;;12970:419;;;:::o;13395:442::-;13544:4;13582:2;13571:9;13567:18;13559:26;;13595:71;13663:1;13652:9;13648:17;13639:6;13595:71;:::i;:::-;13676:72;13744:2;13733:9;13729:18;13720:6;13676:72;:::i;:::-;13758;13826:2;13815:9;13811:18;13802:6;13758:72;:::i;:::-;13395:442;;;;;;:::o;13843:227::-;13983:34;13979:1;13971:6;13967:14;13960:58;14052:10;14047:2;14039:6;14035:15;14028:35;13843:227;:::o;14076:366::-;14218:3;14239:67;14303:2;14298:3;14239:67;:::i;:::-;14232:74;;14315:93;14404:3;14315:93;:::i;:::-;14433:2;14428:3;14424:12;14417:19;;14076:366;;;:::o;14448:419::-;14614:4;14652:2;14641:9;14637:18;14629:26;;14701:9;14695:4;14691:20;14687:1;14676:9;14672:17;14665:47;14729:131;14855:4;14729:131;:::i;:::-;14721:139;;14448:419;;;:::o;14873:228::-;15013:34;15009:1;15001:6;14997:14;14990:58;15082:11;15077:2;15069:6;15065:15;15058:36;14873:228;:::o;15107:366::-;15249:3;15270:67;15334:2;15329:3;15270:67;:::i;:::-;15263:74;;15346:93;15435:3;15346:93;:::i;:::-;15464:2;15459:3;15455:12;15448:19;;15107:366;;;:::o;15479:419::-;15645:4;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:131;15886:4;15760:131;:::i;:::-;15752:139;;15479:419;;;:::o;15904:239::-;16044:34;16040:1;16032:6;16028:14;16021:58;16113:22;16108:2;16100:6;16096:15;16089:47;15904:239;:::o;16149:366::-;16291:3;16312:67;16376:2;16371:3;16312:67;:::i;:::-;16305:74;;16388:93;16477:3;16388:93;:::i;:::-;16506:2;16501:3;16497:12;16490:19;;16149:366;;;:::o;16521:419::-;16687:4;16725:2;16714:9;16710:18;16702:26;;16774:9;16768:4;16764:20;16760:1;16749:9;16745:17;16738:47;16802:131;16928:4;16802:131;:::i;:::-;16794:139;;16521:419;;;:::o;16946:229::-;17086:34;17082:1;17074:6;17070:14;17063:58;17155:12;17150:2;17142:6;17138:15;17131:37;16946:229;:::o;17181:366::-;17323:3;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17181:366;;;:::o;17553:419::-;17719:4;17757:2;17746:9;17742:18;17734:26;;17806:9;17800:4;17796:20;17792:1;17781:9;17777:17;17770:47;17834:131;17960:4;17834:131;:::i;:::-;17826:139;;17553:419;;;:::o;17978:410::-;18018:7;18041:20;18059:1;18041:20;:::i;:::-;18036:25;;18075:20;18093:1;18075:20;:::i;:::-;18070:25;;18130:1;18127;18123:9;18152:30;18170:11;18152:30;:::i;:::-;18141:41;;18331:1;18322:7;18318:15;18315:1;18312:22;18292:1;18285:9;18265:83;18242:139;;18361:18;;:::i;:::-;18242:139;18026:362;17978:410;;;;:::o;18394:180::-;18442:77;18439:1;18432:88;18539:4;18536:1;18529:15;18563:4;18560:1;18553:15;18580:185;18620:1;18637:20;18655:1;18637:20;:::i;:::-;18632:25;;18671:20;18689:1;18671:20;:::i;:::-;18666:25;;18710:1;18700:35;;18715:18;;:::i;:::-;18700:35;18757:1;18754;18750:9;18745:14;;18580:185;;;;:::o;18771:232::-;18911:34;18907:1;18899:6;18895:14;18888:58;18980:15;18975:2;18967:6;18963:15;18956:40;18771:232;:::o;19009:366::-;19151:3;19172:67;19236:2;19231:3;19172:67;:::i;:::-;19165:74;;19248:93;19337:3;19248:93;:::i;:::-;19366:2;19361:3;19357:12;19350:19;;19009:366;;;:::o;19381:419::-;19547:4;19585:2;19574:9;19570:18;19562:26;;19634:9;19628:4;19624:20;19620:1;19609:9;19605:17;19598:47;19662:131;19788:4;19662:131;:::i;:::-;19654:139;;19381:419;;;:::o;19806:224::-;19946:34;19942:1;19934:6;19930:14;19923:58;20015:7;20010:2;20002:6;19998:15;19991:32;19806:224;:::o;20036:366::-;20178:3;20199:67;20263:2;20258:3;20199:67;:::i;:::-;20192:74;;20275:93;20364:3;20275:93;:::i;:::-;20393:2;20388:3;20384:12;20377:19;;20036:366;;;:::o;20408:419::-;20574:4;20612:2;20601:9;20597:18;20589:26;;20661:9;20655:4;20651:20;20647:1;20636:9;20632:17;20625:47;20689:131;20815:4;20689:131;:::i;:::-;20681:139;;20408:419;;;:::o;20833:182::-;20973:34;20969:1;20961:6;20957:14;20950:58;20833:182;:::o;21021:366::-;21163:3;21184:67;21248:2;21243:3;21184:67;:::i;:::-;21177:74;;21260:93;21349:3;21260:93;:::i;:::-;21378:2;21373:3;21369:12;21362:19;;21021:366;;;:::o;21393:419::-;21559:4;21597:2;21586:9;21582:18;21574:26;;21646:9;21640:4;21636:20;21632:1;21621:9;21617:17;21610:47;21674:131;21800:4;21674:131;:::i;:::-;21666:139;;21393:419;;;:::o;21818:244::-;21958:34;21954:1;21946:6;21942:14;21935:58;22027:27;22022:2;22014:6;22010:15;22003:52;21818:244;:::o;22068:366::-;22210:3;22231:67;22295:2;22290:3;22231:67;:::i;:::-;22224:74;;22307:93;22396:3;22307:93;:::i;:::-;22425:2;22420:3;22416:12;22409:19;;22068:366;;;:::o;22440:419::-;22606:4;22644:2;22633:9;22629:18;22621:26;;22693:9;22687:4;22683:20;22679:1;22668:9;22664:17;22657:47;22721:131;22847:4;22721:131;:::i;:::-;22713:139;;22440:419;;;:::o;22865:225::-;23005:34;23001:1;22993:6;22989:14;22982:58;23074:8;23069:2;23061:6;23057:15;23050:33;22865:225;:::o;23096:366::-;23238:3;23259:67;23323:2;23318:3;23259:67;:::i;:::-;23252:74;;23335:93;23424:3;23335:93;:::i;:::-;23453:2;23448:3;23444:12;23437:19;;23096:366;;;:::o;23468:419::-;23634:4;23672:2;23661:9;23657:18;23649:26;;23721:9;23715:4;23711:20;23707:1;23696:9;23692:17;23685:47;23749:131;23875:4;23749:131;:::i;:::-;23741:139;;23468:419;;;:::o;23893:223::-;24033:34;24029:1;24021:6;24017:14;24010:58;24102:6;24097:2;24089:6;24085:15;24078:31;23893:223;:::o;24122:366::-;24264:3;24285:67;24349:2;24344:3;24285:67;:::i;:::-;24278:74;;24361:93;24450:3;24361:93;:::i;:::-;24479:2;24474:3;24470:12;24463:19;;24122:366;;;:::o;24494:419::-;24660:4;24698:2;24687:9;24683:18;24675:26;;24747:9;24741:4;24737:20;24733:1;24722:9;24718:17;24711:47;24775:131;24901:4;24775:131;:::i;:::-;24767:139;;24494:419;;;:::o;24919:223::-;25059:34;25055:1;25047:6;25043:14;25036:58;25128:6;25123:2;25115:6;25111:15;25104:31;24919:223;:::o;25148:366::-;25290:3;25311:67;25375:2;25370:3;25311:67;:::i;:::-;25304:74;;25387:93;25476:3;25387:93;:::i;:::-;25505:2;25500:3;25496:12;25489:19;;25148:366;;;:::o;25520:419::-;25686:4;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25520:419;;;:::o;25945:221::-;26085:34;26081:1;26073:6;26069:14;26062:58;26154:4;26149:2;26141:6;26137:15;26130:29;25945:221;:::o;26172:366::-;26314:3;26335:67;26399:2;26394:3;26335:67;:::i;:::-;26328:74;;26411:93;26500:3;26411:93;:::i;:::-;26529:2;26524:3;26520:12;26513:19;;26172:366;;;:::o;26544:419::-;26710:4;26748:2;26737:9;26733:18;26725:26;;26797:9;26791:4;26787:20;26783:1;26772:9;26768:17;26761:47;26825:131;26951:4;26825:131;:::i;:::-;26817:139;;26544:419;;;:::o;26969:224::-;27109:34;27105:1;27097:6;27093:14;27086:58;27178:7;27173:2;27165:6;27161:15;27154:32;26969:224;:::o;27199:366::-;27341:3;27362:67;27426:2;27421:3;27362:67;:::i;:::-;27355:74;;27438:93;27527:3;27438:93;:::i;:::-;27556:2;27551:3;27547:12;27540:19;;27199:366;;;:::o;27571:419::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:222::-;28136:34;28132:1;28124:6;28120:14;28113:58;28205:5;28200:2;28192:6;28188:15;28181:30;27996:222;:::o;28224:366::-;28366:3;28387:67;28451:2;28446:3;28387:67;:::i;:::-;28380:74;;28463:93;28552:3;28463:93;:::i;:::-;28581:2;28576:3;28572:12;28565:19;;28224:366;;;:::o;28596:419::-;28762:4;28800:2;28789:9;28785:18;28777:26;;28849:9;28843:4;28839:20;28835:1;28824:9;28820:17;28813:47;28877:131;29003:4;28877:131;:::i;:::-;28869:139;;28596:419;;;:::o;29021:221::-;29161:34;29157:1;29149:6;29145:14;29138:58;29230:4;29225:2;29217:6;29213:15;29206:29;29021:221;:::o;29248:366::-;29390:3;29411:67;29475:2;29470:3;29411:67;:::i;:::-;29404:74;;29487:93;29576:3;29487:93;:::i;:::-;29605:2;29600:3;29596:12;29589:19;;29248:366;;;:::o;29620:419::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:225::-;30185:34;30181:1;30173:6;30169:14;30162:58;30254:8;30249:2;30241:6;30237:15;30230:33;30045:225;:::o;30276:366::-;30418:3;30439:67;30503:2;30498:3;30439:67;:::i;:::-;30432:74;;30515:93;30604:3;30515:93;:::i;:::-;30633:2;30628:3;30624:12;30617:19;;30276:366;;;:::o;30648:419::-;30814:4;30852:2;30841:9;30837:18;30829:26;;30901:9;30895:4;30891:20;30887:1;30876:9;30872:17;30865:47;30929:131;31055:4;30929:131;:::i;:::-;30921:139;;30648:419;;;:::o;31073:169::-;31213:21;31209:1;31201:6;31197:14;31190:45;31073:169;:::o;31248:366::-;31390:3;31411:67;31475:2;31470:3;31411:67;:::i;:::-;31404:74;;31487:93;31576:3;31487:93;:::i;:::-;31605:2;31600:3;31596:12;31589:19;;31248:366;;;:::o;31620:419::-;31786:4;31824:2;31813:9;31809:18;31801:26;;31873:9;31867:4;31863:20;31859:1;31848:9;31844:17;31837:47;31901:131;32027:4;31901:131;:::i;:::-;31893:139;;31620:419;;;:::o;32045:226::-;32185:34;32181:1;32173:6;32169:14;32162:58;32254:9;32249:2;32241:6;32237:15;32230:34;32045:226;:::o;32277:366::-;32419:3;32440:67;32504:2;32499:3;32440:67;:::i;:::-;32433:74;;32516:93;32605:3;32516:93;:::i;:::-;32634:2;32629:3;32625:12;32618:19;;32277:366;;;:::o;32649:419::-;32815:4;32853:2;32842:9;32838:18;32830:26;;32902:9;32896:4;32892:20;32888:1;32877:9;32873:17;32866:47;32930:131;33056:4;32930:131;:::i;:::-;32922:139;;32649:419;;;:::o;33074:194::-;33114:4;33134:20;33152:1;33134:20;:::i;:::-;33129:25;;33168:20;33186:1;33168:20;:::i;:::-;33163:25;;33212:1;33209;33205:9;33197:17;;33236:1;33230:4;33227:11;33224:37;;;33241:18;;:::i;:::-;33224:37;33074:194;;;;:::o;33274:225::-;33414:34;33410:1;33402:6;33398:14;33391:58;33483:8;33478:2;33470:6;33466:15;33459:33;33274:225;:::o;33505:366::-;33647:3;33668:67;33732:2;33727:3;33668:67;:::i;:::-;33661:74;;33744:93;33833:3;33744:93;:::i;:::-;33862:2;33857:3;33853:12;33846:19;;33505:366;;;:::o;33877:419::-;34043:4;34081:2;34070:9;34066:18;34058:26;;34130:9;34124:4;34120:20;34116:1;34105:9;34101:17;34094:47;34158:131;34284:4;34158:131;:::i;:::-;34150:139;;33877:419;;;:::o;34302:147::-;34403:11;34440:3;34425:18;;34302:147;;;;:::o;34455:114::-;;:::o;34575:398::-;34734:3;34755:83;34836:1;34831:3;34755:83;:::i;:::-;34748:90;;34847:93;34936:3;34847:93;:::i;:::-;34965:1;34960:3;34956:11;34949:18;;34575:398;;;:::o;34979:379::-;35163:3;35185:147;35328:3;35185:147;:::i;:::-;35178:154;;35349:3;35342:10;;34979:379;;;:::o;35364:180::-;35412:77;35409:1;35402:88;35509:4;35506:1;35499:15;35533:4;35530:1;35523:15;35550:180;35598:77;35595:1;35588:88;35695:4;35692:1;35685:15;35719:4;35716:1;35709:15;35736:143;35793:5;35824:6;35818:13;35809:22;;35840:33;35867:5;35840:33;:::i;:::-;35736:143;;;;:::o;35885:351::-;35955:6;36004:2;35992:9;35983:7;35979:23;35975:32;35972:119;;;36010:79;;:::i;:::-;35972:119;36130:1;36155:64;36211:7;36202:6;36191:9;36187:22;36155:64;:::i;:::-;36145:74;;36101:128;35885:351;;;;:::o;36242:85::-;36287:7;36316:5;36305:16;;36242:85;;;:::o;36333:60::-;36361:3;36382:5;36375:12;;36333:60;;;:::o;36399:158::-;36457:9;36490:61;36508:42;36517:32;36543:5;36517:32;:::i;:::-;36508:42;:::i;:::-;36490:61;:::i;:::-;36477:74;;36399:158;;;:::o;36563:147::-;36658:45;36697:5;36658:45;:::i;:::-;36653:3;36646:58;36563:147;;:::o;36716:114::-;36783:6;36817:5;36811:12;36801:22;;36716:114;;;:::o;36836:184::-;36935:11;36969:6;36964:3;36957:19;37009:4;37004:3;37000:14;36985:29;;36836:184;;;;:::o;37026:132::-;37093:4;37116:3;37108:11;;37146:4;37141:3;37137:14;37129:22;;37026:132;;;:::o;37164:108::-;37241:24;37259:5;37241:24;:::i;:::-;37236:3;37229:37;37164:108;;:::o;37278:179::-;37347:10;37368:46;37410:3;37402:6;37368:46;:::i;:::-;37446:4;37441:3;37437:14;37423:28;;37278:179;;;;:::o;37463:113::-;37533:4;37565;37560:3;37556:14;37548:22;;37463:113;;;:::o;37612:732::-;37731:3;37760:54;37808:5;37760:54;:::i;:::-;37830:86;37909:6;37904:3;37830:86;:::i;:::-;37823:93;;37940:56;37990:5;37940:56;:::i;:::-;38019:7;38050:1;38035:284;38060:6;38057:1;38054:13;38035:284;;;38136:6;38130:13;38163:63;38222:3;38207:13;38163:63;:::i;:::-;38156:70;;38249:60;38302:6;38249:60;:::i;:::-;38239:70;;38095:224;38082:1;38079;38075:9;38070:14;;38035:284;;;38039:14;38335:3;38328:10;;37736:608;;;37612:732;;;;:::o;38350:831::-;38613:4;38651:3;38640:9;38636:19;38628:27;;38665:71;38733:1;38722:9;38718:17;38709:6;38665:71;:::i;:::-;38746:80;38822:2;38811:9;38807:18;38798:6;38746:80;:::i;:::-;38873:9;38867:4;38863:20;38858:2;38847:9;38843:18;38836:48;38901:108;39004:4;38995:6;38901:108;:::i;:::-;38893:116;;39019:72;39087:2;39076:9;39072:18;39063:6;39019:72;:::i;:::-;39101:73;39169:3;39158:9;39154:19;39145:6;39101:73;:::i;:::-;38350:831;;;;;;;;:::o
Swarm Source
ipfs://92940f4e445b6e53399568c580aff73b5a3693c38c4015f65b75a6d4db10f352
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.