ERC-20
Overview
Max Total Supply
1,000,000,000,000 BOBI
Holders
40
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
20,324,717,077.676661887547282715 BOBIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TheDogFather
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } 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; // assert(a == b * c + a % b); // There is no case in which this doesn't hold 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; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); 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 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 TheDogFather is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingAddress = payable(0xb7F16eD6318d6e4f67bF53a487bAdf92E2092934); // Marketing Address address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "TheDogFather"; string private _symbol = "BOBI"; uint8 private _decimals = 18; uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private marketingDivisor; //Buy Fees uint256 public buyReflectionFee = 1; // Distribution to holders Fee uint256 public buyLiquidityFee = 24; // This FEE includes marketing Tax below and Buyback Tax uint256 public buyMarketingDivisor = 24; //Sell Fees uint256 public sellReflectionFee = 1; // Distribution to holders Fee uint256 public sellLiquidityFee = 24; // This FEE includes marketing Tax below and Buyback Tax uint256 public sellMarketingDivisor = 24; uint256 private minimumTokensBeforeSwap = 500000000 * 10**18; uint256 private buyBackUpperLimit = 1 * 10**13; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public buyBackEnabled = true; event RewardLiquidityProviders(uint256 tokenAmount); event BuyBackEnabledUpdated(bool enabled); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function buyBackUpperLimitAmount() public view returns (uint256) { return buyBackUpperLimit; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); require(account != address(this), "Cannot exclude"); require(account != deadAddress, "Cannot exclude"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) private { 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from == uniswapV2Pair) { _taxFee = buyReflectionFee; _liquidityFee = buyLiquidityFee; marketingDivisor = buyMarketingDivisor; } if(to == uniswapV2Pair) { _taxFee = sellReflectionFee; _liquidityFee = sellLiquidityFee; marketingDivisor = sellMarketingDivisor; } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair && _liquidityFee > 0 && marketingDivisor > 0 && _liquidityFee >= marketingDivisor) { if (overMinimumTokenBalance) { swapTokens(contractTokenBalance); } uint256 balance = address(this).balance; if (buyBackEnabled && balance >= buyBackUpperLimit) { buyBackTokens(balance); } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if(from != uniswapV2Pair && to != uniswapV2Pair) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); //Send to Marketing address transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor)); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(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), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } 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 owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function changeBuyFees(uint256 _reflectionFee, uint256 _buybackLiquidityFee, uint256 _mkDivisor) public onlyOwner { require(_reflectionFee.add(_buybackLiquidityFee).add(_mkDivisor) <= 25, "Tax too high"); require(_buybackLiquidityFee >= _mkDivisor, "Divisor cannot be higher than LP fee"); buyReflectionFee = _reflectionFee; buyLiquidityFee = _buybackLiquidityFee; buyMarketingDivisor = _mkDivisor; } function changeSellFees(uint256 _reflectionFee, uint256 _buybackLiquidityFee, uint256 _mkDivisor) public onlyOwner { require(_reflectionFee.add(_buybackLiquidityFee).add(_mkDivisor) <= 25, "Tax too high"); require(_buybackLiquidityFee >= _mkDivisor, "Divisor cannot be higher than LP fee"); sellReflectionFee = _reflectionFee; sellLiquidityFee = _buybackLiquidityFee; sellMarketingDivisor = _mkDivisor; } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() { buyBackUpperLimit = buyBackLimit * 10**13; } function setMarketingAddress(address _marketingAddress) external onlyOwner() { marketingAddress = payable(_marketingAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buybackLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_mkDivisor","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buybackLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_mkDivisor","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405273b7f16ed6318d6e4f67bf53a487badf92e2092934600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506c0c9f2c9cd04674edea40000000600855600854600019620000b1919062000735565b600019620000c091906200079c565b6009556040518060400160405280600c81526020017f546865446f674661746865720000000000000000000000000000000000000000815250600b908162000109919062000a47565b506040518060400160405280600481526020017f424f424900000000000000000000000000000000000000000000000000000000815250600c908162000150919062000a47565b506012600d60006101000a81548160ff021916908360ff160217905550600e54600f5560105460115560016013556018601455601860155560016016556018601755601880556b019d971e4fe8401e740000006019556509184e72a000601a556001601b60016101000a81548160ff0219169083151502179055506001601b60026101000a81548160ff021916908315150217905550348015620001f357600080fd5b5062000214620002086200060760201b60201c565b6200060f60201b60201c565b600954600260006200022b6200060760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062000b98565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000382919062000b98565b6040518363ffffffff1660e01b8152600401620003a192919062000bdb565b6020604051808303816000875af1158015620003c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e7919062000b98565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016005600062000464620006d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005976200060760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620005f8919062000c19565b60405180910390a35062000c36565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200074282620006fc565b91506200074f83620006fc565b92508262000762576200076162000706565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007a982620006fc565b9150620007b683620006fc565b9250828203905081811115620007d157620007d06200076d565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200085957607f821691505b6020821081036200086f576200086e62000811565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200089a565b620008e586836200089a565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000928620009226200091c84620006fc565b620008fd565b620006fc565b9050919050565b6000819050919050565b620009448362000907565b6200095c62000953826200092f565b848454620008a7565b825550505050565b600090565b6200097362000964565b6200098081848462000939565b505050565b5b81811015620009a8576200099c60008262000969565b60018101905062000986565b5050565b601f821115620009f757620009c18162000875565b620009cc846200088a565b81016020851015620009dc578190505b620009f4620009eb856200088a565b83018262000985565b50505b505050565b600082821c905092915050565b600062000a1c60001984600802620009fc565b1980831691505092915050565b600062000a37838362000a09565b9150826002028217905092915050565b62000a5282620007d7565b67ffffffffffffffff81111562000a6e5762000a6d620007e2565b5b62000a7a825462000840565b62000a87828285620009ac565b600060209050601f83116001811462000abf576000841562000aaa578287015190505b62000ab6858262000a29565b86555062000b26565b601f19841662000acf8662000875565b60005b8281101562000af95784890151825560018201915060208501945060208101905062000ad2565b8683101562000b19578489015162000b15601f89168262000a09565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b608262000b33565b9050919050565b62000b728162000b53565b811462000b7e57600080fd5b50565b60008151905062000b928162000b67565b92915050565b60006020828403121562000bb15762000bb062000b2e565b5b600062000bc18482850162000b81565b91505092915050565b62000bd58162000b53565b82525050565b600060408201905062000bf2600083018562000bca565b62000c01602083018462000bca565b9392505050565b62000c1381620006fc565b82525050565b600060208201905062000c30600083018462000c08565b92915050565b60805160a05160c0516150aa62000cba600039600081816111aa01528181611f8a01528181611ff9015281816120af01528181612225015261227c015260008181610b3701528181612dad01528181612e8e01528181612eb5015281816130e3015261320f015260008181610c44015281816112e4015261324f01526150aa6000f3fe60806040526004361061026b5760003560e01c80636053a0e311610144578063a5ece941116100b6578063dd62ed3e1161007a578063dd62ed3e14610967578063ea2f0b37146109a4578063f0f165af146109cd578063f11a24d3146109f6578063f2fde38b14610a21578063f637434214610a4a57610272565b8063a5ece94114610882578063a9059cbb146108ad578063bdc653ef146108ea578063c49b9a8014610915578063cd7b33ab1461093e57610272565b80638da5cb5b116101085780638da5cb5b14610772578063906e9dd01461079d57806395d89b41146107c6578063a073d37f146107f1578063a3d14e721461081c578063a457c2d71461084557610272565b80636053a0e31461068d57806370a08231146106b8578063715018a6146106f557806382d2a4bb1461070c57806388f820201461073557610272565b80632fbee983116101dd5780634549b039116101a15780634549b0391461056957806349bd5a5e146105a65780634a74bb02146105d157806352390c02146105fc5780635342acb4146106255780636042f7191461066257610272565b80632fbee98314610484578063313ce567146104af5780633685d419146104da5780633950935114610503578063437823ec1461054057610272565b806318160ddd1161022f57806318160ddd14610360578063231363711461038b57806323b872dd146103b657806327c8f835146103f357806329370cc61461041e5780632d8381191461044757610272565b806306fdde0314610277578063095ea7b3146102a25780630b9c1cc9146102df57806313114a9d1461030a5780631694505e1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a75565b6040516102999190613fb3565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c4919061406e565b610b07565b6040516102d691906140c9565b60405180910390f35b3480156102eb57600080fd5b506102f4610b25565b60405161030191906140f3565b60405180910390f35b34801561031657600080fd5b5061031f610b2b565b60405161032c91906140f3565b60405180910390f35b34801561034157600080fd5b5061034a610b35565b604051610357919061416d565b60405180910390f35b34801561036c57600080fd5b50610375610b59565b60405161038291906140f3565b60405180910390f35b34801561039757600080fd5b506103a0610b63565b6040516103ad91906140f3565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190614188565b610b69565b6040516103ea91906140c9565b60405180910390f35b3480156103ff57600080fd5b50610408610c42565b60405161041591906141ea565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614231565b610c66565b005b34801561045357600080fd5b5061046e6004803603810190610469919061425e565b610cc2565b60405161047b91906140f3565b60405180910390f35b34801561049057600080fd5b50610499610d30565b6040516104a691906140f3565b60405180910390f35b3480156104bb57600080fd5b506104c4610d36565b6040516104d191906142a7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906142c2565b610d4d565b005b34801561050f57600080fd5b5061052a6004803603810190610525919061406e565b61100e565b60405161053791906140c9565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906142c2565b6110c1565b005b34801561057557600080fd5b50610590600480360381019061058b91906142ef565b611124565b60405161059d91906140f3565b60405180910390f35b3480156105b257600080fd5b506105bb6111a8565b6040516105c891906141ea565b60405180910390f35b3480156105dd57600080fd5b506105e66111cc565b6040516105f391906140c9565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906142c2565b6111df565b005b34801561063157600080fd5b5061064c600480360381019061064791906142c2565b611502565b60405161065991906140c9565b60405180910390f35b34801561066e57600080fd5b50610677611558565b60405161068491906140f3565b60405180910390f35b34801561069957600080fd5b506106a261155e565b6040516106af91906140c9565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906142c2565b611571565b6040516106ec91906140f3565b60405180910390f35b34801561070157600080fd5b5061070a61165c565b005b34801561071857600080fd5b50610733600480360381019061072e919061425e565b611670565b005b34801561074157600080fd5b5061075c600480360381019061075791906142c2565b611693565b60405161076991906140c9565b60405180910390f35b34801561077e57600080fd5b506107876116e9565b60405161079491906141ea565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906142c2565b611712565b005b3480156107d257600080fd5b506107db61175e565b6040516107e89190613fb3565b60405180910390f35b3480156107fd57600080fd5b506108066117f0565b60405161081391906140f3565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061432f565b6117fa565b005b34801561085157600080fd5b5061086c6004803603810190610867919061406e565b6118c7565b60405161087991906140c9565b60405180910390f35b34801561088e57600080fd5b50610897611994565b6040516108a491906143a3565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf919061406e565b6119ba565b6040516108e191906140c9565b60405180910390f35b3480156108f657600080fd5b506108ff6119d8565b60405161090c91906140f3565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190614231565b6119e2565b005b34801561094a57600080fd5b506109656004803603810190610960919061432f565b611a3e565b005b34801561097357600080fd5b5061098e600480360381019061098991906143be565b611b0b565b60405161099b91906140f3565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c691906142c2565b611b92565b005b3480156109d957600080fd5b506109f460048036038101906109ef919061425e565b611bf5565b005b348015610a0257600080fd5b50610a0b611c07565b604051610a1891906140f3565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142c2565b611c0d565b005b348015610a5657600080fd5b50610a5f611c90565b604051610a6c91906140f3565b60405180910390f35b6060600b8054610a849061442d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061442d565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b1b610b14611c96565b8484611c9e565b6001905092915050565b60185481565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b60135481565b6000610b76848484611e67565b610c3784610b82611c96565b610c328560405180606001604052806028815260200161502860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be8611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e99092919063ffffffff16565b611c9e565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c6e61234d565b80601b60026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610cb791906140c9565b60405180910390a150565b6000600954821115610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d00906144d0565b60405180910390fd5b6000610d136123cb565b9050610d2881846123f690919063ffffffff16565b915050919050565b60155481565b6000600d60009054906101000a900460ff16905090565b610d5561234d565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061453c565b60405180910390fd5b60005b60078054905081101561100a578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610e1c57610e1b61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ff75760076001600780549050610e7691906145ba565b81548110610e8757610e8661455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610ec657610ec561455c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610fbd57610fbc6145ee565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561100a565b80806110029061461d565b915050610de4565b5050565b60006110b761101b611c96565b846110b2856004600061102c611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b611c9e565b6001905092915050565b6110c961234d565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906146b1565b60405180910390fd5b8161118b57600061117b8461249e565b50505050509050809150506111a2565b60006111968461249e565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b60019054906101000a900460ff1681565b6111e761234d565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b9061453c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d99061471d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113679061471d565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561144457611400600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc2565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b601b60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561160c57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611657565b611654600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc2565b90505b919050565b61166461234d565b61166e60006124fa565b565b61167861234d565b6509184e72a0008161168a919061473d565b601a8190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171a61234d565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600c805461176d9061442d565b80601f01602080910402602001604051908101604052809291908181526020018280546117999061442d565b80156117e65780601f106117bb576101008083540402835291602001916117e6565b820191906000526020600020905b8154815290600101906020018083116117c957829003601f168201915b5050505050905090565b6000601954905090565b61180261234d565b60196118298261181b858761244090919063ffffffff16565b61244090919063ffffffff16565b111561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906147cb565b60405180910390fd5b808210156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49061485d565b60405180910390fd5b826016819055508160178190555080601881905550505050565b600061198a6118d4611c96565b846119858560405180606001604052806025815260200161505060259139600460006118fe611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e99092919063ffffffff16565b611c9e565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119ce6119c7611c96565b8484611e67565b6001905092915050565b6000601a54905090565b6119ea61234d565b80601b60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a3391906140c9565b60405180910390a150565b611a4661234d565b6019611a6d82611a5f858761244090919063ffffffff16565b61244090919063ffffffff16565b1115611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906147cb565b60405180910390fd5b80821015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061485d565b60405180910390fd5b826013819055508160148190555080601581905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b9a61234d565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bfd61234d565b8060198190555050565b60145481565b611c1561234d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906148ef565b60405180910390fd5b611c8d816124fa565b50565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614981565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614a13565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5a91906140f3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614aa5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614b37565b60405180910390fd5b60008111611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614bc9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff757601354600e819055506014546010819055506015546012819055505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361206657601654600e819055506017546010819055506018546012819055505b600061207130611571565b905060006019548210159050601b60009054906101000a900460ff161580156120a65750601b60019054906101000a900460ff165b80156120fd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561210b57506000601054115b801561211957506000601254115b8015612129575060125460105410155b1561217257801561213e5761213d826125be565b5b6000479050601b60029054906101000a900460ff1680156121615750601a548110155b156121705761216f81612672565b5b505b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122195750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561222357600090505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156122cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156122d557600090505b6122e1868686846126be565b505050505050565b6000838311158290612331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123289190613fb3565b60405180910390fd5b506000838561234091906145ba565b9050809150509392505050565b612355611c96565b73ffffffffffffffffffffffffffffffffffffffff166123736116e9565b73ffffffffffffffffffffffffffffffffffffffff16146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614c35565b60405180910390fd5b565b60008060006123d8612915565b915091506123ef81836123f690919063ffffffff16565b9250505090565b600061243883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bc8565b905092915050565b600080828461244f9190614c55565b905083811015612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b90614cd5565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124b58a612c2b565b92509250925060008060006124d38d86866124ce6123cb565b612c85565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601b60006101000a81548160ff02191690831515021790555060004790506125e782612d0e565b60006125fc8247612f8490919063ffffffff16565b9050612652600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661264d60125461263f601054866123f690919063ffffffff16565b612fce90919063ffffffff16565b613048565b50506000601b60006101000a81548160ff02191690831515021790555050565b6001601b60006101000a81548160ff02191690831515021790555060008111156126a05761269f81613093565b5b6000601b60006101000a81548160ff02191690831515021790555050565b806126cc576126cb613311565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561276f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127845761277f84848461334e565b612901565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128275750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561283c576128378484846135ae565b612900565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128de5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128f3576128ee84848461380e565b6128ff565b6128fe848484613b03565b5b5b5b8061290f5761290e613cce565b5b50505050565b600080600060095490506000600854905060005b600780549050811015612b8b5782600260006007848154811061294f5761294e61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a3d57508160036000600784815481106129d5576129d461455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a545760095460085494509450505050612bc4565b612ae46002600060078481548110612a6f57612a6e61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8490919063ffffffff16565b9250612b766003600060078481548110612b0157612b0061455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8490919063ffffffff16565b91508080612b839061461d565b915050612929565b50612ba36008546009546123f690919063ffffffff16565b821015612bbb57600954600854935093505050612bc4565b81819350935050505b9091565b60008083118290612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c069190613fb3565b60405180910390fd5b5060008385612c1e9190614d24565b9050809150509392505050565b600080600080612c3a85613ce2565b90506000612c4786613d13565b90506000612c7082612c62858a612f8490919063ffffffff16565b612f8490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612c9e8589612fce90919063ffffffff16565b90506000612cb58689612fce90919063ffffffff16565b90506000612ccc8789612fce90919063ffffffff16565b90506000612cf582612ce78587612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115612d2b57612d2a614d55565b5b604051908082528060200260200182016040528015612d595781602001602082028036833780820191505090505b5090503081600081518110612d7157612d7061455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3a9190614d99565b81600181518110612e4e57612e4d61455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb3307f000000000000000000000000000000000000000000000000000000000000000084611c9e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f15959493929190614ebf565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f78929190614f19565b60405180910390a15050565b6000612fc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122e9565b905092915050565b6000808303612fe05760009050613042565b60008284612fee919061473d565b9050828482612ffd9190614d24565b1461303d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303490614fbb565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561308e573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff8111156130b0576130af614d55565b5b6040519080825280602002602001820160405280156130de5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131709190614d99565b816000815181106131845761318361455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106131d3576131d261455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061328361012c4261244090919063ffffffff16565b6040518663ffffffff1660e01b81526004016132a29493929190614fdb565b6000604051808303818588803b1580156132bb57600080fd5b505af11580156132cf573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613305929190614f19565b60405180910390a15050565b6000600e5414801561332557506000601054145b61334c57600e54600f819055506010546011819055506000600e8190555060006010819055505b565b6000806000806000806133608761249e565b9550955095509550955095506133be87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353481613d44565b61353e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161359b91906140f3565b60405180910390a3505050505050505050565b6000806000806000806135c08761249e565b95509550955095509550955061361e86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b383600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379481613d44565b61379e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137fb91906140f3565b60405180910390a3505050505050505050565b6000806000806000806138208761249e565b95509550955095509550955061387e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8981613d44565b613a938483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613af091906140f3565b60405180910390a3505050505050505050565b600080600080600080613b158761249e565b955095509550955095509550613b7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5481613d44565b613c5e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cbb91906140f3565b60405180910390a3505050505050505050565b600f54600e81905550601154601081905550565b6000613d0c6064613cfe600e5485612fce90919063ffffffff16565b6123f690919063ffffffff16565b9050919050565b6000613d3d6064613d2f60105485612fce90919063ffffffff16565b6123f690919063ffffffff16565b9050919050565b6000613d4e6123cb565b90506000613d658284612fce90919063ffffffff16565b9050613db981600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ee457613ea083600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613efe82600954612f8490919063ffffffff16565b600981905550613f1981600a5461244090919063ffffffff16565b600a819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f5d578082015181840152602081019050613f42565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f8582613f23565b613f8f8185613f2e565b9350613f9f818560208601613f3f565b613fa881613f69565b840191505092915050565b60006020820190508181036000830152613fcd8184613f7a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400582613fda565b9050919050565b61401581613ffa565b811461402057600080fd5b50565b6000813590506140328161400c565b92915050565b6000819050919050565b61404b81614038565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fd5565b5b600061409385828601614023565b92505060206140a485828601614059565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b6140ed81614038565b82525050565b600060208201905061410860008301846140e4565b92915050565b6000819050919050565b600061413361412e61412984613fda565b61410e565b613fda565b9050919050565b600061414582614118565b9050919050565b60006141578261413a565b9050919050565b6141678161414c565b82525050565b6000602082019050614182600083018461415e565b92915050565b6000806000606084860312156141a1576141a0613fd5565b5b60006141af86828701614023565b93505060206141c086828701614023565b92505060406141d186828701614059565b9150509250925092565b6141e481613ffa565b82525050565b60006020820190506141ff60008301846141db565b92915050565b61420e816140ae565b811461421957600080fd5b50565b60008135905061422b81614205565b92915050565b60006020828403121561424757614246613fd5565b5b60006142558482850161421c565b91505092915050565b60006020828403121561427457614273613fd5565b5b600061428284828501614059565b91505092915050565b600060ff82169050919050565b6142a18161428b565b82525050565b60006020820190506142bc6000830184614298565b92915050565b6000602082840312156142d8576142d7613fd5565b5b60006142e684828501614023565b91505092915050565b6000806040838503121561430657614305613fd5565b5b600061431485828601614059565b92505060206143258582860161421c565b9150509250929050565b60008060006060848603121561434857614347613fd5565b5b600061435686828701614059565b935050602061436786828701614059565b925050604061437886828701614059565b9150509250925092565b600061438d82613fda565b9050919050565b61439d81614382565b82525050565b60006020820190506143b86000830184614394565b92915050565b600080604083850312156143d5576143d4613fd5565b5b60006143e385828601614023565b92505060206143f485828601614023565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444557607f821691505b602082108103614458576144576143fe565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144ba602a83613f2e565b91506144c58261445e565b604082019050919050565b600060208201905081810360008301526144e9816144ad565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614526601b83613f2e565b9150614531826144f0565b602082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145c582614038565b91506145d083614038565b92508282039050818111156145e8576145e761458b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061462882614038565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361465a5761465961458b565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061469b601f83613f2e565b91506146a682614665565b602082019050919050565b600060208201905081810360008301526146ca8161468e565b9050919050565b7f43616e6e6f74206578636c756465000000000000000000000000000000000000600082015250565b6000614707600e83613f2e565b9150614712826146d1565b602082019050919050565b60006020820190508181036000830152614736816146fa565b9050919050565b600061474882614038565b915061475383614038565b925082820261476181614038565b915082820484148315176147785761477761458b565b5b5092915050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006147b5600c83613f2e565b91506147c08261477f565b602082019050919050565b600060208201905081810360008301526147e4816147a8565b9050919050565b7f44697669736f722063616e6e6f7420626520686967686572207468616e204c5060008201527f2066656500000000000000000000000000000000000000000000000000000000602082015250565b6000614847602483613f2e565b9150614852826147eb565b604082019050919050565b600060208201905081810360008301526148768161483a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148d9602683613f2e565b91506148e48261487d565b604082019050919050565b60006020820190508181036000830152614908816148cc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496b602483613f2e565b91506149768261490f565b604082019050919050565b6000602082019050818103600083015261499a8161495e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149fd602283613f2e565b9150614a08826149a1565b604082019050919050565b60006020820190508181036000830152614a2c816149f0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a8f602583613f2e565b9150614a9a82614a33565b604082019050919050565b60006020820190508181036000830152614abe81614a82565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b21602383613f2e565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614bb3602983613f2e565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c1f602083613f2e565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b6000614c6082614038565b9150614c6b83614038565b9250828201905080821115614c8357614c8261458b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cbf601b83613f2e565b9150614cca82614c89565b602082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d2f82614038565b9150614d3a83614038565b925082614d4a57614d49614cf5565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d938161400c565b92915050565b600060208284031215614daf57614dae613fd5565b5b6000614dbd84828501614d84565b91505092915050565b6000819050919050565b6000614deb614de6614de184614dc6565b61410e565b614038565b9050919050565b614dfb81614dd0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e3681613ffa565b82525050565b6000614e488383614e2d565b60208301905092915050565b6000602082019050919050565b6000614e6c82614e01565b614e768185614e0c565b9350614e8183614e1d565b8060005b83811015614eb2578151614e998882614e3c565b9750614ea483614e54565b925050600181019050614e85565b5085935050505092915050565b600060a082019050614ed460008301886140e4565b614ee16020830187614df2565b8181036040830152614ef38186614e61565b9050614f0260608301856141db565b614f0f60808301846140e4565b9695505050505050565b6000604082019050614f2e60008301856140e4565b8181036020830152614f408184614e61565b90509392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa5602183613f2e565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b6000608082019050614ff06000830187614df2565b81810360208301526150028186614e61565b905061501160408301856141db565b61501e60608301846140e4565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028b5adac4c96510962c7234566432f5c52a99332fbd14bd7aff4f3e669108a9664736f6c63430008120033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80636053a0e311610144578063a5ece941116100b6578063dd62ed3e1161007a578063dd62ed3e14610967578063ea2f0b37146109a4578063f0f165af146109cd578063f11a24d3146109f6578063f2fde38b14610a21578063f637434214610a4a57610272565b8063a5ece94114610882578063a9059cbb146108ad578063bdc653ef146108ea578063c49b9a8014610915578063cd7b33ab1461093e57610272565b80638da5cb5b116101085780638da5cb5b14610772578063906e9dd01461079d57806395d89b41146107c6578063a073d37f146107f1578063a3d14e721461081c578063a457c2d71461084557610272565b80636053a0e31461068d57806370a08231146106b8578063715018a6146106f557806382d2a4bb1461070c57806388f820201461073557610272565b80632fbee983116101dd5780634549b039116101a15780634549b0391461056957806349bd5a5e146105a65780634a74bb02146105d157806352390c02146105fc5780635342acb4146106255780636042f7191461066257610272565b80632fbee98314610484578063313ce567146104af5780633685d419146104da5780633950935114610503578063437823ec1461054057610272565b806318160ddd1161022f57806318160ddd14610360578063231363711461038b57806323b872dd146103b657806327c8f835146103f357806329370cc61461041e5780632d8381191461044757610272565b806306fdde0314610277578063095ea7b3146102a25780630b9c1cc9146102df57806313114a9d1461030a5780631694505e1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a75565b6040516102999190613fb3565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c4919061406e565b610b07565b6040516102d691906140c9565b60405180910390f35b3480156102eb57600080fd5b506102f4610b25565b60405161030191906140f3565b60405180910390f35b34801561031657600080fd5b5061031f610b2b565b60405161032c91906140f3565b60405180910390f35b34801561034157600080fd5b5061034a610b35565b604051610357919061416d565b60405180910390f35b34801561036c57600080fd5b50610375610b59565b60405161038291906140f3565b60405180910390f35b34801561039757600080fd5b506103a0610b63565b6040516103ad91906140f3565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190614188565b610b69565b6040516103ea91906140c9565b60405180910390f35b3480156103ff57600080fd5b50610408610c42565b60405161041591906141ea565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614231565b610c66565b005b34801561045357600080fd5b5061046e6004803603810190610469919061425e565b610cc2565b60405161047b91906140f3565b60405180910390f35b34801561049057600080fd5b50610499610d30565b6040516104a691906140f3565b60405180910390f35b3480156104bb57600080fd5b506104c4610d36565b6040516104d191906142a7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906142c2565b610d4d565b005b34801561050f57600080fd5b5061052a6004803603810190610525919061406e565b61100e565b60405161053791906140c9565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906142c2565b6110c1565b005b34801561057557600080fd5b50610590600480360381019061058b91906142ef565b611124565b60405161059d91906140f3565b60405180910390f35b3480156105b257600080fd5b506105bb6111a8565b6040516105c891906141ea565b60405180910390f35b3480156105dd57600080fd5b506105e66111cc565b6040516105f391906140c9565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e91906142c2565b6111df565b005b34801561063157600080fd5b5061064c600480360381019061064791906142c2565b611502565b60405161065991906140c9565b60405180910390f35b34801561066e57600080fd5b50610677611558565b60405161068491906140f3565b60405180910390f35b34801561069957600080fd5b506106a261155e565b6040516106af91906140c9565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906142c2565b611571565b6040516106ec91906140f3565b60405180910390f35b34801561070157600080fd5b5061070a61165c565b005b34801561071857600080fd5b50610733600480360381019061072e919061425e565b611670565b005b34801561074157600080fd5b5061075c600480360381019061075791906142c2565b611693565b60405161076991906140c9565b60405180910390f35b34801561077e57600080fd5b506107876116e9565b60405161079491906141ea565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf91906142c2565b611712565b005b3480156107d257600080fd5b506107db61175e565b6040516107e89190613fb3565b60405180910390f35b3480156107fd57600080fd5b506108066117f0565b60405161081391906140f3565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061432f565b6117fa565b005b34801561085157600080fd5b5061086c6004803603810190610867919061406e565b6118c7565b60405161087991906140c9565b60405180910390f35b34801561088e57600080fd5b50610897611994565b6040516108a491906143a3565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf919061406e565b6119ba565b6040516108e191906140c9565b60405180910390f35b3480156108f657600080fd5b506108ff6119d8565b60405161090c91906140f3565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190614231565b6119e2565b005b34801561094a57600080fd5b506109656004803603810190610960919061432f565b611a3e565b005b34801561097357600080fd5b5061098e600480360381019061098991906143be565b611b0b565b60405161099b91906140f3565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c691906142c2565b611b92565b005b3480156109d957600080fd5b506109f460048036038101906109ef919061425e565b611bf5565b005b348015610a0257600080fd5b50610a0b611c07565b604051610a1891906140f3565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142c2565b611c0d565b005b348015610a5657600080fd5b50610a5f611c90565b604051610a6c91906140f3565b60405180910390f35b6060600b8054610a849061442d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061442d565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b5050505050905090565b6000610b1b610b14611c96565b8484611c9e565b6001905092915050565b60185481565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b60135481565b6000610b76848484611e67565b610c3784610b82611c96565b610c328560405180606001604052806028815260200161502860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be8611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e99092919063ffffffff16565b611c9e565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610c6e61234d565b80601b60026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610cb791906140c9565b60405180910390a150565b6000600954821115610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d00906144d0565b60405180910390fd5b6000610d136123cb565b9050610d2881846123f690919063ffffffff16565b915050919050565b60155481565b6000600d60009054906101000a900460ff16905090565b610d5561234d565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061453c565b60405180910390fd5b60005b60078054905081101561100a578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610e1c57610e1b61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ff75760076001600780549050610e7691906145ba565b81548110610e8757610e8661455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610ec657610ec561455c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610fbd57610fbc6145ee565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561100a565b80806110029061461d565b915050610de4565b5050565b60006110b761101b611c96565b846110b2856004600061102c611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b611c9e565b6001905092915050565b6110c961234d565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060085483111561116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906146b1565b60405180910390fd5b8161118b57600061117b8461249e565b50505050509050809150506111a2565b60006111968461249e565b50505050915050809150505b92915050565b7f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2481565b601b60019054906101000a900460ff1681565b6111e761234d565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b9061453c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d99061471d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113679061471d565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561144457611400600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc2565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b601b60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561160c57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611657565b611654600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc2565b90505b919050565b61166461234d565b61166e60006124fa565b565b61167861234d565b6509184e72a0008161168a919061473d565b601a8190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171a61234d565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600c805461176d9061442d565b80601f01602080910402602001604051908101604052809291908181526020018280546117999061442d565b80156117e65780601f106117bb576101008083540402835291602001916117e6565b820191906000526020600020905b8154815290600101906020018083116117c957829003601f168201915b5050505050905090565b6000601954905090565b61180261234d565b60196118298261181b858761244090919063ffffffff16565b61244090919063ffffffff16565b111561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906147cb565b60405180910390fd5b808210156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49061485d565b60405180910390fd5b826016819055508160178190555080601881905550505050565b600061198a6118d4611c96565b846119858560405180606001604052806025815260200161505060259139600460006118fe611c96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e99092919063ffffffff16565b611c9e565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119ce6119c7611c96565b8484611e67565b6001905092915050565b6000601a54905090565b6119ea61234d565b80601b60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a3391906140c9565b60405180910390a150565b611a4661234d565b6019611a6d82611a5f858761244090919063ffffffff16565b61244090919063ffffffff16565b1115611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906147cb565b60405180910390fd5b80821015611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061485d565b60405180910390fd5b826013819055508160148190555080601581905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b9a61234d565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bfd61234d565b8060198190555050565b60145481565b611c1561234d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906148ef565b60405180910390fd5b611c8d816124fa565b50565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614981565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614a13565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5a91906140f3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614aa5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614b37565b60405180910390fd5b60008111611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614bc9565b60405180910390fd5b7f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ff757601354600e819055506014546010819055506015546012819055505b7f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361206657601654600e819055506017546010819055506018546012819055505b600061207130611571565b905060006019548210159050601b60009054906101000a900460ff161580156120a65750601b60019054906101000a900460ff165b80156120fd57507f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561210b57506000601054115b801561211957506000601254115b8015612129575060125460105410155b1561217257801561213e5761213d826125be565b5b6000479050601b60029054906101000a900460ff1680156121615750601a548110155b156121705761216f81612672565b5b505b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122195750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561222357600090505b7f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156122cb57507f0000000000000000000000004d5f9d2bb5499aeb9431d2d5d609a30d19eccc2473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156122d557600090505b6122e1868686846126be565b505050505050565b6000838311158290612331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123289190613fb3565b60405180910390fd5b506000838561234091906145ba565b9050809150509392505050565b612355611c96565b73ffffffffffffffffffffffffffffffffffffffff166123736116e9565b73ffffffffffffffffffffffffffffffffffffffff16146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614c35565b60405180910390fd5b565b60008060006123d8612915565b915091506123ef81836123f690919063ffffffff16565b9250505090565b600061243883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bc8565b905092915050565b600080828461244f9190614c55565b905083811015612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b90614cd5565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124b58a612c2b565b92509250925060008060006124d38d86866124ce6123cb565b612c85565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601b60006101000a81548160ff02191690831515021790555060004790506125e782612d0e565b60006125fc8247612f8490919063ffffffff16565b9050612652600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661264d60125461263f601054866123f690919063ffffffff16565b612fce90919063ffffffff16565b613048565b50506000601b60006101000a81548160ff02191690831515021790555050565b6001601b60006101000a81548160ff02191690831515021790555060008111156126a05761269f81613093565b5b6000601b60006101000a81548160ff02191690831515021790555050565b806126cc576126cb613311565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561276f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127845761277f84848461334e565b612901565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128275750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561283c576128378484846135ae565b612900565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128de5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128f3576128ee84848461380e565b6128ff565b6128fe848484613b03565b5b5b5b8061290f5761290e613cce565b5b50505050565b600080600060095490506000600854905060005b600780549050811015612b8b5782600260006007848154811061294f5761294e61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612a3d57508160036000600784815481106129d5576129d461455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a545760095460085494509450505050612bc4565b612ae46002600060078481548110612a6f57612a6e61455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8490919063ffffffff16565b9250612b766003600060078481548110612b0157612b0061455c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8490919063ffffffff16565b91508080612b839061461d565b915050612929565b50612ba36008546009546123f690919063ffffffff16565b821015612bbb57600954600854935093505050612bc4565b81819350935050505b9091565b60008083118290612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c069190613fb3565b60405180910390fd5b5060008385612c1e9190614d24565b9050809150509392505050565b600080600080612c3a85613ce2565b90506000612c4786613d13565b90506000612c7082612c62858a612f8490919063ffffffff16565b612f8490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612c9e8589612fce90919063ffffffff16565b90506000612cb58689612fce90919063ffffffff16565b90506000612ccc8789612fce90919063ffffffff16565b90506000612cf582612ce78587612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115612d2b57612d2a614d55565b5b604051908082528060200260200182016040528015612d595781602001602082028036833780820191505090505b5090503081600081518110612d7157612d7061455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3a9190614d99565b81600181518110612e4e57612e4d61455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f15959493929190614ebf565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f78929190614f19565b60405180910390a15050565b6000612fc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122e9565b905092915050565b6000808303612fe05760009050613042565b60008284612fee919061473d565b9050828482612ffd9190614d24565b1461303d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303490614fbb565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561308e573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff8111156130b0576130af614d55565b5b6040519080825280602002602001820160405280156130de5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131709190614d99565b816000815181106131845761318361455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106131d3576131d261455c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61328361012c4261244090919063ffffffff16565b6040518663ffffffff1660e01b81526004016132a29493929190614fdb565b6000604051808303818588803b1580156132bb57600080fd5b505af11580156132cf573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613305929190614f19565b60405180910390a15050565b6000600e5414801561332557506000601054145b61334c57600e54600f819055506010546011819055506000600e8190555060006010819055505b565b6000806000806000806133608761249e565b9550955095509550955095506133be87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353481613d44565b61353e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161359b91906140f3565b60405180910390a3505050505050505050565b6000806000806000806135c08761249e565b95509550955095509550955061361e86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b383600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379481613d44565b61379e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137fb91906140f3565b60405180910390a3505050505050505050565b6000806000806000806138208761249e565b95509550955095509550955061387e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8981613d44565b613a938483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613af091906140f3565b60405180910390a3505050505050505050565b600080600080600080613b158761249e565b955095509550955095509550613b7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5481613d44565b613c5e8483613ee9565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cbb91906140f3565b60405180910390a3505050505050505050565b600f54600e81905550601154601081905550565b6000613d0c6064613cfe600e5485612fce90919063ffffffff16565b6123f690919063ffffffff16565b9050919050565b6000613d3d6064613d2f60105485612fce90919063ffffffff16565b6123f690919063ffffffff16565b9050919050565b6000613d4e6123cb565b90506000613d658284612fce90919063ffffffff16565b9050613db981600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ee457613ea083600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613efe82600954612f8490919063ffffffff16565b600981905550613f1981600a5461244090919063ffffffff16565b600a819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f5d578082015181840152602081019050613f42565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f8582613f23565b613f8f8185613f2e565b9350613f9f818560208601613f3f565b613fa881613f69565b840191505092915050565b60006020820190508181036000830152613fcd8184613f7a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400582613fda565b9050919050565b61401581613ffa565b811461402057600080fd5b50565b6000813590506140328161400c565b92915050565b6000819050919050565b61404b81614038565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fd5565b5b600061409385828601614023565b92505060206140a485828601614059565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b6140ed81614038565b82525050565b600060208201905061410860008301846140e4565b92915050565b6000819050919050565b600061413361412e61412984613fda565b61410e565b613fda565b9050919050565b600061414582614118565b9050919050565b60006141578261413a565b9050919050565b6141678161414c565b82525050565b6000602082019050614182600083018461415e565b92915050565b6000806000606084860312156141a1576141a0613fd5565b5b60006141af86828701614023565b93505060206141c086828701614023565b92505060406141d186828701614059565b9150509250925092565b6141e481613ffa565b82525050565b60006020820190506141ff60008301846141db565b92915050565b61420e816140ae565b811461421957600080fd5b50565b60008135905061422b81614205565b92915050565b60006020828403121561424757614246613fd5565b5b60006142558482850161421c565b91505092915050565b60006020828403121561427457614273613fd5565b5b600061428284828501614059565b91505092915050565b600060ff82169050919050565b6142a18161428b565b82525050565b60006020820190506142bc6000830184614298565b92915050565b6000602082840312156142d8576142d7613fd5565b5b60006142e684828501614023565b91505092915050565b6000806040838503121561430657614305613fd5565b5b600061431485828601614059565b92505060206143258582860161421c565b9150509250929050565b60008060006060848603121561434857614347613fd5565b5b600061435686828701614059565b935050602061436786828701614059565b925050604061437886828701614059565b9150509250925092565b600061438d82613fda565b9050919050565b61439d81614382565b82525050565b60006020820190506143b86000830184614394565b92915050565b600080604083850312156143d5576143d4613fd5565b5b60006143e385828601614023565b92505060206143f485828601614023565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444557607f821691505b602082108103614458576144576143fe565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144ba602a83613f2e565b91506144c58261445e565b604082019050919050565b600060208201905081810360008301526144e9816144ad565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614526601b83613f2e565b9150614531826144f0565b602082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145c582614038565b91506145d083614038565b92508282039050818111156145e8576145e761458b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061462882614038565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361465a5761465961458b565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b600061469b601f83613f2e565b91506146a682614665565b602082019050919050565b600060208201905081810360008301526146ca8161468e565b9050919050565b7f43616e6e6f74206578636c756465000000000000000000000000000000000000600082015250565b6000614707600e83613f2e565b9150614712826146d1565b602082019050919050565b60006020820190508181036000830152614736816146fa565b9050919050565b600061474882614038565b915061475383614038565b925082820261476181614038565b915082820484148315176147785761477761458b565b5b5092915050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006147b5600c83613f2e565b91506147c08261477f565b602082019050919050565b600060208201905081810360008301526147e4816147a8565b9050919050565b7f44697669736f722063616e6e6f7420626520686967686572207468616e204c5060008201527f2066656500000000000000000000000000000000000000000000000000000000602082015250565b6000614847602483613f2e565b9150614852826147eb565b604082019050919050565b600060208201905081810360008301526148768161483a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148d9602683613f2e565b91506148e48261487d565b604082019050919050565b60006020820190508181036000830152614908816148cc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496b602483613f2e565b91506149768261490f565b604082019050919050565b6000602082019050818103600083015261499a8161495e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149fd602283613f2e565b9150614a08826149a1565b604082019050919050565b60006020820190508181036000830152614a2c816149f0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a8f602583613f2e565b9150614a9a82614a33565b604082019050919050565b60006020820190508181036000830152614abe81614a82565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b21602383613f2e565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614bb3602983613f2e565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c1f602083613f2e565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b6000614c6082614038565b9150614c6b83614038565b9250828201905080821115614c8357614c8261458b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cbf601b83613f2e565b9150614cca82614c89565b602082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d2f82614038565b9150614d3a83614038565b925082614d4a57614d49614cf5565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d938161400c565b92915050565b600060208284031215614daf57614dae613fd5565b5b6000614dbd84828501614d84565b91505092915050565b6000819050919050565b6000614deb614de6614de184614dc6565b61410e565b614038565b9050919050565b614dfb81614dd0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e3681613ffa565b82525050565b6000614e488383614e2d565b60208301905092915050565b6000602082019050919050565b6000614e6c82614e01565b614e768185614e0c565b9350614e8183614e1d565b8060005b83811015614eb2578151614e998882614e3c565b9750614ea483614e54565b925050600181019050614e85565b5085935050505092915050565b600060a082019050614ed460008301886140e4565b614ee16020830187614df2565b8181036040830152614ef38186614e61565b9050614f0260608301856141db565b614f0f60808301846140e4565b9695505050505050565b6000604082019050614f2e60008301856140e4565b8181036020830152614f408184614e61565b90509392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa5602183613f2e565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b6000608082019050614ff06000830187614df2565b81810360208301526150028186614e61565b905061501160408301856141db565b61501e60608301846140e4565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028b5adac4c96510962c7234566432f5c52a99332fbd14bd7aff4f3e669108a9664736f6c63430008120033
Deployed Bytecode Sourcemap
15915:20394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19171:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20083:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17544:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21204:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17720:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19448:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17133:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20252:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16164:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35920:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21995:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17305:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19357:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22719:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20573:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34107:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21551:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17778:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17857:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22256:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33972:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17370:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17904:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19551:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7136:103;;;;;;;;;;;;;:::i;:::-;;35447:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21076:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6495:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35588:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19262:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21303:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34806:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20799:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16043:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19757:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21435:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35737:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34348:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19932:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34230:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35268:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17206:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7394:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17444:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19171:83;19208:13;19241:5;19234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19171:83;:::o;20083:161::-;20158:4;20175:39;20184:12;:10;:12::i;:::-;20198:7;20207:6;20175:8;:39::i;:::-;20232:4;20225:11;;20083:161;;;;:::o;17544:40::-;;;;:::o;21204:87::-;21246:7;21273:10;;21266:17;;21204:87;:::o;17720:51::-;;;:::o;19448:95::-;19501:7;19528;;19521:14;;19448:95;:::o;17133:35::-;;;;:::o;20252:313::-;20350:4;20367:36;20377:6;20385:9;20396:6;20367:9;:36::i;:::-;20414:121;20423:6;20431:12;:10;:12::i;:::-;20445:89;20483:6;20445:89;;;;;;;;;;;;;;;;;:11;:19;20457:6;20445:19;;;;;;;;;;;;;;;:33;20465:12;:10;:12::i;:::-;20445:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20414:8;:121::i;:::-;20553:4;20546:11;;20252:313;;;;;:::o;16164:81::-;;;:::o;35920:150::-;6381:13;:11;:13::i;:::-;36007:8:::1;35990:14;;:25;;;;;;;;;;;;;;;;;;36031:31;36053:8;36031:31;;;;;;:::i;:::-;;;;;;;;35920:150:::0;:::o;21995:253::-;22061:7;22100;;22089;:18;;22081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22165:19;22188:10;:8;:10::i;:::-;22165:33;;22216:24;22228:11;22216:7;:11;;:24;;;;:::i;:::-;22209:31;;;21995:253;;;:::o;17305:39::-;;;;:::o;19357:83::-;19398:5;19423:9;;;;;;;;;;;19416:16;;19357:83;:::o;22719:479::-;6381:13;:11;:13::i;:::-;22801:11:::1;:20;22813:7;22801:20;;;;;;;;;;;;;;;;;;;;;;;;;22793:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22869:9;22864:327;22888:9;:16;;;;22884:1;:20;22864:327;;;22946:7;22930:23;;:9;22940:1;22930:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;22926:254:::1;;22989:9;23018:1;22999:9;:16;;;;:20;;;;:::i;:::-;22989:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22974:9;22984:1;22974:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23058:1;23039:7;:16;23047:7;23039:16;;;;;;;;;;;;;;;:20;;;;23101:5;23078:11;:20;23090:7;23078:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23125:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;23159:5;;22926:254;22906:3;;;;;:::i;:::-;;;;22864:327;;;;22719:479:::0;:::o;20573:218::-;20661:4;20678:83;20687:12;:10;:12::i;:::-;20701:7;20710:50;20749:10;20710:11;:25;20722:12;:10;:12::i;:::-;20710:25;;;;;;;;;;;;;;;:34;20736:7;20710:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20678:8;:83::i;:::-;20779:4;20772:11;;20573:218;;;;:::o;34107:111::-;6381:13;:11;:13::i;:::-;34206:4:::1;34176:18;:27;34195:7;34176:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34107:111:::0;:::o;21551:436::-;21641:7;21680;;21669;:18;;21661:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21739:17;21734:246;;21774:15;21798:19;21809:7;21798:10;:19::i;:::-;21773:44;;;;;;;21839:7;21832:14;;;;;21734:246;21881:23;21912:19;21923:7;21912:10;:19::i;:::-;21879:52;;;;;;;21953:15;21946:22;;;21551:436;;;;;:::o;17778:38::-;;;:::o;17857:40::-;;;;;;;;;;;;;:::o;22256:455::-;6381:13;:11;:13::i;:::-;22339:11:::1;:20;22351:7;22339:20;;;;;;;;;;;;;;;;;;;;;;;;;22338:21;22330:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22429:4;22410:24;;:7;:24;;::::0;22402:51:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22483:11;22472:22;;:7;:22;;::::0;22464:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22546:1;22527:7;:16;22535:7;22527:16;;;;;;;;;;;;;;;;:20;22524:108;;;22583:37;22603:7;:16;22611:7;22603:16;;;;;;;;;;;;;;;;22583:19;:37::i;:::-;22564:7;:16;22572:7;22564:16;;;;;;;;;;;;;;;:56;;;;22524:108;22665:4;22642:11;:20;22654:7;22642:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22680:9;22695:7;22680:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22256:455:::0;:::o;33972:123::-;34036:4;34060:18;:27;34079:7;34060:27;;;;;;;;;;;;;;;;;;;;;;;;;34053:34;;33972:123;;;:::o;17370:36::-;;;;:::o;17904:33::-;;;;;;;;;;;;;:::o;19551:198::-;19617:7;19641:11;:20;19653:7;19641:20;;;;;;;;;;;;;;;;;;;;;;;;;19637:49;;;19670:7;:16;19678:7;19670:16;;;;;;;;;;;;;;;;19663:23;;;;19637:49;19704:37;19724:7;:16;19732:7;19724:16;;;;;;;;;;;;;;;;19704:19;:37::i;:::-;19697:44;;19551:198;;;;:::o;7136:103::-;6381:13;:11;:13::i;:::-;7201:30:::1;7228:1;7201:18;:30::i;:::-;7136:103::o:0;35447:133::-;6381:13;:11;:13::i;:::-;35566:6:::1;35551:12;:21;;;;:::i;:::-;35531:17;:41;;;;35447:133:::0;:::o;21076:120::-;21144:4;21168:11;:20;21180:7;21168:20;;;;;;;;;;;;;;;;;;;;;;;;;21161:27;;21076:120;;;:::o;6495:87::-;6541:7;6568:6;;;;;;;;;;;6561:13;;6495:87;:::o;35588:141::-;6381:13;:11;:13::i;:::-;35703:17:::1;35676:16;;:45;;;;;;;;;;;;;;;;;;35588:141:::0;:::o;19262:87::-;19301:13;19334:7;19327:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19262:87;:::o;21303:120::-;21365:7;21392:23;;21385:30;;21303:120;:::o;34806:454::-;6381:13;:11;:13::i;:::-;35000:2:::1;34940:56;34985:10;34940:40;34959:20;34940:14;:18;;:40;;;;:::i;:::-;:44;;:56;;;;:::i;:::-;:62;;34932:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35062:10;35038:20;:34;;35030:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35144:14;35124:17;:34;;;;35188:20;35169:16;:39;;;;35242:10;35219:20;:33;;;;34806:454:::0;;;:::o;20799:269::-;20892:4;20909:129;20918:12;:10;:12::i;:::-;20932:7;20941:96;20980:15;20941:96;;;;;;;;;;;;;;;;;:11;:25;20953:12;:10;:12::i;:::-;20941:25;;;;;;;;;;;;;;;:34;20967:7;20941:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20909:8;:129::i;:::-;21056:4;21049:11;;20799:269;;;;:::o;16043:93::-;;;;;;;;;;;;;:::o;19757:167::-;19835:4;19852:42;19862:12;:10;:12::i;:::-;19876:9;19887:6;19852:9;:42::i;:::-;19912:4;19905:11;;19757:167;;;;:::o;21435:108::-;21491:7;21518:17;;21511:24;;21435:108;:::o;35737:171::-;6381:13;:11;:13::i;:::-;35838:8:::1;35814:21;;:32;;;;;;;;;;;;;;;;;;35862:38;35891:8;35862:38;;;;;;:::i;:::-;;;;;;;;35737:171:::0;:::o;34348:450::-;6381:13;:11;:13::i;:::-;34541:2:::1;34481:56;34526:10;34481:40;34500:20;34481:14;:18;;:40;;;;:::i;:::-;:44;;:56;;;;:::i;:::-;:62;;34473:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34603:10;34579:20;:34;;34571:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;34684:14;34665:16;:33;;;;34727:20;34709:15;:38;;;;34780:10;34758:19;:32;;;;34348:450:::0;;;:::o;19932:143::-;20013:7;20040:11;:18;20052:5;20040:18;;;;;;;;;;;;;;;:27;20059:7;20040:27;;;;;;;;;;;;;;;;20033:34;;19932:143;;;;:::o;34230:110::-;6381:13;:11;:13::i;:::-;34327:5:::1;34297:18;:27;34316:7;34297:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34230:110:::0;:::o;35268:166::-;6381:13;:11;:13::i;:::-;35402:24:::1;35376:23;:50;;;;35268:166:::0;:::o;17206:35::-;;;;:::o;7394:201::-;6381:13;:11;:13::i;:::-;7503:1:::1;7483:22;;:8;:22;;::::0;7475:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7559:28;7578:8;7559:18;:28::i;:::-;7394:201:::0;:::o;17444:36::-;;;;:::o;95:115::-;148:15;191:10;176:26;;95:115;:::o;23206:337::-;23316:1;23299:19;;:5;:19;;;23291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23397:1;23378:21;;:7;:21;;;23370:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23481:6;23451:11;:18;23463:5;23451:18;;;;;;;;;;;;;;;:27;23470:7;23451:27;;;;;;;;;;;;;;;:36;;;;23519:7;23503:32;;23512:5;23503:32;;;23528:6;23503:32;;;;;;:::i;:::-;;;;;;;;23206:337;;;:::o;23551:1774::-;23689:1;23673:18;;:4;:18;;;23665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23766:1;23752:16;;:2;:16;;;23744:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23836:1;23827:6;:10;23819:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23907:13;23899:21;;:4;:21;;;23896:178;;23947:16;;23937:7;:26;;;;23994:15;;23978:13;:31;;;;24043:19;;24024:16;:38;;;;23896:178;24095:13;24089:19;;:2;:19;;;24086:179;;24135:17;;24125:7;:27;;;;24183:16;;24167:13;:32;;;;24233:20;;24214:16;:39;;;;24086:179;24277:28;24308:24;24326:4;24308:9;:24::i;:::-;24277:55;;24343:28;24398:23;;24374:20;:47;;24343:78;;24447:16;;;;;;;;;;;24446:17;:42;;;;;24467:21;;;;;;;;;;;24446:42;:65;;;;;24498:13;24492:19;;:2;:19;;;24446:65;:86;;;;;24531:1;24515:13;;:17;24446:86;:110;;;;;24555:1;24536:16;;:20;24446:110;:147;;;;;24577:16;;24560:13;;:33;;24446:147;24442:474;;;24614:23;24610:100;;;24658:32;24669:20;24658:10;:32::i;:::-;24610:100;24724:15;24742:21;24724:39;;24782:14;;;;;;;;;;;:46;;;;;24811:17;;24800:7;:28;;24782:46;24778:127;;;24867:22;24881:7;24867:13;:22::i;:::-;24778:127;24595:321;24442:474;24936:12;24951:4;24936:19;;25063:18;:24;25082:4;25063:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25091:18;:22;25110:2;25091:22;;;;;;;;;;;;;;;;;;;;;;;;;25063:50;25060:96;;;25139:5;25129:15;;25060:96;25179:13;25171:21;;:4;:21;;;;:44;;;;;25202:13;25196:19;;:2;:19;;;;25171:44;25168:91;;;25242:5;25232:15;;25168:91;25279:38;25294:4;25299:2;25302:6;25309:7;25279:14;:38::i;:::-;23654:1671;;;23551:1774;;;:::o;1506:192::-;1592:7;1625:1;1620;:6;;1628:12;1612:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1652:9;1668:1;1664;:5;;;;:::i;:::-;1652:17;;1689:1;1682:8;;;1506:192;;;;;:::o;6660:132::-;6735:12;:10;:12::i;:::-;6724:23;;:7;:5;:7::i;:::-;:23;;;6716:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6660:132::o;32122:163::-;32163:7;32184:15;32201;32220:19;:17;:19::i;:::-;32183:56;;;;32257:20;32269:7;32257;:11;;:20;;;;:::i;:::-;32250:27;;;;32122:163;:::o;1966:132::-;2024:7;2051:39;2055:1;2058;2051:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2044:46;;1966:132;;;;:::o;1173:181::-;1231:7;1251:9;1267:1;1263;:5;;;;:::i;:::-;1251:17;;1292:1;1287;:6;;1279:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1345:1;1338:8;;;1173:181;;;;:::o;30920:419::-;30979:7;30988;30997;31006;31015;31024;31045:23;31070:12;31084:18;31106:20;31118:7;31106:11;:20::i;:::-;31044:82;;;;;;31138:15;31155:23;31180:12;31196:50;31208:7;31217:4;31223:10;31235;:8;:10::i;:::-;31196:11;:50::i;:::-;31137:109;;;;;;31265:7;31274:15;31291:4;31297:15;31314:4;31320:10;31257:74;;;;;;;;;;;;;;;;;;30920:419;;;;;;;:::o;7755:191::-;7829:16;7848:6;;;;;;;;;;;7829:25;;7874:8;7865:6;;:17;;;;;;;;;;;;;;;;;;7929:8;7898:40;;7919:8;7898:40;;;;;;;;;;;;7818:128;7755:191;:::o;25333:433::-;18491:4;18472:16;;:23;;;;;;;;;;;;;;;;;;25423:22:::1;25448:21;25423:46;;25480:38;25497:20;25480:16;:38::i;:::-;25529:26;25558:41;25584:14;25558:21;:25;;:41;;;;:::i;:::-;25529:70;;25649:99;25670:16;;;;;;;;;;;25688:59;25730:16;;25688:37;25711:13;;25688:18;:22;;:37;;;;:::i;:::-;:41;;:59;;;;:::i;:::-;25649:20;:99::i;:::-;25403:363;;18537:5:::0;18518:16;;:24;;;;;;;;;;;;;;;;;;25333:433;:::o;25780:144::-;18491:4;18472:16;;:23;;;;;;;;;;;;;;;;;;25863:1:::1;25854:6;:10;25850:67;;;25881:24;25898:6;25881:16;:24::i;:::-;25850:67;18537:5:::0;18518:16;;:24;;;;;;;;;;;;;;;;;;25780:144;:::o;27725:704::-;27836:7;27832:40;;27858:14;:12;:14::i;:::-;27832:40;27897:11;:19;27909:6;27897:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27921:11;:22;27933:9;27921:22;;;;;;;;;;;;;;;;;;;;;;;;;27920:23;27897:46;27893:467;;;27960:48;27982:6;27990:9;28001:6;27960:21;:48::i;:::-;27893:467;;;28031:11;:19;28043:6;28031:19;;;;;;;;;;;;;;;;;;;;;;;;;28030:20;:46;;;;;28054:11;:22;28066:9;28054:22;;;;;;;;;;;;;;;;;;;;;;;;;28030:46;28026:334;;;28093:46;28113:6;28121:9;28132:6;28093:19;:46::i;:::-;28026:334;;;28161:11;:19;28173:6;28161:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28184:11;:22;28196:9;28184:22;;;;;;;;;;;;;;;;;;;;;;;;;28161:45;28157:203;;;28223:48;28245:6;28253:9;28264:6;28223:21;:48::i;:::-;28157:203;;;28304:44;28322:6;28330:9;28341:6;28304:17;:44::i;:::-;28157:203;28026:334;27893:467;28384:7;28380:41;;28406:15;:13;:15::i;:::-;28380:41;27725:704;;;;:::o;32293:561::-;32343:7;32352;32372:15;32390:7;;32372:25;;32408:15;32426:7;;32408:25;;32455:9;32450:289;32474:9;:16;;;;32470:1;:20;32450:289;;;32540:7;32516;:21;32524:9;32534:1;32524:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32516:21;;;;;;;;;;;;;;;;:31;:66;;;;32575:7;32551;:21;32559:9;32569:1;32559:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32551:21;;;;;;;;;;;;;;;;:31;32516:66;32512:97;;;32592:7;;32601;;32584:25;;;;;;;;;32512:97;32634:34;32646:7;:21;32654:9;32664:1;32654:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32646:21;;;;;;;;;;;;;;;;32634:7;:11;;:34;;;;:::i;:::-;32624:44;;32693:34;32705:7;:21;32713:9;32723:1;32713:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32705:21;;;;;;;;;;;;;;;;32693:7;:11;;:34;;;;:::i;:::-;32683:44;;32492:3;;;;;:::i;:::-;;;;32450:289;;;;32763:20;32775:7;;32763;;:11;;:20;;;;:::i;:::-;32753:7;:30;32749:61;;;32793:7;;32802;;32785:25;;;;;;;;32749:61;32829:7;32838;32821:25;;;;;;32293:561;;;:::o;2106:278::-;2192:7;2224:1;2220;:5;2227:12;2212:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2251:9;2267:1;2263;:5;;;;:::i;:::-;2251:17;;2375:1;2368:8;;;2106:278;;;;;:::o;31347:330::-;31407:7;31416;31425;31445:12;31460:24;31476:7;31460:15;:24::i;:::-;31445:39;;31495:18;31516:30;31538:7;31516:21;:30::i;:::-;31495:51;;31557:23;31583:33;31605:10;31583:17;31595:4;31583:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;31557:59;;31635:15;31652:4;31658:10;31627:42;;;;;;;;;31347:330;;;;;:::o;31685:429::-;31800:7;31809;31818;31838:15;31856:24;31868:11;31856:7;:11;;:24;;;;:::i;:::-;31838:42;;31891:12;31906:21;31915:11;31906:4;:8;;:21;;;;:::i;:::-;31891:36;;31938:18;31959:27;31974:11;31959:10;:14;;:27;;;;:::i;:::-;31938:48;;31997:23;32023:33;32045:10;32023:17;32035:4;32023:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;31997:59;;32075:7;32084:15;32101:4;32067:39;;;;;;;;;;31685:429;;;;;;;;:::o;25936:666::-;26062:21;26100:1;26086:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26062:40;;26131:4;26113;26118:1;26113:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26157:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26147:4;26152:1;26147:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26192:62;26209:4;26224:15;26242:11;26192:8;:62::i;:::-;26293:15;:66;;;26374:11;26400:1;26444:4;26471;26507:15;26293:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26559:35;26576:11;26589:4;26559:35;;;;;;;:::i;:::-;;;;;;;;25991:611;25936:666;:::o;1362:136::-;1420:7;1447:43;1451:1;1454;1447:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1440:50;;1362:136;;;;:::o;1706:250::-;1764:7;1793:1;1788;:6;1784:47;;1818:1;1811:8;;;;1784:47;1843:9;1859:1;1855;:5;;;;:::i;:::-;1843:17;;1888:1;1883;1879;:5;;;;:::i;:::-;:10;1871:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1;1940:8;;;1706:250;;;;;:::o;36082:126::-;36174:9;:18;;:26;36193:6;36174:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36082:126;;:::o;26614:578::-;26735:21;26773:1;26759:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26735:40;;26796:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26786:4;26791:1;26786:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26847:4;26829;26834:1;26829:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26889:15;:66;;;26963:6;26985:1;27032:4;27051:11;27093:24;27113:3;27093:15;:19;;:24;;;;:::i;:::-;26889:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:30;27171:6;27179:4;27154:30;;;;;;;:::i;:::-;;;;;;;;26664:528;26614:578;:::o;33577:250::-;33634:1;33623:7;;:12;:34;;;;;33656:1;33639:13;;:18;33623:34;33659:7;33620:46;33704:7;;33686:15;:25;;;;33746:13;;33722:21;:37;;;;33790:1;33780:7;:11;;;;33818:1;33802:13;:17;;;;33577:250;:::o;29541:566::-;29644:15;29661:23;29686:12;29700:23;29725:12;29739:18;29761:19;29772:7;29761:10;:19::i;:::-;29643:137;;;;;;;;;;;;29809:28;29829:7;29809;:15;29817:6;29809:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29791:7;:15;29799:6;29791:15;;;;;;;;;;;;;;;:46;;;;29866:28;29886:7;29866;:15;29874:6;29866:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29848:7;:15;29856:6;29848:15;;;;;;;;;;;;;;;:46;;;;29926:39;29949:15;29926:7;:18;29934:9;29926:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29905:7;:18;29913:9;29905:18;;;;;;;;;;;;;;;:60;;;;29979:26;29994:10;29979:14;:26::i;:::-;30016:23;30028:4;30034;30016:11;:23::i;:::-;30072:9;30055:44;;30064:6;30055:44;;;30083:15;30055:44;;;;;;:::i;:::-;;;;;;;;29632:475;;;;;;29541:566;;;:::o;28947:586::-;29048:15;29065:23;29090:12;29104:23;29129:12;29143:18;29165:19;29176:7;29165:10;:19::i;:::-;29047:137;;;;;;;;;;;;29213:28;29233:7;29213;:15;29221:6;29213:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29195:7;:15;29203:6;29195:15;;;;;;;;;;;;;;;:46;;;;29273:39;29296:15;29273:7;:18;29281:9;29273:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29252:7;:18;29260:9;29252:18;;;;;;;;;;;;;;;:60;;;;29344:39;29367:15;29344:7;:18;29352:9;29344:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29323:7;:18;29331:9;29323:18;;;;;;;;;;;;;;;:60;;;;29405:26;29420:10;29405:14;:26::i;:::-;29442:23;29454:4;29460;29442:11;:23::i;:::-;29498:9;29481:44;;29490:6;29481:44;;;29509:15;29481:44;;;;;;:::i;:::-;;;;;;;;29036:497;;;;;;28947:586;;;:::o;30115:642::-;30218:15;30235:23;30260:12;30274:23;30299:12;30313:18;30335:19;30346:7;30335:10;:19::i;:::-;30217:137;;;;;;;;;;;;30383:28;30403:7;30383;:15;30391:6;30383:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30365:7;:15;30373:6;30365:15;;;;;;;;;;;;;;;:46;;;;30440:28;30460:7;30440;:15;30448:6;30440:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30422:7;:15;30430:6;30422:15;;;;;;;;;;;;;;;:46;;;;30500:39;30523:15;30500:7;:18;30508:9;30500:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30479:7;:18;30487:9;30479:18;;;;;;;;;;;;;;;:60;;;;30571:39;30594:15;30571:7;:18;30579:9;30571:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30550:7;:18;30558:9;30550:18;;;;;;;;;;;;;;;:60;;;;30629:26;30644:10;30629:14;:26::i;:::-;30666:23;30678:4;30684;30666:11;:23::i;:::-;30722:9;30705:44;;30714:6;30705:44;;;30733:15;30705:44;;;;;;:::i;:::-;;;;;;;;30206:551;;;;;;30115:642;;;:::o;28437:502::-;28536:15;28553:23;28578:12;28592:23;28617:12;28631:18;28653:19;28664:7;28653:10;:19::i;:::-;28535:137;;;;;;;;;;;;28701:28;28721:7;28701;:15;28709:6;28701:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28683:7;:15;28691:6;28683:15;;;;;;;;;;;;;;;:46;;;;28761:39;28784:15;28761:7;:18;28769:9;28761:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28740:7;:18;28748:9;28740:18;;;;;;;;;;;;;;;:60;;;;28811:26;28826:10;28811:14;:26::i;:::-;28848:23;28860:4;28866;28848:11;:23::i;:::-;28904:9;28887:44;;28896:6;28887:44;;;28915:15;28887:44;;;;;;:::i;:::-;;;;;;;;28524:415;;;;;;28437:502;;;:::o;33839:125::-;33893:15;;33883:7;:25;;;;33935:21;;33919:13;:37;;;;33839:125::o;33233:154::-;33297:7;33324:55;33363:5;33324:20;33336:7;;33324;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;33317:62;;33233:154;;;:::o;33399:166::-;33469:7;33496:61;33541:5;33496:26;33508:13;;33496:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;33489:68;;33399:166;;;:::o;32866:355::-;32929:19;32952:10;:8;:10::i;:::-;32929:33;;32973:18;32994:27;33009:11;32994:10;:14;;:27;;;;:::i;:::-;32973:48;;33057:38;33084:10;33057:7;:22;33073:4;33057:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33032:7;:22;33048:4;33032:22;;;;;;;;;;;;;;;:63;;;;33109:11;:26;33129:4;33109:26;;;;;;;;;;;;;;;;;;;;;;;;;33106:107;;;33175:38;33202:10;33175:7;:22;33191:4;33175:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33150:7;:22;33166:4;33150:22;;;;;;;;;;;;;;;:63;;;;33106:107;32918:303;;32866:355;:::o;30765:147::-;30843:17;30855:4;30843:7;;:11;;:17;;;;:::i;:::-;30833:7;:27;;;;30884:20;30899:4;30884:10;;:14;;:20;;;;:::i;:::-;30871:10;:33;;;;30765:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:116::-;5823:21;5838:5;5823:21;:::i;:::-;5816:5;5813:32;5803:60;;5859:1;5856;5849:12;5803:60;5753:116;:::o;5875:133::-;5918:5;5956:6;5943:20;5934:29;;5972:30;5996:5;5972:30;:::i;:::-;5875:133;;;;:::o;6014:323::-;6070:6;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:50;6312:7;6303:6;6292:9;6288:22;6270:50;:::i;:::-;6260:60;;6216:114;6014:323;;;;:::o;6343:329::-;6402:6;6451:2;6439:9;6430:7;6426:23;6422:32;6419:119;;;6457:79;;:::i;:::-;6419:119;6577:1;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6548:117;6343:329;;;;:::o;6678:86::-;6713:7;6753:4;6746:5;6742:16;6731:27;;6678:86;;;:::o;6770:112::-;6853:22;6869:5;6853:22;:::i;:::-;6848:3;6841:35;6770:112;;:::o;6888:214::-;6977:4;7015:2;7004:9;7000:18;6992:26;;7028:67;7092:1;7081:9;7077:17;7068:6;7028:67;:::i;:::-;6888:214;;;;:::o;7108:329::-;7167:6;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7108:329;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:619::-;7994:6;8002;8010;8059:2;8047:9;8038:7;8034:23;8030:32;8027:119;;;8065:79;;:::i;:::-;8027:119;8185:1;8210:53;8255:7;8246:6;8235:9;8231:22;8210:53;:::i;:::-;8200:63;;8156:117;8312:2;8338:53;8383:7;8374:6;8363:9;8359:22;8338:53;:::i;:::-;8328:63;;8283:118;8440:2;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8411:118;7917:619;;;;;:::o;8542:104::-;8587:7;8616:24;8634:5;8616:24;:::i;:::-;8605:35;;8542:104;;;:::o;8652:142::-;8755:32;8781:5;8755:32;:::i;:::-;8750:3;8743:45;8652:142;;:::o;8800:254::-;8909:4;8947:2;8936:9;8932:18;8924:26;;8960:87;9044:1;9033:9;9029:17;9020:6;8960:87;:::i;:::-;8800:254;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:229::-;10192:34;10188:1;10180:6;10176:14;10169:58;10261:12;10256:2;10248:6;10244:15;10237:37;10052:229;:::o;10287:366::-;10429:3;10450:67;10514:2;10509:3;10450:67;:::i;:::-;10443:74;;10526:93;10615:3;10526:93;:::i;:::-;10644:2;10639:3;10635:12;10628:19;;10287:366;;;:::o;10659:419::-;10825:4;10863:2;10852:9;10848:18;10840:26;;10912:9;10906:4;10902:20;10898:1;10887:9;10883:17;10876:47;10940:131;11066:4;10940:131;:::i;:::-;10932:139;;10659:419;;;:::o;11084:177::-;11224:29;11220:1;11212:6;11208:14;11201:53;11084:177;:::o;11267:366::-;11409:3;11430:67;11494:2;11489:3;11430:67;:::i;:::-;11423:74;;11506:93;11595:3;11506:93;:::i;:::-;11624:2;11619:3;11615:12;11608:19;;11267:366;;;:::o;11639:419::-;11805:4;11843:2;11832:9;11828:18;11820:26;;11892:9;11886:4;11882:20;11878:1;11867:9;11863:17;11856:47;11920:131;12046:4;11920:131;:::i;:::-;11912:139;;11639:419;;;:::o;12064:180::-;12112:77;12109:1;12102:88;12209:4;12206:1;12199:15;12233:4;12230:1;12223:15;12250:180;12298:77;12295:1;12288:88;12395:4;12392:1;12385:15;12419:4;12416:1;12409:15;12436:194;12476:4;12496:20;12514:1;12496:20;:::i;:::-;12491:25;;12530:20;12548:1;12530:20;:::i;:::-;12525:25;;12574:1;12571;12567:9;12559:17;;12598:1;12592:4;12589:11;12586:37;;;12603:18;;:::i;:::-;12586:37;12436:194;;;;:::o;12636:180::-;12684:77;12681:1;12674:88;12781:4;12778:1;12771:15;12805:4;12802:1;12795:15;12822:233;12861:3;12884:24;12902:5;12884:24;:::i;:::-;12875:33;;12930:66;12923:5;12920:77;12917:103;;13000:18;;:::i;:::-;12917:103;13047:1;13040:5;13036:13;13029:20;;12822:233;;;:::o;13061:181::-;13201:33;13197:1;13189:6;13185:14;13178:57;13061:181;:::o;13248:366::-;13390:3;13411:67;13475:2;13470:3;13411:67;:::i;:::-;13404:74;;13487:93;13576:3;13487:93;:::i;:::-;13605:2;13600:3;13596:12;13589:19;;13248:366;;;:::o;13620:419::-;13786:4;13824:2;13813:9;13809:18;13801:26;;13873:9;13867:4;13863:20;13859:1;13848:9;13844:17;13837:47;13901:131;14027:4;13901:131;:::i;:::-;13893:139;;13620:419;;;:::o;14045:164::-;14185:16;14181:1;14173:6;14169:14;14162:40;14045:164;:::o;14215:366::-;14357:3;14378:67;14442:2;14437:3;14378:67;:::i;:::-;14371:74;;14454:93;14543:3;14454:93;:::i;:::-;14572:2;14567:3;14563:12;14556:19;;14215:366;;;:::o;14587:419::-;14753:4;14791:2;14780:9;14776:18;14768:26;;14840:9;14834:4;14830:20;14826:1;14815:9;14811:17;14804:47;14868:131;14994:4;14868:131;:::i;:::-;14860:139;;14587:419;;;:::o;15012:410::-;15052:7;15075:20;15093:1;15075:20;:::i;:::-;15070:25;;15109:20;15127:1;15109:20;:::i;:::-;15104:25;;15164:1;15161;15157:9;15186:30;15204:11;15186:30;:::i;:::-;15175:41;;15365:1;15356:7;15352:15;15349:1;15346:22;15326:1;15319:9;15299:83;15276:139;;15395:18;;:::i;:::-;15276:139;15060:362;15012:410;;;;:::o;15428:162::-;15568:14;15564:1;15556:6;15552:14;15545:38;15428:162;:::o;15596:366::-;15738:3;15759:67;15823:2;15818:3;15759:67;:::i;:::-;15752:74;;15835:93;15924:3;15835:93;:::i;:::-;15953:2;15948:3;15944:12;15937:19;;15596:366;;;:::o;15968:419::-;16134:4;16172:2;16161:9;16157:18;16149:26;;16221:9;16215:4;16211:20;16207:1;16196:9;16192:17;16185:47;16249:131;16375:4;16249:131;:::i;:::-;16241:139;;15968:419;;;:::o;16393:223::-;16533:34;16529:1;16521:6;16517:14;16510:58;16602:6;16597:2;16589:6;16585:15;16578:31;16393:223;:::o;16622:366::-;16764:3;16785:67;16849:2;16844:3;16785:67;:::i;:::-;16778:74;;16861:93;16950:3;16861:93;:::i;:::-;16979:2;16974:3;16970:12;16963:19;;16622:366;;;:::o;16994:419::-;17160:4;17198:2;17187:9;17183:18;17175:26;;17247:9;17241:4;17237:20;17233:1;17222:9;17218:17;17211:47;17275:131;17401:4;17275:131;:::i;:::-;17267:139;;16994:419;;;:::o;17419:225::-;17559:34;17555:1;17547:6;17543:14;17536:58;17628:8;17623:2;17615:6;17611:15;17604:33;17419:225;:::o;17650:366::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:419::-;18188:4;18226:2;18215:9;18211:18;18203:26;;18275:9;18269:4;18265:20;18261:1;18250:9;18246:17;18239:47;18303:131;18429:4;18303:131;:::i;:::-;18295:139;;18022:419;;;:::o;18447:223::-;18587:34;18583:1;18575:6;18571:14;18564:58;18656:6;18651:2;18643:6;18639:15;18632:31;18447:223;:::o;18676:366::-;18818:3;18839:67;18903:2;18898:3;18839:67;:::i;:::-;18832:74;;18915:93;19004:3;18915:93;:::i;:::-;19033:2;19028:3;19024:12;19017:19;;18676:366;;;:::o;19048:419::-;19214:4;19252:2;19241:9;19237:18;19229:26;;19301:9;19295:4;19291:20;19287:1;19276:9;19272:17;19265:47;19329:131;19455:4;19329:131;:::i;:::-;19321:139;;19048:419;;;:::o;19473:221::-;19613:34;19609:1;19601:6;19597:14;19590:58;19682:4;19677:2;19669:6;19665:15;19658:29;19473:221;:::o;19700:366::-;19842:3;19863:67;19927:2;19922:3;19863:67;:::i;:::-;19856:74;;19939:93;20028:3;19939:93;:::i;:::-;20057:2;20052:3;20048:12;20041:19;;19700:366;;;:::o;20072:419::-;20238:4;20276:2;20265:9;20261:18;20253:26;;20325:9;20319:4;20315:20;20311:1;20300:9;20296:17;20289:47;20353:131;20479:4;20353:131;:::i;:::-;20345:139;;20072:419;;;:::o;20497:224::-;20637:34;20633:1;20625:6;20621:14;20614:58;20706:7;20701:2;20693:6;20689:15;20682:32;20497:224;:::o;20727:366::-;20869:3;20890:67;20954:2;20949:3;20890:67;:::i;:::-;20883:74;;20966:93;21055:3;20966:93;:::i;:::-;21084:2;21079:3;21075:12;21068:19;;20727:366;;;:::o;21099:419::-;21265:4;21303:2;21292:9;21288:18;21280:26;;21352:9;21346:4;21342:20;21338:1;21327:9;21323:17;21316:47;21380:131;21506:4;21380:131;:::i;:::-;21372:139;;21099:419;;;:::o;21524:222::-;21664:34;21660:1;21652:6;21648:14;21641:58;21733:5;21728:2;21720:6;21716:15;21709:30;21524:222;:::o;21752:366::-;21894:3;21915:67;21979:2;21974:3;21915:67;:::i;:::-;21908:74;;21991:93;22080:3;21991:93;:::i;:::-;22109:2;22104:3;22100:12;22093:19;;21752:366;;;:::o;22124:419::-;22290:4;22328:2;22317:9;22313:18;22305:26;;22377:9;22371:4;22367:20;22363:1;22352:9;22348:17;22341:47;22405:131;22531:4;22405:131;:::i;:::-;22397:139;;22124:419;;;:::o;22549:228::-;22689:34;22685:1;22677:6;22673:14;22666:58;22758:11;22753:2;22745:6;22741:15;22734:36;22549:228;:::o;22783:366::-;22925:3;22946:67;23010:2;23005:3;22946:67;:::i;:::-;22939:74;;23022:93;23111:3;23022:93;:::i;:::-;23140:2;23135:3;23131:12;23124:19;;22783:366;;;:::o;23155:419::-;23321:4;23359:2;23348:9;23344:18;23336:26;;23408:9;23402:4;23398:20;23394:1;23383:9;23379:17;23372:47;23436:131;23562:4;23436:131;:::i;:::-;23428:139;;23155:419;;;:::o;23580:182::-;23720:34;23716:1;23708:6;23704:14;23697:58;23580:182;:::o;23768:366::-;23910:3;23931:67;23995:2;23990:3;23931:67;:::i;:::-;23924:74;;24007:93;24096:3;24007:93;:::i;:::-;24125:2;24120:3;24116:12;24109:19;;23768:366;;;:::o;24140:419::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:131;24547:4;24421:131;:::i;:::-;24413:139;;24140:419;;;:::o;24565:191::-;24605:3;24624:20;24642:1;24624:20;:::i;:::-;24619:25;;24658:20;24676:1;24658:20;:::i;:::-;24653:25;;24701:1;24698;24694:9;24687:16;;24722:3;24719:1;24716:10;24713:36;;;24729:18;;:::i;:::-;24713:36;24565:191;;;;:::o;24762:177::-;24902:29;24898:1;24890:6;24886:14;24879:53;24762:177;:::o;24945:366::-;25087:3;25108:67;25172:2;25167:3;25108:67;:::i;:::-;25101:74;;25184:93;25273:3;25184:93;:::i;:::-;25302:2;25297:3;25293:12;25286:19;;24945:366;;;:::o;25317:419::-;25483:4;25521:2;25510:9;25506:18;25498:26;;25570:9;25564:4;25560:20;25556:1;25545:9;25541:17;25534:47;25598:131;25724:4;25598:131;:::i;:::-;25590:139;;25317:419;;;:::o;25742:180::-;25790:77;25787:1;25780:88;25887:4;25884:1;25877:15;25911:4;25908:1;25901:15;25928:185;25968:1;25985:20;26003:1;25985:20;:::i;:::-;25980:25;;26019:20;26037:1;26019:20;:::i;:::-;26014:25;;26058:1;26048:35;;26063:18;;:::i;:::-;26048:35;26105:1;26102;26098:9;26093:14;;25928:185;;;;:::o;26119:180::-;26167:77;26164:1;26157:88;26264:4;26261:1;26254:15;26288:4;26285:1;26278:15;26305:143;26362:5;26393:6;26387:13;26378:22;;26409:33;26436:5;26409:33;:::i;:::-;26305:143;;;;:::o;26454:351::-;26524:6;26573:2;26561:9;26552:7;26548:23;26544:32;26541:119;;;26579:79;;:::i;:::-;26541:119;26699:1;26724:64;26780:7;26771:6;26760:9;26756:22;26724:64;:::i;:::-;26714:74;;26670:128;26454:351;;;;:::o;26811:85::-;26856:7;26885:5;26874:16;;26811:85;;;:::o;26902:158::-;26960:9;26993:61;27011:42;27020:32;27046:5;27020:32;:::i;:::-;27011:42;:::i;:::-;26993:61;:::i;:::-;26980:74;;26902:158;;;:::o;27066:147::-;27161:45;27200:5;27161:45;:::i;:::-;27156:3;27149:58;27066:147;;:::o;27219:114::-;27286:6;27320:5;27314:12;27304:22;;27219:114;;;:::o;27339:184::-;27438:11;27472:6;27467:3;27460:19;27512:4;27507:3;27503:14;27488:29;;27339:184;;;;:::o;27529:132::-;27596:4;27619:3;27611:11;;27649:4;27644:3;27640:14;27632:22;;27529:132;;;:::o;27667:108::-;27744:24;27762:5;27744:24;:::i;:::-;27739:3;27732:37;27667:108;;:::o;27781:179::-;27850:10;27871:46;27913:3;27905:6;27871:46;:::i;:::-;27949:4;27944:3;27940:14;27926:28;;27781:179;;;;:::o;27966:113::-;28036:4;28068;28063:3;28059:14;28051:22;;27966:113;;;:::o;28115:732::-;28234:3;28263:54;28311:5;28263:54;:::i;:::-;28333:86;28412:6;28407:3;28333:86;:::i;:::-;28326:93;;28443:56;28493:5;28443:56;:::i;:::-;28522:7;28553:1;28538:284;28563:6;28560:1;28557:13;28538:284;;;28639:6;28633:13;28666:63;28725:3;28710:13;28666:63;:::i;:::-;28659:70;;28752:60;28805:6;28752:60;:::i;:::-;28742:70;;28598:224;28585:1;28582;28578:9;28573:14;;28538:284;;;28542:14;28838:3;28831:10;;28239:608;;;28115:732;;;;:::o;28853:831::-;29116:4;29154:3;29143:9;29139:19;29131:27;;29168:71;29236:1;29225:9;29221:17;29212:6;29168:71;:::i;:::-;29249:80;29325:2;29314:9;29310:18;29301:6;29249:80;:::i;:::-;29376:9;29370:4;29366:20;29361:2;29350:9;29346:18;29339:48;29404:108;29507:4;29498:6;29404:108;:::i;:::-;29396:116;;29522:72;29590:2;29579:9;29575:18;29566:6;29522:72;:::i;:::-;29604:73;29672:3;29661:9;29657:19;29648:6;29604:73;:::i;:::-;28853:831;;;;;;;;:::o;29690:483::-;29861:4;29899:2;29888:9;29884:18;29876:26;;29912:71;29980:1;29969:9;29965:17;29956:6;29912:71;:::i;:::-;30030:9;30024:4;30020:20;30015:2;30004:9;30000:18;29993:48;30058:108;30161:4;30152:6;30058:108;:::i;:::-;30050:116;;29690:483;;;;;:::o;30179:220::-;30319:34;30315:1;30307:6;30303:14;30296:58;30388:3;30383:2;30375:6;30371:15;30364:28;30179:220;:::o;30405:366::-;30547:3;30568:67;30632:2;30627:3;30568:67;:::i;:::-;30561:74;;30644:93;30733:3;30644:93;:::i;:::-;30762:2;30757:3;30753:12;30746:19;;30405:366;;;:::o;30777:419::-;30943:4;30981:2;30970:9;30966:18;30958:26;;31030:9;31024:4;31020:20;31016:1;31005:9;31001:17;30994:47;31058:131;31184:4;31058:131;:::i;:::-;31050:139;;30777:419;;;:::o;31202:720::-;31437:4;31475:3;31464:9;31460:19;31452:27;;31489:79;31565:1;31554:9;31550:17;31541:6;31489:79;:::i;:::-;31615:9;31609:4;31605:20;31600:2;31589:9;31585:18;31578:48;31643:108;31746:4;31737:6;31643:108;:::i;:::-;31635:116;;31761:72;31829:2;31818:9;31814:18;31805:6;31761:72;:::i;:::-;31843;31911:2;31900:9;31896:18;31887:6;31843:72;:::i;:::-;31202:720;;;;;;;:::o
Swarm Source
ipfs://28b5adac4c96510962c7234566432f5c52a99332fbd14bd7aff4f3e669108a96
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.