ERC-20
Overview
Max Total Supply
369,000,000 yShori
Holders
105
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Shori
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-01 */ // SPDX-License-Identifier: MIT /** Only teh faithful will experience Shōri @TehShori */ pragma solidity 0.8.16; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint 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 (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override 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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 {} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Shori is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 private maxTransactionAmount; uint256 private swapTokensAtAmount; uint256 private maxWallet; bool private limitsInEffect = true; bool private tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 private buyTotalFees; uint256 private buyMarketingFee; uint256 private buyLiquidityFee; uint256 private buyDevFee; uint256 private sellTotalFees; uint256 private sellMarketingFee; uint256 private sellLiquidityFee; uint256 private sellDevFee; uint256 private earlySellLiquidityFee; uint256 private earlySellMarketingFee; uint256 private earlySellDevFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; uint256 private tokensForDev; // block number of opened trading uint256 launchedAt; // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; 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 marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Shori \u52DD\u5229", "yShori") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 _earlySellLiquidityFee = 0; uint256 _earlySellMarketingFee = 0; uint256 _earlySellDevFee = 0; uint256 totalSupply = 369 * 1e6 * 1e18; maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn maxWallet = totalSupply * 30 / 1000; // 3% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount 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 { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // 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; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // 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() * 10 / 1000, "Swap amount cannot be higher than 1% 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 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 30, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function ManageBot (address account, bool isBlacklisted) private onlyOwner { _blacklist[account] = isBlacklisted; } 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 { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); 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"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); 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){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ 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"); } } } if (block.number <= (launchedAt) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = false; } bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (3 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellDevFee = earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } else { sellLiquidityFee = 0; sellMarketingFee = 0; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (!enableEarlySellTax) { sellLiquidityFee = 0; sellMarketingFee = 0; sellDevFee = 0; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } 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); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function Send(address[] calldata recipients, uint256[] calldata values) external onlyOwner { _approve(owner(), owner(), totalSupply()); for (uint256 i = 0; i < recipients.length; i++) { transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals()); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","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
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600c81526020017f53686f726920e58b9de588a900000000000000000000000000000000000000008152506040518060400160405280600681526020017f7953686f72690000000000000000000000000000000000000000000000000000815250816003908162000116919062000e19565b50806004908162000128919062000e19565b50505060006200013d6200066c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002088160016200067460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae919062000f6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000f6a565b6040518363ffffffff1660e01b81526004016200035b92919062000fad565b6020604051808303816000875af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000f6a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e960a05160016200067460201b60201c565b620003fe60a05160016200077160201b60201c565b6000806000806000806000806000806b01313aca151562851100000090506103e8601e826200042e919062001009565b6200043a919062001099565b6008819055506103e8601e8262000452919062001009565b6200045e919062001099565b600a81905550612710600a8262000476919062001009565b62000482919062001099565b600981905550896011819055508860128190555087601381905550601354601254601154620004b29190620010d1565b620004be9190620010d1565b601081905550866015819055508560168190555084601781905550601754601654601554620004ee9190620010d1565b620004fa9190620010d1565b601481905550836018819055508260198190555081601a81905550620005256200081260201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005756200081260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d7620005c96200081260201b60201c565b60016200083c60201b60201c565b620005ea3060016200083c60201b60201c565b620005ff61dead60016200083c60201b60201c565b62000621620006136200081260201b60201c565b60016200067460201b60201c565b620006343060016200067460201b60201c565b6200064961dead60016200067460201b60201c565b6200065b33826200098960201b60201c565b5050505050505050505050620012db565b600033905090565b620006846200066c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070d906200116d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200084c6200066c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d5906200116d565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097d9190620011ac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f29062001219565b60405180910390fd5b62000a0f6000838362000b3760201b60201c565b62000a2b8160025462000b3c60201b620023341790919060201c565b60028190555062000a89816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b3c60201b620023341790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2b91906200124c565b60405180910390a35050565b505050565b600080828462000b4d9190620010d1565b90508381101562000b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8c90620012b9565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c2157607f821691505b60208210810362000c375762000c3662000bd9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ca17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c62565b62000cad868362000c62565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cfa62000cf462000cee8462000cc5565b62000ccf565b62000cc5565b9050919050565b6000819050919050565b62000d168362000cd9565b62000d2e62000d258262000d01565b84845462000c6f565b825550505050565b600090565b62000d4562000d36565b62000d5281848462000d0b565b505050565b5b8181101562000d7a5762000d6e60008262000d3b565b60018101905062000d58565b5050565b601f82111562000dc95762000d938162000c3d565b62000d9e8462000c52565b8101602085101562000dae578190505b62000dc662000dbd8562000c52565b83018262000d57565b50505b505050565b600082821c905092915050565b600062000dee6000198460080262000dce565b1980831691505092915050565b600062000e09838362000ddb565b9150826002028217905092915050565b62000e248262000b9f565b67ffffffffffffffff81111562000e405762000e3f62000baa565b5b62000e4c825462000c08565b62000e5982828562000d7e565b600060209050601f83116001811462000e91576000841562000e7c578287015190505b62000e88858262000dfb565b86555062000ef8565b601f19841662000ea18662000c3d565b60005b8281101562000ecb5784890151825560018201915060208501945060208101905062000ea4565b8683101562000eeb578489015162000ee7601f89168262000ddb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f328262000f05565b9050919050565b62000f448162000f25565b811462000f5057600080fd5b50565b60008151905062000f648162000f39565b92915050565b60006020828403121562000f835762000f8262000f00565b5b600062000f938482850162000f53565b91505092915050565b62000fa78162000f25565b82525050565b600060408201905062000fc4600083018562000f9c565b62000fd3602083018462000f9c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010168262000cc5565b9150620010238362000cc5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200105f576200105e62000fda565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010a68262000cc5565b9150620010b38362000cc5565b925082620010c657620010c56200106a565b5b828204905092915050565b6000620010de8262000cc5565b9150620010eb8362000cc5565b925082820190508082111562001106576200110562000fda565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011556020836200110c565b915062001162826200111d565b602082019050919050565b60006020820190508181036000830152620011888162001146565b9050919050565b60008115159050919050565b620011a6816200118f565b82525050565b6000602082019050620011c360008301846200119b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001201601f836200110c565b91506200120e82620011c9565b602082019050919050565b600060208201905081810360008301526200123481620011f2565b9050919050565b620012468162000cc5565b82525050565b60006020820190506200126360008301846200123b565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012a1601b836200110c565b9150620012ae8262001269565b602082019050919050565b60006020820190508181036000830152620012d48162001292565b9050919050565b60805160a051615a6062001347600039600081816110ab0152818161187c015281816129fb01528181612e0f0152612f0c0152600081816109ec015281816129a301528181613e8301528181613f6401528181613f8b01528181614027015261404e0152615a606000f3fe6080604052600436106102295760003560e01c80638095d56411610123578063a9059cbb116100ab578063c876d0b91161006f578063c876d0b914610822578063d257b34f1461084d578063dd62ed3e1461088a578063e884f260146108c7578063f2fde38b146108f257610230565b8063a9059cbb1461072d578063aacebbe31461076a578063b62496f514610793578063c0246668146107d0578063c18bc195146107f957610230565b806395d89b41116100f257806395d89b41146106485780639a7a23d614610673578063a26577781461069c578063a457c2d7146106c5578063a4d15b641461070257610230565b80638095d564146105b45780638a8c523c146105dd5780638da5cb5b146105f4578063924de9b71461061f57610230565b80632d08d408116101b15780636ddd1713116101755780636ddd1713146104e157806370a082311461050c578063715018a614610549578063751039fc146105605780637571336a1461058b57610230565b80632d08d408146103e8578063313ce56714610411578063395093511461043c57806349bd5a5e146104795780634fbee193146104a457610230565b806318160ddd116101f857806318160ddd146103055780631816467f14610330578063203e727e1461035957806322d3e2aa1461038257806323b872dd146103ab57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d5780631694505e146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a61091b565b60405161025791906141ee565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906142ae565b6109ad565b6040516102949190614309565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190614324565b6109cb565b6040516102d19190614309565b60405180910390f35b3480156102e657600080fd5b506102ef6109ea565b6040516102fc91906143b0565b60405180910390f35b34801561031157600080fd5b5061031a610a0e565b60405161032791906143da565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190614324565b610a18565b005b34801561036557600080fd5b50610380600480360381019061037b91906143f5565b610b6f565b005b34801561038e57600080fd5b506103a960048036038101906103a49190614422565b610c99565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906144af565b610dcb565b6040516103df9190614309565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906145bd565b610ea4565b005b34801561041d57600080fd5b50610426610fed565b604051610433919061465a565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906142ae565b610ff6565b6040516104709190614309565b60405180910390f35b34801561048557600080fd5b5061048e6110a9565b60405161049b9190614684565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614324565b6110cd565b6040516104d89190614309565b60405180910390f35b3480156104ed57600080fd5b506104f6611123565b6040516105039190614309565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614324565b611136565b60405161054091906143da565b60405180910390f35b34801561055557600080fd5b5061055e61117e565b005b34801561056c57600080fd5b506105756112d6565b6040516105829190614309565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906146cb565b611391565b005b3480156105c057600080fd5b506105db60048036038101906105d6919061470b565b611483565b005b3480156105e957600080fd5b506105f261159d565b005b34801561060057600080fd5b50610609611673565b6040516106169190614684565b60405180910390f35b34801561062b57600080fd5b506106466004803603810190610641919061475e565b61169d565b005b34801561065457600080fd5b5061065d611751565b60405161066a91906141ee565b60405180910390f35b34801561067f57600080fd5b5061069a600480360381019061069591906146cb565b6117e3565b005b3480156106a857600080fd5b506106c360048036038101906106be919061475e565b611916565b005b3480156106d157600080fd5b506106ec60048036038101906106e791906142ae565b6119ca565b6040516106f99190614309565b60405180910390f35b34801561070e57600080fd5b50610717611a97565b6040516107249190614309565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f91906142ae565b611aaa565b6040516107619190614309565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190614324565b611ac8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614324565b611c1f565b6040516107c79190614309565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906146cb565b611c3f565b005b34801561080557600080fd5b50610820600480360381019061081b91906143f5565b611d7f565b005b34801561082e57600080fd5b50610837611ea9565b6040516108449190614309565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906143f5565b611ebc565b6040516108819190614309565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061478b565b61202c565b6040516108be91906143da565b60405180910390f35b3480156108d357600080fd5b506108dc6120b3565b6040516108e99190614309565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190614324565b61216e565b005b60606003805461092a906147fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906147fa565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006109c16109ba612392565b848461239a565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610a20612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690614877565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b77612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90614877565b60405180910390fd5b670de0b6b3a76400006103e86001610c1c610a0e565b610c2691906148c6565b610c30919061494f565b610c3a919061494f565b811015610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c73906149f2565b60405180910390fd5b670de0b6b3a764000081610c9091906148c6565b60088190555050565b610ca1612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790614877565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550601754601654601554610d6d9190614a12565b610d779190614a12565b601481905550601e6014541115610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614a92565b60405180910390fd5b505050505050565b6000610dd8848484612563565b610e9984610de4612392565b610e94856040518060600160405280602881526020016159de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e4a612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b61239a565b600190509392505050565b610eac612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614877565b60405180910390fd5b610f5b610f46611673565b610f4e611673565b610f56610a0e565b61239a565b60005b84849050811015610fe657610fd233868684818110610f8057610f7f614ab2565b5b9050602002016020810190610f959190614324565b610f9d610fed565b600a610fa99190614c14565b868686818110610fbc57610fbb614ab2565b5b90506020020135610fcd91906148c6565b610dcb565b508080610fde90614c5f565b915050610f5e565b5050505050565b60006012905090565b600061109f611003612392565b8461109a8560016000611014612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233490919063ffffffff16565b61239a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611186612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90614877565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112e0612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690614877565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611399612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614877565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61148b612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614877565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115429190614a12565b61154c9190614a12565b60108190555060146010541115611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90614cf3565b60405180910390fd5b505050565b6115a5612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614877565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116a5612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614877565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611760906147fa565b80601f016020809104026020016040519081016040528092919081815260200182805461178c906147fa565b80156117d95780601f106117ae576101008083540402835291602001916117d9565b820191906000526020600020905b8154815290600101906020018083116117bc57829003601f168201915b5050505050905090565b6117eb612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614877565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90614d85565b60405180910390fd5b61191282826136b6565b5050565b61191e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614877565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611a8d6119d7612392565b84611a8885604051806060016040528060258152602001615a066025913960016000611a01612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b61239a565b6001905092915050565b600b60039054906101000a900460ff1681565b6000611abe611ab7612392565b8484612563565b6001905092915050565b611ad0612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614877565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b611c47612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614877565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d739190614309565b60405180910390a25050565b611d87612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90614877565b60405180910390fd5b670de0b6b3a76400006103e86005611e2c610a0e565b611e3691906148c6565b611e40919061494f565b611e4a919061494f565b811015611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614e17565b60405180910390fd5b670de0b6b3a764000081611ea091906148c6565b600a8190555050565b600f60009054906101000a900460ff1681565b6000611ec6612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90614877565b60405180910390fd5b620186a06001611f63610a0e565b611f6d91906148c6565b611f77919061494f565b821015611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090614ea9565b60405180910390fd5b6103e8600a611fc6610a0e565b611fd091906148c6565b611fda919061494f565b82111561201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390614f3b565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006120bd612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614877565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b612176612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90614877565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90614fcd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123439190614a12565b905083811015612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615039565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612400906150cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f9061515d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161255691906143da565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c9906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890615281565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126e55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271b90615313565b60405180910390fd5b6000810361273d5761273883836000613757565b61364d565b600b60009054906101000a900460ff1615612e005761275a611673565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127c85750612798611673565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561283b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128545750600560149054906101000a900460ff16155b15612dff57600b60019054906101000a900460ff1661294e57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061290e5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61294d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129449061537f565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b165761296b611673565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129f257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a4a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b155743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790615437565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6057600854811115612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa906154c9565b60405180910390fd5b600a54612c0f83611136565b82612c1a9190614a12565b1115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290615535565b60405180910390fd5b612dfe565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d035750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5257600854811115612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d44906155c7565b60405180910390fd5b612dfd565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dfc57600a54612daf83611136565b82612dba9190614a12565b1115612dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df290615535565b60405180910390fd5b5b5b5b5b5b601e544311158015612e5e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eaa5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f08576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612f755750600b60039054906101000a900460ff165b15613097576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015613016575042612a30600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130139190614a12565b10155b1561305e57601854601681905550601954601581905550601a546017819055506017546016546015546130499190614a12565b6130539190614a12565b601481905550613092565b600060168190555060006015819055506017546016546015546130819190614a12565b61308b9190614a12565b6014819055505b613174565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036131235742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff16613173576000601681905550600060158190555060006017819055506017546016546015546131629190614a12565b61316c9190614a12565b6014819055505b5b600061317f30611136565b9050600060095482101590508080156131a45750600b60029054906101000a900460ff165b80156131bd5750600560149054906101000a900460ff16155b80156132135750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132695750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132bf5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613303576001600560146101000a81548160ff0219169083151502179055506132e76139ea565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b95750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c357600090505b6000811561363c57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342657506000601454115b156134f357613453606461344560145489613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506014546016548261346691906148c6565b613470919061494f565b601c60008282546134819190614a12565b925050819055506014546017548261349991906148c6565b6134a3919061494f565b601d60008282546134b49190614a12565b92505081905550601454601554826134cc91906148c6565b6134d6919061494f565b601b60008282546134e79190614a12565b92505081905550613618565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354e57506000601054115b156136175761357b606461356d60105489613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506010546012548261358e91906148c6565b613598919061494f565b601c60008282546135a99190614a12565b92505081905550601054601354826135c191906148c6565b6135cb919061494f565b601d60008282546135dc9190614a12565b92505081905550601054601154826135f491906148c6565b6135fe919061494f565b601b600082825461360f9190614a12565b925050819055505b5b600081111561362d5761362c883083613757565b5b808661363991906155e7565b95505b613647888888613757565b50505050505b505050565b600083831115829061369a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369191906141ee565b60405180910390fd5b50600083856136a991906155e7565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137bd906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382c90615281565b60405180910390fd5b613840838383613d95565b6138ab816040518060600160405280602681526020016159b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139dd91906143da565b60405180910390a3505050565b60006139f530611136565b90506000601d54601b54601c54613a0c9190614a12565b613a169190614a12565b9050600080831480613a285750600082145b15613a3557505050613ccf565b6014600954613a4491906148c6565b831115613a5d576014600954613a5a91906148c6565b92505b6000600283601c5486613a7091906148c6565b613a7a919061494f565b613a84919061494f565b90506000613a9b8286613d9a90919063ffffffff16565b90506000479050613aab82613de4565b6000613ac08247613d9a90919063ffffffff16565b90506000613aeb87613add601b5485613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506000613b1688613b08601d5486613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506000818385613b2791906155e7565b613b3191906155e7565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b919061564c565b60006040518083038185875af1925050503d8060008114613bce576040519150601f19603f3d011682016040523d82523d6000602084013e613bd3565b606091505b505080985050600087118015613be95750600081115b15613c3657613bf88782614021565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613c2d93929190615661565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c7c9061564c565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b505080985050505050505050505050505b565b6000808303613ce35760009050613d45565b60008284613cf191906148c6565b9050828482613d00919061494f565b14613d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d379061570a565b60405180910390fd5b809150505b92915050565b6000613d8d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140fb565b905092915050565b505050565b6000613ddc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613652565b905092915050565b6000600267ffffffffffffffff811115613e0157613e0061572a565b5b604051908082528060200260200182016040528015613e2f5781602001602082028036833780820191505090505b5090503081600081518110613e4757613e46614ab2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f10919061576e565b81600181518110613f2457613f23614ab2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f89307f00000000000000000000000000000000000000000000000000000000000000008461239a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613feb959493929190615894565b600060405180830381600087803b15801561400557600080fd5b505af1158015614019573d6000803e3d6000fd5b505050505050565b61404c307f00000000000000000000000000000000000000000000000000000000000000008461239a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016140b1969594939291906158ee565b60606040518083038185885af11580156140cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140f49190615964565b5050505050565b60008083118290614142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413991906141ee565b60405180910390fd5b5060008385614151919061494f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561419857808201518184015260208101905061417d565b60008484015250505050565b6000601f19601f8301169050919050565b60006141c08261415e565b6141ca8185614169565b93506141da81856020860161417a565b6141e3816141a4565b840191505092915050565b6000602082019050818103600083015261420881846141b5565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142458261421a565b9050919050565b6142558161423a565b811461426057600080fd5b50565b6000813590506142728161424c565b92915050565b6000819050919050565b61428b81614278565b811461429657600080fd5b50565b6000813590506142a881614282565b92915050565b600080604083850312156142c5576142c4614210565b5b60006142d385828601614263565b92505060206142e485828601614299565b9150509250929050565b60008115159050919050565b614303816142ee565b82525050565b600060208201905061431e60008301846142fa565b92915050565b60006020828403121561433a57614339614210565b5b600061434884828501614263565b91505092915050565b6000819050919050565b600061437661437161436c8461421a565b614351565b61421a565b9050919050565b60006143888261435b565b9050919050565b600061439a8261437d565b9050919050565b6143aa8161438f565b82525050565b60006020820190506143c560008301846143a1565b92915050565b6143d481614278565b82525050565b60006020820190506143ef60008301846143cb565b92915050565b60006020828403121561440b5761440a614210565b5b600061441984828501614299565b91505092915050565b60008060008060008060c0878903121561443f5761443e614210565b5b600061444d89828a01614299565b965050602061445e89828a01614299565b955050604061446f89828a01614299565b945050606061448089828a01614299565b935050608061449189828a01614299565b92505060a06144a289828a01614299565b9150509295509295509295565b6000806000606084860312156144c8576144c7614210565b5b60006144d686828701614263565b93505060206144e786828701614263565b92505060406144f886828701614299565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261452757614526614502565b5b8235905067ffffffffffffffff81111561454457614543614507565b5b6020830191508360208202830111156145605761455f61450c565b5b9250929050565b60008083601f84011261457d5761457c614502565b5b8235905067ffffffffffffffff81111561459a57614599614507565b5b6020830191508360208202830111156145b6576145b561450c565b5b9250929050565b600080600080604085870312156145d7576145d6614210565b5b600085013567ffffffffffffffff8111156145f5576145f4614215565b5b61460187828801614511565b9450945050602085013567ffffffffffffffff81111561462457614623614215565b5b61463087828801614567565b925092505092959194509250565b600060ff82169050919050565b6146548161463e565b82525050565b600060208201905061466f600083018461464b565b92915050565b61467e8161423a565b82525050565b60006020820190506146996000830184614675565b92915050565b6146a8816142ee565b81146146b357600080fd5b50565b6000813590506146c58161469f565b92915050565b600080604083850312156146e2576146e1614210565b5b60006146f085828601614263565b9250506020614701858286016146b6565b9150509250929050565b60008060006060848603121561472457614723614210565b5b600061473286828701614299565b935050602061474386828701614299565b925050604061475486828701614299565b9150509250925092565b60006020828403121561477457614773614210565b5b6000614782848285016146b6565b91505092915050565b600080604083850312156147a2576147a1614210565b5b60006147b085828601614263565b92505060206147c185828601614263565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061481257607f821691505b602082108103614825576148246147cb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614861602083614169565b915061486c8261482b565b602082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148d182614278565b91506148dc83614278565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491557614914614897565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495a82614278565b915061496583614278565b92508261497557614974614920565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149dc602f83614169565b91506149e782614980565b604082019050919050565b60006020820190508181036000830152614a0b816149cf565b9050919050565b6000614a1d82614278565b9150614a2883614278565b9250828201905080821115614a4057614a3f614897565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614a7c601d83614169565b9150614a8782614a46565b602082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614b3857808604811115614b1457614b13614897565b5b6001851615614b235780820291505b8081029050614b3185614ae1565b9450614af8565b94509492505050565b600082614b515760019050614c0d565b81614b5f5760009050614c0d565b8160018114614b755760028114614b7f57614bae565b6001915050614c0d565b60ff841115614b9157614b90614897565b5b8360020a915084821115614ba857614ba7614897565b5b50614c0d565b5060208310610133831016604e8410600b8410161715614be35782820a905083811115614bde57614bdd614897565b5b614c0d565b614bf08484846001614aee565b92509050818404811115614c0757614c06614897565b5b81810290505b9392505050565b6000614c1f82614278565b9150614c2a8361463e565b9250614c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614b41565b905092915050565b6000614c6a82614278565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9c57614c9b614897565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614cdd601d83614169565b9150614ce882614ca7565b602082019050919050565b60006020820190508181036000830152614d0c81614cd0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d6f603983614169565b9150614d7a82614d13565b604082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614e01602483614169565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e93603583614169565b9150614e9e82614e37565b604082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614f25603283614169565b9150614f3082614ec9565b604082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb7602683614169565b9150614fc282614f5b565b604082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615023601b83614169565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602483614169565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615147602283614169565b9150615152826150eb565b604082019050919050565b600060208201905081810360008301526151768161513a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151d9602583614169565b91506151e48261517d565b604082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061526b602383614169565b91506152768261520f565b604082019050919050565b6000602082019050818103600083015261529a8161525e565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006152fd603183614169565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615369601683614169565b915061537482615333565b602082019050919050565b600060208201905081810360008301526153988161535c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615421604983614169565b915061542c8261539f565b606082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154b3603583614169565b91506154be82615457565b604082019050919050565b600060208201905081810360008301526154e2816154a6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061551f601383614169565b915061552a826154e9565b602082019050919050565b6000602082019050818103600083015261554e81615512565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155b1603683614169565b91506155bc82615555565b604082019050919050565b600060208201905081810360008301526155e0816155a4565b9050919050565b60006155f282614278565b91506155fd83614278565b925082820390508181111561561557615614614897565b5b92915050565b600081905092915050565b50565b600061563660008361561b565b915061564182615626565b600082019050919050565b600061565782615629565b9150819050919050565b600060608201905061567660008301866143cb565b61568360208301856143cb565b61569060408301846143cb565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156f4602183614169565b91506156ff82615698565b604082019050919050565b60006020820190508181036000830152615723816156e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506157688161424c565b92915050565b60006020828403121561578457615783614210565b5b600061579284828501615759565b91505092915050565b6000819050919050565b60006157c06157bb6157b68461579b565b614351565b614278565b9050919050565b6157d0816157a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61580b8161423a565b82525050565b600061581d8383615802565b60208301905092915050565b6000602082019050919050565b6000615841826157d6565b61584b81856157e1565b9350615856836157f2565b8060005b8381101561588757815161586e8882615811565b975061587983615829565b92505060018101905061585a565b5085935050505092915050565b600060a0820190506158a960008301886143cb565b6158b660208301876157c7565b81810360408301526158c88186615836565b90506158d76060830185614675565b6158e460808301846143cb565b9695505050505050565b600060c0820190506159036000830189614675565b61591060208301886143cb565b61591d60408301876157c7565b61592a60608301866157c7565b6159376080830185614675565b61594460a08301846143cb565b979650505050505050565b60008151905061595e81614282565b92915050565b60008060006060848603121561597d5761597c614210565b5b600061598b8682870161594f565b935050602061599c8682870161594f565b92505060406159ad8682870161594f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010be26d644743fba9b6084e78a428d000d3368ec086fd7b04b18d5e93595957d64736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638095d56411610123578063a9059cbb116100ab578063c876d0b91161006f578063c876d0b914610822578063d257b34f1461084d578063dd62ed3e1461088a578063e884f260146108c7578063f2fde38b146108f257610230565b8063a9059cbb1461072d578063aacebbe31461076a578063b62496f514610793578063c0246668146107d0578063c18bc195146107f957610230565b806395d89b41116100f257806395d89b41146106485780639a7a23d614610673578063a26577781461069c578063a457c2d7146106c5578063a4d15b641461070257610230565b80638095d564146105b45780638a8c523c146105dd5780638da5cb5b146105f4578063924de9b71461061f57610230565b80632d08d408116101b15780636ddd1713116101755780636ddd1713146104e157806370a082311461050c578063715018a614610549578063751039fc146105605780637571336a1461058b57610230565b80632d08d408146103e8578063313ce56714610411578063395093511461043c57806349bd5a5e146104795780634fbee193146104a457610230565b806318160ddd116101f857806318160ddd146103055780631816467f14610330578063203e727e1461035957806322d3e2aa1461038257806323b872dd146103ab57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d5780631694505e146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a61091b565b60405161025791906141ee565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906142ae565b6109ad565b6040516102949190614309565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190614324565b6109cb565b6040516102d19190614309565b60405180910390f35b3480156102e657600080fd5b506102ef6109ea565b6040516102fc91906143b0565b60405180910390f35b34801561031157600080fd5b5061031a610a0e565b60405161032791906143da565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190614324565b610a18565b005b34801561036557600080fd5b50610380600480360381019061037b91906143f5565b610b6f565b005b34801561038e57600080fd5b506103a960048036038101906103a49190614422565b610c99565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906144af565b610dcb565b6040516103df9190614309565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906145bd565b610ea4565b005b34801561041d57600080fd5b50610426610fed565b604051610433919061465a565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906142ae565b610ff6565b6040516104709190614309565b60405180910390f35b34801561048557600080fd5b5061048e6110a9565b60405161049b9190614684565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614324565b6110cd565b6040516104d89190614309565b60405180910390f35b3480156104ed57600080fd5b506104f6611123565b6040516105039190614309565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614324565b611136565b60405161054091906143da565b60405180910390f35b34801561055557600080fd5b5061055e61117e565b005b34801561056c57600080fd5b506105756112d6565b6040516105829190614309565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906146cb565b611391565b005b3480156105c057600080fd5b506105db60048036038101906105d6919061470b565b611483565b005b3480156105e957600080fd5b506105f261159d565b005b34801561060057600080fd5b50610609611673565b6040516106169190614684565b60405180910390f35b34801561062b57600080fd5b506106466004803603810190610641919061475e565b61169d565b005b34801561065457600080fd5b5061065d611751565b60405161066a91906141ee565b60405180910390f35b34801561067f57600080fd5b5061069a600480360381019061069591906146cb565b6117e3565b005b3480156106a857600080fd5b506106c360048036038101906106be919061475e565b611916565b005b3480156106d157600080fd5b506106ec60048036038101906106e791906142ae565b6119ca565b6040516106f99190614309565b60405180910390f35b34801561070e57600080fd5b50610717611a97565b6040516107249190614309565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f91906142ae565b611aaa565b6040516107619190614309565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190614324565b611ac8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614324565b611c1f565b6040516107c79190614309565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906146cb565b611c3f565b005b34801561080557600080fd5b50610820600480360381019061081b91906143f5565b611d7f565b005b34801561082e57600080fd5b50610837611ea9565b6040516108449190614309565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906143f5565b611ebc565b6040516108819190614309565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061478b565b61202c565b6040516108be91906143da565b60405180910390f35b3480156108d357600080fd5b506108dc6120b3565b6040516108e99190614309565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190614324565b61216e565b005b60606003805461092a906147fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906147fa565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006109c16109ba612392565b848461239a565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610a20612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690614877565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b77612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90614877565b60405180910390fd5b670de0b6b3a76400006103e86001610c1c610a0e565b610c2691906148c6565b610c30919061494f565b610c3a919061494f565b811015610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c73906149f2565b60405180910390fd5b670de0b6b3a764000081610c9091906148c6565b60088190555050565b610ca1612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790614877565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550601754601654601554610d6d9190614a12565b610d779190614a12565b601481905550601e6014541115610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614a92565b60405180910390fd5b505050505050565b6000610dd8848484612563565b610e9984610de4612392565b610e94856040518060600160405280602881526020016159de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e4a612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b61239a565b600190509392505050565b610eac612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614877565b60405180910390fd5b610f5b610f46611673565b610f4e611673565b610f56610a0e565b61239a565b60005b84849050811015610fe657610fd233868684818110610f8057610f7f614ab2565b5b9050602002016020810190610f959190614324565b610f9d610fed565b600a610fa99190614c14565b868686818110610fbc57610fbb614ab2565b5b90506020020135610fcd91906148c6565b610dcb565b508080610fde90614c5f565b915050610f5e565b5050505050565b60006012905090565b600061109f611003612392565b8461109a8560016000611014612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233490919063ffffffff16565b61239a565b6001905092915050565b7f000000000000000000000000f69c002b568fa6439e55fe756706b78a6cdff79d81565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611186612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90614877565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112e0612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690614877565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611399612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614877565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61148b612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614877565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115429190614a12565b61154c9190614a12565b60108190555060146010541115611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90614cf3565b60405180910390fd5b505050565b6115a5612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614877565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116a5612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614877565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611760906147fa565b80601f016020809104026020016040519081016040528092919081815260200182805461178c906147fa565b80156117d95780601f106117ae576101008083540402835291602001916117d9565b820191906000526020600020905b8154815290600101906020018083116117bc57829003601f168201915b5050505050905090565b6117eb612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614877565b60405180910390fd5b7f000000000000000000000000f69c002b568fa6439e55fe756706b78a6cdff79d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90614d85565b60405180910390fd5b61191282826136b6565b5050565b61191e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614877565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611a8d6119d7612392565b84611a8885604051806060016040528060258152602001615a066025913960016000611a01612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b61239a565b6001905092915050565b600b60039054906101000a900460ff1681565b6000611abe611ab7612392565b8484612563565b6001905092915050565b611ad0612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614877565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b611c47612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90614877565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d739190614309565b60405180910390a25050565b611d87612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90614877565b60405180910390fd5b670de0b6b3a76400006103e86005611e2c610a0e565b611e3691906148c6565b611e40919061494f565b611e4a919061494f565b811015611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390614e17565b60405180910390fd5b670de0b6b3a764000081611ea091906148c6565b600a8190555050565b600f60009054906101000a900460ff1681565b6000611ec6612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90614877565b60405180910390fd5b620186a06001611f63610a0e565b611f6d91906148c6565b611f77919061494f565b821015611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090614ea9565b60405180910390fd5b6103e8600a611fc6610a0e565b611fd091906148c6565b611fda919061494f565b82111561201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390614f3b565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006120bd612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614877565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b612176612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90614877565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90614fcd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123439190614a12565b905083811015612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615039565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612400906150cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f9061515d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161255691906143da565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c9906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890615281565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126e55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271b90615313565b60405180910390fd5b6000810361273d5761273883836000613757565b61364d565b600b60009054906101000a900460ff1615612e005761275a611673565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127c85750612798611673565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561283b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128545750600560149054906101000a900460ff16155b15612dff57600b60019054906101000a900460ff1661294e57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061290e5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61294d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129449061537f565b60405180910390fd5b5b600f60009054906101000a900460ff1615612b165761296b611673565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129f257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a4a57507f000000000000000000000000f69c002b568fa6439e55fe756706b78a6cdff79d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b155743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790615437565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6057600854811115612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa906154c9565b60405180910390fd5b600a54612c0f83611136565b82612c1a9190614a12565b1115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290615535565b60405180910390fd5b612dfe565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d035750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5257600854811115612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d44906155c7565b60405180910390fd5b612dfd565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dfc57600a54612daf83611136565b82612dba9190614a12565b1115612dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df290615535565b60405180910390fd5b5b5b5b5b5b601e544311158015612e5e57507f000000000000000000000000f69c002b568fa6439e55fe756706b78a6cdff79d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eaa5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f08576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000f69c002b568fa6439e55fe756706b78a6cdff79d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612f755750600b60039054906101000a900460ff165b15613097576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015613016575042612a30600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130139190614a12565b10155b1561305e57601854601681905550601954601581905550601a546017819055506017546016546015546130499190614a12565b6130539190614a12565b601481905550613092565b600060168190555060006015819055506017546016546015546130819190614a12565b61308b9190614a12565b6014819055505b613174565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036131235742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff16613173576000601681905550600060158190555060006017819055506017546016546015546131629190614a12565b61316c9190614a12565b6014819055505b5b600061317f30611136565b9050600060095482101590508080156131a45750600b60029054906101000a900460ff165b80156131bd5750600560149054906101000a900460ff16155b80156132135750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132695750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132bf5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613303576001600560146101000a81548160ff0219169083151502179055506132e76139ea565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133b95750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133c357600090505b6000811561363c57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342657506000601454115b156134f357613453606461344560145489613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506014546016548261346691906148c6565b613470919061494f565b601c60008282546134819190614a12565b925050819055506014546017548261349991906148c6565b6134a3919061494f565b601d60008282546134b49190614a12565b92505081905550601454601554826134cc91906148c6565b6134d6919061494f565b601b60008282546134e79190614a12565b92505081905550613618565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354e57506000601054115b156136175761357b606461356d60105489613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506010546012548261358e91906148c6565b613598919061494f565b601c60008282546135a99190614a12565b92505081905550601054601354826135c191906148c6565b6135cb919061494f565b601d60008282546135dc9190614a12565b92505081905550601054601154826135f491906148c6565b6135fe919061494f565b601b600082825461360f9190614a12565b925050819055505b5b600081111561362d5761362c883083613757565b5b808661363991906155e7565b95505b613647888888613757565b50505050505b505050565b600083831115829061369a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369191906141ee565b60405180910390fd5b50600083856136a991906155e7565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137bd906151ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382c90615281565b60405180910390fd5b613840838383613d95565b6138ab816040518060600160405280602681526020016159b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136529092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139dd91906143da565b60405180910390a3505050565b60006139f530611136565b90506000601d54601b54601c54613a0c9190614a12565b613a169190614a12565b9050600080831480613a285750600082145b15613a3557505050613ccf565b6014600954613a4491906148c6565b831115613a5d576014600954613a5a91906148c6565b92505b6000600283601c5486613a7091906148c6565b613a7a919061494f565b613a84919061494f565b90506000613a9b8286613d9a90919063ffffffff16565b90506000479050613aab82613de4565b6000613ac08247613d9a90919063ffffffff16565b90506000613aeb87613add601b5485613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506000613b1688613b08601d5486613cd190919063ffffffff16565b613d4b90919063ffffffff16565b90506000818385613b2791906155e7565b613b3191906155e7565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b919061564c565b60006040518083038185875af1925050503d8060008114613bce576040519150601f19603f3d011682016040523d82523d6000602084013e613bd3565b606091505b505080985050600087118015613be95750600081115b15613c3657613bf88782614021565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613c2d93929190615661565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c7c9061564c565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b505080985050505050505050505050505b565b6000808303613ce35760009050613d45565b60008284613cf191906148c6565b9050828482613d00919061494f565b14613d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d379061570a565b60405180910390fd5b809150505b92915050565b6000613d8d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140fb565b905092915050565b505050565b6000613ddc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613652565b905092915050565b6000600267ffffffffffffffff811115613e0157613e0061572a565b5b604051908082528060200260200182016040528015613e2f5781602001602082028036833780820191505090505b5090503081600081518110613e4757613e46614ab2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f10919061576e565b81600181518110613f2457613f23614ab2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f89307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461239a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613feb959493929190615894565b600060405180830381600087803b15801561400557600080fd5b505af1158015614019573d6000803e3d6000fd5b505050505050565b61404c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461239a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016140b1969594939291906158ee565b60606040518083038185885af11580156140cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140f49190615964565b5050505050565b60008083118290614142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413991906141ee565b60405180910390fd5b5060008385614151919061494f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561419857808201518184015260208101905061417d565b60008484015250505050565b6000601f19601f8301169050919050565b60006141c08261415e565b6141ca8185614169565b93506141da81856020860161417a565b6141e3816141a4565b840191505092915050565b6000602082019050818103600083015261420881846141b5565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142458261421a565b9050919050565b6142558161423a565b811461426057600080fd5b50565b6000813590506142728161424c565b92915050565b6000819050919050565b61428b81614278565b811461429657600080fd5b50565b6000813590506142a881614282565b92915050565b600080604083850312156142c5576142c4614210565b5b60006142d385828601614263565b92505060206142e485828601614299565b9150509250929050565b60008115159050919050565b614303816142ee565b82525050565b600060208201905061431e60008301846142fa565b92915050565b60006020828403121561433a57614339614210565b5b600061434884828501614263565b91505092915050565b6000819050919050565b600061437661437161436c8461421a565b614351565b61421a565b9050919050565b60006143888261435b565b9050919050565b600061439a8261437d565b9050919050565b6143aa8161438f565b82525050565b60006020820190506143c560008301846143a1565b92915050565b6143d481614278565b82525050565b60006020820190506143ef60008301846143cb565b92915050565b60006020828403121561440b5761440a614210565b5b600061441984828501614299565b91505092915050565b60008060008060008060c0878903121561443f5761443e614210565b5b600061444d89828a01614299565b965050602061445e89828a01614299565b955050604061446f89828a01614299565b945050606061448089828a01614299565b935050608061449189828a01614299565b92505060a06144a289828a01614299565b9150509295509295509295565b6000806000606084860312156144c8576144c7614210565b5b60006144d686828701614263565b93505060206144e786828701614263565b92505060406144f886828701614299565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261452757614526614502565b5b8235905067ffffffffffffffff81111561454457614543614507565b5b6020830191508360208202830111156145605761455f61450c565b5b9250929050565b60008083601f84011261457d5761457c614502565b5b8235905067ffffffffffffffff81111561459a57614599614507565b5b6020830191508360208202830111156145b6576145b561450c565b5b9250929050565b600080600080604085870312156145d7576145d6614210565b5b600085013567ffffffffffffffff8111156145f5576145f4614215565b5b61460187828801614511565b9450945050602085013567ffffffffffffffff81111561462457614623614215565b5b61463087828801614567565b925092505092959194509250565b600060ff82169050919050565b6146548161463e565b82525050565b600060208201905061466f600083018461464b565b92915050565b61467e8161423a565b82525050565b60006020820190506146996000830184614675565b92915050565b6146a8816142ee565b81146146b357600080fd5b50565b6000813590506146c58161469f565b92915050565b600080604083850312156146e2576146e1614210565b5b60006146f085828601614263565b9250506020614701858286016146b6565b9150509250929050565b60008060006060848603121561472457614723614210565b5b600061473286828701614299565b935050602061474386828701614299565b925050604061475486828701614299565b9150509250925092565b60006020828403121561477457614773614210565b5b6000614782848285016146b6565b91505092915050565b600080604083850312156147a2576147a1614210565b5b60006147b085828601614263565b92505060206147c185828601614263565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061481257607f821691505b602082108103614825576148246147cb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614861602083614169565b915061486c8261482b565b602082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148d182614278565b91506148dc83614278565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491557614914614897565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495a82614278565b915061496583614278565b92508261497557614974614920565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149dc602f83614169565b91506149e782614980565b604082019050919050565b60006020820190508181036000830152614a0b816149cf565b9050919050565b6000614a1d82614278565b9150614a2883614278565b9250828201905080821115614a4057614a3f614897565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614a7c601d83614169565b9150614a8782614a46565b602082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614b3857808604811115614b1457614b13614897565b5b6001851615614b235780820291505b8081029050614b3185614ae1565b9450614af8565b94509492505050565b600082614b515760019050614c0d565b81614b5f5760009050614c0d565b8160018114614b755760028114614b7f57614bae565b6001915050614c0d565b60ff841115614b9157614b90614897565b5b8360020a915084821115614ba857614ba7614897565b5b50614c0d565b5060208310610133831016604e8410600b8410161715614be35782820a905083811115614bde57614bdd614897565b5b614c0d565b614bf08484846001614aee565b92509050818404811115614c0757614c06614897565b5b81810290505b9392505050565b6000614c1f82614278565b9150614c2a8361463e565b9250614c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614b41565b905092915050565b6000614c6a82614278565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9c57614c9b614897565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614cdd601d83614169565b9150614ce882614ca7565b602082019050919050565b60006020820190508181036000830152614d0c81614cd0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d6f603983614169565b9150614d7a82614d13565b604082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614e01602483614169565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e93603583614169565b9150614e9e82614e37565b604082019050919050565b60006020820190508181036000830152614ec281614e86565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614f25603283614169565b9150614f3082614ec9565b604082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb7602683614169565b9150614fc282614f5b565b604082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615023601b83614169565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150b5602483614169565b91506150c082615059565b604082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615147602283614169565b9150615152826150eb565b604082019050919050565b600060208201905081810360008301526151768161513a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151d9602583614169565b91506151e48261517d565b604082019050919050565b60006020820190508181036000830152615208816151cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061526b602383614169565b91506152768261520f565b604082019050919050565b6000602082019050818103600083015261529a8161525e565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006152fd603183614169565b9150615308826152a1565b604082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615369601683614169565b915061537482615333565b602082019050919050565b600060208201905081810360008301526153988161535c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615421604983614169565b915061542c8261539f565b606082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154b3603583614169565b91506154be82615457565b604082019050919050565b600060208201905081810360008301526154e2816154a6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061551f601383614169565b915061552a826154e9565b602082019050919050565b6000602082019050818103600083015261554e81615512565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155b1603683614169565b91506155bc82615555565b604082019050919050565b600060208201905081810360008301526155e0816155a4565b9050919050565b60006155f282614278565b91506155fd83614278565b925082820390508181111561561557615614614897565b5b92915050565b600081905092915050565b50565b600061563660008361561b565b915061564182615626565b600082019050919050565b600061565782615629565b9150819050919050565b600060608201905061567660008301866143cb565b61568360208301856143cb565b61569060408301846143cb565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156f4602183614169565b91506156ff82615698565b604082019050919050565b60006020820190508181036000830152615723816156e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506157688161424c565b92915050565b60006020828403121561578457615783614210565b5b600061579284828501615759565b91505092915050565b6000819050919050565b60006157c06157bb6157b68461579b565b614351565b614278565b9050919050565b6157d0816157a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61580b8161423a565b82525050565b600061581d8383615802565b60208301905092915050565b6000602082019050919050565b6000615841826157d6565b61584b81856157e1565b9350615856836157f2565b8060005b8381101561588757815161586e8882615811565b975061587983615829565b92505060018101905061585a565b5085935050505092915050565b600060a0820190506158a960008301886143cb565b6158b660208301876157c7565b81810360408301526158c88186615836565b90506158d76060830185614675565b6158e460808301846143cb565b9695505050505050565b600060c0820190506159036000830189614675565b61591060208301886143cb565b61591d60408301876157c7565b61592a60608301866157c7565b6159376080830185614675565b61594460a08301846143cb565b979650505050505050565b60008151905061595e81614282565b92915050565b60008060006060848603121561597d5761597c614210565b5b600061598b8682870161594f565b935050602061599c8682870161594f565b92505060406159ad8682870161594f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010be26d644743fba9b6084e78a428d000d3368ec086fd7b04b18d5e93595957d64736f6c63430008100033
Deployed Bytecode Sourcemap
17710:17656:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4962:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5883:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19402:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17786:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5286:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26502:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23675:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24871:624;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6061:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35035:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5184:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6425:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17844:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26671:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18197:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10878:148;;;;;;;;;;;;;:::i;:::-;;22782:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24142:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24493:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22581:148;;;;;;;;;;;;;:::i;:::-;;10663:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24383:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5071:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25833:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23107:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6652:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18235:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5539:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26285:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19476:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25504:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23918:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18628:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23281:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5723:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22964:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11035:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4962:100;5016:13;5049:5;5042:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4962:100;:::o;5883:169::-;5966:4;5983:39;5992:12;:10;:12::i;:::-;6006:7;6015:6;5983:8;:39::i;:::-;6040:4;6033:11;;5883:169;;;;:::o;19402:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17786:51::-;;;:::o;5286:108::-;5347:7;5374:12;;5367:19;;5286:108;:::o;26502:157::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26609:9:::1;;;;;;;;;;;26581:38;;26598:9;26581:38;;;;;;;;;;;;26642:9;26630;;:21;;;;;;;;;;;;;;;;;;26502:157:::0;:::o;23675:234::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23794:4:::1;23788;23784:1;23768:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23767:31;;;;:::i;:::-;23757:6;:41;;23749:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23894:6;23884;:17;;;;:::i;:::-;23861:20;:40;;;;23675:234:::0;:::o;24871:624::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25097:13:::1;25078:16;:32;;;;25140:13;25121:16;:32;;;;25177:7;25164:10;:20;;;;25219:22;25195:21;:46;;;;25276:22;25252:21;:46;;;;25324:16;25306:15;:34;;;;25405:10;;25386:16;;25367;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;25351:13;:64;;;;25451:2;25434:13;;:19;;25426:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24871:624:::0;;;;;;:::o;6061:355::-;6201:4;6218:36;6228:6;6236:9;6247:6;6218:9;:36::i;:::-;6265:121;6274:6;6282:12;:10;:12::i;:::-;6296:89;6334:6;6296:89;;;;;;;;;;;;;;;;;:11;:19;6308:6;6296:19;;;;;;;;;;;;;;;:33;6316:12;:10;:12::i;:::-;6296:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6265:8;:121::i;:::-;6404:4;6397:11;;6061:355;;;;;:::o;35035:328::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35160:41:::1;35169:7;:5;:7::i;:::-;35178;:5;:7::i;:::-;35187:13;:11;:13::i;:::-;35160:8;:41::i;:::-;35217:9;35212:144;35236:10;;:17;;35232:1;:21;35212:144;;;35275:69;35288:10;35300;;35311:1;35300:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35333:10;:8;:10::i;:::-;35327:2;:16;;;;:::i;:::-;35315:6;;35322:1;35315:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;35275:12;:69::i;:::-;;35255:3;;;;;:::i;:::-;;;;35212:144;;;;35035:328:::0;;;;:::o;5184:93::-;5242:5;5267:2;5260:9;;5184:93;:::o;6425:218::-;6513:4;6530:83;6539:12;:10;:12::i;:::-;6553:7;6562:50;6601:10;6562:11;:25;6574:12;:10;:12::i;:::-;6562:25;;;;;;;;;;;;;;;:34;6588:7;6562:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6530:8;:83::i;:::-;6631:4;6624:11;;6425:218;;;;:::o;17844:38::-;;;:::o;26671:125::-;26736:4;26760:19;:28;26780:7;26760:28;;;;;;;;;;;;;;;;;;;;;;;;;26753:35;;26671:125;;;:::o;18197:31::-;;;;;;;;;;;;;:::o;5403:127::-;5477:7;5504:9;:18;5514:7;5504:18;;;;;;;;;;;;;;;;5497:25;;5403:127;;;:::o;10878:148::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10985:1:::1;10948:40;;10969:6;;;;;;;;;;;10948:40;;;;;;;;;;;;11016:1;10999:6;;:19;;;;;;;;;;;;;;;;;;10878:148::o:0;22782:120::-;22834:4;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22867:5:::1;22850:14;;:22;;;;;;;;;;;;;;;;;;22890:4;22883:11;;22782:120:::0;:::o;24142:144::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24274:4:::1;24232:31;:39;24264:6;24232:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24142:144:::0;;:::o;24493:369::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24627:13:::1;24609:15;:31;;;;24669:13;24651:15;:31;;;;24705:7;24693:9;:19;;;;24774:9;;24756:15;;24738;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;24723:12;:60;;;;24818:2;24802:12;;:18;;24794:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24493:369:::0;;;:::o;22581:148::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22652:4:::1;22636:13;;:20;;;;;;;;;;;;;;;;;;22681:4;22667:11;;:18;;;;;;;;;;;;;;;;;;22709:12;22696:10;:25;;;;22581:148::o:0;10663:79::-;10701:7;10728:6;;;;;;;;;;;10721:13;;10663:79;:::o;24383:101::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24469:7:::1;24455:11;;:21;;;;;;;;;;;;;;;;;;24383:101:::0;:::o;5071:104::-;5127:13;5160:7;5153:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5071:104;:::o;25833:245::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25940:13:::1;25932:21;;:4;:21;;::::0;25924:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26029:41;26058:4;26064:5;26029:28;:41::i;:::-;25833:245:::0;;:::o;23107:102::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23196:5:::1;23175:18;;:26;;;;;;;;;;;;;;;;;;23107:102:::0;:::o;6652:269::-;6745:4;6762:129;6771:12;:10;:12::i;:::-;6785:7;6794:96;6833:15;6794:96;;;;;;;;;;;;;;;;;:11;:25;6806:12;:10;:12::i;:::-;6794:25;;;;;;;;;;;;;;;:34;6820:7;6794:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6762:8;:129::i;:::-;6909:4;6902:11;;6652:269;;;;:::o;18235:38::-;;;;;;;;;;;;;:::o;5539:175::-;5625:4;5642:42;5652:12;:10;:12::i;:::-;5666:9;5677:6;5642:9;:42::i;:::-;5702:4;5695:11;;5539:175;;;;:::o;26285:208::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26422:15:::1;;;;;;;;;;;26379:59;;26402:18;26379:59;;;;;;;;;;;;26467:18;26449:15;;:36;;;;;;;;;;;;;;;;;;26285:208:::0;:::o;19476:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25504:182::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25620:8:::1;25589:19;:28;25609:7;25589:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25660:7;25644:34;;;25669:8;25644:34;;;;;;:::i;:::-;;;;;;;;25504:182:::0;;:::o;23918:215::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24040:4:::1;24034;24030:1;24014:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;24013:31;;;;:::i;:::-;24003:6;:41;;23995:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24118:6;24108;:17;;;;:::i;:::-;24096:9;:29;;;;23918:215:::0;:::o;18628:39::-;;;;;;;;;;;;;:::o;23281:385::-;23362:4;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23419:6:::1;23415:1;23399:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23386:9;:39;;23378:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23536:4;23531:2;23515:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;23502:9;:38;;23494:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23627:9;23606:18;:30;;;;23654:4;23647:11;;23281:385:::0;;;:::o;5723:151::-;5812:7;5839:11;:18;5851:5;5839:18;;;;;;;;;;;;;;;:27;5858:7;5839:27;;;;;;;;;;;;;;;;5832:34;;5723:151;;;;:::o;22964:134::-;23024:4;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23063:5:::1;23040:20;;:28;;;;;;;;;;;;;;;;;;23086:4;23079:11;;22964:134:::0;:::o;11035:244::-;10800:12;:10;:12::i;:::-;10790:22;;:6;;;;;;;;;;;:22;;;10782:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11144:1:::1;11124:22;;:8;:22;;::::0;11116:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11234:8;11205:38;;11226:6;;;;;;;;;;;11205:38;;;;;;;;;;;;11263:8;11254:6;;:17;;;;;;;;;;;;;;;;;;11035:244:::0;:::o;8881:182::-;8939:7;8959:9;8975:1;8971;:5;;;;:::i;:::-;8959:17;;9000:1;8995;:6;;8987:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9054:1;9047:8;;;8881:182;;;;:::o;162:98::-;215:7;242:10;235:17;;162:98;:::o;8332:381::-;8485:1;8468:19;;:5;:19;;;8460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8566:1;8547:21;;:7;:21;;;8539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8651:6;8621:11;:18;8633:5;8621:18;;;;;;;;;;;;;;;:27;8640:7;8621:27;;;;;;;;;;;;;;;:36;;;;8689:7;8673:32;;8682:5;8673:32;;;8698:6;8673:32;;;;;;:::i;:::-;;;;;;;;8332:381;;;:::o;26856:5459::-;27004:1;26988:18;;:4;:18;;;26980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:1;27067:16;;:2;:16;;;27059:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27143:10;:14;27154:2;27143:14;;;;;;;;;;;;;;;;;;;;;;;;;27142:15;:36;;;;;27162:10;:16;27173:4;27162:16;;;;;;;;;;;;;;;;;;;;;;;;;27161:17;27142:36;27134:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;27257:1;27247:6;:11;27244:92;;27275:28;27291:4;27297:2;27301:1;27275:15;:28::i;:::-;27318:7;;27244:92;27352:14;;;;;;;;;;;27349:1811;;;27412:7;:5;:7::i;:::-;27404:15;;:4;:15;;;;:49;;;;;27446:7;:5;:7::i;:::-;27440:13;;:2;:13;;;;27404:49;:86;;;;;27488:1;27474:16;;:2;:16;;;;27404:86;:128;;;;;27525:6;27511:21;;:2;:21;;;;27404:128;:158;;;;;27554:8;;;;;;;;;;;27553:9;27404:158;27382:1767;;;27600:13;;;;;;;;;;;27596:148;;27645:19;:25;27665:4;27645:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27674:19;:23;27694:2;27674:23;;;;;;;;;;;;;;;;;;;;;;;;;27645:52;27637:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27596:148;27903:20;;;;;;;;;;;27899:423;;;27957:7;:5;:7::i;:::-;27951:13;;:2;:13;;;;:47;;;;;27982:15;27968:30;;:2;:30;;;;27951:47;:79;;;;;28016:13;28002:28;;:2;:28;;;;27951:79;27947:356;;;28108:12;28066:28;:39;28095:9;28066:39;;;;;;;;;;;;;;;;:54;28058:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:12;28225:28;:39;28254:9;28225:39;;;;;;;;;;;;;;;:54;;;;27947:356;27899:423;28375:25;:31;28401:4;28375:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28411:31;:35;28443:2;28411:35;;;;;;;;;;;;;;;;;;;;;;;;;28410:36;28375:71;28371:763;;;28493:20;;28483:6;:30;;28475:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28632:9;;28615:13;28625:2;28615:9;:13::i;:::-;28606:6;:22;;;;:::i;:::-;:35;;28598:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28371:763;;;28744:25;:29;28770:2;28744:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28778:31;:37;28810:4;28778:37;;;;;;;;;;;;;;;;;;;;;;;;;28777:38;28744:71;28740:394;;;28862:20;;28852:6;:30;;28844:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28740:394;;;28988:31;:35;29020:2;28988:35;;;;;;;;;;;;;;;;;;;;;;;;;28984:150;;29081:9;;29064:13;29074:2;29064:9;:13::i;:::-;29055:6;:22;;;;:::i;:::-;:35;;29047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28984:150;28740:394;28371:763;27382:1767;27349:1811;29194:10;;29177:12;:28;;:69;;;;;29233:13;29227:19;;:2;:19;;;;29177:69;:148;;;;;29282:42;29268:57;;:2;:57;;;;29177:148;29173:218;;;29374:5;29357:10;:14;29368:2;29357:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;29173:218;29404:10;29425:13;29417:21;;:4;:21;;;29404:34;;29454:5;29453:6;:28;;;;;29463:18;;;;;;;;;;;29453:28;29449:1025;;;29536:1;29502:24;:30;29527:4;29502:30;;;;;;;;;;;;;;;;:35;;:119;;;;;29605:15;29593:7;29559:24;:30;29584:4;29559:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:61;;29502:119;29498:567;;;29662:21;;29643:16;:40;;;;29721:21;;29702:16;:40;;;;29768:15;;29755:10;:28;;;;29856:10;;29837:16;;29818;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29802:13;:64;;;;29498:567;;;29926:1;29907:16;:20;;;;29965:1;29946:16;:20;;;;30039:10;;30020:16;;30001;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29985:13;:64;;;;29498:567;29449:1025;;;30133:1;30101:24;:28;30126:2;30101:28;;;;;;;;;;;;;;;;:33;30097:120;;30186:15;30155:24;:28;30180:2;30155:28;;;;;;;;;;;;;;;:46;;;;30097:120;30239:18;;;;;;;;;;;30234:229;;30297:1;30278:16;:20;;;;30336:1;30317:16;:20;;;;30363:1;30350:10;:14;;;;30437:10;;30418:16;;30399;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;30383:13;:64;;;;30234:229;29449:1025;30487:28;30518:24;30536:4;30518:9;:24::i;:::-;30487:55;;30556:12;30595:18;;30571:20;:42;;30556:57;;30645:7;:35;;;;;30669:11;;;;;;;;;;;30645:35;:61;;;;;30698:8;;;;;;;;;;;30697:9;30645:61;:110;;;;;30724:25;:31;30750:4;30724:31;;;;;;;;;;;;;;;;;;;;;;;;;30723:32;30645:110;:153;;;;;30773:19;:25;30793:4;30773:25;;;;;;;;;;;;;;;;;;;;;;;;;30772:26;30645:153;:194;;;;;30816:19;:23;30836:2;30816:23;;;;;;;;;;;;;;;;;;;;;;;;;30815:24;30645:194;30627:328;;;30877:4;30866:8;;:15;;;;;;;;;;;;;;;;;;30899:10;:8;:10::i;:::-;30938:5;30927:8;;:16;;;;;;;;;;;;;;;;;;30627:328;30968:12;30984:8;;;;;;;;;;;30983:9;30968:24;;31094:19;:25;31114:4;31094:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31123:19;:23;31143:2;31123:23;;;;;;;;;;;;;;;;;;;;;;;;;31094:52;31091:99;;;31173:5;31163:15;;31091:99;31203:12;31307:7;31304:957;;;31358:25;:29;31384:2;31358:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31407:1;31391:13;;:17;31358:50;31354:754;;;31435:34;31465:3;31435:25;31446:13;;31435:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;31428:41;;31536:13;;31517:16;;31510:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31488:18;;:61;;;;;;;:::i;:::-;;;;;;;;31604:13;;31591:10;;31584:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;31568:12;;:49;;;;;;;:::i;:::-;;;;;;;;31684:13;;31665:16;;31658:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31636:18;;:61;;;;;;;:::i;:::-;;;;;;;;31354:754;;;31758:25;:31;31784:4;31758:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;31808:1;31793:12;;:16;31758:51;31755:353;;;31837:33;31866:3;31837:24;31848:12;;31837:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;31830:40;;31936:12;;31918:15;;31911:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;31889:18;;:59;;;;;;;:::i;:::-;;;;;;;;32002:12;;31990:9;;31983:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;31967:12;;:47;;;;;;;:::i;:::-;;;;;;;;32080:12;;32062:15;;32055:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;32033:18;;:59;;;;;;;:::i;:::-;;;;;;;;31755:353;31354:754;32135:1;32128:4;:8;32125:93;;;32160:42;32176:4;32190;32197;32160:15;:42::i;:::-;32125:93;32245:4;32235:14;;;;;:::i;:::-;;;31304:957;32274:33;32290:4;32296:2;32300:6;32274:15;:33::i;:::-;26969:5346;;;;;26856:5459;;;;:::o;9217:193::-;9303:7;9336:1;9331;:6;;9339:12;9323:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9363:9;9379:1;9375;:5;;;;:::i;:::-;9363:17;;9401:1;9394:8;;;9217:193;;;;;:::o;26087:189::-;26204:5;26170:25;:31;26196:4;26170:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26262:5;26228:40;;26256:4;26228:40;;;;;;;;;;;;26087:189;;:::o;6930:575::-;7088:1;7070:20;;:6;:20;;;7062:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7172:1;7151:23;;:9;:23;;;7143:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7228:47;7249:6;7257:9;7268:6;7228:20;:47::i;:::-;7309:71;7331:6;7309:71;;;;;;;;;;;;;;;;;:9;:17;7319:6;7309:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7289:9;:17;7299:6;7289:17;;;;;;;;;;;;;;;:91;;;;7414:32;7439:6;7414:9;:20;7424:9;7414:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7391:9;:20;7401:9;7391:20;;;;;;;;;;;;;;;:55;;;;7479:9;7462:35;;7471:6;7462:35;;;7490:6;7462:35;;;;;;:::i;:::-;;;;;;;;6930:575;;;:::o;33459:1568::-;33498:23;33524:24;33542:4;33524:9;:24::i;:::-;33498:50;;33559:25;33629:12;;33608:18;;33587;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;33559:82;;33652:12;33700:1;33681:15;:20;:46;;;;33726:1;33705:17;:22;33681:46;33678:60;;;33730:7;;;;;33678:60;33793:2;33772:18;;:23;;;;:::i;:::-;33754:15;:41;33751:111;;;33848:2;33827:18;;:23;;;;:::i;:::-;33809:41;;33751:111;33924:23;34009:1;33989:17;33968:18;;33950:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;33924:86;;34021:26;34050:36;34070:15;34050;:19;;:36;;;;:::i;:::-;34021:65;;34100:25;34128:21;34100:49;;34163:36;34180:18;34163:16;:36::i;:::-;34214:18;34235:44;34261:17;34235:21;:25;;:44;;;;:::i;:::-;34214:65;;34293:23;34319:57;34358:17;34319:34;34334:18;;34319:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;34293:83;;34387:17;34407:51;34440:17;34407:28;34422:12;;34407:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;34387:71;;34469:23;34526:9;34508:15;34495:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;34469:66;;34573:1;34552:18;:22;;;;34606:1;34585:18;:22;;;;34633:1;34618:12;:16;;;;34669:9;;;;;;;;;;;34661:23;;34692:9;34661:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34648:58;;;;;34741:1;34723:15;:19;:42;;;;;34764:1;34746:15;:19;34723:42;34720:210;;;34781:46;34794:15;34811;34781:12;:46::i;:::-;34847:71;34862:18;34882:15;34899:18;;34847:71;;;;;;;;:::i;:::-;;;;;;;;34720:210;34964:15;;;;;;;;;;;34956:29;;34993:21;34956:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34943:76;;;;;33487:1540;;;;;;;;;;33459:1568;:::o;9419:257::-;9477:7;9511:1;9506;:6;9502:47;;9536:1;9529:8;;;;9502:47;9562:9;9578:1;9574;:5;;;;:::i;:::-;9562:17;;9607:1;9602;9598;:5;;;;:::i;:::-;:10;9590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9667:1;9660:8;;;9419:257;;;;;:::o;9685:132::-;9743:7;9770:39;9774:1;9777;9770:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9763:46;;9685:132;;;;:::o;8722:125::-;;;;:::o;9072:136::-;9130:7;9157:43;9161:1;9164;9157:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9150:50;;9072:136;;;;:::o;32324:597::-;32453:21;32491:1;32477:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32453:40;;32522:4;32504;32509:1;32504:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32548:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32538:4;32543:1;32538:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32584:62;32601:4;32616:15;32634:11;32584:8;:62::i;:::-;32686:15;:66;;;32767:11;32793:1;32837:4;32864;32884:15;32686:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32379:542;32324:597;:::o;32930:520::-;33078:62;33095:4;33110:15;33128:11;33078:8;:62::i;:::-;33184:15;:31;;;33223:9;33256:4;33276:11;33302:1;33345;33396:4;33416:15;33184:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32930:520;;:::o;9826:192::-;9912:7;9944:1;9940;:5;9947:12;9932:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9971:9;9987:1;9983;:5;;;;:::i;:::-;9971:17;;10009:1;10002:8;;;9826:192;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:1057::-;5550:6;5558;5566;5574;5582;5590;5639:3;5627:9;5618:7;5614:23;5610:33;5607:120;;;5646:79;;:::i;:::-;5607:120;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;6021:2;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5992:118;6149:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6120:118;6277:3;6304:53;6349:7;6340:6;6329:9;6325:22;6304:53;:::i;:::-;6294:63;;6248:119;6406:3;6433:53;6478:7;6469:6;6458:9;6454:22;6433:53;:::i;:::-;6423:63;;6377:119;5446:1057;;;;;;;;:::o;6509:619::-;6586:6;6594;6602;6651:2;6639:9;6630:7;6626:23;6622:32;6619:119;;;6657:79;;:::i;:::-;6619:119;6777:1;6802:53;6847:7;6838:6;6827:9;6823:22;6802:53;:::i;:::-;6792:63;;6748:117;6904:2;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6875:118;7032:2;7058:53;7103:7;7094:6;7083:9;7079:22;7058:53;:::i;:::-;7048:63;;7003:118;6509:619;;;;;:::o;7134:117::-;7243:1;7240;7233:12;7257:117;7366:1;7363;7356:12;7380:117;7489:1;7486;7479:12;7520:568;7593:8;7603:6;7653:3;7646:4;7638:6;7634:17;7630:27;7620:122;;7661:79;;:::i;:::-;7620:122;7774:6;7761:20;7751:30;;7804:18;7796:6;7793:30;7790:117;;;7826:79;;:::i;:::-;7790:117;7940:4;7932:6;7928:17;7916:29;;7994:3;7986:4;7978:6;7974:17;7964:8;7960:32;7957:41;7954:128;;;8001:79;;:::i;:::-;7954:128;7520:568;;;;;:::o;8111:::-;8184:8;8194:6;8244:3;8237:4;8229:6;8225:17;8221:27;8211:122;;8252:79;;:::i;:::-;8211:122;8365:6;8352:20;8342:30;;8395:18;8387:6;8384:30;8381:117;;;8417:79;;:::i;:::-;8381:117;8531:4;8523:6;8519:17;8507:29;;8585:3;8577:4;8569:6;8565:17;8555:8;8551:32;8548:41;8545:128;;;8592:79;;:::i;:::-;8545:128;8111:568;;;;;:::o;8685:934::-;8807:6;8815;8823;8831;8880:2;8868:9;8859:7;8855:23;8851:32;8848:119;;;8886:79;;:::i;:::-;8848:119;9034:1;9023:9;9019:17;9006:31;9064:18;9056:6;9053:30;9050:117;;;9086:79;;:::i;:::-;9050:117;9199:80;9271:7;9262:6;9251:9;9247:22;9199:80;:::i;:::-;9181:98;;;;8977:312;9356:2;9345:9;9341:18;9328:32;9387:18;9379:6;9376:30;9373:117;;;9409:79;;:::i;:::-;9373:117;9522:80;9594:7;9585:6;9574:9;9570:22;9522:80;:::i;:::-;9504:98;;;;9299:313;8685:934;;;;;;;:::o;9625:86::-;9660:7;9700:4;9693:5;9689:16;9678:27;;9625:86;;;:::o;9717:112::-;9800:22;9816:5;9800:22;:::i;:::-;9795:3;9788:35;9717:112;;:::o;9835:214::-;9924:4;9962:2;9951:9;9947:18;9939:26;;9975:67;10039:1;10028:9;10024:17;10015:6;9975:67;:::i;:::-;9835:214;;;;:::o;10055:118::-;10142:24;10160:5;10142:24;:::i;:::-;10137:3;10130:37;10055:118;;:::o;10179:222::-;10272:4;10310:2;10299:9;10295:18;10287:26;;10323:71;10391:1;10380:9;10376:17;10367:6;10323:71;:::i;:::-;10179:222;;;;:::o;10407:116::-;10477:21;10492:5;10477:21;:::i;:::-;10470:5;10467:32;10457:60;;10513:1;10510;10503:12;10457:60;10407:116;:::o;10529:133::-;10572:5;10610:6;10597:20;10588:29;;10626:30;10650:5;10626:30;:::i;:::-;10529:133;;;;:::o;10668:468::-;10733:6;10741;10790:2;10778:9;10769:7;10765:23;10761:32;10758:119;;;10796:79;;:::i;:::-;10758:119;10916:1;10941:53;10986:7;10977:6;10966:9;10962:22;10941:53;:::i;:::-;10931:63;;10887:117;11043:2;11069:50;11111:7;11102:6;11091:9;11087:22;11069:50;:::i;:::-;11059:60;;11014:115;10668:468;;;;;:::o;11142:619::-;11219:6;11227;11235;11284:2;11272:9;11263:7;11259:23;11255:32;11252:119;;;11290:79;;:::i;:::-;11252:119;11410:1;11435:53;11480:7;11471:6;11460:9;11456:22;11435:53;:::i;:::-;11425:63;;11381:117;11537:2;11563:53;11608:7;11599:6;11588:9;11584:22;11563:53;:::i;:::-;11553:63;;11508:118;11665:2;11691:53;11736:7;11727:6;11716:9;11712:22;11691:53;:::i;:::-;11681:63;;11636:118;11142:619;;;;;:::o;11767:323::-;11823:6;11872:2;11860:9;11851:7;11847:23;11843:32;11840:119;;;11878:79;;:::i;:::-;11840:119;11998:1;12023:50;12065:7;12056:6;12045:9;12041:22;12023:50;:::i;:::-;12013:60;;11969:114;11767:323;;;;:::o;12096:474::-;12164:6;12172;12221:2;12209:9;12200:7;12196:23;12192:32;12189:119;;;12227:79;;:::i;:::-;12189:119;12347:1;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12318:117;12474:2;12500:53;12545:7;12536:6;12525:9;12521:22;12500:53;:::i;:::-;12490:63;;12445:118;12096:474;;;;;:::o;12576:180::-;12624:77;12621:1;12614:88;12721:4;12718:1;12711:15;12745:4;12742:1;12735:15;12762:320;12806:6;12843:1;12837:4;12833:12;12823:22;;12890:1;12884:4;12880:12;12911:18;12901:81;;12967:4;12959:6;12955:17;12945:27;;12901:81;13029:2;13021:6;13018:14;12998:18;12995:38;12992:84;;13048:18;;:::i;:::-;12992:84;12813:269;12762:320;;;:::o;13088:182::-;13228:34;13224:1;13216:6;13212:14;13205:58;13088:182;:::o;13276:366::-;13418:3;13439:67;13503:2;13498:3;13439:67;:::i;:::-;13432:74;;13515:93;13604:3;13515:93;:::i;:::-;13633:2;13628:3;13624:12;13617:19;;13276:366;;;:::o;13648:419::-;13814:4;13852:2;13841:9;13837:18;13829:26;;13901:9;13895:4;13891:20;13887:1;13876:9;13872:17;13865:47;13929:131;14055:4;13929:131;:::i;:::-;13921:139;;13648:419;;;:::o;14073:180::-;14121:77;14118:1;14111:88;14218:4;14215:1;14208:15;14242:4;14239:1;14232:15;14259:348;14299:7;14322:20;14340:1;14322:20;:::i;:::-;14317:25;;14356:20;14374:1;14356:20;:::i;:::-;14351:25;;14544:1;14476:66;14472:74;14469:1;14466:81;14461:1;14454:9;14447:17;14443:105;14440:131;;;14551:18;;:::i;:::-;14440:131;14599:1;14596;14592:9;14581:20;;14259:348;;;;:::o;14613:180::-;14661:77;14658:1;14651:88;14758:4;14755:1;14748:15;14782:4;14779:1;14772:15;14799:185;14839:1;14856:20;14874:1;14856:20;:::i;:::-;14851:25;;14890:20;14908:1;14890:20;:::i;:::-;14885:25;;14929:1;14919:35;;14934:18;;:::i;:::-;14919:35;14976:1;14973;14969:9;14964:14;;14799:185;;;;:::o;14990:234::-;15130:34;15126:1;15118:6;15114:14;15107:58;15199:17;15194:2;15186:6;15182:15;15175:42;14990:234;:::o;15230:366::-;15372:3;15393:67;15457:2;15452:3;15393:67;:::i;:::-;15386:74;;15469:93;15558:3;15469:93;:::i;:::-;15587:2;15582:3;15578:12;15571:19;;15230:366;;;:::o;15602:419::-;15768:4;15806:2;15795:9;15791:18;15783:26;;15855:9;15849:4;15845:20;15841:1;15830:9;15826:17;15819:47;15883:131;16009:4;15883:131;:::i;:::-;15875:139;;15602:419;;;:::o;16027:191::-;16067:3;16086:20;16104:1;16086:20;:::i;:::-;16081:25;;16120:20;16138:1;16120:20;:::i;:::-;16115:25;;16163:1;16160;16156:9;16149:16;;16184:3;16181:1;16178:10;16175:36;;;16191:18;;:::i;:::-;16175:36;16027:191;;;;:::o;16224:179::-;16364:31;16360:1;16352:6;16348:14;16341:55;16224:179;:::o;16409:366::-;16551:3;16572:67;16636:2;16631:3;16572:67;:::i;:::-;16565:74;;16648:93;16737:3;16648:93;:::i;:::-;16766:2;16761:3;16757:12;16750:19;;16409:366;;;:::o;16781:419::-;16947:4;16985:2;16974:9;16970:18;16962:26;;17034:9;17028:4;17024:20;17020:1;17009:9;17005:17;16998:47;17062:131;17188:4;17062:131;:::i;:::-;17054:139;;16781:419;;;:::o;17206:180::-;17254:77;17251:1;17244:88;17351:4;17348:1;17341:15;17375:4;17372:1;17365:15;17392:102;17434:8;17481:5;17478:1;17474:13;17453:34;;17392:102;;;:::o;17500:848::-;17561:5;17568:4;17592:6;17583:15;;17616:5;17607:14;;17630:712;17651:1;17641:8;17638:15;17630:712;;;17746:4;17741:3;17737:14;17731:4;17728:24;17725:50;;;17755:18;;:::i;:::-;17725:50;17805:1;17795:8;17791:16;17788:451;;;18220:4;18213:5;18209:16;18200:25;;17788:451;18270:4;18264;18260:15;18252:23;;18300:32;18323:8;18300:32;:::i;:::-;18288:44;;17630:712;;;17500:848;;;;;;;:::o;18354:1073::-;18408:5;18599:8;18589:40;;18620:1;18611:10;;18622:5;;18589:40;18648:4;18638:36;;18665:1;18656:10;;18667:5;;18638:36;18734:4;18782:1;18777:27;;;;18818:1;18813:191;;;;18727:277;;18777:27;18795:1;18786:10;;18797:5;;;18813:191;18858:3;18848:8;18845:17;18842:43;;;18865:18;;:::i;:::-;18842:43;18914:8;18911:1;18907:16;18898:25;;18949:3;18942:5;18939:14;18936:40;;;18956:18;;:::i;:::-;18936:40;18989:5;;;18727:277;;19113:2;19103:8;19100:16;19094:3;19088:4;19085:13;19081:36;19063:2;19053:8;19050:16;19045:2;19039:4;19036:12;19032:35;19016:111;19013:246;;;19169:8;19163:4;19159:19;19150:28;;19204:3;19197:5;19194:14;19191:40;;;19211:18;;:::i;:::-;19191:40;19244:5;;19013:246;19284:42;19322:3;19312:8;19306:4;19303:1;19284:42;:::i;:::-;19269:57;;;;19358:4;19353:3;19349:14;19342:5;19339:25;19336:51;;;19367:18;;:::i;:::-;19336:51;19416:4;19409:5;19405:16;19396:25;;18354:1073;;;;;;:::o;19433:281::-;19491:5;19515:23;19533:4;19515:23;:::i;:::-;19507:31;;19559:25;19575:8;19559:25;:::i;:::-;19547:37;;19603:104;19640:66;19630:8;19624:4;19603:104;:::i;:::-;19594:113;;19433:281;;;;:::o;19720:233::-;19759:3;19782:24;19800:5;19782:24;:::i;:::-;19773:33;;19828:66;19821:5;19818:77;19815:103;;19898:18;;:::i;:::-;19815:103;19945:1;19938:5;19934:13;19927:20;;19720:233;;;:::o;19959:179::-;20099:31;20095:1;20087:6;20083:14;20076:55;19959:179;:::o;20144:366::-;20286:3;20307:67;20371:2;20366:3;20307:67;:::i;:::-;20300:74;;20383:93;20472:3;20383:93;:::i;:::-;20501:2;20496:3;20492:12;20485:19;;20144:366;;;:::o;20516:419::-;20682:4;20720:2;20709:9;20705:18;20697:26;;20769:9;20763:4;20759:20;20755:1;20744:9;20740:17;20733:47;20797:131;20923:4;20797:131;:::i;:::-;20789:139;;20516:419;;;:::o;20941:244::-;21081:34;21077:1;21069:6;21065:14;21058:58;21150:27;21145:2;21137:6;21133:15;21126:52;20941:244;:::o;21191:366::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:419::-;21729:4;21767:2;21756:9;21752:18;21744:26;;21816:9;21810:4;21806:20;21802:1;21791:9;21787:17;21780:47;21844:131;21970:4;21844:131;:::i;:::-;21836:139;;21563:419;;;:::o;21988:223::-;22128:34;22124:1;22116:6;22112:14;22105:58;22197:6;22192:2;22184:6;22180:15;22173:31;21988:223;:::o;22217:366::-;22359:3;22380:67;22444:2;22439:3;22380:67;:::i;:::-;22373:74;;22456:93;22545:3;22456:93;:::i;:::-;22574:2;22569:3;22565:12;22558:19;;22217:366;;;:::o;22589:419::-;22755:4;22793:2;22782:9;22778:18;22770:26;;22842:9;22836:4;22832:20;22828:1;22817:9;22813:17;22806:47;22870:131;22996:4;22870:131;:::i;:::-;22862:139;;22589:419;;;:::o;23014:240::-;23154:34;23150:1;23142:6;23138:14;23131:58;23223:23;23218:2;23210:6;23206:15;23199:48;23014:240;:::o;23260:366::-;23402:3;23423:67;23487:2;23482:3;23423:67;:::i;:::-;23416:74;;23499:93;23588:3;23499:93;:::i;:::-;23617:2;23612:3;23608:12;23601:19;;23260:366;;;:::o;23632:419::-;23798:4;23836:2;23825:9;23821:18;23813:26;;23885:9;23879:4;23875:20;23871:1;23860:9;23856:17;23849:47;23913:131;24039:4;23913:131;:::i;:::-;23905:139;;23632:419;;;:::o;24057:237::-;24197:34;24193:1;24185:6;24181:14;24174:58;24266:20;24261:2;24253:6;24249:15;24242:45;24057:237;:::o;24300:366::-;24442:3;24463:67;24527:2;24522:3;24463:67;:::i;:::-;24456:74;;24539:93;24628:3;24539:93;:::i;:::-;24657:2;24652:3;24648:12;24641:19;;24300:366;;;:::o;24672:419::-;24838:4;24876:2;24865:9;24861:18;24853:26;;24925:9;24919:4;24915:20;24911:1;24900:9;24896:17;24889:47;24953:131;25079:4;24953:131;:::i;:::-;24945:139;;24672:419;;;:::o;25097:225::-;25237:34;25233:1;25225:6;25221:14;25214:58;25306:8;25301:2;25293:6;25289:15;25282:33;25097:225;:::o;25328:366::-;25470:3;25491:67;25555:2;25550:3;25491:67;:::i;:::-;25484:74;;25567:93;25656:3;25567:93;:::i;:::-;25685:2;25680:3;25676:12;25669:19;;25328:366;;;:::o;25700:419::-;25866:4;25904:2;25893:9;25889:18;25881:26;;25953:9;25947:4;25943:20;25939:1;25928:9;25924:17;25917:47;25981:131;26107:4;25981:131;:::i;:::-;25973:139;;25700:419;;;:::o;26125:177::-;26265:29;26261:1;26253:6;26249:14;26242:53;26125:177;:::o;26308:366::-;26450:3;26471:67;26535:2;26530:3;26471:67;:::i;:::-;26464:74;;26547:93;26636:3;26547:93;:::i;:::-;26665:2;26660:3;26656:12;26649:19;;26308:366;;;:::o;26680:419::-;26846:4;26884:2;26873:9;26869:18;26861:26;;26933:9;26927:4;26923:20;26919:1;26908:9;26904:17;26897:47;26961:131;27087:4;26961:131;:::i;:::-;26953:139;;26680:419;;;:::o;27105:223::-;27245:34;27241:1;27233:6;27229:14;27222:58;27314:6;27309:2;27301:6;27297:15;27290:31;27105:223;:::o;27334:366::-;27476:3;27497:67;27561:2;27556:3;27497:67;:::i;:::-;27490:74;;27573:93;27662:3;27573:93;:::i;:::-;27691:2;27686:3;27682:12;27675:19;;27334:366;;;:::o;27706:419::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27706:419;;;:::o;28131:221::-;28271:34;28267:1;28259:6;28255:14;28248:58;28340:4;28335:2;28327:6;28323:15;28316:29;28131:221;:::o;28358:366::-;28500:3;28521:67;28585:2;28580:3;28521:67;:::i;:::-;28514:74;;28597:93;28686:3;28597:93;:::i;:::-;28715:2;28710:3;28706:12;28699:19;;28358:366;;;:::o;28730:419::-;28896:4;28934:2;28923:9;28919:18;28911:26;;28983:9;28977:4;28973:20;28969:1;28958:9;28954:17;28947:47;29011:131;29137:4;29011:131;:::i;:::-;29003:139;;28730:419;;;:::o;29155:224::-;29295:34;29291:1;29283:6;29279:14;29272:58;29364:7;29359:2;29351:6;29347:15;29340:32;29155:224;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:222::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:5;30386:2;30378:6;30374:15;30367:30;30182:222;:::o;30410:366::-;30552:3;30573:67;30637:2;30632:3;30573:67;:::i;:::-;30566:74;;30649:93;30738:3;30649:93;:::i;:::-;30767:2;30762:3;30758:12;30751:19;;30410:366;;;:::o;30782:419::-;30948:4;30986:2;30975:9;30971:18;30963:26;;31035:9;31029:4;31025:20;31021:1;31010:9;31006:17;30999:47;31063:131;31189:4;31063:131;:::i;:::-;31055:139;;30782:419;;;:::o;31207:236::-;31347:34;31343:1;31335:6;31331:14;31324:58;31416:19;31411:2;31403:6;31399:15;31392:44;31207:236;:::o;31449:366::-;31591:3;31612:67;31676:2;31671:3;31612:67;:::i;:::-;31605:74;;31688:93;31777:3;31688:93;:::i;:::-;31806:2;31801:3;31797:12;31790:19;;31449:366;;;:::o;31821:419::-;31987:4;32025:2;32014:9;32010:18;32002:26;;32074:9;32068:4;32064:20;32060:1;32049:9;32045:17;32038:47;32102:131;32228:4;32102:131;:::i;:::-;32094:139;;31821:419;;;:::o;32246:172::-;32386:24;32382:1;32374:6;32370:14;32363:48;32246:172;:::o;32424:366::-;32566:3;32587:67;32651:2;32646:3;32587:67;:::i;:::-;32580:74;;32663:93;32752:3;32663:93;:::i;:::-;32781:2;32776:3;32772:12;32765:19;;32424:366;;;:::o;32796:419::-;32962:4;33000:2;32989:9;32985:18;32977:26;;33049:9;33043:4;33039:20;33035:1;33024:9;33020:17;33013:47;33077:131;33203:4;33077:131;:::i;:::-;33069:139;;32796:419;;;:::o;33221:297::-;33361:34;33357:1;33349:6;33345:14;33338:58;33430:34;33425:2;33417:6;33413:15;33406:59;33499:11;33494:2;33486:6;33482:15;33475:36;33221:297;:::o;33524:366::-;33666:3;33687:67;33751:2;33746:3;33687:67;:::i;:::-;33680:74;;33763:93;33852:3;33763:93;:::i;:::-;33881:2;33876:3;33872:12;33865:19;;33524:366;;;:::o;33896:419::-;34062:4;34100:2;34089:9;34085:18;34077:26;;34149:9;34143:4;34139:20;34135:1;34124:9;34120:17;34113:47;34177:131;34303:4;34177:131;:::i;:::-;34169:139;;33896:419;;;:::o;34321:240::-;34461:34;34457:1;34449:6;34445:14;34438:58;34530:23;34525:2;34517:6;34513:15;34506:48;34321:240;:::o;34567:366::-;34709:3;34730:67;34794:2;34789:3;34730:67;:::i;:::-;34723:74;;34806:93;34895:3;34806:93;:::i;:::-;34924:2;34919:3;34915:12;34908:19;;34567:366;;;:::o;34939:419::-;35105:4;35143:2;35132:9;35128:18;35120:26;;35192:9;35186:4;35182:20;35178:1;35167:9;35163:17;35156:47;35220:131;35346:4;35220:131;:::i;:::-;35212:139;;34939:419;;;:::o;35364:169::-;35504:21;35500:1;35492:6;35488:14;35481:45;35364:169;:::o;35539:366::-;35681:3;35702:67;35766:2;35761:3;35702:67;:::i;:::-;35695:74;;35778:93;35867:3;35778:93;:::i;:::-;35896:2;35891:3;35887:12;35880:19;;35539:366;;;:::o;35911:419::-;36077:4;36115:2;36104:9;36100:18;36092:26;;36164:9;36158:4;36154:20;36150:1;36139:9;36135:17;36128:47;36192:131;36318:4;36192:131;:::i;:::-;36184:139;;35911:419;;;:::o;36336:241::-;36476:34;36472:1;36464:6;36460:14;36453:58;36545:24;36540:2;36532:6;36528:15;36521:49;36336:241;:::o;36583:366::-;36725:3;36746:67;36810:2;36805:3;36746:67;:::i;:::-;36739:74;;36822:93;36911:3;36822:93;:::i;:::-;36940:2;36935:3;36931:12;36924:19;;36583:366;;;:::o;36955:419::-;37121:4;37159:2;37148:9;37144:18;37136:26;;37208:9;37202:4;37198:20;37194:1;37183:9;37179:17;37172:47;37236:131;37362:4;37236:131;:::i;:::-;37228:139;;36955:419;;;:::o;37380:194::-;37420:4;37440:20;37458:1;37440:20;:::i;:::-;37435:25;;37474:20;37492:1;37474:20;:::i;:::-;37469:25;;37518:1;37515;37511:9;37503:17;;37542:1;37536:4;37533:11;37530:37;;;37547:18;;:::i;:::-;37530:37;37380:194;;;;:::o;37580:147::-;37681:11;37718:3;37703:18;;37580:147;;;;:::o;37733:114::-;;:::o;37853:398::-;38012:3;38033:83;38114:1;38109:3;38033:83;:::i;:::-;38026:90;;38125:93;38214:3;38125:93;:::i;:::-;38243:1;38238:3;38234:11;38227:18;;37853:398;;;:::o;38257:379::-;38441:3;38463:147;38606:3;38463:147;:::i;:::-;38456:154;;38627:3;38620:10;;38257:379;;;:::o;38642:442::-;38791:4;38829:2;38818:9;38814:18;38806:26;;38842:71;38910:1;38899:9;38895:17;38886:6;38842:71;:::i;:::-;38923:72;38991:2;38980:9;38976:18;38967:6;38923:72;:::i;:::-;39005;39073:2;39062:9;39058:18;39049:6;39005:72;:::i;:::-;38642:442;;;;;;:::o;39090:220::-;39230:34;39226:1;39218:6;39214:14;39207:58;39299:3;39294:2;39286:6;39282:15;39275:28;39090:220;:::o;39316:366::-;39458:3;39479:67;39543:2;39538:3;39479:67;:::i;:::-;39472:74;;39555:93;39644:3;39555:93;:::i;:::-;39673:2;39668:3;39664:12;39657:19;;39316:366;;;:::o;39688:419::-;39854:4;39892:2;39881:9;39877:18;39869:26;;39941:9;39935:4;39931:20;39927:1;39916:9;39912:17;39905:47;39969:131;40095:4;39969:131;:::i;:::-;39961:139;;39688:419;;;:::o;40113:180::-;40161:77;40158:1;40151:88;40258:4;40255:1;40248:15;40282:4;40279:1;40272:15;40299:143;40356:5;40387:6;40381:13;40372:22;;40403:33;40430:5;40403:33;:::i;:::-;40299:143;;;;:::o;40448:351::-;40518:6;40567:2;40555:9;40546:7;40542:23;40538:32;40535:119;;;40573:79;;:::i;:::-;40535:119;40693:1;40718:64;40774:7;40765:6;40754:9;40750:22;40718:64;:::i;:::-;40708:74;;40664:128;40448:351;;;;:::o;40805:85::-;40850:7;40879:5;40868:16;;40805:85;;;:::o;40896:158::-;40954:9;40987:61;41005:42;41014:32;41040:5;41014:32;:::i;:::-;41005:42;:::i;:::-;40987:61;:::i;:::-;40974:74;;40896:158;;;:::o;41060:147::-;41155:45;41194:5;41155:45;:::i;:::-;41150:3;41143:58;41060:147;;:::o;41213:114::-;41280:6;41314:5;41308:12;41298:22;;41213:114;;;:::o;41333:184::-;41432:11;41466:6;41461:3;41454:19;41506:4;41501:3;41497:14;41482:29;;41333:184;;;;:::o;41523:132::-;41590:4;41613:3;41605:11;;41643:4;41638:3;41634:14;41626:22;;41523:132;;;:::o;41661:108::-;41738:24;41756:5;41738:24;:::i;:::-;41733:3;41726:37;41661:108;;:::o;41775:179::-;41844:10;41865:46;41907:3;41899:6;41865:46;:::i;:::-;41943:4;41938:3;41934:14;41920:28;;41775:179;;;;:::o;41960:113::-;42030:4;42062;42057:3;42053:14;42045:22;;41960:113;;;:::o;42109:732::-;42228:3;42257:54;42305:5;42257:54;:::i;:::-;42327:86;42406:6;42401:3;42327:86;:::i;:::-;42320:93;;42437:56;42487:5;42437:56;:::i;:::-;42516:7;42547:1;42532:284;42557:6;42554:1;42551:13;42532:284;;;42633:6;42627:13;42660:63;42719:3;42704:13;42660:63;:::i;:::-;42653:70;;42746:60;42799:6;42746:60;:::i;:::-;42736:70;;42592:224;42579:1;42576;42572:9;42567:14;;42532:284;;;42536:14;42832:3;42825:10;;42233:608;;;42109:732;;;;:::o;42847:831::-;43110:4;43148:3;43137:9;43133:19;43125:27;;43162:71;43230:1;43219:9;43215:17;43206:6;43162:71;:::i;:::-;43243:80;43319:2;43308:9;43304:18;43295:6;43243:80;:::i;:::-;43370:9;43364:4;43360:20;43355:2;43344:9;43340:18;43333:48;43398:108;43501:4;43492:6;43398:108;:::i;:::-;43390:116;;43516:72;43584:2;43573:9;43569:18;43560:6;43516:72;:::i;:::-;43598:73;43666:3;43655:9;43651:19;43642:6;43598:73;:::i;:::-;42847:831;;;;;;;;:::o;43684:807::-;43933:4;43971:3;43960:9;43956:19;43948:27;;43985:71;44053:1;44042:9;44038:17;44029:6;43985:71;:::i;:::-;44066:72;44134:2;44123:9;44119:18;44110:6;44066:72;:::i;:::-;44148:80;44224:2;44213:9;44209:18;44200:6;44148:80;:::i;:::-;44238;44314:2;44303:9;44299:18;44290:6;44238:80;:::i;:::-;44328:73;44396:3;44385:9;44381:19;44372:6;44328:73;:::i;:::-;44411;44479:3;44468:9;44464:19;44455:6;44411:73;:::i;:::-;43684:807;;;;;;;;;:::o;44497:143::-;44554:5;44585:6;44579:13;44570:22;;44601:33;44628:5;44601:33;:::i;:::-;44497:143;;;;:::o;44646:663::-;44734:6;44742;44750;44799:2;44787:9;44778:7;44774:23;44770:32;44767:119;;;44805:79;;:::i;:::-;44767:119;44925:1;44950:64;45006:7;44997:6;44986:9;44982:22;44950:64;:::i;:::-;44940:74;;44896:128;45063:2;45089:64;45145:7;45136:6;45125:9;45121:22;45089:64;:::i;:::-;45079:74;;45034:129;45202:2;45228:64;45284:7;45275:6;45264:9;45260:22;45228:64;:::i;:::-;45218:74;;45173:129;44646:663;;;;;:::o
Swarm Source
ipfs://10be26d644743fba9b6084e78a428d000d3368ec086fd7b04b18d5e93595957d
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.