Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 150 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 23626375 | 1 hr ago | IN | 0 ETH | 0.00013415 | ||||
Approve | 23619351 | 25 hrs ago | IN | 0 ETH | 0.00010542 | ||||
Transfer | 23619322 | 25 hrs ago | IN | 0 ETH | 0.00007547 | ||||
Transfer | 23596945 | 4 days ago | IN | 0 ETH | 0.00019529 | ||||
Transfer | 23590316 | 5 days ago | IN | 0 ETH | 0.00002376 | ||||
Transfer | 23590258 | 5 days ago | IN | 0 ETH | 0.00001959 | ||||
Approve | 23589787 | 5 days ago | IN | 0 ETH | 0.00004881 | ||||
Transfer | 23581779 | 6 days ago | IN | 0 ETH | 0.00001921 | ||||
Transfer | 23581577 | 6 days ago | IN | 0 ETH | 0.00001008 | ||||
Transfer | 23578690 | 6 days ago | IN | 0 ETH | 0.0001064 | ||||
Approve | 23577833 | 6 days ago | IN | 0 ETH | 0.00007169 | ||||
Approve | 23577697 | 6 days ago | IN | 0 ETH | 0.00016187 | ||||
Approve | 23577694 | 6 days ago | IN | 0 ETH | 0.00025647 | ||||
Approve | 23577692 | 6 days ago | IN | 0 ETH | 0.00007814 | ||||
Approve | 23577143 | 6 days ago | IN | 0 ETH | 0.0001748 | ||||
Approve | 23577066 | 6 days ago | IN | 0 ETH | 0.0001415 | ||||
Approve | 23577032 | 6 days ago | IN | 0 ETH | 0.00021005 | ||||
Approve | 23577011 | 6 days ago | IN | 0 ETH | 0.00017136 | ||||
Transfer | 23576390 | 7 days ago | IN | 0 ETH | 0.00011196 | ||||
Transfer | 23575975 | 7 days ago | IN | 0 ETH | 0.00004443 | ||||
Transfer | 23570246 | 7 days ago | IN | 0 ETH | 0.00016079 | ||||
Transfer | 23564051 | 8 days ago | IN | 0 ETH | 0.00002571 | ||||
Transfer | 23564002 | 8 days ago | IN | 0 ETH | 0.00003012 | ||||
Transfer | 23563931 | 8 days ago | IN | 0 ETH | 0.00011893 | ||||
Transfer | 23563577 | 8 days ago | IN | 0 ETH | 0.00019607 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Crotch
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-05-17 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; interface IERC20Errors { error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); error ERC20InvalidSender(address sender); error ERC20InvalidReceiver(address receiver); error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); error ERC20InvalidApprover(address approver); error ERC20InvalidSpender(address spender); } interface IERC721Errors { error ERC721InvalidOwner(address owner); error ERC721NonexistentToken(uint256 tokenId); error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); error ERC721InvalidSender(address sender); error ERC721InvalidReceiver(address receiver); error ERC721InsufficientApproval(address operator, uint256 tokenId); error ERC721InvalidApprover(address approver); error ERC721InvalidOperator(address operator); } interface IERC1155Errors { error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); error ERC1155InvalidSender(address sender); error ERC1155InvalidReceiver(address receiver); error ERC1155MissingApprovalForAll(address operator, address owner); error ERC1155InvalidApprover(address approver); error ERC1155InvalidOperator(address operator); error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } abstract contract Ownable is Context { address private _owner; error OwnableUnauthorizedAccount(address account); error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors, ReentrancyGuard { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } function _transfer(address from, address to, uint256 value) internal virtual { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { _totalSupply -= value; } } else { unchecked { _balances[to] += value; } } emit Transfer(from, to, value); } function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address lpPair, uint); function getPair(address tokenA, address tokenB) external view returns (address lpPair); function createPair(address tokenA, address tokenB) external returns (address lpPair); } interface IRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IRouter01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } contract Crotch is ReentrancyGuard, ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; bool private swapping; bool public limitsDisabled; bool public isPancakeSwapEnable = true; bool public tradingEnabled = true; bool public dynamicLimitsEnabled = true; uint256 public Tax = 400; // 4% uint256 public taxThreshold = 4000 * 10** uint256(decimals()); // Change this value before deploy the mainnet // Anti-Whale Variables uint256 public maxTransactionAmount; // 0.2% of total supply initially uint256 public maxWalletAmount; // Max tokens per wallet uint256 public tradingCooldown = 30; // 30 seconds cooldown uint256 public launchBlock; uint256 public sniperBlockWindow = 2; uint256 public contractLaunchTime; address public teamWallet = 0x246EADe3DC857956D5FB7B981E0C46d5314fB8fD; // Before deploy on the mainnet please change this address address public charityWallet = 0x6C147C0E6a9070Ad3Ce429C4f9fBF13c62070Ca8; // Before deploy on the mainnet please change this address address public buybackWallet = 0xc2d99a8AF865eBab4c860819d551a971608ecaA9; // Before deploy on the mainnet please change this address address public airdropWallet = 0x933a0da8eD2B8d960ca279E26Ec4bafd6eFB6EC5; // Before deploy on the mainnet please change this address mapping(address => uint256) private _lastTradingTime; mapping(address => bool) public isSniper; mapping(address => bool) public isExemptFromLimits; mapping(address => bool) public liquidityPairs; // Store multiple pairs enum WalletType { TEAM, CHARITY, BUYBACK, AIRDROP } event UpdateThreshold(uint256 newThreshold); event UpdateWalletsForTeam(address team); event UpdateWalletsForCharity(address charity); event UpdateWalletsForBuyback(address buyback); event UpdateWalletsForAirdrop(address airdrop); event MaxWalletAmountUpdated(uint256 newAmount); event CooldownTimeUpdated(uint256 newTime); event ExemptFromLimitsUpdated(address account, bool isExempt); event DynamicLimitsUpdated(bool enabled); event TaxUpdated(uint256 newTax); event LimitsDisabled(); event LaunchBlockInitialized(uint256 launchBlock); event TransferFailed(address indexed recipient, uint256 amount); event SniperRemoved(address indexed account); constructor() ERC20("Crotch", "CROTCH") Ownable(msg.sender) { uint256 totalSupply = 320_000_000 * (10**decimals()); _mint(msg.sender, totalSupply); // Set initial caps maxTransactionAmount = totalSupply * 2 / 1000; // 0.2% of total supply maxWalletAmount = totalSupply * 10 / 1000; // 1% of total supply // Set contract launch time contractLaunchTime = block.timestamp; // Exempt owner and contract from limits isExemptFromLimits[msg.sender] = true; isExemptFromLimits[address(this)] = true; // Exempt wallets from limits isExemptFromLimits[teamWallet] = true; isExemptFromLimits[charityWallet] = true; isExemptFromLimits[buybackWallet] = true; isExemptFromLimits[airdropWallet] = true; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // Deploy on Mainnet enable this UniswapV2 Ethereum Mainnet ); uniswapV2Router = _uniswapV2Router; address weth = _uniswapV2Router.WETH(); _createLiquidityPair(weth); _approve(address(this), address(uniswapV2Router), type(uint256).max); } // Function to set max wallet amount function setMaxWalletAmount(uint256 amount) external onlyOwner { require(amount >= totalSupply() / 1000, "Max wallet amount too low"); require(amount <= totalSupply() / 10, "Max wallet amount too high"); maxWalletAmount = amount; emit MaxWalletAmountUpdated(amount); } // Function to set cooldown time function setTradingCooldown(uint256 time) external onlyOwner { require(time <= 300, "Cooldown time too high"); // Maximum 5 minutes tradingCooldown = time; emit CooldownTimeUpdated(time); } // Function to exempt address from limits function setExemptFromLimits(address account, bool exempt) external onlyOwner { isExemptFromLimits[account] = exempt; emit ExemptFromLimitsUpdated(account, exempt); } // Function to toggle dynamic limits function setDynamicLimits(bool enabled) external onlyOwner { dynamicLimitsEnabled = enabled; emit DynamicLimitsUpdated(enabled); } // Calculate current transaction limit based on token age function getCurrentMaxTransactionAmount() public view returns (uint256) { if (!dynamicLimitsEnabled || limitsDisabled) { return totalSupply(); // No limit if disabled } uint256 elapsedTime = block.timestamp - contractLaunchTime; // After 30 days, gradually increase limits if (elapsedTime > 30 days) { if (elapsedTime > 6 * 30 days) { // After 6 months, cap at 1% of total supply return totalSupply() * 10 / 1000; } else { // Linearly increase from 0.2% to 1% over 6 months // Avoid division before multiplication completely uint256 linearIncrease = (totalSupply() * 8 * elapsedTime) / (1000 * 6 * 30 days); return maxTransactionAmount + linearIncrease; } } return maxTransactionAmount; } function getCurrentMaxWalletAmount() public view returns (uint256) { if (!dynamicLimitsEnabled || limitsDisabled) { return totalSupply(); // No limit if disabled } uint256 elapsedTime = block.timestamp - contractLaunchTime; // After 30 days, gradually increase limits if (elapsedTime > 30 days) { if (elapsedTime > 6 * 30 days) { // After 6 months, cap at 3% of total supply return totalSupply() * 30 / 1000; } else { // Linearly increase from 1% to 3% over 6 months // Avoid division before multiplication completely uint256 linearIncrease = (totalSupply() * 20 * (elapsedTime - 30 days)) / (1000 * 6 * 30 days); return maxWalletAmount + linearIncrease; } } return maxWalletAmount; } function disableLimits() external onlyOwner { limitsDisabled = !limitsDisabled; emit LimitsDisabled(); } function togglePancakeSwap() external onlyOwner { isPancakeSwapEnable = !isPancakeSwapEnable; } function setTaxThreshold(uint256 threshold) external onlyOwner { require(threshold >= (totalSupply() * 1) / 100_000, "Threshold too low"); // 0.001% taxThreshold = threshold; emit UpdateThreshold(taxThreshold); } function updateWallet(WalletType _walletType, address _wallet) external onlyOwner { require(_wallet != address(0), "Invalid address"); if (_walletType == WalletType.TEAM) { teamWallet = _wallet; isExemptFromLimits[_wallet] = true; emit UpdateWalletsForTeam(_wallet); } else if (_walletType == WalletType.CHARITY) { charityWallet = _wallet; isExemptFromLimits[_wallet] = true; emit UpdateWalletsForCharity(_wallet); } else if (_walletType == WalletType.BUYBACK) { buybackWallet = _wallet; isExemptFromLimits[_wallet] = true; emit UpdateWalletsForBuyback(_wallet); } else if (_walletType == WalletType.AIRDROP) { airdropWallet = _wallet; isExemptFromLimits[_wallet] = true; emit UpdateWalletsForAirdrop(_wallet); } } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } // Add function to remove address from sniper list function removeSniperAddress(address account) external onlyOwner { require(isSniper[account], "Address is not marked as sniper"); isSniper[account] = false; emit SniperRemoved(account); } function swapTokensAndDistribute() internal nonReentrant { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance == 0) return; swapTokensForEth(contractTokenBalance); uint256 ethBalance = address(this).balance; if (ethBalance > 0) { uint256 share = ethBalance / 4; // Use fixed 35000 gas limit for all transfers bool success1; bool success2; bool success3; bool success4; (success1,) = payable(teamWallet).call{value: share, gas: 35000}(""); (success2,) = payable(charityWallet).call{value: share, gas: 35000}(""); (success3,) = payable(buybackWallet).call{value: share, gas: 35000}(""); (success4,) = payable(airdropWallet).call{value: share, gas: 35000}(""); // Emit events for any failed transfers if (!success1) emit TransferFailed(teamWallet, share); if (!success2) emit TransferFailed(charityWallet, share); if (!success3) emit TransferFailed(buybackWallet, share); if (!success4) emit TransferFailed(airdropWallet, share); } } function manualSwap() external onlyOwner { uint256 contractTokenBalance = balanceOf(address(this)); require(contractTokenBalance > 0, "No tokens to swap"); require(!swapping, "Swap in progress"); swapping = true; swapTokensAndDistribute(); swapping = false; } function _transfer(address sender, address recipient, uint256 amount) internal override { require(sender != address(0), "ERC20: transfer from zero address"); require(recipient != address(0), "ERC20: transfer to zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || _msgSender() == owner(), "Trading is disabled"); if (tradingEnabled) { // Set launch block on first buy only if (launchBlock == 0 && liquidityPairs[sender]) { launchBlock = block.number; } // Detect snipers in the early blocks if (block.number <= launchBlock + sniperBlockWindow && liquidityPairs[sender]) { isSniper[recipient] = true; } // Block sniper transfers require(!isSniper[sender] && !isSniper[recipient], "Sniper detected"); } if (sender == owner() || recipient == owner() || isExemptFromLimits[sender] || isExemptFromLimits[recipient]) { // Exempt transactions from limits _standardTransfer(sender, recipient, amount); return; } // Apply transaction limits uint256 currentMaxTxAmount = getCurrentMaxTransactionAmount(); require(amount <= currentMaxTxAmount, "Transfer amount exceeds max transaction limit"); // Apply wallet limits (except for liquidity pairs) if (!liquidityPairs[recipient]) { uint256 currentMaxWallet = getCurrentMaxWalletAmount(); uint256 recipientBalance = balanceOf(recipient); require(recipientBalance + amount <= currentMaxWallet, "Max wallet amount exceeded"); } // Anti-bot cooldown check on buys and sells bool isBuy = liquidityPairs[sender]; bool isSell = liquidityPairs[recipient]; if (isBuy || isSell) { // Check cooldown period for sender (for sells) and recipient (for buys) address trader = isBuy ? recipient : sender; // Skip check for exempt addresses if (!isExemptFromLimits[trader]) { uint256 lastTrade = _lastTradingTime[trader]; require(block.timestamp >= lastTrade + tradingCooldown || lastTrade == 0, "Trading cooldown period not yet passed"); // Update last trading time _lastTradingTime[trader] = block.timestamp; } } _standardTransfer(sender, recipient, amount); } function _standardTransfer(address sender, address recipient, uint256 amount) private { bool isBuy = liquidityPairs[sender]; bool isSell = liquidityPairs[recipient]; uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= taxThreshold; // Flag to track if we should swap in this transaction bool shouldSwap = canSwap && isSell && !swapping && !isExemptFromLimits[sender] && !isExemptFromLimits[recipient]; if (shouldSwap && isPancakeSwapEnable) { swapping = true; // Set flag swapTokensAndDistribute(); // Call swap function swapping = false; // Reset flag AFTER the swap completes } uint256 fee = 0; // Calculate and collect fee if (isBuy || isSell) { if (!isExemptFromLimits[sender] && !isExemptFromLimits[recipient]) { fee = _calculateTax(amount, Tax); _update(sender, address(this), fee); amount -= fee; } } // Update main transfer balances _update(sender, recipient, amount); } function _calculateTax(uint256 amount, uint256 taxPercentage) private pure returns (uint256) { return (amount * taxPercentage) / 10000; } function initializeLaunchBlock() external onlyOwner { require(launchBlock == 0, "Already initialized"); launchBlock = block.number; emit LaunchBlockInitialized(launchBlock); } function _createLiquidityPair(address token) private { address pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), token); liquidityPairs[pair] = true; } function createLiquidityPair(address token) external onlyOwner { _createLiquidityPair(token); } function recoverStuckTokens(address token, uint256 amount) external onlyOwner nonReentrant { require(token != address(0), "Invalid token address"); require(amount > 0, "Amount must be greater than zero"); bool success = IERC20(token).transfer(owner(), amount); require(success, "Token transfer failed"); } function recoverStuckETH(uint256 amount) external onlyOwner nonReentrant { require(amount > 0 && address(this).balance >= amount, "Invalid amount"); payable(owner()).transfer(amount); } function updateTax(uint256 newTax) external onlyOwner { require(newTax <= 1000, "Tax too high"); // Max 10% Tax = newTax; emit TaxUpdated(newTax); } function isDynamicLimitsEnabled() external view returns (bool) { return dynamicLimitsEnabled; } function areAllLimitsDisabled() external view returns (bool) { return limitsDisabled; } receive() external payable {} fallback() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"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":"newTime","type":"uint256"}],"name":"CooldownTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"DynamicLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"ExemptFromLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"launchBlock","type":"uint256"}],"name":"LaunchBlockInitialized","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"account","type":"address"}],"name":"SniperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"TaxUpdated","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":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"UpdateThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"airdrop","type":"address"}],"name":"UpdateWalletsForAirdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdateWalletsForBuyback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"charity","type":"address"}],"name":"UpdateWalletsForCharity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdateWalletsForTeam","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"Tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areAllLimitsDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractLaunchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"createLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dynamicLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMaxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMaxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeLaunchBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isDynamicLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPancakeSwapEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDynamicLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setTradingCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperBlockWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePancakeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingCooldown","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Crotch.WalletType","name":"_walletType","type":"uint8"},{"internalType":"address","name":"_wallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660166101000a81548160ff0219169083151502179055506001600660176101000a81548160ff0219169083151502179055506001600660186101000a81548160ff0219169083151502179055506101906007556200006b6200075a60201b60201c565b60ff16600a6200007c919062000fc6565b610fa06200008b919062001017565b600855601e600b556002600d5573246eade3dc857956d5fb7b981e0c46d5314fb8fd600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736c147c0e6a9070ad3ce429c4f9fbf13c62070ca8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c2d99a8af865ebab4c860819d551a971608ecaa9601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073933a0da8ed2b8d960ca279e26ec4bafd6efb6ec5601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001f957600080fd5b50336040518060400160405280600681526020017f43726f74636800000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f43524f544348000000000000000000000000000000000000000000000000000081525060016000819055508160049081620002809190620012d2565b508060059081620002929190620012d2565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200030a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620003019190620013fe565b60405180910390fd5b6200031b816200076360201b60201c565b5060006200032e6200075a60201b60201c565b600a6200033c919062001428565b631312d0006200034d919062001017565b90506200036133826200082960201b60201c565b6103e860028262000373919062001017565b6200037f9190620014a8565b6009819055506103e8600a8262000397919062001017565b620003a39190620014a8565b600a8190555042600e819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000709919062001516565b90506200071c81620008b660201b60201c565b62000751306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a0c60201b60201c565b5050506200161b565b60006012905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200089e5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620008959190620013fe565b60405180910390fd5b620008b26000838362000a2660201b60201c565b5050565b600060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000906573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200092c919062001516565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b81526004016200096892919062001548565b6020604051808303816000875af115801562000988573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ae919062001516565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000a21838383600162000c5960201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a7c57806003600082825462000a6f919062001575565b9250508190555062000b54565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000b0c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000b0393929190620015c1565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b9f578060036000828254039250508190555062000bed565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c4c9190620015fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000cce5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000cc59190620013fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000d435760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000d3a9190620013fe565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801562000e33578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000e2a9190620015fe565b60405180910390a35b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ec75780860481111562000e9f5762000e9e62000e39565b5b600185161562000eaf5780820291505b808102905062000ebf8562000e68565b945062000e7f565b94509492505050565b60008262000ee2576001905062000fb5565b8162000ef2576000905062000fb5565b816001811462000f0b576002811462000f165762000f4c565b600191505062000fb5565b60ff84111562000f2b5762000f2a62000e39565b5b8360020a91508482111562000f455762000f4462000e39565b5b5062000fb5565b5060208310610133831016604e8410600b841016171562000f865782820a90508381111562000f805762000f7f62000e39565b5b62000fb5565b62000f95848484600162000e75565b9250905081840481111562000faf5762000fae62000e39565b5b81810290505b9392505050565b6000819050919050565b600062000fd38262000fbc565b915062000fe08362000fbc565b92506200100f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ed0565b905092915050565b6000620010248262000fbc565b9150620010318362000fbc565b9250828202620010418162000fbc565b915082820484148315176200105b576200105a62000e39565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010e457607f821691505b602082108103620010fa57620010f96200109c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001125565b62001170868362001125565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620011b3620011ad620011a78462000fbc565b62001188565b62000fbc565b9050919050565b6000819050919050565b620011cf8362001192565b620011e7620011de82620011ba565b84845462001132565b825550505050565b600090565b620011fe620011ef565b6200120b818484620011c4565b505050565b5b81811015620012335762001227600082620011f4565b60018101905062001211565b5050565b601f82111562001282576200124c8162001100565b620012578462001115565b8101602085101562001267578190505b6200127f620012768562001115565b83018262001210565b50505b505050565b600082821c905092915050565b6000620012a76000198460080262001287565b1980831691505092915050565b6000620012c2838362001294565b9150826002028217905092915050565b620012dd8262001062565b67ffffffffffffffff811115620012f957620012f86200106d565b5b620013058254620010cb565b6200131282828562001237565b600060209050601f8311600181146200134a576000841562001335578287015190505b620013418582620012b4565b865550620013b1565b601f1984166200135a8662001100565b60005b8281101562001384578489015182556001820191506020850194506020810190506200135d565b86831015620013a45784890151620013a0601f89168262001294565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013e682620013b9565b9050919050565b620013f881620013d9565b82525050565b6000602082019050620014156000830184620013ed565b92915050565b600060ff82169050919050565b6000620014358262000fbc565b915062001442836200141b565b9250620014717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ed0565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014b58262000fbc565b9150620014c28362000fbc565b925082620014d557620014d462001479565b5b828204905092915050565b600080fd5b620014f081620013d9565b8114620014fc57600080fd5b50565b6000815190506200151081620014e5565b92915050565b6000602082840312156200152f576200152e620014e0565b5b60006200153f84828501620014ff565b91505092915050565b60006040820190506200155f6000830185620013ed565b6200156e6020830184620013ed565b9392505050565b6000620015828262000fbc565b91506200158f8362000fbc565b9250828201905080821115620015aa57620015a962000e39565b5b92915050565b620015bb8162000fbc565b82525050565b6000606082019050620015d86000830186620013ed565b620015e76020830185620015b0565b620015f66040830184620015b0565b949350505050565b6000602082019050620016156000830184620015b0565b92915050565b608051614da46200165360003960008181610d1c01528181612ef0015281816135ff015281816136e001526137070152614da46000f3fe6080604052600436106102e85760003560e01c806389947bfd11610190578063c3623b20116100dc578063d00efb2f11610095578063dd62ed3e1161006f578063dd62ed3e14610aee578063deab8aea14610b2b578063f2fde38b14610b56578063f928364c14610b7f576102ef565b8063d00efb2f14610a6f578063d576e97214610a9a578063dd4698d014610ac3576102ef565b8063c3623b2014610987578063c596f3fe1461099e578063c8c8ebe4146109c7578063cca0feb6146109f2578063cd2c6a9914610a1b578063cd34c0c214610a58576102ef565b8063a7ab56af11610149578063ab80904f11610123578063ab80904f146108dd578063ad75e48914610908578063ae3dcf2614610931578063bdc303161461095c576102ef565b8063a7ab56af1461084c578063a9059cbb14610875578063aa4bde28146108b2576102ef565b806389947bfd146107505780638da5cb5b1461077957806395d89b41146107a457806398e122fd146107cf578063a13d1a2b146107f8578063a14779c914610821576102ef565b806338eac85d1161024f5780635992704411610208578063715018a6116101e2578063715018a6146106b857806377d1440d146106cf5780637b208769146106fa578063890aceb214610725576102ef565b806359927044146106255780636ea405d31461065057806370a082311461067b576102ef565b806338eac85d146105395780633a03c07e146105645780634234c60b1461058f5780634ada218b146105b857806350e8e512146105e357806351bc3c851461060e576102ef565b80631f3f8d33116102a15780631f3f8d331461041557806323b872dd1461044057806327a14fc21461047d5780632fa62740146104a6578063313ce567146104e357806334b7f7ae1461050e576102ef565b806306fdde03146102f157806307a212be1461031c578063095ea7b3146103455780630f3a325f146103825780631694505e146103bf57806318160ddd146103ea576102ef565b366102ef57005b005b3480156102fd57600080fd5b50610306610b96565b6040516103139190613a78565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613ad5565b610c28565b005b34801561035157600080fd5b5061036c60048036038101906103679190613b60565b610cd7565b6040516103799190613bbb565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613bd6565b610cfa565b6040516103b69190613bbb565b60405180910390f35b3480156103cb57600080fd5b506103d4610d1a565b6040516103e19190613c62565b60405180910390f35b3480156103f657600080fd5b506103ff610d3e565b60405161040c9190613c8c565b60405180910390f35b34801561042157600080fd5b5061042a610d48565b6040516104379190613bbb565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ca7565b610d5f565b6040516104749190613bbb565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613ad5565b610d8e565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613bd6565b610e84565b6040516104da9190613bbb565b60405180910390f35b3480156104ef57600080fd5b506104f8610ea4565b6040516105059190613d16565b60405180910390f35b34801561051a57600080fd5b50610523610ead565b6040516105309190613c8c565b60405180910390f35b34801561054557600080fd5b5061054e610eb3565b60405161055b9190613bbb565b60405180910390f35b34801561057057600080fd5b50610579610ec6565b6040516105869190613bbb565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613ad5565b610ed9565b005b3480156105c457600080fd5b506105cd610f67565b6040516105da9190613bbb565b60405180910390f35b3480156105ef57600080fd5b506105f8610f7a565b6040516106059190613c8c565b60405180910390f35b34801561061a57600080fd5b50610623610f80565b005b34801561063157600080fd5b5061063a611069565b6040516106479190613d40565b60405180910390f35b34801561065c57600080fd5b5061066561108f565b6040516106729190613c8c565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d9190613bd6565b611095565b6040516106af9190613c8c565b60405180910390f35b3480156106c457600080fd5b506106cd6110de565b005b3480156106db57600080fd5b506106e46110f2565b6040516106f19190613c8c565b60405180910390f35b34801561070657600080fd5b5061070f6110f8565b60405161071c9190613d40565b60405180910390f35b34801561073157600080fd5b5061073a61111e565b6040516107479190613c8c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613d87565b611124565b005b34801561078557600080fd5b5061078e611180565b60405161079b9190613d40565b60405180910390f35b3480156107b057600080fd5b506107b96111aa565b6040516107c69190613a78565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613bd6565b61123c565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613db4565b611250565b005b34801561082d57600080fd5b506108366112ec565b6040516108439190613d40565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613bd6565b611312565b005b34801561088157600080fd5b5061089c60048036038101906108979190613b60565b611444565b6040516108a99190613bbb565b60405180910390f35b3480156108be57600080fd5b506108c7611467565b6040516108d49190613c8c565b60405180910390f35b3480156108e957600080fd5b506108f261146d565b6040516108ff9190613c8c565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613ad5565b611550565b005b34801561093d57600080fd5b50610946611608565b6040516109539190613c8c565b60405180910390f35b34801561096857600080fd5b506109716116f9565b60405161097e9190613bbb565b60405180910390f35b34801561099357600080fd5b5061099c611710565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613b60565b61179f565b005b3480156109d357600080fd5b506109dc611937565b6040516109e99190613c8c565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613ad5565b61193d565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190613bd6565b6119cb565b604051610a4f9190613bbb565b60405180910390f35b348015610a6457600080fd5b50610a6d6119eb565b005b348015610a7b57600080fd5b50610a84611a1f565b604051610a919190613c8c565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613e19565b611a25565b005b348015610acf57600080fd5b50610ad8611ea1565b604051610ae59190613bbb565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e59565b611eb4565b604051610b229190613c8c565b60405180910390f35b348015610b3757600080fd5b50610b40611f3b565b604051610b4d9190613d40565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613bd6565b611f61565b005b348015610b8b57600080fd5b50610b94611fe7565b005b606060048054610ba590613ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190613ec8565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b610c30612047565b620186a06001610c3e610d3e565b610c489190613f28565b610c529190613f99565b811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614016565b60405180910390fd5b806008819055507fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d01600854604051610ccc9190613c8c565b60405180910390a150565b600080610ce26120ce565b9050610cef8185856120d6565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b6000600660159054906101000a900460ff16905090565b600080610d6a6120ce565b9050610d778582856120e8565b610d8285858561217c565b60019150509392505050565b610d96612047565b6103e8610da1610d3e565b610dab9190613f99565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614082565b60405180910390fd5b600a610df7610d3e565b610e019190613f99565b811115610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906140ee565b60405180910390fd5b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e799190613c8c565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600b5481565b600660159054906101000a900460ff1681565b600660189054906101000a900460ff1681565b610ee1612047565b61012c811115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061415a565b60405180910390fd5b80600b819055507fc4d978175d3c07d16372ccefaf0cd6282f07b3b93c73c51ca598d816838b623b81604051610f5c9190613c8c565b60405180910390a150565b600660179054906101000a900460ff1681565b600e5481565b610f88612047565b6000610f9330611095565b905060008111610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf906141c6565b60405180910390fd5b600660149054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614232565b60405180910390fd5b6001600660146101000a81548160ff02191690831515021790555061104b61299e565b6000600660146101000a81548160ff02191690831515021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e6612047565b6110f06000612e26565b565b60085481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61112c612047565b80600660186101000a81548160ff0219169083151502179055507f7e0e6e2143876a516bcdac83e707a7aed20ee376e7dc65707b9d70807c54a4d0816040516111759190613bbb565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546111b990613ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546111e590613ec8565b80156112325780601f1061120757610100808354040283529160200191611232565b820191906000526020600020905b81548152906001019060200180831161121557829003601f168201915b5050505050905090565b611244612047565b61124d81612eec565b50565b611258612047565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff5ac7689d017b32b050acd71722bbd0751cfc9913acc11d642645cc2604a5a6682826040516112e0929190614252565b60405180910390a15050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131a612047565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906142c7565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb376567360405160405180910390a250565b60008061144f6120ce565b905061145c81858561217c565b600191505092915050565b600a5481565b6000600660189054906101000a900460ff1615806114975750600660159054906101000a900460ff165b156114ab576114a4610d3e565b905061154d565b6000600e54426114bb91906142e7565b905062278d008111156115465762ed4e008111156114fc576103e8600a6114e0610d3e565b6114ea9190613f28565b6114f49190613f99565b91505061154d565b600064039ef8b00082600861150f610d3e565b6115199190613f28565b6115239190613f28565b61152d9190613f99565b90508060095461153d919061431b565b9250505061154d565b6009549150505b90565b611558612047565b611560613058565b6000811180156115705750804710155b6115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061439b565b60405180910390fd5b6115b7611180565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fc573d6000803e3d6000fd5b5061160561309e565b50565b6000600660189054906101000a900460ff1615806116325750600660159054906101000a900460ff165b156116465761163f610d3e565b90506116f6565b6000600e544261165691906142e7565b905062278d008111156116ef5762ed4e00811115611697576103e8601e61167b610d3e565b6116859190613f28565b61168f9190613f99565b9150506116f6565b600064039ef8b00062278d00836116ae91906142e7565b60146116b8610d3e565b6116c29190613f28565b6116cc9190613f28565b6116d69190613f99565b905080600a546116e6919061431b565b925050506116f6565b600a549150505b90565b6000600660189054906101000a900460ff16905090565b611718612047565b6000600c541461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614407565b60405180910390fd5b43600c819055507f8da81f1d10edd7e242582e37f1e97267643687e6eb87d87c8be39d0a74ead87f600c546040516117959190613c8c565b60405180910390a1565b6117a7612047565b6117af613058565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614473565b60405180910390fd5b60008111611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906144df565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611887611180565b846040518363ffffffff1660e01b81526004016118a59291906144ff565b6020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061453d565b90508061192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906145b6565b60405180910390fd5b5061193361309e565b5050565b60095481565b611945612047565b6103e881111561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614622565b60405180910390fd5b806007819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91816040516119c09190613c8c565b60405180910390a150565b60156020528060005260406000206000915054906101000a900460ff1681565b6119f3612047565b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600c5481565b611a2d612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a939061468e565b60405180910390fd5b60006003811115611ab057611aaf6146ae565b5b826003811115611ac357611ac26146ae565b5b03611b9d5780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc593283808d96116d978f98a4d43b0d5377c2a186c00e6bc147ab590ac9d006081604051611b909190613d40565b60405180910390a1611e9d565b60016003811115611bb157611bb06146ae565b5b826003811115611bc457611bc36146ae565b5b03611c9e5780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc92adabe7e3c798b024690e02ee7d25de288e646ad1dbe65b009342bfd37a7f681604051611c919190613d40565b60405180910390a1611e9c565b60026003811115611cb257611cb16146ae565b5b826003811115611cc557611cc46146ae565b5b03611d9e5780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507e3a625ce2c1733a2f48879bc625b0e8b428365f072b18aaae4a11b26a7f187081604051611d919190613d40565b60405180910390a1611e9b565b600380811115611db157611db06146ae565b5b826003811115611dc457611dc36146ae565b5b03611e9a5780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f98feaa8b24e6c2f447c9354b74b62dd2bb32ebe2c33a556546d0e88420343e1481604051611e919190613d40565b60405180910390a15b5b5b5b5050565b600660169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f69612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd29190613d40565b60405180910390fd5b611fe481612e26565b50565b611fef612047565b600660159054906101000a900460ff1615600660156101000a81548160ff0219169083151502179055507fd0a8ff473dcac5e83a30583490a7d6b4eea5bbb9dd4aa26182b0fa8a231e0c9860405160405180910390a1565b61204f6120ce565b73ffffffffffffffffffffffffffffffffffffffff1661206d611180565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576120906120ce565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016120c39190613d40565b60405180910390fd5b565b600033905090565b6120e383838360016130a8565b505050565b60006120f48484611eb4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121765781811015612166578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161215d939291906146dd565b60405180910390fd5b612175848484840360006130a8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614786565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906147f2565b60405180910390fd5b6000811161229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614884565b60405180910390fd5b600660179054906101000a900460ff16806122f157506122bb611180565b73ffffffffffffffffffffffffffffffffffffffff166122d96120ce565b73ffffffffffffffffffffffffffffffffffffffff16145b612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906148f0565b60405180910390fd5b600660179054906101000a900460ff1615612557576000600c541480156123a05750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ad5743600c819055505b600d54600c546123bd919061431b565b43111580156124155750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612473576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d9061495c565b60405180910390fd5b5b61255f611180565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ca575061259b611180565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061261e5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806126725750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126875761268283838361327f565b612999565b600061269161146d565b9050808211156126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd906149ee565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612791576000612731611608565b9050600061273e85611095565b905081848261274d919061431b565b111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614a5a565b60405180910390fd5b50505b6000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061283c5750805b1561298a5760008261284e5786612850565b855b9050601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612988576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54816128f5919061431b565b421015806129035750600081145b612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614aec565b60405180910390fd5b42601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505b61299586868661327f565b5050505b505050565b6129a6613058565b60006129b130611095565b9050600081036129c15750612e1c565b6129ca81613560565b60004790506000811115612e195760006004826129e79190613f99565b9050600080600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612a3990614b3d565b600060405180830381858888f193505050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612acc90614b3d565b600060405180830381858888f193505050503d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b505080935050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612b5f90614b3d565b600060405180830381858888f193505050503d8060008114612b9d576040519150601f19603f3d011682016040523d82523d6000602084013e612ba2565b606091505b505080925050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612bf290614b3d565b600060405180830381858888f193505050503d8060008114612c30576040519150601f19603f3d011682016040523d82523d6000602084013e612c35565b606091505b50508091505083612cb157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612ca89190613c8c565b60405180910390a25b82612d2757601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d1e9190613c8c565b60405180910390a25b81612d9d57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d949190613c8c565b60405180910390a25b80612e1357601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612e0a9190613c8c565b60405180910390a25b50505050505b50505b612e2461309e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190614b67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b8152600401612fb7929190614b94565b6020604051808303816000875af1158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614b67565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260005403613094576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600081905550565b6001600081905550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361311a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016131119190613d40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361318c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016131839190613d40565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015613279578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516132709190613c8c565b60405180910390a35b50505050565b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600061332c30611095565b90506000600854821015905060008180156133445750835b801561335d5750600660149054906101000a900460ff16155b80156133b35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134095750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508080156134245750600660169054906101000a900460ff165b15613468576001600660146101000a81548160ff02191690831515021790555061344c61299e565b6000600660146101000a81548160ff0219169083151502179055505b600085806134735750845b1561354a57601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351c5750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135495761352d8760075461379d565b905061353a8930836137c0565b808761354691906142e7565b96505b5b6135558989896137c0565b505050505050505050565b6000600267ffffffffffffffff81111561357d5761357c614bbd565b5b6040519080825280602002602001820160405280156135ab5781602001602082028036833780820191505090505b50905030816000815181106135c3576135c2614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368c9190614b67565b816001815181106136a05761369f614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613705307f0000000000000000000000000000000000000000000000000000000000000000846120d6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613767959493929190614d14565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050505050565b600061271082846137ae9190613f28565b6137b89190613f99565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613812578060036000828254613806919061431b565b925050819055506138e7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561389f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613896939291906146dd565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613930578060036000828254039250508190555061397e565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139db9190613c8c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a22578082015181840152602081019050613a07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4a826139e8565b613a5481856139f3565b9350613a64818560208601613a04565b613a6d81613a2e565b840191505092915050565b60006020820190508181036000830152613a928184613a3f565b905092915050565b600080fd5b6000819050919050565b613ab281613a9f565b8114613abd57600080fd5b50565b600081359050613acf81613aa9565b92915050565b600060208284031215613aeb57613aea613a9a565b5b6000613af984828501613ac0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b2d82613b02565b9050919050565b613b3d81613b22565b8114613b4857600080fd5b50565b600081359050613b5a81613b34565b92915050565b60008060408385031215613b7757613b76613a9a565b5b6000613b8585828601613b4b565b9250506020613b9685828601613ac0565b9150509250929050565b60008115159050919050565b613bb581613ba0565b82525050565b6000602082019050613bd06000830184613bac565b92915050565b600060208284031215613bec57613beb613a9a565b5b6000613bfa84828501613b4b565b91505092915050565b6000819050919050565b6000613c28613c23613c1e84613b02565b613c03565b613b02565b9050919050565b6000613c3a82613c0d565b9050919050565b6000613c4c82613c2f565b9050919050565b613c5c81613c41565b82525050565b6000602082019050613c776000830184613c53565b92915050565b613c8681613a9f565b82525050565b6000602082019050613ca16000830184613c7d565b92915050565b600080600060608486031215613cc057613cbf613a9a565b5b6000613cce86828701613b4b565b9350506020613cdf86828701613b4b565b9250506040613cf086828701613ac0565b9150509250925092565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613b22565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613ba0565b8114613d6f57600080fd5b50565b600081359050613d8181613d5b565b92915050565b600060208284031215613d9d57613d9c613a9a565b5b6000613dab84828501613d72565b91505092915050565b60008060408385031215613dcb57613dca613a9a565b5b6000613dd985828601613b4b565b9250506020613dea85828601613d72565b9150509250929050565b60048110613e0157600080fd5b50565b600081359050613e1381613df4565b92915050565b60008060408385031215613e3057613e2f613a9a565b5b6000613e3e85828601613e04565b9250506020613e4f85828601613b4b565b9150509250929050565b60008060408385031215613e7057613e6f613a9a565b5b6000613e7e85828601613b4b565b9250506020613e8f85828601613b4b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee057607f821691505b602082108103613ef357613ef2613e99565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3382613a9f565b9150613f3e83613a9f565b9250828202613f4c81613a9f565b91508282048414831517613f6357613f62613ef9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa482613a9f565b9150613faf83613a9f565b925082613fbf57613fbe613f6a565b5b828204905092915050565b7f5468726573686f6c6420746f6f206c6f77000000000000000000000000000000600082015250565b60006140006011836139f3565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f206c6f7700000000000000600082015250565b600061406c6019836139f3565b915061407782614036565b602082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f2068696768000000000000600082015250565b60006140d8601a836139f3565b91506140e3826140a2565b602082019050919050565b60006020820190508181036000830152614107816140cb565b9050919050565b7f436f6f6c646f776e2074696d6520746f6f206869676800000000000000000000600082015250565b60006141446016836139f3565b915061414f8261410e565b602082019050919050565b6000602082019050818103600083015261417381614137565b9050919050565b7f4e6f20746f6b656e7320746f2073776170000000000000000000000000000000600082015250565b60006141b06011836139f3565b91506141bb8261417a565b602082019050919050565b600060208201905081810360008301526141df816141a3565b9050919050565b7f5377617020696e2070726f677265737300000000000000000000000000000000600082015250565b600061421c6010836139f3565b9150614227826141e6565b602082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b60006040820190506142676000830185613d31565b6142746020830184613bac565b9392505050565b7f41646472657373206973206e6f74206d61726b656420617320736e6970657200600082015250565b60006142b1601f836139f3565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b60006142f282613a9f565b91506142fd83613a9f565b925082820390508181111561431557614314613ef9565b5b92915050565b600061432682613a9f565b915061433183613a9f565b925082820190508082111561434957614348613ef9565b5b92915050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614385600e836139f3565b91506143908261434f565b602082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006143f16013836139f3565b91506143fc826143bb565b602082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b600061445d6015836139f3565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b60006144c96020836139f3565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b60006040820190506145146000830185613d31565b6145216020830184613c7d565b9392505050565b60008151905061453781613d5b565b92915050565b60006020828403121561455357614552613a9a565b5b600061456184828501614528565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006145a06015836139f3565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061460c600c836139f3565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000614678600f836139f3565b915061468382614642565b602082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006060820190506146f26000830186613d31565b6146ff6020830185613c7d565b61470c6040830184613c7d565b949350505050565b7f45524332303a207472616e736665722066726f6d207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147706021836139f3565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220746f207a65726f206164647265737300600082015250565b60006147dc601f836139f3565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061486e6029836139f3565b915061487982614812565b604082019050919050565b6000602082019050818103600083015261489d81614861565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006148da6013836139f3565b91506148e5826148a4565b602082019050919050565b60006020820190508181036000830152614909816148cd565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000614946600f836139f3565b915061495182614910565b602082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f5472616e7366657220616d6f756e742065786365656473206d6178207472616e60008201527f73616374696f6e206c696d697400000000000000000000000000000000000000602082015250565b60006149d8602d836139f3565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b6000614a44601a836139f3565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f54726164696e6720636f6f6c646f776e20706572696f64206e6f74207965742060008201527f7061737365640000000000000000000000000000000000000000000000000000602082015250565b6000614ad66026836139f3565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b600081905092915050565b50565b6000614b27600083614b0c565b9150614b3282614b17565b600082019050919050565b6000614b4882614b1a565b9150819050919050565b600081519050614b6181613b34565b92915050565b600060208284031215614b7d57614b7c613a9a565b5b6000614b8b84828501614b52565b91505092915050565b6000604082019050614ba96000830185613d31565b614bb66020830184613d31565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614c40614c3b614c3684614c1b565b613c03565b613a9f565b9050919050565b614c5081614c25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8b81613b22565b82525050565b6000614c9d8383614c82565b60208301905092915050565b6000602082019050919050565b6000614cc182614c56565b614ccb8185614c61565b9350614cd683614c72565b8060005b83811015614d07578151614cee8882614c91565b9750614cf983614ca9565b925050600181019050614cda565b5085935050505092915050565b600060a082019050614d296000830188613c7d565b614d366020830187614c47565b8181036040830152614d488186614cb6565b9050614d576060830185613d31565b614d646080830184613c7d565b969550505050505056fea2646970667358221220e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102e85760003560e01c806389947bfd11610190578063c3623b20116100dc578063d00efb2f11610095578063dd62ed3e1161006f578063dd62ed3e14610aee578063deab8aea14610b2b578063f2fde38b14610b56578063f928364c14610b7f576102ef565b8063d00efb2f14610a6f578063d576e97214610a9a578063dd4698d014610ac3576102ef565b8063c3623b2014610987578063c596f3fe1461099e578063c8c8ebe4146109c7578063cca0feb6146109f2578063cd2c6a9914610a1b578063cd34c0c214610a58576102ef565b8063a7ab56af11610149578063ab80904f11610123578063ab80904f146108dd578063ad75e48914610908578063ae3dcf2614610931578063bdc303161461095c576102ef565b8063a7ab56af1461084c578063a9059cbb14610875578063aa4bde28146108b2576102ef565b806389947bfd146107505780638da5cb5b1461077957806395d89b41146107a457806398e122fd146107cf578063a13d1a2b146107f8578063a14779c914610821576102ef565b806338eac85d1161024f5780635992704411610208578063715018a6116101e2578063715018a6146106b857806377d1440d146106cf5780637b208769146106fa578063890aceb214610725576102ef565b806359927044146106255780636ea405d31461065057806370a082311461067b576102ef565b806338eac85d146105395780633a03c07e146105645780634234c60b1461058f5780634ada218b146105b857806350e8e512146105e357806351bc3c851461060e576102ef565b80631f3f8d33116102a15780631f3f8d331461041557806323b872dd1461044057806327a14fc21461047d5780632fa62740146104a6578063313ce567146104e357806334b7f7ae1461050e576102ef565b806306fdde03146102f157806307a212be1461031c578063095ea7b3146103455780630f3a325f146103825780631694505e146103bf57806318160ddd146103ea576102ef565b366102ef57005b005b3480156102fd57600080fd5b50610306610b96565b6040516103139190613a78565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613ad5565b610c28565b005b34801561035157600080fd5b5061036c60048036038101906103679190613b60565b610cd7565b6040516103799190613bbb565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613bd6565b610cfa565b6040516103b69190613bbb565b60405180910390f35b3480156103cb57600080fd5b506103d4610d1a565b6040516103e19190613c62565b60405180910390f35b3480156103f657600080fd5b506103ff610d3e565b60405161040c9190613c8c565b60405180910390f35b34801561042157600080fd5b5061042a610d48565b6040516104379190613bbb565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ca7565b610d5f565b6040516104749190613bbb565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613ad5565b610d8e565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613bd6565b610e84565b6040516104da9190613bbb565b60405180910390f35b3480156104ef57600080fd5b506104f8610ea4565b6040516105059190613d16565b60405180910390f35b34801561051a57600080fd5b50610523610ead565b6040516105309190613c8c565b60405180910390f35b34801561054557600080fd5b5061054e610eb3565b60405161055b9190613bbb565b60405180910390f35b34801561057057600080fd5b50610579610ec6565b6040516105869190613bbb565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613ad5565b610ed9565b005b3480156105c457600080fd5b506105cd610f67565b6040516105da9190613bbb565b60405180910390f35b3480156105ef57600080fd5b506105f8610f7a565b6040516106059190613c8c565b60405180910390f35b34801561061a57600080fd5b50610623610f80565b005b34801561063157600080fd5b5061063a611069565b6040516106479190613d40565b60405180910390f35b34801561065c57600080fd5b5061066561108f565b6040516106729190613c8c565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d9190613bd6565b611095565b6040516106af9190613c8c565b60405180910390f35b3480156106c457600080fd5b506106cd6110de565b005b3480156106db57600080fd5b506106e46110f2565b6040516106f19190613c8c565b60405180910390f35b34801561070657600080fd5b5061070f6110f8565b60405161071c9190613d40565b60405180910390f35b34801561073157600080fd5b5061073a61111e565b6040516107479190613c8c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613d87565b611124565b005b34801561078557600080fd5b5061078e611180565b60405161079b9190613d40565b60405180910390f35b3480156107b057600080fd5b506107b96111aa565b6040516107c69190613a78565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613bd6565b61123c565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613db4565b611250565b005b34801561082d57600080fd5b506108366112ec565b6040516108439190613d40565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613bd6565b611312565b005b34801561088157600080fd5b5061089c60048036038101906108979190613b60565b611444565b6040516108a99190613bbb565b60405180910390f35b3480156108be57600080fd5b506108c7611467565b6040516108d49190613c8c565b60405180910390f35b3480156108e957600080fd5b506108f261146d565b6040516108ff9190613c8c565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613ad5565b611550565b005b34801561093d57600080fd5b50610946611608565b6040516109539190613c8c565b60405180910390f35b34801561096857600080fd5b506109716116f9565b60405161097e9190613bbb565b60405180910390f35b34801561099357600080fd5b5061099c611710565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613b60565b61179f565b005b3480156109d357600080fd5b506109dc611937565b6040516109e99190613c8c565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613ad5565b61193d565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190613bd6565b6119cb565b604051610a4f9190613bbb565b60405180910390f35b348015610a6457600080fd5b50610a6d6119eb565b005b348015610a7b57600080fd5b50610a84611a1f565b604051610a919190613c8c565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613e19565b611a25565b005b348015610acf57600080fd5b50610ad8611ea1565b604051610ae59190613bbb565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e59565b611eb4565b604051610b229190613c8c565b60405180910390f35b348015610b3757600080fd5b50610b40611f3b565b604051610b4d9190613d40565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613bd6565b611f61565b005b348015610b8b57600080fd5b50610b94611fe7565b005b606060048054610ba590613ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190613ec8565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b610c30612047565b620186a06001610c3e610d3e565b610c489190613f28565b610c529190613f99565b811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614016565b60405180910390fd5b806008819055507fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d01600854604051610ccc9190613c8c565b60405180910390a150565b600080610ce26120ce565b9050610cef8185856120d6565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b6000600660159054906101000a900460ff16905090565b600080610d6a6120ce565b9050610d778582856120e8565b610d8285858561217c565b60019150509392505050565b610d96612047565b6103e8610da1610d3e565b610dab9190613f99565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614082565b60405180910390fd5b600a610df7610d3e565b610e019190613f99565b811115610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906140ee565b60405180910390fd5b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e799190613c8c565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600b5481565b600660159054906101000a900460ff1681565b600660189054906101000a900460ff1681565b610ee1612047565b61012c811115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061415a565b60405180910390fd5b80600b819055507fc4d978175d3c07d16372ccefaf0cd6282f07b3b93c73c51ca598d816838b623b81604051610f5c9190613c8c565b60405180910390a150565b600660179054906101000a900460ff1681565b600e5481565b610f88612047565b6000610f9330611095565b905060008111610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf906141c6565b60405180910390fd5b600660149054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614232565b60405180910390fd5b6001600660146101000a81548160ff02191690831515021790555061104b61299e565b6000600660146101000a81548160ff02191690831515021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e6612047565b6110f06000612e26565b565b60085481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61112c612047565b80600660186101000a81548160ff0219169083151502179055507f7e0e6e2143876a516bcdac83e707a7aed20ee376e7dc65707b9d70807c54a4d0816040516111759190613bbb565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546111b990613ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546111e590613ec8565b80156112325780601f1061120757610100808354040283529160200191611232565b820191906000526020600020905b81548152906001019060200180831161121557829003601f168201915b5050505050905090565b611244612047565b61124d81612eec565b50565b611258612047565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff5ac7689d017b32b050acd71722bbd0751cfc9913acc11d642645cc2604a5a6682826040516112e0929190614252565b60405180910390a15050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131a612047565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906142c7565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb376567360405160405180910390a250565b60008061144f6120ce565b905061145c81858561217c565b600191505092915050565b600a5481565b6000600660189054906101000a900460ff1615806114975750600660159054906101000a900460ff165b156114ab576114a4610d3e565b905061154d565b6000600e54426114bb91906142e7565b905062278d008111156115465762ed4e008111156114fc576103e8600a6114e0610d3e565b6114ea9190613f28565b6114f49190613f99565b91505061154d565b600064039ef8b00082600861150f610d3e565b6115199190613f28565b6115239190613f28565b61152d9190613f99565b90508060095461153d919061431b565b9250505061154d565b6009549150505b90565b611558612047565b611560613058565b6000811180156115705750804710155b6115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061439b565b60405180910390fd5b6115b7611180565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fc573d6000803e3d6000fd5b5061160561309e565b50565b6000600660189054906101000a900460ff1615806116325750600660159054906101000a900460ff165b156116465761163f610d3e565b90506116f6565b6000600e544261165691906142e7565b905062278d008111156116ef5762ed4e00811115611697576103e8601e61167b610d3e565b6116859190613f28565b61168f9190613f99565b9150506116f6565b600064039ef8b00062278d00836116ae91906142e7565b60146116b8610d3e565b6116c29190613f28565b6116cc9190613f28565b6116d69190613f99565b905080600a546116e6919061431b565b925050506116f6565b600a549150505b90565b6000600660189054906101000a900460ff16905090565b611718612047565b6000600c541461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614407565b60405180910390fd5b43600c819055507f8da81f1d10edd7e242582e37f1e97267643687e6eb87d87c8be39d0a74ead87f600c546040516117959190613c8c565b60405180910390a1565b6117a7612047565b6117af613058565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614473565b60405180910390fd5b60008111611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906144df565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611887611180565b846040518363ffffffff1660e01b81526004016118a59291906144ff565b6020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061453d565b90508061192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906145b6565b60405180910390fd5b5061193361309e565b5050565b60095481565b611945612047565b6103e881111561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614622565b60405180910390fd5b806007819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91816040516119c09190613c8c565b60405180910390a150565b60156020528060005260406000206000915054906101000a900460ff1681565b6119f3612047565b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600c5481565b611a2d612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a939061468e565b60405180910390fd5b60006003811115611ab057611aaf6146ae565b5b826003811115611ac357611ac26146ae565b5b03611b9d5780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc593283808d96116d978f98a4d43b0d5377c2a186c00e6bc147ab590ac9d006081604051611b909190613d40565b60405180910390a1611e9d565b60016003811115611bb157611bb06146ae565b5b826003811115611bc457611bc36146ae565b5b03611c9e5780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc92adabe7e3c798b024690e02ee7d25de288e646ad1dbe65b009342bfd37a7f681604051611c919190613d40565b60405180910390a1611e9c565b60026003811115611cb257611cb16146ae565b5b826003811115611cc557611cc46146ae565b5b03611d9e5780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507e3a625ce2c1733a2f48879bc625b0e8b428365f072b18aaae4a11b26a7f187081604051611d919190613d40565b60405180910390a1611e9b565b600380811115611db157611db06146ae565b5b826003811115611dc457611dc36146ae565b5b03611e9a5780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f98feaa8b24e6c2f447c9354b74b62dd2bb32ebe2c33a556546d0e88420343e1481604051611e919190613d40565b60405180910390a15b5b5b5b5050565b600660169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f69612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd29190613d40565b60405180910390fd5b611fe481612e26565b50565b611fef612047565b600660159054906101000a900460ff1615600660156101000a81548160ff0219169083151502179055507fd0a8ff473dcac5e83a30583490a7d6b4eea5bbb9dd4aa26182b0fa8a231e0c9860405160405180910390a1565b61204f6120ce565b73ffffffffffffffffffffffffffffffffffffffff1661206d611180565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576120906120ce565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016120c39190613d40565b60405180910390fd5b565b600033905090565b6120e383838360016130a8565b505050565b60006120f48484611eb4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121765781811015612166578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161215d939291906146dd565b60405180910390fd5b612175848484840360006130a8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614786565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906147f2565b60405180910390fd5b6000811161229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614884565b60405180910390fd5b600660179054906101000a900460ff16806122f157506122bb611180565b73ffffffffffffffffffffffffffffffffffffffff166122d96120ce565b73ffffffffffffffffffffffffffffffffffffffff16145b612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906148f0565b60405180910390fd5b600660179054906101000a900460ff1615612557576000600c541480156123a05750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ad5743600c819055505b600d54600c546123bd919061431b565b43111580156124155750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612473576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d9061495c565b60405180910390fd5b5b61255f611180565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ca575061259b611180565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061261e5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806126725750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126875761268283838361327f565b612999565b600061269161146d565b9050808211156126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd906149ee565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612791576000612731611608565b9050600061273e85611095565b905081848261274d919061431b565b111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614a5a565b60405180910390fd5b50505b6000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061283c5750805b1561298a5760008261284e5786612850565b855b9050601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612988576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54816128f5919061431b565b421015806129035750600081145b612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614aec565b60405180910390fd5b42601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505b61299586868661327f565b5050505b505050565b6129a6613058565b60006129b130611095565b9050600081036129c15750612e1c565b6129ca81613560565b60004790506000811115612e195760006004826129e79190613f99565b9050600080600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612a3990614b3d565b600060405180830381858888f193505050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612acc90614b3d565b600060405180830381858888f193505050503d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b505080935050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612b5f90614b3d565b600060405180830381858888f193505050503d8060008114612b9d576040519150601f19603f3d011682016040523d82523d6000602084013e612ba2565b606091505b505080925050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612bf290614b3d565b600060405180830381858888f193505050503d8060008114612c30576040519150601f19603f3d011682016040523d82523d6000602084013e612c35565b606091505b50508091505083612cb157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612ca89190613c8c565b60405180910390a25b82612d2757601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d1e9190613c8c565b60405180910390a25b81612d9d57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d949190613c8c565b60405180910390a25b80612e1357601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612e0a9190613c8c565b60405180910390a25b50505050505b50505b612e2461309e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190614b67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b8152600401612fb7929190614b94565b6020604051808303816000875af1158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614b67565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260005403613094576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600081905550565b6001600081905550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361311a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016131119190613d40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361318c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016131839190613d40565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015613279578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516132709190613c8c565b60405180910390a35b50505050565b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600061332c30611095565b90506000600854821015905060008180156133445750835b801561335d5750600660149054906101000a900460ff16155b80156133b35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134095750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508080156134245750600660169054906101000a900460ff165b15613468576001600660146101000a81548160ff02191690831515021790555061344c61299e565b6000600660146101000a81548160ff0219169083151502179055505b600085806134735750845b1561354a57601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351c5750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135495761352d8760075461379d565b905061353a8930836137c0565b808761354691906142e7565b96505b5b6135558989896137c0565b505050505050505050565b6000600267ffffffffffffffff81111561357d5761357c614bbd565b5b6040519080825280602002602001820160405280156135ab5781602001602082028036833780820191505090505b50905030816000815181106135c3576135c2614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368c9190614b67565b816001815181106136a05761369f614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613705307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120d6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613767959493929190614d14565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050505050565b600061271082846137ae9190613f28565b6137b89190613f99565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613812578060036000828254613806919061431b565b925050819055506138e7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561389f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613896939291906146dd565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613930578060036000828254039250508190555061397e565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139db9190613c8c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a22578082015181840152602081019050613a07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4a826139e8565b613a5481856139f3565b9350613a64818560208601613a04565b613a6d81613a2e565b840191505092915050565b60006020820190508181036000830152613a928184613a3f565b905092915050565b600080fd5b6000819050919050565b613ab281613a9f565b8114613abd57600080fd5b50565b600081359050613acf81613aa9565b92915050565b600060208284031215613aeb57613aea613a9a565b5b6000613af984828501613ac0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b2d82613b02565b9050919050565b613b3d81613b22565b8114613b4857600080fd5b50565b600081359050613b5a81613b34565b92915050565b60008060408385031215613b7757613b76613a9a565b5b6000613b8585828601613b4b565b9250506020613b9685828601613ac0565b9150509250929050565b60008115159050919050565b613bb581613ba0565b82525050565b6000602082019050613bd06000830184613bac565b92915050565b600060208284031215613bec57613beb613a9a565b5b6000613bfa84828501613b4b565b91505092915050565b6000819050919050565b6000613c28613c23613c1e84613b02565b613c03565b613b02565b9050919050565b6000613c3a82613c0d565b9050919050565b6000613c4c82613c2f565b9050919050565b613c5c81613c41565b82525050565b6000602082019050613c776000830184613c53565b92915050565b613c8681613a9f565b82525050565b6000602082019050613ca16000830184613c7d565b92915050565b600080600060608486031215613cc057613cbf613a9a565b5b6000613cce86828701613b4b565b9350506020613cdf86828701613b4b565b9250506040613cf086828701613ac0565b9150509250925092565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613b22565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613ba0565b8114613d6f57600080fd5b50565b600081359050613d8181613d5b565b92915050565b600060208284031215613d9d57613d9c613a9a565b5b6000613dab84828501613d72565b91505092915050565b60008060408385031215613dcb57613dca613a9a565b5b6000613dd985828601613b4b565b9250506020613dea85828601613d72565b9150509250929050565b60048110613e0157600080fd5b50565b600081359050613e1381613df4565b92915050565b60008060408385031215613e3057613e2f613a9a565b5b6000613e3e85828601613e04565b9250506020613e4f85828601613b4b565b9150509250929050565b60008060408385031215613e7057613e6f613a9a565b5b6000613e7e85828601613b4b565b9250506020613e8f85828601613b4b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee057607f821691505b602082108103613ef357613ef2613e99565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3382613a9f565b9150613f3e83613a9f565b9250828202613f4c81613a9f565b91508282048414831517613f6357613f62613ef9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa482613a9f565b9150613faf83613a9f565b925082613fbf57613fbe613f6a565b5b828204905092915050565b7f5468726573686f6c6420746f6f206c6f77000000000000000000000000000000600082015250565b60006140006011836139f3565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f206c6f7700000000000000600082015250565b600061406c6019836139f3565b915061407782614036565b602082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f2068696768000000000000600082015250565b60006140d8601a836139f3565b91506140e3826140a2565b602082019050919050565b60006020820190508181036000830152614107816140cb565b9050919050565b7f436f6f6c646f776e2074696d6520746f6f206869676800000000000000000000600082015250565b60006141446016836139f3565b915061414f8261410e565b602082019050919050565b6000602082019050818103600083015261417381614137565b9050919050565b7f4e6f20746f6b656e7320746f2073776170000000000000000000000000000000600082015250565b60006141b06011836139f3565b91506141bb8261417a565b602082019050919050565b600060208201905081810360008301526141df816141a3565b9050919050565b7f5377617020696e2070726f677265737300000000000000000000000000000000600082015250565b600061421c6010836139f3565b9150614227826141e6565b602082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b60006040820190506142676000830185613d31565b6142746020830184613bac565b9392505050565b7f41646472657373206973206e6f74206d61726b656420617320736e6970657200600082015250565b60006142b1601f836139f3565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b60006142f282613a9f565b91506142fd83613a9f565b925082820390508181111561431557614314613ef9565b5b92915050565b600061432682613a9f565b915061433183613a9f565b925082820190508082111561434957614348613ef9565b5b92915050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614385600e836139f3565b91506143908261434f565b602082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006143f16013836139f3565b91506143fc826143bb565b602082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b600061445d6015836139f3565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b60006144c96020836139f3565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b60006040820190506145146000830185613d31565b6145216020830184613c7d565b9392505050565b60008151905061453781613d5b565b92915050565b60006020828403121561455357614552613a9a565b5b600061456184828501614528565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006145a06015836139f3565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061460c600c836139f3565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000614678600f836139f3565b915061468382614642565b602082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006060820190506146f26000830186613d31565b6146ff6020830185613c7d565b61470c6040830184613c7d565b949350505050565b7f45524332303a207472616e736665722066726f6d207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147706021836139f3565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220746f207a65726f206164647265737300600082015250565b60006147dc601f836139f3565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061486e6029836139f3565b915061487982614812565b604082019050919050565b6000602082019050818103600083015261489d81614861565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006148da6013836139f3565b91506148e5826148a4565b602082019050919050565b60006020820190508181036000830152614909816148cd565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000614946600f836139f3565b915061495182614910565b602082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f5472616e7366657220616d6f756e742065786365656473206d6178207472616e60008201527f73616374696f6e206c696d697400000000000000000000000000000000000000602082015250565b60006149d8602d836139f3565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b6000614a44601a836139f3565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f54726164696e6720636f6f6c646f776e20706572696f64206e6f74207965742060008201527f7061737365640000000000000000000000000000000000000000000000000000602082015250565b6000614ad66026836139f3565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b600081905092915050565b50565b6000614b27600083614b0c565b9150614b3282614b17565b600082019050919050565b6000614b4882614b1a565b9150819050919050565b600081519050614b6181613b34565b92915050565b600060208284031215614b7d57614b7c613a9a565b5b6000614b8b84828501614b52565b91505092915050565b6000604082019050614ba96000830185613d31565b614bb66020830184613d31565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614c40614c3b614c3684614c1b565b613c03565b613a9f565b9050919050565b614c5081614c25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8b81613b22565b82525050565b6000614c9d8383614c82565b60208301905092915050565b6000602082019050919050565b6000614cc182614c56565b614ccb8185614c61565b9350614cd683614c72565b8060005b83811015614d07578151614cee8882614c91565b9750614cf983614ca9565b925050600181019050614cda565b5085935050505092915050565b600060a082019050614d296000830188613c7d565b614d366020830187614c47565b8181036040830152614d488186614cb6565b9050614d576060830185613d31565b614d646080830184613c7d565b969550505050505056fea2646970667358221220e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce64736f6c63430008130033
Deployed Bytecode Sourcemap
13992:16268:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7068:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21017:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8323:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14052:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7374:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30083:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8525:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17767:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15534:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7278:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14629:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14138:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14256:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18122:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14216:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14770;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24243:328;;;;;;;;;;;;;:::i;:::-;;14812:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14304:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7485:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2714:103;;;;;;;;;;;;;:::i;:::-;;14341:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14948:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14727:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18637:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2443:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7171:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29087:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18398:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15226:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22745:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7615:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14562:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18861:942;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29562:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19811:936;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29966:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28662:207;;;;;;;;;;;;;:::i;:::-;;29208:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14486:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29778:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15477:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20890:119;;;;;;;;;;;;;:::i;:::-;;14694:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21269:931;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14171:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7861:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15087:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2826:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20755:127;;;;;;;;;;;;;:::i;:::-;;7068:91;7113:13;7146:5;7139:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7068:91;:::o;21017:244::-;2398:13;:11;:13::i;:::-;21134:7:::1;21129:1;21113:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21112:29;;;;:::i;:::-;21099:9;:42;;21091:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21199:9;21184:12;:24;;;;21224:29;21240:12;;21224:29;;;;;;:::i;:::-;;;;;;;;21017:244:::0;:::o;8323:190::-;8396:4;8413:13;8429:12;:10;:12::i;:::-;8413:28;;8452:31;8461:5;8468:7;8477:5;8452:8;:31::i;:::-;8501:4;8494:11;;;8323:190;;;;:::o;15430:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;14052:51::-;;;:::o;7374:99::-;7426:7;7453:12;;7446:19;;7374:99;:::o;30083:101::-;30138:4;30162:14;;;;;;;;;;;30155:21;;30083:101;:::o;8525:249::-;8612:4;8629:15;8647:12;:10;:12::i;:::-;8629:30;;8670:37;8686:4;8692:7;8701:5;8670:15;:37::i;:::-;8718:26;8728:4;8734:2;8738:5;8718:9;:26::i;:::-;8762:4;8755:11;;;8525:249;;;;;:::o;17767:309::-;2398:13;:11;:13::i;:::-;17875:4:::1;17859:13;:11;:13::i;:::-;:20;;;;:::i;:::-;17849:6;:30;;17841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17954:2;17938:13;:11;:13::i;:::-;:18;;;;:::i;:::-;17928:6;:28;;17920:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18016:6;17998:15;:24;;;;18038:30;18061:6;18038:30;;;;;;:::i;:::-;;;;;;;;17767:309:::0;:::o;15534:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7278:84::-;7327:5;7352:2;7345:9;;7278:84;:::o;14629:35::-;;;;:::o;14138:26::-;;;;;;;;;;;;;:::o;14256:39::-;;;;;;;;;;;;;:::o;18122:221::-;2398:13;:11;:13::i;:::-;18210:3:::1;18202:4;:11;;18194:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18290:4;18272:15;:22;;;;18310:25;18330:4;18310:25;;;;;;:::i;:::-;;;;;;;;18122:221:::0;:::o;14216:33::-;;;;;;;;;;;;;:::o;14770:::-;;;;:::o;24243:328::-;2398:13;:11;:13::i;:::-;24295:28:::1;24326:24;24344:4;24326:9;:24::i;:::-;24295:55;;24392:1;24369:20;:24;24361:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24435:8;;;;;;;;;;;24434:9;24426:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24496:4;24485:8;;:15;;;;;;;;;;;;;;;;;;24511:25;:23;:25::i;:::-;24558:5;24547:8;;:16;;;;;;;;;;;;;;;;;;24284:287;24243:328::o:0;14812:70::-;;;;;;;;;;;;;:::o;14304:24::-;;;;:::o;7485:118::-;7550:7;7577:9;:18;7587:7;7577:18;;;;;;;;;;;;;;;;7570:25;;7485:118;;;:::o;2714:103::-;2398:13;:11;:13::i;:::-;2779:30:::1;2806:1;2779:18;:30::i;:::-;2714:103::o:0;14341:61::-;;;;:::o;14948:73::-;;;;;;;;;;;;;:::o;14727:36::-;;;;:::o;18637:153::-;2398:13;:11;:13::i;:::-;18730:7:::1;18707:20;;:30;;;;;;;;;;;;;;;;;;18753:29;18774:7;18753:29;;;;;;:::i;:::-;;;;;;;;18637:153:::0;:::o;2443:87::-;2489:7;2516:6;;;;;;;;;;;2509:13;;2443:87;:::o;7171:95::-;7218:13;7251:7;7244:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7171:95;:::o;29087:109::-;2398:13;:11;:13::i;:::-;29161:27:::1;29182:5;29161:20;:27::i;:::-;29087:109:::0;:::o;18398:189::-;2398:13;:11;:13::i;:::-;18517:6:::1;18487:18;:27;18506:7;18487:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;18539:40;18563:7;18572:6;18539:40;;;;;;;:::i;:::-;;;;;;;;18398:189:::0;;:::o;15226:73::-;;;;;;;;;;;;;:::o;22745:219::-;2398:13;:11;:13::i;:::-;22829:8:::1;:17;22838:7;22829:17;;;;;;;;;;;;;;;;;;;;;;;;;22821:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:5;22893:8;:17;22902:7;22893:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;22948:7;22934:22;;;;;;;;;;;;22745:219:::0;:::o;7615:182::-;7684:4;7701:13;7717:12;:10;:12::i;:::-;7701:28;;7740:27;7750:5;7757:2;7761:5;7740:9;:27::i;:::-;7785:4;7778:11;;;7615:182;;;;:::o;14562:30::-;;;;:::o;18861:942::-;18924:7;18951:20;;;;;;;;;;;18950:21;:39;;;;18975:14;;;;;;;;;;;18950:39;18946:116;;;19013:13;:11;:13::i;:::-;19006:20;;;;18946:116;19082:19;19122:18;;19104:15;:36;;;;:::i;:::-;19082:58;;19232:7;19218:11;:21;19214:534;;;19274:11;19260;:25;19256:481;;;19396:4;19391:2;19375:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;19368:32;;;;;19256:481;19577:22;19639:18;19623:11;19619:1;19603:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;;;:::i;:::-;19602:56;;;;:::i;:::-;19577:81;;19707:14;19684:20;;:37;;;;:::i;:::-;19677:44;;;;;;19214:534;19775:20;;19768:27;;;18861:942;;:::o;29562:208::-;2398:13;:11;:13::i;:::-;5674:21:::1;:19;:21::i;:::-;29663:1:::2;29654:6;:10;:45;;;;;29693:6;29668:21;:31;;29654:45;29646:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:7;:5;:7::i;:::-;29729:25;;:33;29755:6;29729:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;5718:20:::1;:18;:20::i;:::-;29562:208:::0;:::o;19811:936::-;19869:7;19894:20;;;;;;;;;;;19893:21;:39;;;;19918:14;;;;;;;;;;;19893:39;19889:116;;;19956:13;:11;:13::i;:::-;19949:20;;;;19889:116;20025:19;20065:18;;20047:15;:36;;;;:::i;:::-;20025:58;;20175:7;20161:11;:21;20157:540;;;20217:11;20203;:25;20199:487;;;20339:4;20334:2;20318:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;20311:32;;;;;20199:487;20518:22;20593:18;20580:7;20566:11;:21;;;;:::i;:::-;20560:2;20544:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:44;;;;:::i;:::-;20543:69;;;;:::i;:::-;20518:94;;20656:14;20638:15;;:32;;;;:::i;:::-;20631:39;;;;;;20157:540;20724:15;;20717:22;;;19811:936;;:::o;29966:109::-;30023:4;30047:20;;;;;;;;;;;30040:27;;29966:109;:::o;28662:207::-;2398:13;:11;:13::i;:::-;28748:1:::1;28733:11;;:16;28725:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28798:12;28784:11;:26;;;;28826:35;28849:11;;28826:35;;;;;;:::i;:::-;;;;;;;;28662:207::o:0;29208:346::-;2398:13;:11;:13::i;:::-;5674:21:::1;:19;:21::i;:::-;29335:1:::2;29318:19;;:5;:19;;::::0;29310:53:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:1;29382:6;:10;29374:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29440:12;29462:5;29455:22;;;29478:7;:5;:7::i;:::-;29487:6;29455:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29440:54;;29513:7;29505:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29299:255;5718:20:::1;:18;:20::i;:::-;29208:346:::0;;:::o;14486:35::-;;;;:::o;29778:180::-;2398:13;:11;:13::i;:::-;29861:4:::1;29851:6;:14;;29843:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;29910:6;29904:3;:12;;;;29932:18;29943:6;29932:18;;;;;;:::i;:::-;;;;;;;;29778:180:::0;:::o;15477:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20890:119::-;2398:13;:11;:13::i;:::-;20972:19:::1;;;;;;;;;;;20971:20;20949:19;;:42;;;;;;;;;;;;;;;;;;20890:119::o:0;14694:26::-;;;;:::o;21269:931::-;2398:13;:11;:13::i;:::-;21389:1:::1;21370:21;;:7;:21;;::::0;21362:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21443:15;21428:30;;;;;;;;:::i;:::-;;:11;:30;;;;;;;;:::i;:::-;;::::0;21424:769:::1;;21488:7;21475:10;;:20;;;;;;;;;;;;;;;;;;21540:4;21510:18;:27;21529:7;21510:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21564:29;21585:7;21564:29;;;;;;:::i;:::-;;;;;;;;21424:769;;;21630:18;21615:33;;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;21611:582:::1;;21681:7;21665:13;;:23;;;;;;;;;;;;;;;;;;21733:4;21703:18;:27;21722:7;21703:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21757:32;21781:7;21757:32;;;;;;:::i;:::-;;;;;;;;21611:582;;;21826:18;21811:33;;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;21807:386:::1;;21877:7;21861:13;;:23;;;;;;;;;;;;;;;;;;21929:4;21899:18;:27;21918:7;21899:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21953:32;21977:7;21953:32;;;;;;:::i;:::-;;;;;;;;21807:386;;;22022:18;22007:33:::0;::::1;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;22003:190:::1;;22073:7;22057:13;;:23;;;;;;;;;;;;;;;;;;22125:4;22095:18;:27;22114:7;22095:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22149:32;22173:7;22149:32;;;;;;:::i;:::-;;;;;;;;22003:190;21807:386;21611:582;21424:769;21269:931:::0;;:::o;14171:38::-;;;;;;;;;;;;;:::o;7861:142::-;7941:7;7968:11;:18;7980:5;7968:18;;;;;;;;;;;;;;;:27;7987:7;7968:27;;;;;;;;;;;;;;;;7961:34;;7861:142;;;;:::o;15087:73::-;;;;;;;;;;;;;:::o;2826:220::-;2398:13;:11;:13::i;:::-;2931:1:::1;2911:22;;:8;:22;;::::0;2907:93:::1;;2985:1;2957:31;;;;;;;;;;;:::i;:::-;;;;;;;;2907:93;3010:28;3029:8;3010:18;:28::i;:::-;2826:220:::0;:::o;20755:127::-;2398:13;:11;:13::i;:::-;20828:14:::1;;;;;;;;;;;20827:15;20810:14;;:32;;;;;;;;;;;;;;;;;;20858:16;;;;;;;;;;20755:127::o:0;2539:166::-;2610:12;:10;:12::i;:::-;2599:23;;:7;:5;:7::i;:::-;:23;;;2595:103;;2673:12;:10;:12::i;:::-;2646:40;;;;;;;;;;;:::i;:::-;;;;;;;;2595:103;2539:166::o;1560:98::-;1613:7;1640:10;1633:17;;1560:98;:::o;10297:130::-;10382:37;10391:5;10398:7;10407:5;10414:4;10382:8;:37::i;:::-;10297:130;;;:::o;10888:487::-;10988:24;11015:25;11025:5;11032:7;11015:9;:25::i;:::-;10988:52;;11075:17;11055:16;:37;11051:317;;11132:5;11113:16;:24;11109:132;;;11192:7;11201:16;11219:5;11165:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;11109:132;11284:57;11293:5;11300:7;11328:5;11309:16;:24;11335:5;11284:8;:57::i;:::-;11051:317;10977:398;10888:487;;;:::o;24583:2669::-;24708:1;24690:20;;:6;:20;;;24682:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24788:1;24767:23;;:9;:23;;;24759:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24854:1;24845:6;:10;24837:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24920:14;;;;;;;;;;;:41;;;;24954:7;:5;:7::i;:::-;24938:23;;:12;:10;:12::i;:::-;:23;;;24920:41;24912:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25002:14;;;;;;;;;;;24998:538;;;25103:1;25088:11;;:16;:42;;;;;25108:14;:22;25123:6;25108:22;;;;;;;;;;;;;;;;;;;;;;;;;25088:42;25084:109;;;25165:12;25151:11;:26;;;;25084:109;25294:17;;25280:11;;:31;;;;:::i;:::-;25264:12;:47;;:73;;;;;25315:14;:22;25330:6;25315:22;;;;;;;;;;;;;;;;;;;;;;;;;25264:73;25260:140;;;25380:4;25358:8;:19;25367:9;25358:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25260:140;25464:8;:16;25473:6;25464:16;;;;;;;;;;;;;;;;;;;;;;;;;25463:17;:41;;;;;25485:8;:19;25494:9;25485:19;;;;;;;;;;;;;;;;;;;;;;;;;25484:20;25463:41;25455:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24998:538;25562:7;:5;:7::i;:::-;25552:17;;:6;:17;;;:41;;;;25586:7;:5;:7::i;:::-;25573:20;;:9;:20;;;25552:41;:85;;;;25611:18;:26;25630:6;25611:26;;;;;;;;;;;;;;;;;;;;;;;;;25552:85;:118;;;;25641:18;:29;25660:9;25641:29;;;;;;;;;;;;;;;;;;;;;;;;;25552:118;25548:264;;;25735:44;25753:6;25761:9;25772:6;25735:17;:44::i;:::-;25794:7;;25548:264;25861:26;25890:32;:30;:32::i;:::-;25861:61;;25951:18;25941:6;:28;;25933:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;26098:14;:25;26113:9;26098:25;;;;;;;;;;;;;;;;;;;;;;;;;26093:274;;26140:24;26167:27;:25;:27::i;:::-;26140:54;;26209:24;26236:20;26246:9;26236;:20::i;:::-;26209:47;;26308:16;26298:6;26279:16;:25;;;;:::i;:::-;:45;;26271:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;26125:242;;26093:274;26433:10;26446:14;:22;26461:6;26446:22;;;;;;;;;;;;;;;;;;;;;;;;;26433:35;;26479:11;26493:14;:25;26508:9;26493:25;;;;;;;;;;;;;;;;;;;;;;;;;26479:39;;26543:5;:15;;;;26552:6;26543:15;26539:649;;;26661:14;26678:5;:26;;26698:6;26678:26;;;26686:9;26678:26;26661:43;;26786:18;:26;26805:6;26786:26;;;;;;;;;;;;;;;;;;;;;;;;;26781:396;;26833:17;26853:16;:24;26870:6;26853:24;;;;;;;;;;;;;;;;26833:44;;26935:15;;26923:9;:27;;;;:::i;:::-;26904:15;:46;;:64;;;;26967:1;26954:9;:14;26904:64;26896:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:15;27119:16;:24;27136:6;27119:24;;;;;;;;;;;;;;;:42;;;;26814:363;26781:396;26560:628;26539:649;27200:44;27218:6;27226:9;27237:6;27200:17;:44::i;:::-;24671:2581;;;24583:2669;;;;:::o;22972:1259::-;5674:21;:19;:21::i;:::-;23040:28:::1;23071:24;23089:4;23071:9;:24::i;:::-;23040:55;;23134:1;23110:20;:25:::0;23106:38:::1;;23137:7;;;23106:38;23156;23173:20;23156:16;:38::i;:::-;23205:18;23226:21;23205:42;;23275:1;23262:10;:14;23258:966;;;23293:13;23322:1;23309:10;:14;;;;:::i;:::-;23293:30;;23412:13;23440::::0;23468::::1;23496::::0;23560:10:::1;;;;;;;;;;;23552:24;;23584:5;23596;23552:54;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23538:68;;;;;23643:13;;;;;;;;;;;23635:27;;23670:5;23682;23635:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23621:71;;;;;23729:13;;;;;;;;;;;23721:27;;23756:5;23768;23721:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23707:71;;;;;23815:13;;;;;;;;;;;23807:27;;23842:5;23854;23807:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23793:71;;;;;23951:8;23946:53;;23981:10;;;;;;;;;;;23966:33;;;23993:5;23966:33;;;;;;:::i;:::-;;;;;;;;23946:53;24019:8;24014:56;;24049:13;;;;;;;;;;;24034:36;;;24064:5;24034:36;;;;;;:::i;:::-;;;;;;;;24014:56;24090:8;24085:56;;24120:13;;;;;;;;;;;24105:36;;;24135:5;24105:36;;;;;;:::i;:::-;;;;;;;;24085:56;24161:8;24156:56;;24191:13;;;;;;;;;;;24176:36;;;24206:5;24176:36;;;;;;:::i;:::-;;;;;;;;24156:56;23278:946;;;;;23258:966;23029:1202;;5706:1;5718:20:::0;:18;:20::i;:::-;22972:1259::o;3055:191::-;3129:16;3148:6;;;;;;;;;;;3129:25;;3174:8;3165:6;;:17;;;;;;;;;;;;;;;;;;3229:8;3198:40;;3219:8;3198:40;;;;;;;;;;;;3118:128;3055:191;:::o;28877:202::-;28941:12;28974:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28956:55;;;29020:4;29027:5;28956:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:92;;29067:4;29044:14;:20;29059:4;29044:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;28930:149;28877:202;:::o;5754:315::-;5052:1;5883:7;;:18;5879:88;;5925:30;;;;;;;;;;;;;;5879:88;5052:1;6044:7;:17;;;;5754:315::o;6077:212::-;5009:1;6260:7;:21;;;;6077:212::o;10433:443::-;10563:1;10546:19;;:5;:19;;;10542:91;;10618:1;10589:32;;;;;;;;;;;:::i;:::-;;;;;;;;10542:91;10666:1;10647:21;;:7;:21;;;10643:92;;10720:1;10692:31;;;;;;;;;;;:::i;:::-;;;;;;;;10643:92;10775:5;10745:11;:18;10757:5;10745:18;;;;;;;;;;;;;;;:27;10764:7;10745:27;;;;;;;;;;;;;;;:35;;;;10795:9;10791:78;;;10842:7;10826:31;;10835:5;10826:31;;;10851:5;10826:31;;;;;;:::i;:::-;;;;;;;;10791:78;10433:443;;;;:::o;27260:1235::-;27357:10;27370:14;:22;27385:6;27370:22;;;;;;;;;;;;;;;;;;;;;;;;;27357:35;;27405:11;27419:14;:25;27434:9;27419:25;;;;;;;;;;;;;;;;;;;;;;;;;27405:39;;27457:28;27488:24;27506:4;27488:9;:24::i;:::-;27457:55;;27523:12;27562;;27538:20;:36;;27523:51;;27659:15;27677:7;:17;;;;;27688:6;27677:17;:30;;;;;27699:8;;;;;;;;;;;27698:9;27677:30;:87;;;;;27738:18;:26;27757:6;27738:26;;;;;;;;;;;;;;;;;;;;;;;;;27737:27;27677:87;:121;;;;;27769:18;:29;27788:9;27769:29;;;;;;;;;;;;;;;;;;;;;;;;;27768:30;27677:121;27659:139;;27815:10;:33;;;;;27829:19;;;;;;;;;;;27815:33;27811:227;;;27876:4;27865:8;;:15;;;;;;;;;;;;;;;;;;27908:25;:23;:25::i;:::-;27982:5;27971:8;;:16;;;;;;;;;;;;;;;;;;27811:227;28066:11;28136:5;:15;;;;28145:6;28136:15;28132:267;;;28173:18;:26;28192:6;28173:26;;;;;;;;;;;;;;;;;;;;;;;;;28172:27;:61;;;;;28204:18;:29;28223:9;28204:29;;;;;;;;;;;;;;;;;;;;;;;;;28203:30;28172:61;28168:220;;;28260:26;28274:6;28282:3;;28260:13;:26::i;:::-;28254:32;;28305:35;28313:6;28329:4;28336:3;28305:7;:35::i;:::-;28369:3;28359:13;;;;;:::i;:::-;;;28168:220;28132:267;28451:34;28459:6;28467:9;28478:6;28451:7;:34::i;:::-;27346:1149;;;;;;27260:1235;;;:::o;22208:473::-;22274:21;22312:1;22298:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22274:40;;22343:4;22325;22330:1;22325:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22369:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22359:4;22364:1;22359:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22404:62;22421:4;22436:15;22454:11;22404:8;:62::i;:::-;22477:15;:66;;;22558:11;22584:1;22600:4;22627;22647:15;22477:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22263:418;22208:473;:::o;28503:151::-;28587:7;28641:5;28624:13;28615:6;:22;;;;:::i;:::-;28614:32;;;;:::i;:::-;28607:39;;28503:151;;;;:::o;9108:732::-;9214:1;9198:18;;:4;:18;;;9194:369;;9249:5;9233:12;;:21;;;;;;;:::i;:::-;;;;;;;;9194:369;;;9287:19;9309:9;:15;9319:4;9309:15;;;;;;;;;;;;;;;;9287:37;;9357:5;9343:11;:19;9339:117;;;9415:4;9421:11;9434:5;9390:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;9339:117;9531:5;9517:11;:19;9499:9;:15;9509:4;9499:15;;;;;;;;;;;;;;;:37;;;;9272:291;9194:369;9594:1;9580:16;;:2;:16;;;9576:213;;9658:5;9642:12;;:21;;;;;;;;;;;9576:213;;;9757:5;9740:9;:13;9750:2;9740:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;9576:213;9822:2;9807:25;;9816:4;9807:25;;;9826:5;9807:25;;;;;;:::i;:::-;;;;;;;;9108:732;;;:::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:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:329::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:153::-;4539:9;4572:37;4603:5;4572:37;:::i;:::-;4559:50;;4462:153;;;:::o;4621:185::-;4735:64;4793:5;4735:64;:::i;:::-;4730:3;4723:77;4621:185;;:::o;4812:276::-;4932:4;4970:2;4959:9;4955:18;4947:26;;4983:98;5078:1;5067:9;5063:17;5054:6;4983:98;:::i;:::-;4812:276;;;;:::o;5094:118::-;5181:24;5199:5;5181:24;:::i;:::-;5176:3;5169:37;5094:118;;:::o;5218:222::-;5311:4;5349:2;5338:9;5334:18;5326:26;;5362:71;5430:1;5419:9;5415:17;5406:6;5362:71;:::i;:::-;5218:222;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:323::-;7170:6;7219:2;7207:9;7198:7;7194:23;7190:32;7187:119;;;7225:79;;:::i;:::-;7187:119;7345:1;7370:50;7412:7;7403:6;7392:9;7388:22;7370:50;:::i;:::-;7360:60;;7316:114;7114:323;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:114::-;8005:1;7998:5;7995:12;7985:40;;8021:1;8018;8011:12;7985:40;7917:114;:::o;8037:169::-;8098:5;8136:6;8123:20;8114:29;;8152:48;8194:5;8152:48;:::i;:::-;8037:169;;;;:::o;8212:504::-;8295:6;8303;8352:2;8340:9;8331:7;8327:23;8323:32;8320:119;;;8358:79;;:::i;:::-;8320:119;8478:1;8503:68;8563:7;8554:6;8543:9;8539:22;8503:68;:::i;:::-;8493:78;;8449:132;8620:2;8646:53;8691:7;8682:6;8671:9;8667:22;8646:53;:::i;:::-;8636:63;;8591:118;8212:504;;;;;:::o;8722:474::-;8790:6;8798;8847:2;8835:9;8826:7;8822:23;8818:32;8815:119;;;8853:79;;:::i;:::-;8815:119;8973:1;8998:53;9043:7;9034:6;9023:9;9019:22;8998:53;:::i;:::-;8988:63;;8944:117;9100:2;9126:53;9171:7;9162:6;9151:9;9147:22;9126:53;:::i;:::-;9116:63;;9071:118;8722:474;;;;;:::o;9202:180::-;9250:77;9247:1;9240:88;9347:4;9344:1;9337:15;9371:4;9368:1;9361:15;9388:320;9432:6;9469:1;9463:4;9459:12;9449:22;;9516:1;9510:4;9506:12;9537:18;9527:81;;9593:4;9585:6;9581:17;9571:27;;9527:81;9655:2;9647:6;9644:14;9624:18;9621:38;9618:84;;9674:18;;:::i;:::-;9618:84;9439:269;9388:320;;;:::o;9714:180::-;9762:77;9759:1;9752:88;9859:4;9856:1;9849:15;9883:4;9880:1;9873:15;9900:410;9940:7;9963:20;9981:1;9963:20;:::i;:::-;9958:25;;9997:20;10015:1;9997:20;:::i;:::-;9992:25;;10052:1;10049;10045:9;10074:30;10092:11;10074:30;:::i;:::-;10063:41;;10253:1;10244:7;10240:15;10237:1;10234:22;10214:1;10207:9;10187:83;10164:139;;10283:18;;:::i;:::-;10164:139;9948:362;9900:410;;;;:::o;10316:180::-;10364:77;10361:1;10354:88;10461:4;10458:1;10451:15;10485:4;10482:1;10475:15;10502:185;10542:1;10559:20;10577:1;10559:20;:::i;:::-;10554:25;;10593:20;10611:1;10593:20;:::i;:::-;10588:25;;10632:1;10622:35;;10637:18;;:::i;:::-;10622:35;10679:1;10676;10672:9;10667:14;;10502:185;;;;:::o;10693:167::-;10833:19;10829:1;10821:6;10817:14;10810:43;10693:167;:::o;10866:366::-;11008:3;11029:67;11093:2;11088:3;11029:67;:::i;:::-;11022:74;;11105:93;11194:3;11105:93;:::i;:::-;11223:2;11218:3;11214:12;11207:19;;10866:366;;;:::o;11238:419::-;11404:4;11442:2;11431:9;11427:18;11419:26;;11491:9;11485:4;11481:20;11477:1;11466:9;11462:17;11455:47;11519:131;11645:4;11519:131;:::i;:::-;11511:139;;11238:419;;;:::o;11663:175::-;11803:27;11799:1;11791:6;11787:14;11780:51;11663:175;:::o;11844:366::-;11986:3;12007:67;12071:2;12066:3;12007:67;:::i;:::-;12000:74;;12083:93;12172:3;12083:93;:::i;:::-;12201:2;12196:3;12192:12;12185:19;;11844:366;;;:::o;12216:419::-;12382:4;12420:2;12409:9;12405:18;12397:26;;12469:9;12463:4;12459:20;12455:1;12444:9;12440:17;12433:47;12497:131;12623:4;12497:131;:::i;:::-;12489:139;;12216:419;;;:::o;12641:176::-;12781:28;12777:1;12769:6;12765:14;12758:52;12641:176;:::o;12823:366::-;12965:3;12986:67;13050:2;13045:3;12986:67;:::i;:::-;12979:74;;13062:93;13151:3;13062:93;:::i;:::-;13180:2;13175:3;13171:12;13164:19;;12823:366;;;:::o;13195:419::-;13361:4;13399:2;13388:9;13384:18;13376:26;;13448:9;13442:4;13438:20;13434:1;13423:9;13419:17;13412:47;13476:131;13602:4;13476:131;:::i;:::-;13468:139;;13195:419;;;:::o;13620:172::-;13760:24;13756:1;13748:6;13744:14;13737:48;13620:172;:::o;13798:366::-;13940:3;13961:67;14025:2;14020:3;13961:67;:::i;:::-;13954:74;;14037:93;14126:3;14037:93;:::i;:::-;14155:2;14150:3;14146:12;14139:19;;13798:366;;;:::o;14170:419::-;14336:4;14374:2;14363:9;14359:18;14351:26;;14423:9;14417:4;14413:20;14409:1;14398:9;14394:17;14387:47;14451:131;14577:4;14451:131;:::i;:::-;14443:139;;14170:419;;;:::o;14595:167::-;14735:19;14731:1;14723:6;14719:14;14712:43;14595:167;:::o;14768:366::-;14910:3;14931:67;14995:2;14990:3;14931:67;:::i;:::-;14924:74;;15007:93;15096:3;15007:93;:::i;:::-;15125:2;15120:3;15116:12;15109:19;;14768:366;;;:::o;15140:419::-;15306:4;15344:2;15333:9;15329:18;15321:26;;15393:9;15387:4;15383:20;15379:1;15368:9;15364:17;15357:47;15421:131;15547:4;15421:131;:::i;:::-;15413:139;;15140:419;;;:::o;15565:166::-;15705:18;15701:1;15693:6;15689:14;15682:42;15565:166;:::o;15737:366::-;15879:3;15900:67;15964:2;15959:3;15900:67;:::i;:::-;15893:74;;15976:93;16065:3;15976:93;:::i;:::-;16094:2;16089:3;16085:12;16078:19;;15737:366;;;:::o;16109:419::-;16275:4;16313:2;16302:9;16298:18;16290:26;;16362:9;16356:4;16352:20;16348:1;16337:9;16333:17;16326:47;16390:131;16516:4;16390:131;:::i;:::-;16382:139;;16109:419;;;:::o;16534:320::-;16649:4;16687:2;16676:9;16672:18;16664:26;;16700:71;16768:1;16757:9;16753:17;16744:6;16700:71;:::i;:::-;16781:66;16843:2;16832:9;16828:18;16819:6;16781:66;:::i;:::-;16534:320;;;;;:::o;16860:181::-;17000:33;16996:1;16988:6;16984:14;16977:57;16860:181;:::o;17047:366::-;17189:3;17210:67;17274:2;17269:3;17210:67;:::i;:::-;17203:74;;17286:93;17375:3;17286:93;:::i;:::-;17404:2;17399:3;17395:12;17388:19;;17047:366;;;:::o;17419:419::-;17585:4;17623:2;17612:9;17608:18;17600:26;;17672:9;17666:4;17662:20;17658:1;17647:9;17643:17;17636:47;17700:131;17826:4;17700:131;:::i;:::-;17692:139;;17419:419;;;:::o;17844:194::-;17884:4;17904:20;17922:1;17904:20;:::i;:::-;17899:25;;17938:20;17956:1;17938:20;:::i;:::-;17933:25;;17982:1;17979;17975:9;17967:17;;18006:1;18000:4;17997:11;17994:37;;;18011:18;;:::i;:::-;17994:37;17844:194;;;;:::o;18044:191::-;18084:3;18103:20;18121:1;18103:20;:::i;:::-;18098:25;;18137:20;18155:1;18137:20;:::i;:::-;18132:25;;18180:1;18177;18173:9;18166:16;;18201:3;18198:1;18195:10;18192:36;;;18208:18;;:::i;:::-;18192:36;18044:191;;;;:::o;18241:164::-;18381:16;18377:1;18369:6;18365:14;18358:40;18241:164;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:169::-;19348:21;19344:1;19336:6;19332:14;19325:45;19208:169;:::o;19383:366::-;19525:3;19546:67;19610:2;19605:3;19546:67;:::i;:::-;19539:74;;19622:93;19711:3;19622:93;:::i;:::-;19740:2;19735:3;19731:12;19724:19;;19383:366;;;:::o;19755:419::-;19921:4;19959:2;19948:9;19944:18;19936:26;;20008:9;20002:4;19998:20;19994:1;19983:9;19979:17;19972:47;20036:131;20162:4;20036:131;:::i;:::-;20028:139;;19755:419;;;:::o;20180:171::-;20320:23;20316:1;20308:6;20304:14;20297:47;20180:171;:::o;20357:366::-;20499:3;20520:67;20584:2;20579:3;20520:67;:::i;:::-;20513:74;;20596:93;20685:3;20596:93;:::i;:::-;20714:2;20709:3;20705:12;20698:19;;20357:366;;;:::o;20729:419::-;20895:4;20933:2;20922:9;20918:18;20910:26;;20982:9;20976:4;20972:20;20968:1;20957:9;20953:17;20946:47;21010:131;21136:4;21010:131;:::i;:::-;21002:139;;20729:419;;;:::o;21154:182::-;21294:34;21290:1;21282:6;21278:14;21271:58;21154:182;:::o;21342:366::-;21484:3;21505:67;21569:2;21564:3;21505:67;:::i;:::-;21498:74;;21581:93;21670:3;21581:93;:::i;:::-;21699:2;21694:3;21690:12;21683:19;;21342:366;;;:::o;21714:419::-;21880:4;21918:2;21907:9;21903:18;21895:26;;21967:9;21961:4;21957:20;21953:1;21942:9;21938:17;21931:47;21995:131;22121:4;21995:131;:::i;:::-;21987:139;;21714:419;;;:::o;22139:332::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22311:71;22379:1;22368:9;22364:17;22355:6;22311:71;:::i;:::-;22392:72;22460:2;22449:9;22445:18;22436:6;22392:72;:::i;:::-;22139:332;;;;;:::o;22477:137::-;22531:5;22562:6;22556:13;22547:22;;22578:30;22602:5;22578:30;:::i;:::-;22477:137;;;;:::o;22620:345::-;22687:6;22736:2;22724:9;22715:7;22711:23;22707:32;22704:119;;;22742:79;;:::i;:::-;22704:119;22862:1;22887:61;22940:7;22931:6;22920:9;22916:22;22887:61;:::i;:::-;22877:71;;22833:125;22620:345;;;;:::o;22971:171::-;23111:23;23107:1;23099:6;23095:14;23088:47;22971:171;:::o;23148:366::-;23290:3;23311:67;23375:2;23370:3;23311:67;:::i;:::-;23304:74;;23387:93;23476:3;23387:93;:::i;:::-;23505:2;23500:3;23496:12;23489:19;;23148:366;;;:::o;23520:419::-;23686:4;23724:2;23713:9;23709:18;23701:26;;23773:9;23767:4;23763:20;23759:1;23748:9;23744:17;23737:47;23801:131;23927:4;23801:131;:::i;:::-;23793:139;;23520:419;;;:::o;23945:162::-;24085:14;24081:1;24073:6;24069:14;24062:38;23945:162;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:165::-;25050:17;25046:1;25038:6;25034:14;25027:41;24910:165;:::o;25081:366::-;25223:3;25244:67;25308:2;25303:3;25244:67;:::i;:::-;25237:74;;25320:93;25409:3;25320:93;:::i;:::-;25438:2;25433:3;25429:12;25422:19;;25081:366;;;:::o;25453:419::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25453:419;;;:::o;25878:180::-;25926:77;25923:1;25916:88;26023:4;26020:1;26013:15;26047:4;26044:1;26037:15;26064:442;26213:4;26251:2;26240:9;26236:18;26228:26;;26264:71;26332:1;26321:9;26317:17;26308:6;26264:71;:::i;:::-;26345:72;26413:2;26402:9;26398:18;26389:6;26345:72;:::i;:::-;26427;26495:2;26484:9;26480:18;26471:6;26427:72;:::i;:::-;26064:442;;;;;;:::o;26512:220::-;26652:34;26648:1;26640:6;26636:14;26629:58;26721:3;26716:2;26708:6;26704:15;26697:28;26512:220;:::o;26738:366::-;26880:3;26901:67;26965:2;26960:3;26901:67;:::i;:::-;26894:74;;26977:93;27066:3;26977:93;:::i;:::-;27095:2;27090:3;27086:12;27079:19;;26738:366;;;:::o;27110:419::-;27276:4;27314:2;27303:9;27299:18;27291:26;;27363:9;27357:4;27353:20;27349:1;27338:9;27334:17;27327:47;27391:131;27517:4;27391:131;:::i;:::-;27383:139;;27110:419;;;:::o;27535:181::-;27675:33;27671:1;27663:6;27659:14;27652:57;27535:181;:::o;27722:366::-;27864:3;27885:67;27949:2;27944:3;27885:67;:::i;:::-;27878:74;;27961:93;28050:3;27961:93;:::i;:::-;28079:2;28074:3;28070:12;28063:19;;27722:366;;;:::o;28094:419::-;28260:4;28298:2;28287:9;28283:18;28275:26;;28347:9;28341:4;28337:20;28333:1;28322:9;28318:17;28311:47;28375:131;28501:4;28375:131;:::i;:::-;28367:139;;28094:419;;;:::o;28519:228::-;28659:34;28655:1;28647:6;28643:14;28636:58;28728:11;28723:2;28715:6;28711:15;28704:36;28519:228;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:169::-;29690:21;29686:1;29678:6;29674:14;29667:45;29550:169;:::o;29725:366::-;29867:3;29888:67;29952:2;29947:3;29888:67;:::i;:::-;29881:74;;29964:93;30053:3;29964:93;:::i;:::-;30082:2;30077:3;30073:12;30066:19;;29725:366;;;:::o;30097:419::-;30263:4;30301:2;30290:9;30286:18;30278:26;;30350:9;30344:4;30340:20;30336:1;30325:9;30321:17;30314:47;30378:131;30504:4;30378:131;:::i;:::-;30370:139;;30097:419;;;:::o;30522:165::-;30662:17;30658:1;30650:6;30646:14;30639:41;30522:165;:::o;30693:366::-;30835:3;30856:67;30920:2;30915:3;30856:67;:::i;:::-;30849:74;;30932:93;31021:3;30932:93;:::i;:::-;31050:2;31045:3;31041:12;31034:19;;30693:366;;;:::o;31065:419::-;31231:4;31269:2;31258:9;31254:18;31246:26;;31318:9;31312:4;31308:20;31304:1;31293:9;31289:17;31282:47;31346:131;31472:4;31346:131;:::i;:::-;31338:139;;31065:419;;;:::o;31490:232::-;31630:34;31626:1;31618:6;31614:14;31607:58;31699:15;31694:2;31686:6;31682:15;31675:40;31490:232;:::o;31728:366::-;31870:3;31891:67;31955:2;31950:3;31891:67;:::i;:::-;31884:74;;31967:93;32056:3;31967:93;:::i;:::-;32085:2;32080:3;32076:12;32069:19;;31728:366;;;:::o;32100:419::-;32266:4;32304:2;32293:9;32289:18;32281:26;;32353:9;32347:4;32343:20;32339:1;32328:9;32324:17;32317:47;32381:131;32507:4;32381:131;:::i;:::-;32373:139;;32100:419;;;:::o;32525:176::-;32665:28;32661:1;32653:6;32649:14;32642:52;32525:176;:::o;32707:366::-;32849:3;32870:67;32934:2;32929:3;32870:67;:::i;:::-;32863:74;;32946:93;33035:3;32946:93;:::i;:::-;33064:2;33059:3;33055:12;33048:19;;32707:366;;;:::o;33079:419::-;33245:4;33283:2;33272:9;33268:18;33260:26;;33332:9;33326:4;33322:20;33318:1;33307:9;33303:17;33296:47;33360:131;33486:4;33360:131;:::i;:::-;33352:139;;33079:419;;;:::o;33504:225::-;33644:34;33640:1;33632:6;33628:14;33621:58;33713:8;33708:2;33700:6;33696:15;33689:33;33504:225;:::o;33735:366::-;33877:3;33898:67;33962:2;33957:3;33898:67;:::i;:::-;33891:74;;33974:93;34063:3;33974:93;:::i;:::-;34092:2;34087:3;34083:12;34076:19;;33735:366;;;:::o;34107:419::-;34273:4;34311:2;34300:9;34296:18;34288:26;;34360:9;34354:4;34350:20;34346:1;34335:9;34331:17;34324:47;34388:131;34514:4;34388:131;:::i;:::-;34380:139;;34107:419;;;:::o;34532:147::-;34633:11;34670:3;34655:18;;34532:147;;;;:::o;34685:114::-;;:::o;34805:398::-;34964:3;34985:83;35066:1;35061:3;34985:83;:::i;:::-;34978:90;;35077:93;35166:3;35077:93;:::i;:::-;35195:1;35190:3;35186:11;35179:18;;34805:398;;;:::o;35209:379::-;35393:3;35415:147;35558:3;35415:147;:::i;:::-;35408:154;;35579:3;35572:10;;35209:379;;;:::o;35594:143::-;35651:5;35682:6;35676:13;35667:22;;35698:33;35725:5;35698:33;:::i;:::-;35594:143;;;;:::o;35743:351::-;35813:6;35862:2;35850:9;35841:7;35837:23;35833:32;35830:119;;;35868:79;;:::i;:::-;35830:119;35988:1;36013:64;36069:7;36060:6;36049:9;36045:22;36013:64;:::i;:::-;36003:74;;35959:128;35743:351;;;;:::o;36100:332::-;36221:4;36259:2;36248:9;36244:18;36236:26;;36272:71;36340:1;36329:9;36325:17;36316:6;36272:71;:::i;:::-;36353:72;36421:2;36410:9;36406:18;36397:6;36353:72;:::i;:::-;36100:332;;;;;:::o;36438:180::-;36486:77;36483:1;36476:88;36583:4;36580:1;36573:15;36607:4;36604:1;36597:15;36624:180;36672:77;36669:1;36662:88;36769:4;36766:1;36759:15;36793:4;36790:1;36783:15;36810:85;36855:7;36884:5;36873:16;;36810:85;;;:::o;36901:158::-;36959:9;36992:61;37010:42;37019:32;37045:5;37019:32;:::i;:::-;37010:42;:::i;:::-;36992:61;:::i;:::-;36979:74;;36901:158;;;:::o;37065:147::-;37160:45;37199:5;37160:45;:::i;:::-;37155:3;37148:58;37065:147;;:::o;37218:114::-;37285:6;37319:5;37313:12;37303:22;;37218:114;;;:::o;37338:184::-;37437:11;37471:6;37466:3;37459:19;37511:4;37506:3;37502:14;37487:29;;37338:184;;;;:::o;37528:132::-;37595:4;37618:3;37610:11;;37648:4;37643:3;37639:14;37631:22;;37528:132;;;:::o;37666:108::-;37743:24;37761:5;37743:24;:::i;:::-;37738:3;37731:37;37666:108;;:::o;37780:179::-;37849:10;37870:46;37912:3;37904:6;37870:46;:::i;:::-;37948:4;37943:3;37939:14;37925:28;;37780:179;;;;:::o;37965:113::-;38035:4;38067;38062:3;38058:14;38050:22;;37965:113;;;:::o;38114:732::-;38233:3;38262:54;38310:5;38262:54;:::i;:::-;38332:86;38411:6;38406:3;38332:86;:::i;:::-;38325:93;;38442:56;38492:5;38442:56;:::i;:::-;38521:7;38552:1;38537:284;38562:6;38559:1;38556:13;38537:284;;;38638:6;38632:13;38665:63;38724:3;38709:13;38665:63;:::i;:::-;38658:70;;38751:60;38804:6;38751:60;:::i;:::-;38741:70;;38597:224;38584:1;38581;38577:9;38572:14;;38537:284;;;38541:14;38837:3;38830:10;;38238:608;;;38114:732;;;;:::o;38852:831::-;39115:4;39153:3;39142:9;39138:19;39130:27;;39167:71;39235:1;39224:9;39220:17;39211:6;39167:71;:::i;:::-;39248:80;39324:2;39313:9;39309:18;39300:6;39248:80;:::i;:::-;39375:9;39369:4;39365:20;39360:2;39349:9;39345:18;39338:48;39403:108;39506:4;39497:6;39403:108;:::i;:::-;39395:116;;39521:72;39589:2;39578:9;39574:18;39565:6;39521:72;:::i;:::-;39603:73;39671:3;39660:9;39656:19;39647:6;39603:73;:::i;:::-;38852:831;;;;;;;;:::o
Swarm Source
ipfs://e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce
Loading...
Loading
Loading...
Loading

Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.