ERC-20
Overview
Max Total Supply
1,000,000,000 X: $2,001.13
Holders
370
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000210185918 X: $2,001.13Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ETHPriceToken
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// Telegram: https://t.me/PortalETHPriceToken // Twitter : https://twitter.com/EthPriceToken/status/1722689426394882243 /** *Submitted for verification at Etherscan.io on 2023-10-01 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract ETHPriceToken is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public tokensForDev; address private USDC; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); bytes16 private constant HEX_DIGITS = "0123456789abcdef"; constructor( address _usdcAddress, address _routerAddress ) ERC20(unicode"", unicode"") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( _routerAddress ); USDC = _usdcAddress; address weth = _uniswapV2Router.WETH(); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), weth); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 25; uint256 _sellDevFee = 60; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 20_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; // swapTokensAtAmount = (totalSupply * 5) / 10000; buyDevFee = _buyDevFee; buyTotalFees = buyDevFee; sellDevFee = _sellDevFee; sellTotalFees = sellDevFee; marketingWallet = address(msg.sender); // set as marketing wallet devWallet = address(msg.sender); // set as dev wallet excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function formatNumberWithCommas( string memory number ) internal pure returns (string memory) { // This function assumes `number` is a valid representation of a positive integer bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Calculate the length of the new string uint commas = (len - 1) / 3; bytes memory formatted = new bytes(len + commas); uint j = 1; // Counter for the new string for (uint i = 0; i < len; ++i) { // Copy the character from the original number formatted[len + commas - j] = numberBytes[len - i - 1]; // Insert a comma every three characters, except at the end if (i % 3 == 2 && i != len - 1) { j++; // Skip the position for the comma formatted[len + commas - j] = bytes1(","); j++; // Increment for the next number character } else { j++; // Increment for the next number character } } return string(formatted); } function formatNumberWithCommasAndDecimals( string memory number ) internal pure returns (string memory) { bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Separate the last two digits string memory decimals = new string(2); bytes memory decimalsBytes = bytes(decimals); // Boundary check: Ensure there's enough length for the decimal part if (len > 2) { decimalsBytes[0] = numberBytes[len - 2]; decimalsBytes[1] = numberBytes[len - 1]; // Create a new string for the whole number part without the last two digits string memory wholeNumberPart = new string(len - 2); bytes memory wholeNumberBytes = bytes(wholeNumberPart); for (uint i = 0; i < len - 2; i++) { wholeNumberBytes[i] = numberBytes[i]; } // Format the whole number part with commas wholeNumberPart = formatNumberWithCommas(string(wholeNumberBytes)); // Concatenate the whole number part with the decimal part return string(abi.encodePacked(wholeNumberPart, ".", decimals)); } else { // If the length is less or equal to 2, we don't have a whole number part // We assume the number is already in the format "0.xx" or "x.xx" return string(abi.encodePacked("0.", number)); } } function symbol() public view override returns (string memory) { uint256 usdcDecimals = IERC20Metadata(USDC).decimals(); address wethAddress = uniswapV2Router.WETH(); address ethLpPair = IUniswapV2Factory(uniswapV2Router.factory()) .getPair(USDC, wethAddress); (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(ethLpPair) .getReserves(); (uint256 reserveETH, uint256 reserveUSDC) = wethAddress < USDC ? (reserve0, reserve1) : (reserve1, reserve0); uint256 ethPrice = reserveUSDC.div(10 ** (usdcDecimals - 2)).div( reserveETH.div(1e18) ); string memory startString = "X: $"; return string.concat( startString, formatNumberWithCommasAndDecimals(toString(ethPrice)) ); } function name() public view override returns (string memory) { return symbol(); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount( uint256 newAmount ) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10 ** 18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10 ** 18); } function excludeFromMaxTransaction( address updAds, bool isEx ) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees(uint256 _devFee) external onlyOwner { buyDevFee = _devFee; buyTotalFees = buyDevFee; require(buyTotalFees <= 99, "Must keep fees at 99% or less"); } function updateSellFees(uint256 _devFee) external onlyOwner { sellDevFee = _devFee; sellTotalFees = sellDevFee; require(sellTotalFees <= 99, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet( address newMarketingWallet ) external onlyOwner { marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if ( transferDelayEnabled && to != owner() && to != address(uniswapV2Router) && !automatedMarketMakerPairs[to] ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForDev += fees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForDev += fees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); tokensForDev = 0; (success, ) = address(devWallet).call{value: address(this).balance}(""); } function manualSwapBack(uint256 amount) external onlyOwner { swapTokensForEth(amount); address(devWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "v2-core/=lib/v2-core/contracts/", "v2-periphery/=lib/v2-periphery/contracts/", "v3-core/=lib/v3-core/", "v3-periphery/=lib/v3-periphery/contracts/" ], "optimizer": { "enabled": false, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b5060405162006e4d38038062006e4d8339818101604052810190620000cf919062000aec565b6040518060200160405280600081525060405180602001604052806000815250816003908162000100919062000dad565b50806004908162000112919062000dad565b50505062000135620001296200054360201b60201c565b6200054b60201b60201c565b600081905082601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000e94565b9050620002048260016200061160201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa919062000e94565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401620002e692919062000ed7565b6020604051808303816000875af115801562000306573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032c919062000e94565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037460a05160016200061160201b60201c565b6200038960a0516001620006fb60201b60201c565b6000601990506000603c905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003dc919062000f33565b620003e8919062000fad565b600981905550826017819055506017546014819055508160198190555060195460188190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b2620004a46200079c60201b60201c565b6001620007c660201b60201c565b620004c5306001620007c660201b60201c565b620004da61dead6001620007c660201b60201c565b620004fc620004ee6200079c60201b60201c565b60016200061160201b60201c565b6200050f3060016200061160201b60201c565b6200052461dead60016200061160201b60201c565b6200053633826200090060201b60201c565b505050505050506200117d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006216200054360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006476200079c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006979062001046565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d66200054360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007fc6200079c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000855576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084c9062001046565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008f4919062001085565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096990620010f2565b60405180910390fd5b620009866000838362000a7860201b60201c565b80600260008282546200099a919062001114565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009f1919062001114565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a58919062001160565b60405180910390a362000a746000838362000a7d60201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ab48262000a87565b9050919050565b62000ac68162000aa7565b811462000ad257600080fd5b50565b60008151905062000ae68162000abb565b92915050565b6000806040838503121562000b065762000b0562000a82565b5b600062000b168582860162000ad5565b925050602062000b298582860162000ad5565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bb557607f821691505b60208210810362000bcb5762000bca62000b6d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf6565b62000c41868362000bf6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c8e62000c8862000c828462000c59565b62000c63565b62000c59565b9050919050565b6000819050919050565b62000caa8362000c6d565b62000cc262000cb98262000c95565b84845462000c03565b825550505050565b600090565b62000cd962000cca565b62000ce681848462000c9f565b505050565b5b8181101562000d0e5762000d0260008262000ccf565b60018101905062000cec565b5050565b601f82111562000d5d5762000d278162000bd1565b62000d328462000be6565b8101602085101562000d42578190505b62000d5a62000d518562000be6565b83018262000ceb565b50505b505050565b600082821c905092915050565b600062000d826000198460080262000d62565b1980831691505092915050565b600062000d9d838362000d6f565b9150826002028217905092915050565b62000db88262000b33565b67ffffffffffffffff81111562000dd45762000dd362000b3e565b5b62000de0825462000b9c565b62000ded82828562000d12565b600060209050601f83116001811462000e25576000841562000e10578287015190505b62000e1c858262000d8f565b86555062000e8c565b601f19841662000e358662000bd1565b60005b8281101562000e5f5784890151825560018201915060208501945060208101905062000e38565b8683101562000e7f578489015162000e7b601f89168262000d6f565b8355505b6001600288020188555050505b505050505050565b60006020828403121562000ead5762000eac62000a82565b5b600062000ebd8482850162000ad5565b91505092915050565b62000ed18162000aa7565b82525050565b600060408201905062000eee600083018562000ec6565b62000efd602083018462000ec6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f408262000c59565b915062000f4d8362000c59565b925082820262000f5d8162000c59565b9150828204841483151762000f775762000f7662000f04565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fba8262000c59565b915062000fc78362000c59565b92508262000fda5762000fd962000f7e565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200102e60208362000fe5565b91506200103b8262000ff6565b602082019050919050565b6000602082019050818103600083015262001061816200101f565b9050919050565b60008115159050919050565b6200107f8162001068565b82525050565b60006020820190506200109c600083018462001074565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010da601f8362000fe5565b9150620010e782620010a2565b602082019050919050565b600060208201905081810360008301526200110d81620010cb565b9050919050565b6000620011218262000c59565b91506200112e8362000c59565b925082820190508082111562001149576200114862000f04565b5b92915050565b6200115a8162000c59565b82525050565b60006020820190506200117760008301846200114f565b92915050565b60805160a051615c79620011d4600039600081816111f70152611d74015260008181610e2201528181611965015281816119f801528181612d1901528181613ad401528181613bb50152613bdc0152615c796000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2b578063f11a24d314610d54578063f2fde38b14610d7f578063f8b45b0514610da85761038c565b8063d85ba06314610c6d578063dd62ed3e14610c98578063e2f4560514610cd5578063e884f26014610d005761038c565b8063c18bc195116100dc578063c18bc19514610bb1578063c876d0b914610bda578063c8c8ebe414610c05578063d257b34f14610c305761038c565b8063bbc0c74214610b34578063bffda98214610b5f578063c024666814610b885761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a66578063a9059cbb14610a91578063aacebbe314610ace578063b62496f514610af75761038c565b80639fccce32146109d3578063a0d82dc5146109fe578063a457c2d714610a295761038c565b806395d89b41116101ab57806395d89b41146109295780639a7a23d6146109545780639c3b4fdc1461097d5780639ec22c0e146109a85761038c565b80638da5cb5b146108aa5780638ea5220f146108d5578063924de9b7146109005761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638a8c523c146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd3565b6040516103b39190614411565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906144cc565b610de2565b6040516103f09190614527565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614542565b610e00565b60405161042d9190614527565b60405180910390f35b34801561044257600080fd5b5061044b610e20565b60405161045891906145ce565b60405180910390f35b34801561046d57600080fd5b50610476610e44565b60405161048391906145f8565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190614542565b610e4e565b005b3480156104c157600080fd5b506104ca610f0e565b6040516104d791906145f8565b60405180910390f35b3480156104ec57600080fd5b506104f5610f14565b60405161050291906145f8565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190614613565b610f1a565b005b34801561054057600080fd5b5061055b60048036038101906105569190614640565b611029565b6040516105689190614527565b60405180910390f35b34801561057d57600080fd5b50610586611121565b60405161059391906146a2565b60405180910390f35b3480156105a857600080fd5b506105b1611127565b6040516105be91906145f8565b60405180910390f35b3480156105d357600080fd5b506105dc61112d565b6040516105e99190614527565b60405180910390f35b3480156105fe57600080fd5b50610607611140565b60405161061491906146d9565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906144cc565b611149565b6040516106519190614527565b60405180910390f35b34801561066657600080fd5b5061066f6111f5565b60405161067c91906146a2565b60405180910390f35b34801561069157600080fd5b5061069a611219565b6040516106a79190614527565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190614542565b61122c565b6040516106e49190614527565b60405180910390f35b3480156106f957600080fd5b50610702611282565b60405161070f91906145f8565b60405180910390f35b34801561072457600080fd5b5061072d611288565b60405161073a9190614527565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190614542565b61129b565b60405161077791906145f8565b60405180910390f35b34801561078c57600080fd5b506107956112e3565b005b3480156107a357600080fd5b506107be60048036038101906107b99190614613565b61136b565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614720565b611440565b005b3480156107f557600080fd5b506107fe611580565b60405161080b9190614527565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614773565b611620565b005b34801561084957600080fd5b506108526116f7565b60405161085f91906146a2565b60405180910390f35b34801561087457600080fd5b5061087d61171d565b60405161088a91906145f8565b60405180910390f35b34801561089f57600080fd5b506108a8611723565b005b3480156108b657600080fd5b506108bf6117de565b6040516108cc91906146a2565b60405180910390f35b3480156108e157600080fd5b506108ea611808565b6040516108f791906146a2565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906147b3565b61182e565b005b34801561093557600080fd5b5061093e6118c7565b60405161094b9190614411565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190614773565b611cf6565b005b34801561098957600080fd5b50610992611e0e565b60405161099f91906145f8565b60405180910390f35b3480156109b457600080fd5b506109bd611e14565b6040516109ca91906145f8565b60405180910390f35b3480156109df57600080fd5b506109e8611e1a565b6040516109f591906145f8565b60405180910390f35b348015610a0a57600080fd5b50610a13611e20565b604051610a2091906145f8565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b91906144cc565b611e26565b604051610a5d9190614527565b60405180910390f35b348015610a7257600080fd5b50610a7b611f11565b604051610a8891906145f8565b60405180910390f35b348015610a9d57600080fd5b50610ab86004803603810190610ab391906144cc565b611f17565b604051610ac59190614527565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af09190614542565b611f35565b005b348015610b0357600080fd5b50610b1e6004803603810190610b199190614542565b611ff5565b604051610b2b9190614527565b60405180910390f35b348015610b4057600080fd5b50610b49612015565b604051610b569190614527565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190614613565b612028565b005b348015610b9457600080fd5b50610baf6004803603810190610baa9190614773565b61213b565b005b348015610bbd57600080fd5b50610bd86004803603810190610bd39190614613565b612260565b005b348015610be657600080fd5b50610bef61236f565b604051610bfc9190614527565b60405180910390f35b348015610c1157600080fd5b50610c1a612382565b604051610c2791906145f8565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c529190614613565b612388565b604051610c649190614527565b60405180910390f35b348015610c7957600080fd5b50610c826124dd565b604051610c8f91906145f8565b60405180910390f35b348015610ca457600080fd5b50610cbf6004803603810190610cba91906147e0565b6124e3565b604051610ccc91906145f8565b60405180910390f35b348015610ce157600080fd5b50610cea61256a565b604051610cf791906145f8565b60405180910390f35b348015610d0c57600080fd5b50610d15612570565b604051610d229190614527565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d9190614613565b612610565b005b348015610d6057600080fd5b50610d696126e5565b604051610d7691906145f8565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da19190614542565b6126eb565b005b348015610db457600080fd5b50610dbd6127e2565b604051610dca91906145f8565b60405180910390f35b6060610ddd6118c7565b905090565b6000610df6610def6127e8565b84846127f0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e566127e8565b73ffffffffffffffffffffffffffffffffffffffff16610e746117de565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061486c565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f226127e8565b73ffffffffffffffffffffffffffffffffffffffff16610f406117de565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d9061486c565b60405180910390fd5b670de0b6b3a76400006103e86001610fac610e44565b610fb691906148bb565b610fc0919061492c565b610fca919061492c565b81101561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906149cf565b60405180910390fd5b670de0b6b3a76400008161102091906148bb565b60088190555050565b60006110368484846129b9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110816127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614a61565b60405180910390fd5b6111158561110d6127e8565b8584036127f0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111eb6111566127e8565b8484600160006111646127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e69190614a81565b6127f0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb6127e8565b73ffffffffffffffffffffffffffffffffffffffff166113096117de565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061486c565b60405180910390fd5b6113696000613550565b565b6113736127e8565b73ffffffffffffffffffffffffffffffffffffffff166113916117de565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061486c565b60405180910390fd5b806017819055506017546014819055506063601454111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614b01565b60405180910390fd5b50565b6114486127e8565b73ffffffffffffffffffffffffffffffffffffffff166114666117de565b73ffffffffffffffffffffffffffffffffffffffff16146114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061486c565b60405180910390fd5b610258831015611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614b93565b60405180910390fd5b6103e88211158015611514575060008210155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614c25565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166115a86117de565b73ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f59061486c565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116286127e8565b73ffffffffffffffffffffffffffffffffffffffff166116466117de565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061486c565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61172b6127e8565b73ffffffffffffffffffffffffffffffffffffffff166117496117de565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117969061486c565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118366127e8565b73ffffffffffffffffffffffffffffffffffffffff166118546117de565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a19061486c565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190614c71565b60ff16905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f29190614cb3565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190614cb3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611ae1929190614ce0565b602060405180830381865afa158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b229190614cb3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190614d8b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c1a578284611c1d565b83835b915091506000611c7a611c41670de0b6b3a76400008561361690919063ffffffff16565b611c6c60028b611c519190614dde565b600a611c5d9190614f45565b8561361690919063ffffffff16565b61361690919063ffffffff16565b905060006040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611cc8611cc38461362c565b6136fa565b604051602001611cd9929190614fcc565b604051602081830303815290604052995050505050505050505090565b611cfe6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611d1c6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061486c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790615062565b60405180910390fd5b611e0a8282613994565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e356127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee9906150f4565b60405180910390fd5b611f06611efd6127e8565b858584036127f0565b600191505092915050565b600e5481565b6000611f2b611f246127e8565b84846129b9565b6001905092915050565b611f3d6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611f5b6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa89061486c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6120306127e8565b73ffffffffffffffffffffffffffffffffffffffff1661204e6117de565b73ffffffffffffffffffffffffffffffffffffffff16146120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061486c565b60405180910390fd5b6120ad81613a35565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516120f390615145565b60006040518083038185875af1925050503d8060008114612130576040519150601f19603f3d011682016040523d82523d6000602084013e612135565b606091505b50505050565b6121436127e8565b73ffffffffffffffffffffffffffffffffffffffff166121616117de565b73ffffffffffffffffffffffffffffffffffffffff16146121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae9061486c565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122549190614527565b60405180910390a25050565b6122686127e8565b73ffffffffffffffffffffffffffffffffffffffff166122866117de565b73ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061486c565b60405180910390fd5b670de0b6b3a76400006103e860056122f2610e44565b6122fc91906148bb565b612306919061492c565b612310919061492c565b811015612352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612349906151cc565b60405180910390fd5b670de0b6b3a76400008161236691906148bb565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006123926127e8565b73ffffffffffffffffffffffffffffffffffffffff166123b06117de565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd9061486c565b60405180910390fd5b620186a06001612414610e44565b61241e91906148bb565b612428919061492c565b82101561246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061525e565b60405180910390fd5b6103e86005612477610e44565b61248191906148bb565b61248b919061492c565b8211156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c4906152f0565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061257a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166125986117de565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e59061486c565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6126186127e8565b73ffffffffffffffffffffffffffffffffffffffff166126366117de565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126839061486c565b60405180910390fd5b80601981905550601954601881905550606360185411156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990614b01565b60405180910390fd5b50565b60165481565b6126f36127e8565b73ffffffffffffffffffffffffffffffffffffffff166127116117de565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e9061486c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90615382565b60405180910390fd5b6127df81613550565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690615414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c5906154a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ac91906145f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90615538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e906155ca565b60405180910390fd5b60008103612ab057612aab83836000613c72565b61354b565b601160009054906101000a900460ff161561317357612acd6117de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b3b5750612b0b6117de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b745750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bae575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc75750600560149054906101000a900460ff16155b1561317257601160019054906101000a900460ff16612cc157601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c815750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790615636565b60405180910390fd5b5b601360009054906101000a900460ff168015612d105750612ce06117de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e895743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b906156ee565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2c5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600854811115612f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d90615780565b60405180910390fd5b600a54612f828361129b565b82612f8d9190614a81565b1115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906157ec565b60405180910390fd5b613171565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c5576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b79061587e565b60405180910390fd5b613170565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661316f57600a546131228361129b565b8261312d9190614a81565b111561316e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613165906157ec565b60405180910390fd5b5b5b5b5b5b600061317e3061129b565b9050600060095482101590508080156131a35750601160029054906101000a900460ff165b80156131bc5750600560149054906101000a900460ff16155b80156132125750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132be5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613302576001600560146101000a81548160ff0219169083151502179055506132e6613ef1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b85750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c257600090505b6000811561353b57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342557506000601854115b1561347257613452606461344460185488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a60008282546134669190614a81565b92505081905550613517565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134cd57506000601454115b15613516576134fa60646134ec60145488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a600082825461350e9190614a81565b925050819055505b5b600081111561352c5761352b873083613c72565b5b80856135389190614dde565b94505b613546878787613c72565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613624919061492c565b905092915050565b60606000600161363b8461400b565b01905060008167ffffffffffffffff81111561365a5761365961589e565b5b6040519080825280601f01601f19166020018201604052801561368c5781602001600182028036833780820191505090505b509050600082602001820190505b6001156136ef578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816136e3576136e26148fd565b5b0494506000850361369a575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156137245761372361589e565b5b6040519080825280601f01601f1916602001820160405280156137565781602001600182028036833780820191505090505b5090506000819050600283111561396857836002846137759190614dde565b81518110613786576137856158cd565b5b602001015160f81c60f81b816000815181106137a5576137a46158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350836001846137e29190614dde565b815181106137f3576137f26158cd565b5b602001015160f81c60f81b81600181518110613812576138116158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846138509190614dde565b67ffffffffffffffff8111156138695761386861589e565b5b6040519080825280601f01601f19166020018201604052801561389b5781602001600182028036833780820191505090505b509050600081905060005b6002866138b39190614dde565b81101561392d578681815181106138cd576138cc6158cd565b5b602001015160f81c60f81b8282815181106138eb576138ea6158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613925906158fc565b9150506138a6565b506139378161415e565b9150818460405160200161394c929190615990565b604051602081830303815290604052965050505050505061398f565b856040516020016139799190615a0b565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613a5257613a5161589e565b5b604051908082528060200260200182016040528015613a805781602001602082028036833780820191505090505b5090503081600081518110613a9857613a976158cd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b619190614cb3565b81600181518110613b7557613b746158cd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bda307f0000000000000000000000000000000000000000000000000000000000000000846127f0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3c959493929190615b26565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd890615538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d47906155ca565b60405180910390fd5b613d5b838383614377565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd890615bf2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e749190614a81565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ed891906145f8565b60405180910390a3613eeb84848461437c565b50505050565b6000613efc3061129b565b90506000601a549050600080831480613f155750600082145b15613f2257505050613ff3565b6014600954613f3191906148bb565b831115613f4a576014600954613f4791906148bb565b92505b6000839050613f5881613a35565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa690615145565b60006040518083038185875af1925050503d8060008114613fe3576040519150601f19603f3d011682016040523d82523d6000602084013e613fe8565b606091505b505080925050505050505b565b6000818361400391906148bb565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614069577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161405f5761405e6148fd565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106140a6576d04ee2d6d415b85acef8100000000838161409c5761409b6148fd565b5b0492506020810190505b662386f26fc1000083106140d557662386f26fc1000083816140cb576140ca6148fd565b5b0492506010810190505b6305f5e10083106140fe576305f5e10083816140f4576140f36148fd565b5b0492506008810190505b6127108310614123576127108381614119576141186148fd565b5b0492506004810190505b60648310614146576064838161413c5761413b6148fd565b5b0492506002810190505b600a8310614155576001810190505b80915050919050565b606060008290506000815190506000600360018361417c9190614dde565b614186919061492c565b9050600081836141969190614a81565b67ffffffffffffffff8111156141af576141ae61589e565b5b6040519080825280601f01601f1916602001820160405280156141e15781602001600182028036833780820191505090505b50905060006001905060005b848110156143695785600182876142049190614dde565b61420e9190614dde565b8151811061421f5761421e6158cd565b5b602001015160f81c60f81b838386886142389190614a81565b6142429190614dde565b81518110614253576142526158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826142919190615c12565b1480156142aa57506001856142a69190614dde565b8114155b156143495781806142ba906158fc565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142ec9190614a81565b6142f69190614dde565b81518110614307576143066158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180614341906158fc565b925050614358565b8180614354906158fc565b9250505b80614362906158fc565b90506141ed565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bb5780820151818401526020810190506143a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006143e382614381565b6143ed818561438c565b93506143fd81856020860161439d565b614406816143c7565b840191505092915050565b6000602082019050818103600083015261442b81846143d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061446382614438565b9050919050565b61447381614458565b811461447e57600080fd5b50565b6000813590506144908161446a565b92915050565b6000819050919050565b6144a981614496565b81146144b457600080fd5b50565b6000813590506144c6816144a0565b92915050565b600080604083850312156144e3576144e2614433565b5b60006144f185828601614481565b9250506020614502858286016144b7565b9150509250929050565b60008115159050919050565b6145218161450c565b82525050565b600060208201905061453c6000830184614518565b92915050565b60006020828403121561455857614557614433565b5b600061456684828501614481565b91505092915050565b6000819050919050565b600061459461458f61458a84614438565b61456f565b614438565b9050919050565b60006145a682614579565b9050919050565b60006145b88261459b565b9050919050565b6145c8816145ad565b82525050565b60006020820190506145e360008301846145bf565b92915050565b6145f281614496565b82525050565b600060208201905061460d60008301846145e9565b92915050565b60006020828403121561462957614628614433565b5b6000614637848285016144b7565b91505092915050565b60008060006060848603121561465957614658614433565b5b600061466786828701614481565b935050602061467886828701614481565b9250506040614689868287016144b7565b9150509250925092565b61469c81614458565b82525050565b60006020820190506146b76000830184614693565b92915050565b600060ff82169050919050565b6146d3816146bd565b82525050565b60006020820190506146ee60008301846146ca565b92915050565b6146fd8161450c565b811461470857600080fd5b50565b60008135905061471a816146f4565b92915050565b60008060006060848603121561473957614738614433565b5b6000614747868287016144b7565b9350506020614758868287016144b7565b92505060406147698682870161470b565b9150509250925092565b6000806040838503121561478a57614789614433565b5b600061479885828601614481565b92505060206147a98582860161470b565b9150509250929050565b6000602082840312156147c9576147c8614433565b5b60006147d78482850161470b565b91505092915050565b600080604083850312156147f7576147f6614433565b5b600061480585828601614481565b925050602061481685828601614481565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485660208361438c565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c682614496565b91506148d183614496565b92508282026148df81614496565b915082820484148315176148f6576148f561488c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493782614496565b915061494283614496565b925082614952576149516148fd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149b9602f8361438c565b91506149c48261495d565b604082019050919050565b600060208201905081810360008301526149e8816149ac565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614a4b60288361438c565b9150614a56826149ef565b604082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b6000614a8c82614496565b9150614a9783614496565b9250828201905080821115614aaf57614aae61488c565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614aeb601d8361438c565b9150614af682614ab5565b602082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614b7d60338361438c565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c0f60308361438c565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b614c4e816146bd565b8114614c5957600080fd5b50565b600081519050614c6b81614c45565b92915050565b600060208284031215614c8757614c86614433565b5b6000614c9584828501614c5c565b91505092915050565b600081519050614cad8161446a565b92915050565b600060208284031215614cc957614cc8614433565b5b6000614cd784828501614c9e565b91505092915050565b6000604082019050614cf56000830185614693565b614d026020830184614693565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614d2c81614d09565b8114614d3757600080fd5b50565b600081519050614d4981614d23565b92915050565b600063ffffffff82169050919050565b614d6881614d4f565b8114614d7357600080fd5b50565b600081519050614d8581614d5f565b92915050565b600080600060608486031215614da457614da3614433565b5b6000614db286828701614d3a565b9350506020614dc386828701614d3a565b9250506040614dd486828701614d76565b9150509250925092565b6000614de982614496565b9150614df483614496565b9250828203905081811115614e0c57614e0b61488c565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115614e6957808604811115614e4557614e4461488c565b5b6001851615614e545780820291505b8081029050614e6285614e12565b9450614e29565b94509492505050565b600082614e825760019050614f3e565b81614e905760009050614f3e565b8160018114614ea65760028114614eb057614edf565b6001915050614f3e565b60ff841115614ec257614ec161488c565b5b8360020a915084821115614ed957614ed861488c565b5b50614f3e565b5060208310610133831016604e8410600b8410161715614f145782820a905083811115614f0f57614f0e61488c565b5b614f3e565b614f218484846001614e1f565b92509050818404811115614f3857614f3761488c565b5b81810290505b9392505050565b6000614f5082614496565b9150614f5b83614496565b9250614f887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e72565b905092915050565b600081905092915050565b6000614fa682614381565b614fb08185614f90565b9350614fc081856020860161439d565b80840191505092915050565b6000614fd88285614f9b565b9150614fe48284614f9b565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061504c60398361438c565b915061505782614ff0565b604082019050919050565b6000602082019050818103600083015261507b8161503f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150de60258361438c565b91506150e982615082565b604082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b600081905092915050565b50565b600061512f600083615114565b915061513a8261511f565b600082019050919050565b600061515082615122565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151b660248361438c565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061524860358361438c565b9150615253826151ec565b604082019050919050565b600060208201905081810360008301526152778161523b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152da60348361438c565b91506152e58261527e565b604082019050919050565b60006020820190508181036000830152615309816152cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536c60268361438c565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153fe60248361438c565b9150615409826153a2565b604082019050919050565b6000602082019050818103600083015261542d816153f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061549060228361438c565b915061549b82615434565b604082019050919050565b600060208201905081810360008301526154bf81615483565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061552260258361438c565b915061552d826154c6565b604082019050919050565b6000602082019050818103600083015261555181615515565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155b460238361438c565b91506155bf82615558565b604082019050919050565b600060208201905081810360008301526155e3816155a7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061562060168361438c565b915061562b826155ea565b602082019050919050565b6000602082019050818103600083015261564f81615613565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156d860498361438c565b91506156e382615656565b606082019050919050565b60006020820190508181036000830152615707816156cb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061576a60358361438c565b91506157758261570e565b604082019050919050565b600060208201905081810360008301526157998161575d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157d660138361438c565b91506157e1826157a0565b602082019050919050565b60006020820190508181036000830152615805816157c9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061586860368361438c565b91506158738261580c565b604082019050919050565b600060208201905081810360008301526158978161585b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061590782614496565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159395761593861488c565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061597a600183614f90565b915061598582615944565b600182019050919050565b600061599c8285614f9b565b91506159a78261596d565b91506159b38284614f9b565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b60006159f5600283614f90565b9150615a00826159bf565b600282019050919050565b6000615a16826159e8565b9150615a228284614f9b565b915081905092915050565b6000819050919050565b6000615a52615a4d615a4884615a2d565b61456f565b614496565b9050919050565b615a6281615a37565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a9d81614458565b82525050565b6000615aaf8383615a94565b60208301905092915050565b6000602082019050919050565b6000615ad382615a68565b615add8185615a73565b9350615ae883615a84565b8060005b83811015615b19578151615b008882615aa3565b9750615b0b83615abb565b925050600181019050615aec565b5085935050505092915050565b600060a082019050615b3b60008301886145e9565b615b486020830187615a59565b8181036040830152615b5a8186615ac8565b9050615b696060830185614693565b615b7660808301846145e9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615bdc60268361438c565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b6000615c1d82614496565b9150615c2883614496565b925082615c3857615c376148fd565b5b82820690509291505056fea2646970667358221220c8a584e78f781b17151164155bf079710cecc60eedf26670676780ee02756d6264736f6c63430008150033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610d2b578063f11a24d314610d54578063f2fde38b14610d7f578063f8b45b0514610da85761038c565b8063d85ba06314610c6d578063dd62ed3e14610c98578063e2f4560514610cd5578063e884f26014610d005761038c565b8063c18bc195116100dc578063c18bc19514610bb1578063c876d0b914610bda578063c8c8ebe414610c05578063d257b34f14610c305761038c565b8063bbc0c74214610b34578063bffda98214610b5f578063c024666814610b885761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a66578063a9059cbb14610a91578063aacebbe314610ace578063b62496f514610af75761038c565b80639fccce32146109d3578063a0d82dc5146109fe578063a457c2d714610a295761038c565b806395d89b41116101ab57806395d89b41146109295780639a7a23d6146109545780639c3b4fdc1461097d5780639ec22c0e146109a85761038c565b80638da5cb5b146108aa5780638ea5220f146108d5578063924de9b7146109005761038c565b806339509351116102b6578063715018a6116102545780637571336a116102235780637571336a1461081457806375f0a8741461083d5780637bce5a04146108685780638a8c523c146108935761038c565b8063715018a61461078057806371fc468814610797578063730c1888146107c0578063751039fc146107e95761038c565b80634fbee193116102905780634fbee193146106b05780636a486a8e146106ed5780636ddd17131461071857806370a08231146107435761038c565b8063395093511461061d57806349bd5a5e1461065a5780634a62bb65146106855761038c565b8063199ffc721161032357806327c8f835116102fd57806327c8f835146105715780632c3e486c1461059c5780632e82f1a0146105c7578063313ce567146105f25761038c565b8063199ffc72146104e0578063203e727e1461050b57806323b872dd146105345761038c565b80631694505e1161035f5780631694505e1461043657806318160ddd146104615780631816467f1461048c578063184c16c5146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd3565b6040516103b39190614411565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906144cc565b610de2565b6040516103f09190614527565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614542565b610e00565b60405161042d9190614527565b60405180910390f35b34801561044257600080fd5b5061044b610e20565b60405161045891906145ce565b60405180910390f35b34801561046d57600080fd5b50610476610e44565b60405161048391906145f8565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190614542565b610e4e565b005b3480156104c157600080fd5b506104ca610f0e565b6040516104d791906145f8565b60405180910390f35b3480156104ec57600080fd5b506104f5610f14565b60405161050291906145f8565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190614613565b610f1a565b005b34801561054057600080fd5b5061055b60048036038101906105569190614640565b611029565b6040516105689190614527565b60405180910390f35b34801561057d57600080fd5b50610586611121565b60405161059391906146a2565b60405180910390f35b3480156105a857600080fd5b506105b1611127565b6040516105be91906145f8565b60405180910390f35b3480156105d357600080fd5b506105dc61112d565b6040516105e99190614527565b60405180910390f35b3480156105fe57600080fd5b50610607611140565b60405161061491906146d9565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906144cc565b611149565b6040516106519190614527565b60405180910390f35b34801561066657600080fd5b5061066f6111f5565b60405161067c91906146a2565b60405180910390f35b34801561069157600080fd5b5061069a611219565b6040516106a79190614527565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d29190614542565b61122c565b6040516106e49190614527565b60405180910390f35b3480156106f957600080fd5b50610702611282565b60405161070f91906145f8565b60405180910390f35b34801561072457600080fd5b5061072d611288565b60405161073a9190614527565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190614542565b61129b565b60405161077791906145f8565b60405180910390f35b34801561078c57600080fd5b506107956112e3565b005b3480156107a357600080fd5b506107be60048036038101906107b99190614613565b61136b565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190614720565b611440565b005b3480156107f557600080fd5b506107fe611580565b60405161080b9190614527565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614773565b611620565b005b34801561084957600080fd5b506108526116f7565b60405161085f91906146a2565b60405180910390f35b34801561087457600080fd5b5061087d61171d565b60405161088a91906145f8565b60405180910390f35b34801561089f57600080fd5b506108a8611723565b005b3480156108b657600080fd5b506108bf6117de565b6040516108cc91906146a2565b60405180910390f35b3480156108e157600080fd5b506108ea611808565b6040516108f791906146a2565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906147b3565b61182e565b005b34801561093557600080fd5b5061093e6118c7565b60405161094b9190614411565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190614773565b611cf6565b005b34801561098957600080fd5b50610992611e0e565b60405161099f91906145f8565b60405180910390f35b3480156109b457600080fd5b506109bd611e14565b6040516109ca91906145f8565b60405180910390f35b3480156109df57600080fd5b506109e8611e1a565b6040516109f591906145f8565b60405180910390f35b348015610a0a57600080fd5b50610a13611e20565b604051610a2091906145f8565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b91906144cc565b611e26565b604051610a5d9190614527565b60405180910390f35b348015610a7257600080fd5b50610a7b611f11565b604051610a8891906145f8565b60405180910390f35b348015610a9d57600080fd5b50610ab86004803603810190610ab391906144cc565b611f17565b604051610ac59190614527565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af09190614542565b611f35565b005b348015610b0357600080fd5b50610b1e6004803603810190610b199190614542565b611ff5565b604051610b2b9190614527565b60405180910390f35b348015610b4057600080fd5b50610b49612015565b604051610b569190614527565b60405180910390f35b348015610b6b57600080fd5b50610b866004803603810190610b819190614613565b612028565b005b348015610b9457600080fd5b50610baf6004803603810190610baa9190614773565b61213b565b005b348015610bbd57600080fd5b50610bd86004803603810190610bd39190614613565b612260565b005b348015610be657600080fd5b50610bef61236f565b604051610bfc9190614527565b60405180910390f35b348015610c1157600080fd5b50610c1a612382565b604051610c2791906145f8565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c529190614613565b612388565b604051610c649190614527565b60405180910390f35b348015610c7957600080fd5b50610c826124dd565b604051610c8f91906145f8565b60405180910390f35b348015610ca457600080fd5b50610cbf6004803603810190610cba91906147e0565b6124e3565b604051610ccc91906145f8565b60405180910390f35b348015610ce157600080fd5b50610cea61256a565b604051610cf791906145f8565b60405180910390f35b348015610d0c57600080fd5b50610d15612570565b604051610d229190614527565b60405180910390f35b348015610d3757600080fd5b50610d526004803603810190610d4d9190614613565b612610565b005b348015610d6057600080fd5b50610d696126e5565b604051610d7691906145f8565b60405180910390f35b348015610d8b57600080fd5b50610da66004803603810190610da19190614542565b6126eb565b005b348015610db457600080fd5b50610dbd6127e2565b604051610dca91906145f8565b60405180910390f35b6060610ddd6118c7565b905090565b6000610df6610def6127e8565b84846127f0565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e566127e8565b73ffffffffffffffffffffffffffffffffffffffff16610e746117de565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061486c565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610f226127e8565b73ffffffffffffffffffffffffffffffffffffffff16610f406117de565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d9061486c565b60405180910390fd5b670de0b6b3a76400006103e86001610fac610e44565b610fb691906148bb565b610fc0919061492c565b610fca919061492c565b81101561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906149cf565b60405180910390fd5b670de0b6b3a76400008161102091906148bb565b60088190555050565b60006110368484846129b9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110816127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614a61565b60405180910390fd5b6111158561110d6127e8565b8584036127f0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006111eb6111566127e8565b8484600160006111646127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e69190614a81565b6127f0565b6001905092915050565b7f00000000000000000000000029bfe97685cdceaaa5991bd7b9b41d742c72dfdf81565b601160009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112eb6127e8565b73ffffffffffffffffffffffffffffffffffffffff166113096117de565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113569061486c565b60405180910390fd5b6113696000613550565b565b6113736127e8565b73ffffffffffffffffffffffffffffffffffffffff166113916117de565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061486c565b60405180910390fd5b806017819055506017546014819055506063601454111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614b01565b60405180910390fd5b50565b6114486127e8565b73ffffffffffffffffffffffffffffffffffffffff166114666117de565b73ffffffffffffffffffffffffffffffffffffffff16146114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061486c565b60405180910390fd5b610258831015611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890614b93565b60405180910390fd5b6103e88211158015611514575060008210155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614c25565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061158a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166115a86117de565b73ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f59061486c565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116286127e8565b73ffffffffffffffffffffffffffffffffffffffff166116466117de565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061486c565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61172b6127e8565b73ffffffffffffffffffffffffffffffffffffffff166117496117de565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117969061486c565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118366127e8565b73ffffffffffffffffffffffffffffffffffffffff166118546117de565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a19061486c565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60606000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190614c71565b60ff16905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f29190614cb3565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190614cb3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611ae1929190614ce0565b602060405180830381865afa158015611afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b229190614cb3565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190614d8b565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c1a578284611c1d565b83835b915091506000611c7a611c41670de0b6b3a76400008561361690919063ffffffff16565b611c6c60028b611c519190614dde565b600a611c5d9190614f45565b8561361690919063ffffffff16565b61361690919063ffffffff16565b905060006040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611cc8611cc38461362c565b6136fa565b604051602001611cd9929190614fcc565b604051602081830303815290604052995050505050505050505090565b611cfe6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611d1c6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d699061486c565b60405180910390fd5b7f00000000000000000000000029bfe97685cdceaaa5991bd7b9b41d742c72dfdf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790615062565b60405180910390fd5b611e0a8282613994565b5050565b60175481565b60105481565b601a5481565b60195481565b60008060016000611e356127e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee9906150f4565b60405180910390fd5b611f06611efd6127e8565b858584036127f0565b600191505092915050565b600e5481565b6000611f2b611f246127e8565b84846129b9565b6001905092915050565b611f3d6127e8565b73ffffffffffffffffffffffffffffffffffffffff16611f5b6117de565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa89061486c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6120306127e8565b73ffffffffffffffffffffffffffffffffffffffff1661204e6117de565b73ffffffffffffffffffffffffffffffffffffffff16146120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061486c565b60405180910390fd5b6120ad81613a35565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516120f390615145565b60006040518083038185875af1925050503d8060008114612130576040519150601f19603f3d011682016040523d82523d6000602084013e612135565b606091505b50505050565b6121436127e8565b73ffffffffffffffffffffffffffffffffffffffff166121616117de565b73ffffffffffffffffffffffffffffffffffffffff16146121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae9061486c565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122549190614527565b60405180910390a25050565b6122686127e8565b73ffffffffffffffffffffffffffffffffffffffff166122866117de565b73ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061486c565b60405180910390fd5b670de0b6b3a76400006103e860056122f2610e44565b6122fc91906148bb565b612306919061492c565b612310919061492c565b811015612352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612349906151cc565b60405180910390fd5b670de0b6b3a76400008161236691906148bb565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006123926127e8565b73ffffffffffffffffffffffffffffffffffffffff166123b06117de565b73ffffffffffffffffffffffffffffffffffffffff1614612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd9061486c565b60405180910390fd5b620186a06001612414610e44565b61241e91906148bb565b612428919061492c565b82101561246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061525e565b60405180910390fd5b6103e86005612477610e44565b61248191906148bb565b61248b919061492c565b8211156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c4906152f0565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061257a6127e8565b73ffffffffffffffffffffffffffffffffffffffff166125986117de565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e59061486c565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6126186127e8565b73ffffffffffffffffffffffffffffffffffffffff166126366117de565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126839061486c565b60405180910390fd5b80601981905550601954601881905550606360185411156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d990614b01565b60405180910390fd5b50565b60165481565b6126f36127e8565b73ffffffffffffffffffffffffffffffffffffffff166127116117de565b73ffffffffffffffffffffffffffffffffffffffff1614612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e9061486c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90615382565b60405180910390fd5b6127df81613550565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690615414565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c5906154a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ac91906145f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90615538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e906155ca565b60405180910390fd5b60008103612ab057612aab83836000613c72565b61354b565b601160009054906101000a900460ff161561317357612acd6117de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b3b5750612b0b6117de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b745750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bae575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc75750600560149054906101000a900460ff16155b1561317257601160019054906101000a900460ff16612cc157601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c815750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790615636565b60405180910390fd5b5b601360009054906101000a900460ff168015612d105750612ce06117de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d6857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e895743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3b906156ee565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2c5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fd357600854811115612f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d90615780565b60405180910390fd5b600a54612f828361129b565b82612f8d9190614a81565b1115612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906157ec565b60405180910390fd5b613171565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130765750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c5576008548111156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b79061587e565b60405180910390fd5b613170565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661316f57600a546131228361129b565b8261312d9190614a81565b111561316e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613165906157ec565b60405180910390fd5b5b5b5b5b5b600061317e3061129b565b9050600060095482101590508080156131a35750601160029054906101000a900460ff165b80156131bc5750600560149054906101000a900460ff16155b80156132125750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132be5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613302576001600560146101000a81548160ff0219169083151502179055506132e6613ef1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b85750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c257600090505b6000811561353b57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342557506000601854115b1561347257613452606461344460185488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a60008282546134669190614a81565b92505081905550613517565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134cd57506000601454115b15613516576134fa60646134ec60145488613ff590919063ffffffff16565b61361690919063ffffffff16565b905080601a600082825461350e9190614a81565b925050819055505b5b600081111561352c5761352b873083613c72565b5b80856135389190614dde565b94505b613546878787613c72565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183613624919061492c565b905092915050565b60606000600161363b8461400b565b01905060008167ffffffffffffffff81111561365a5761365961589e565b5b6040519080825280601f01601f19166020018201604052801561368c5781602001600182028036833780820191505090505b509050600082602001820190505b6001156136ef578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816136e3576136e26148fd565b5b0494506000850361369a575b819350505050919050565b606060008290506000815190506000600267ffffffffffffffff8111156137245761372361589e565b5b6040519080825280601f01601f1916602001820160405280156137565781602001600182028036833780820191505090505b5090506000819050600283111561396857836002846137759190614dde565b81518110613786576137856158cd565b5b602001015160f81c60f81b816000815181106137a5576137a46158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350836001846137e29190614dde565b815181106137f3576137f26158cd565b5b602001015160f81c60f81b81600181518110613812576138116158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006002846138509190614dde565b67ffffffffffffffff8111156138695761386861589e565b5b6040519080825280601f01601f19166020018201604052801561389b5781602001600182028036833780820191505090505b509050600081905060005b6002866138b39190614dde565b81101561392d578681815181106138cd576138cc6158cd565b5b602001015160f81c60f81b8282815181106138eb576138ea6158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080613925906158fc565b9150506138a6565b506139378161415e565b9150818460405160200161394c929190615990565b604051602081830303815290604052965050505050505061398f565b856040516020016139799190615a0b565b6040516020818303038152906040529450505050505b919050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613a5257613a5161589e565b5b604051908082528060200260200182016040528015613a805781602001602082028036833780820191505090505b5090503081600081518110613a9857613a976158cd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b619190614cb3565b81600181518110613b7557613b746158cd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bda307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3c959493929190615b26565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd890615538565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d47906155ca565b60405180910390fd5b613d5b838383614377565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd890615bf2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e749190614a81565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ed891906145f8565b60405180910390a3613eeb84848461437c565b50505050565b6000613efc3061129b565b90506000601a549050600080831480613f155750600082145b15613f2257505050613ff3565b6014600954613f3191906148bb565b831115613f4a576014600954613f4791906148bb565b92505b6000839050613f5881613a35565b6000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa690615145565b60006040518083038185875af1925050503d8060008114613fe3576040519150601f19603f3d011682016040523d82523d6000602084013e613fe8565b606091505b505080925050505050505b565b6000818361400391906148bb565b905092915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614069577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161405f5761405e6148fd565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106140a6576d04ee2d6d415b85acef8100000000838161409c5761409b6148fd565b5b0492506020810190505b662386f26fc1000083106140d557662386f26fc1000083816140cb576140ca6148fd565b5b0492506010810190505b6305f5e10083106140fe576305f5e10083816140f4576140f36148fd565b5b0492506008810190505b6127108310614123576127108381614119576141186148fd565b5b0492506004810190505b60648310614146576064838161413c5761413b6148fd565b5b0492506002810190505b600a8310614155576001810190505b80915050919050565b606060008290506000815190506000600360018361417c9190614dde565b614186919061492c565b9050600081836141969190614a81565b67ffffffffffffffff8111156141af576141ae61589e565b5b6040519080825280601f01601f1916602001820160405280156141e15781602001600182028036833780820191505090505b50905060006001905060005b848110156143695785600182876142049190614dde565b61420e9190614dde565b8151811061421f5761421e6158cd565b5b602001015160f81c60f81b838386886142389190614a81565b6142429190614dde565b81518110614253576142526158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060026003826142919190615c12565b1480156142aa57506001856142a69190614dde565b8114155b156143495781806142ba906158fc565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886142ec9190614a81565b6142f69190614dde565b81518110614307576143066158cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180614341906158fc565b925050614358565b8180614354906158fc565b9250505b80614362906158fc565b90506141ed565b508195505050505050919050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bb5780820151818401526020810190506143a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006143e382614381565b6143ed818561438c565b93506143fd81856020860161439d565b614406816143c7565b840191505092915050565b6000602082019050818103600083015261442b81846143d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061446382614438565b9050919050565b61447381614458565b811461447e57600080fd5b50565b6000813590506144908161446a565b92915050565b6000819050919050565b6144a981614496565b81146144b457600080fd5b50565b6000813590506144c6816144a0565b92915050565b600080604083850312156144e3576144e2614433565b5b60006144f185828601614481565b9250506020614502858286016144b7565b9150509250929050565b60008115159050919050565b6145218161450c565b82525050565b600060208201905061453c6000830184614518565b92915050565b60006020828403121561455857614557614433565b5b600061456684828501614481565b91505092915050565b6000819050919050565b600061459461458f61458a84614438565b61456f565b614438565b9050919050565b60006145a682614579565b9050919050565b60006145b88261459b565b9050919050565b6145c8816145ad565b82525050565b60006020820190506145e360008301846145bf565b92915050565b6145f281614496565b82525050565b600060208201905061460d60008301846145e9565b92915050565b60006020828403121561462957614628614433565b5b6000614637848285016144b7565b91505092915050565b60008060006060848603121561465957614658614433565b5b600061466786828701614481565b935050602061467886828701614481565b9250506040614689868287016144b7565b9150509250925092565b61469c81614458565b82525050565b60006020820190506146b76000830184614693565b92915050565b600060ff82169050919050565b6146d3816146bd565b82525050565b60006020820190506146ee60008301846146ca565b92915050565b6146fd8161450c565b811461470857600080fd5b50565b60008135905061471a816146f4565b92915050565b60008060006060848603121561473957614738614433565b5b6000614747868287016144b7565b9350506020614758868287016144b7565b92505060406147698682870161470b565b9150509250925092565b6000806040838503121561478a57614789614433565b5b600061479885828601614481565b92505060206147a98582860161470b565b9150509250929050565b6000602082840312156147c9576147c8614433565b5b60006147d78482850161470b565b91505092915050565b600080604083850312156147f7576147f6614433565b5b600061480585828601614481565b925050602061481685828601614481565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061485660208361438c565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148c682614496565b91506148d183614496565b92508282026148df81614496565b915082820484148315176148f6576148f561488c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493782614496565b915061494283614496565b925082614952576149516148fd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149b9602f8361438c565b91506149c48261495d565b604082019050919050565b600060208201905081810360008301526149e8816149ac565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614a4b60288361438c565b9150614a56826149ef565b604082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b6000614a8c82614496565b9150614a9783614496565b9250828201905080821115614aaf57614aae61488c565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614aeb601d8361438c565b9150614af682614ab5565b602082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614b7d60338361438c565b9150614b8882614b21565b604082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614c0f60308361438c565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b614c4e816146bd565b8114614c5957600080fd5b50565b600081519050614c6b81614c45565b92915050565b600060208284031215614c8757614c86614433565b5b6000614c9584828501614c5c565b91505092915050565b600081519050614cad8161446a565b92915050565b600060208284031215614cc957614cc8614433565b5b6000614cd784828501614c9e565b91505092915050565b6000604082019050614cf56000830185614693565b614d026020830184614693565b9392505050565b60006dffffffffffffffffffffffffffff82169050919050565b614d2c81614d09565b8114614d3757600080fd5b50565b600081519050614d4981614d23565b92915050565b600063ffffffff82169050919050565b614d6881614d4f565b8114614d7357600080fd5b50565b600081519050614d8581614d5f565b92915050565b600080600060608486031215614da457614da3614433565b5b6000614db286828701614d3a565b9350506020614dc386828701614d3a565b9250506040614dd486828701614d76565b9150509250925092565b6000614de982614496565b9150614df483614496565b9250828203905081811115614e0c57614e0b61488c565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115614e6957808604811115614e4557614e4461488c565b5b6001851615614e545780820291505b8081029050614e6285614e12565b9450614e29565b94509492505050565b600082614e825760019050614f3e565b81614e905760009050614f3e565b8160018114614ea65760028114614eb057614edf565b6001915050614f3e565b60ff841115614ec257614ec161488c565b5b8360020a915084821115614ed957614ed861488c565b5b50614f3e565b5060208310610133831016604e8410600b8410161715614f145782820a905083811115614f0f57614f0e61488c565b5b614f3e565b614f218484846001614e1f565b92509050818404811115614f3857614f3761488c565b5b81810290505b9392505050565b6000614f5082614496565b9150614f5b83614496565b9250614f887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e72565b905092915050565b600081905092915050565b6000614fa682614381565b614fb08185614f90565b9350614fc081856020860161439d565b80840191505092915050565b6000614fd88285614f9b565b9150614fe48284614f9b565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061504c60398361438c565b915061505782614ff0565b604082019050919050565b6000602082019050818103600083015261507b8161503f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150de60258361438c565b91506150e982615082565b604082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b600081905092915050565b50565b600061512f600083615114565b915061513a8261511f565b600082019050919050565b600061515082615122565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006151b660248361438c565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061524860358361438c565b9150615253826151ec565b604082019050919050565b600060208201905081810360008301526152778161523b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152da60348361438c565b91506152e58261527e565b604082019050919050565b60006020820190508181036000830152615309816152cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536c60268361438c565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153fe60248361438c565b9150615409826153a2565b604082019050919050565b6000602082019050818103600083015261542d816153f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061549060228361438c565b915061549b82615434565b604082019050919050565b600060208201905081810360008301526154bf81615483565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061552260258361438c565b915061552d826154c6565b604082019050919050565b6000602082019050818103600083015261555181615515565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155b460238361438c565b91506155bf82615558565b604082019050919050565b600060208201905081810360008301526155e3816155a7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061562060168361438c565b915061562b826155ea565b602082019050919050565b6000602082019050818103600083015261564f81615613565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156d860498361438c565b91506156e382615656565b606082019050919050565b60006020820190508181036000830152615707816156cb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061576a60358361438c565b91506157758261570e565b604082019050919050565b600060208201905081810360008301526157998161575d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157d660138361438c565b91506157e1826157a0565b602082019050919050565b60006020820190508181036000830152615805816157c9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061586860368361438c565b91506158738261580c565b604082019050919050565b600060208201905081810360008301526158978161585b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061590782614496565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159395761593861488c565b5b600182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061597a600183614f90565b915061598582615944565b600182019050919050565b600061599c8285614f9b565b91506159a78261596d565b91506159b38284614f9b565b91508190509392505050565b7f302e000000000000000000000000000000000000000000000000000000000000600082015250565b60006159f5600283614f90565b9150615a00826159bf565b600282019050919050565b6000615a16826159e8565b9150615a228284614f9b565b915081905092915050565b6000819050919050565b6000615a52615a4d615a4884615a2d565b61456f565b614496565b9050919050565b615a6281615a37565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a9d81614458565b82525050565b6000615aaf8383615a94565b60208301905092915050565b6000602082019050919050565b6000615ad382615a68565b615add8185615a73565b9350615ae883615a84565b8060005b83811015615b19578151615b008882615aa3565b9750615b0b83615abb565b925050600181019050615aec565b5085935050505092915050565b600060a082019050615b3b60008301886145e9565b615b486020830187615a59565b8181036040830152615b5a8186615ac8565b9050615b696060830185614693565b615b7660808301846145e9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615bdc60268361438c565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b6000615c1d82614496565b9150615c2883614496565b925082615c3857615c376148fd565b5b82820690509291505056fea2646970667358221220c8a584e78f781b17151164155bf079710cecc60eedf26670676780ee02756d6264736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.