ERC-20
MEME
Overview
Max Total Supply
1,000,000,000,000 Inari
Holders
1,768 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
486,284,922.922215026 InariValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Inari
Compiler Version
v0.8.5+commit.a4f2e591
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-28 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; 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); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // 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 Inari is Context, IERC20, Ownable { using SafeMath for uint256; using Address for 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 => User) private cooldown; mapping (address => bool) private _isSniper; address[] private _confirmedSnipers; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Inari"; string private _symbol = "Inari"; uint8 private _decimals = 9; address payable private teamDevAddress; uint256 public launchTime; uint256 private buyLimitEnd; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee=0; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _baseLiqFee; bool private _useImpactFeeSetter = true; uint256 private _feeMultiplier = 1000; uint256 public _minTrigger = 0; uint256 public k = 10; uint256 public _baseAmount = 1*10**15; uint private _maxBuyAmount; bool private _cooldownEnabled=true; bool public tradingOpen = false; //once switched on, can never be switched off. IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; bool public buyBackEnabled = false; struct User { uint256 buy; uint256 sell; bool exists; } event BuyBackEnabledUpdated(bool enabled); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function enableTrading() external onlyOwner() { _maxBuyAmount = 2000000000 * 10**9; _baseLiqFee=20; _liquidityFee=_baseLiqFee; _taxFee=0; swapAndLiquifyEnabled = true; tradingOpen = true; launchTime = block.timestamp; buyLimitEnd = block.timestamp + (240 seconds); } function initContract() external onlyOwner() { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isSniper[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true; _confirmedSnipers.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1)); _isSniper[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true; _confirmedSnipers.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)); _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true; _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)); _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true; _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)); _isSniper[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true; _confirmedSnipers.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)); _isSniper[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true; _confirmedSnipers.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)); _isSniper[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true; _confirmedSnipers.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)); _isSniper[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true; _confirmedSnipers.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)); _isSniper[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true; _confirmedSnipers.push(address(0xDC81a3450817A58D00f45C86d0368290088db848)); _isSniper[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true; _confirmedSnipers.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)); _isSniper[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true; _confirmedSnipers.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679)); _isSniper[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true; _confirmedSnipers.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)); _isSniper[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true; _confirmedSnipers.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)); _isSniper[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true; _confirmedSnipers.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)); _isSniper[address(0x000000000000084e91743124a982076C59f10084)] = true; _confirmedSnipers.push(address(0x000000000000084e91743124a982076C59f10084)); _isSniper[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true; _confirmedSnipers.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)); _isSniper[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true; _confirmedSnipers.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)); _isSniper[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true; _confirmedSnipers.push(address(0x000000005804B22091aa9830E50459A15E7C9241)); _isSniper[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true; _confirmedSnipers.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553)); _isSniper[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true; _confirmedSnipers.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD)); _isSniper[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true; _confirmedSnipers.push(address(0x0000000000007673393729D5618DC555FD13f9aA)); _isSniper[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true; _confirmedSnipers.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)); _isSniper[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true; _confirmedSnipers.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)); _isSniper[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true; _confirmedSnipers.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd)); _isSniper[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true; _confirmedSnipers.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)); _isSniper[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true; _confirmedSnipers.push(address(0x72b30cDc1583224381132D379A052A6B10725415)); _isSniper[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true; _confirmedSnipers.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)); _isSniper[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true; _confirmedSnipers.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)); _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true; _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)); _isSniper[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true; _confirmedSnipers.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)); _isSniper[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true; _confirmedSnipers.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)); _isSniper[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true; _confirmedSnipers.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)); _isSniper[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true; _confirmedSnipers.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)); _isSniper[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true; _confirmedSnipers.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)); _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true; _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)); _isSniper[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true; _confirmedSnipers.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)); _isSniper[address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)] = true; _confirmedSnipers.push(address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)); _isSniper[address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)] = true; _confirmedSnipers.push(address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)); _isSniper[address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)] = true; _confirmedSnipers.push(address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)); _isSniper[address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)] = true; _confirmedSnipers.push(address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)); _isSniper[address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)] = true; _confirmedSnipers.push(address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)); _isSniper[address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)] = true; _confirmedSnipers.push(address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)); _isSniper[address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)] = true; _confirmedSnipers.push(address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)); _isSniper[address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)] = true; _confirmedSnipers.push(address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)); _isSniper[address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)] = true; _confirmedSnipers.push(address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)); _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true; _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)); _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true; _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)); teamDevAddress = payable(0x1896BDf0327A5E20de16aD817DC70312Edd7C63a); } 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 deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } 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 isRemovedSniper(address account) public view returns (bool) { return _isSniper[account]; } 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 sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isSniper[recipient], "You have no power here!"); require(!_isSniper[msg.sender], "You have no power here!"); if(sender != owner() && recipient != owner()) { if (!tradingOpen) { if (!(sender == address(this) || recipient == address(this) || sender == address(owner()) || recipient == address(owner()))) { require(tradingOpen, "Trading is not enabled"); } } if(_cooldownEnabled) { if(!cooldown[msg.sender].exists) { cooldown[msg.sender] = User(0,0,true); } } } //buy if(sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcludedFromFee[recipient]) { require(tradingOpen, "Trading not yet enabled."); _liquidityFee=_baseLiqFee; if(_cooldownEnabled) { if(buyLimitEnd > block.timestamp) { require(amount <= _maxBuyAmount); require(cooldown[recipient].buy < block.timestamp, "Your buy cooldown has not expired."); cooldown[recipient].buy = block.timestamp + (45 seconds); } } if(_cooldownEnabled) { cooldown[recipient].sell = block.timestamp + (15 seconds); } } //sell if (!inSwapAndLiquify && swapAndLiquifyEnabled && recipient == uniswapV2Pair) { //get dynamic fee if(_useImpactFeeSetter) { uint256 feeBasis = amount.mul(_feeMultiplier); feeBasis = feeBasis.div(balanceOf(uniswapV2Pair).add(amount)); setFee(feeBasis); } uint256 dynamicFee = _liquidityFee; //swap contract's tokens for ETH uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > 0) { swapTokens(contractTokenBalance); } //buyback uint256 balance = address(this).balance; //buyback only if sell amount >= _minTrigger if (buyBackEnabled && amount >= _minTrigger) { uint256 ten = 10; uint256 buyBackAmount = _baseAmount.mul(ten.add(((dynamicFee.sub(_baseLiqFee)).mul(k)).div(_baseLiqFee))).div(10); if (balance >= buyBackAmount) buyBackTokens(buyBackAmount); } //restore dynamicFee after buyback _liquidityFee = dynamicFee; } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //execute transfer _tokenTransfer(sender, recipient,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); transferToAddressETH(teamDevAddress, transferredBalance.div(2)); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(amount); } } function setFee(uint256 impactFee) private { uint256 _impactFee = _baseLiqFee; if(impactFee < _baseLiqFee) { _impactFee = _baseLiqFee; } else if(impactFee > 40) { _impactFee = 40; } else { _impactFee = impactFee; } if(_impactFee.mod(2) != 0) { _impactFee++; } _liquidityFee = _impactFee; } 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 setTeamDevAddress(address _teamDevAddress) external onlyOwner() { teamDevAddress = payable(_teamDevAddress); } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function setMinTrigger(uint256 newTrigger) external onlyOwner() { _minTrigger= newTrigger; } function setK (uint256 newK) external onlyOwner() { k = newK; } function setBaseAmount(uint256 baseAmount) external onlyOwner() { _baseAmount=baseAmount; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { require((_baseLiqFee+taxFee)<=20); _taxFee = taxFee; _previousTaxFee=taxFee; } function setBaseLiqFeePercent(uint256 baseLiqFee) external onlyOwner() { require((baseLiqFee+_taxFee)<=20); _baseLiqFee = baseLiqFee; } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"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":[],"name":"_baseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTrigger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"k","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"baseAmount","type":"uint256"}],"name":"setBaseAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"baseLiqFee","type":"uint256"}],"name":"setBaseLiqFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newK","type":"uint256"}],"name":"setK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTrigger","type":"uint256"}],"name":"setMinTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamDevAddress","type":"address"}],"name":"setTeamDevAddress","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526ddead000000000000000000000000608052683635c9adc5dea00000600c8190556200003390600019620002ba565b620000419060001962000257565b600d5560408051808201909152600580825264496e61726960d81b60209092019182526200007291600f91620001b1565b5060408051808201909152600580825264496e61726960d81b6020909201918252620000a191601091620001b1565b506011805460ff19908116600917909155600060148190556015819055601681905560178190556019805490921660019081179092556103e8601a55601b55600a601c5566038d7ea4c68000601d55601f805461ffff191690911790556020805461ffff60a81b191690553480156200011957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5433600081815260036020908152604080832094909455600c549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620002dd565b828054620001bf906200027d565b90600052602060002090601f016020900481019282620001e357600085556200022e565b82601f10620001fe57805160ff19168380011785556200022e565b828001600101855582156200022e579182015b828111156200022e57825182559160200191906001019062000211565b506200023c92915062000240565b5090565b5b808211156200023c576000815560010162000241565b6000828210156200027857634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200029257607f821691505b60208210811415620002b457634e487b7160e01b600052602260045260246000fd5b50919050565b600082620002d857634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c613c0862000303600039600081816103ce01526133390152613c086000f3fe6080604052600436106102815760003560e01c8063610d5b191161014f578063975c0ed3116100c1578063dd4670641161007a578063dd4670641461079d578063dd62ed3e146107bd578063e2c335db14610803578063f03e63b414610819578063f2fde38b14610839578063ffb54a991461085957600080fd5b8063975c0ed3146106fc578063a3b855ce14610712578063a457c2d714610732578063a69df4b514610752578063a9059cbb14610767578063b4f40c611461078757600080fd5b80637f160346116101135780637f160346146106465780638203f5fe1461066657806388f820201461067b5780638a8c523c146106b45780638da5cb5b146106c957806395d89b41146106e757600080fd5b8063610d5b19146105a157806367de8be9146105da5780636bc87c3a146105fa57806370a0823114610610578063790ca4131461063057600080fd5b8063313ce567116101f35780634a74bb02116101ac5780634a74bb02146104e85780634ddfae4b146105095780635342acb41461051f578063557ed1ba14610558578063602bc62b1461056b5780636053a0e31461058057600080fd5b8063313ce5671461043057806339509351146104525780633b124fe7146104725780633bd5d173146104885780634549b039146104a857806349bd5a5e146104c857600080fd5b806318160ddd1161024557806318160ddd14610367578063224a7c6a1461037c57806323b872dd1461039c57806327c8f835146103bc57806329370cc6146103f05780632d8381191461041057600080fd5b8063061c82d01461028d57806306fdde03146102af578063095ea7b3146102da57806313114a9d1461030a5780631694505e1461032957600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138c2565b610878565b005b3480156102bb57600080fd5b506102c46108d0565b6040516102d19190613980565b60405180910390f35b3480156102e657600080fd5b506102fa6102f536600461387b565b610962565b60405190151581526020016102d1565b34801561031657600080fd5b50600e545b6040519081526020016102d1565b34801561033557600080fd5b50601f5461034f906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561037357600080fd5b50600c5461031b565b34801561038857600080fd5b506102ad6103973660046138c2565b610979565b3480156103a857600080fd5b506102fa6103b736600461383a565b6109a8565b3480156103c857600080fd5b5061034f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fc57600080fd5b506102ad61040b3660046138a7565b610a11565b34801561041c57600080fd5b5061031b61042b3660046138c2565b610a8b565b34801561043c57600080fd5b5060115460405160ff90911681526020016102d1565b34801561045e57600080fd5b506102fa61046d36600461387b565b610b0f565b34801561047e57600080fd5b5061031b60145481565b34801561049457600080fd5b506102ad6104a33660046138c2565b610b45565b3480156104b457600080fd5b5061031b6104c33660046138db565b610c2f565b3480156104d457600080fd5b5060205461034f906001600160a01b031681565b3480156104f457600080fd5b506020546102fa90600160a81b900460ff1681565b34801561051557600080fd5b5061031b601d5481565b34801561052b57600080fd5b506102fa61053a3660046137c7565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561056457600080fd5b504261031b565b34801561057757600080fd5b5060025461031b565b34801561058c57600080fd5b506020546102fa90600160b01b900460ff1681565b3480156105ad57600080fd5b506102fa6105bc3660046137c7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105e657600080fd5b506102ad6105f53660046138c2565b610cbc565b34801561060657600080fd5b5061031b60165481565b34801561061c57600080fd5b5061031b61062b3660046137c7565b610ceb565b34801561063c57600080fd5b5061031b60125481565b34801561065257600080fd5b506102ad6106613660046138c2565b610d4a565b34801561067257600080fd5b506102ad610d92565b34801561068757600080fd5b506102fa6106963660046137c7565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106c057600080fd5b506102ad611dd5565b3480156106d557600080fd5b506000546001600160a01b031661034f565b3480156106f357600080fd5b506102c4611e53565b34801561070857600080fd5b5061031b60185481565b34801561071e57600080fd5b506102ad61072d3660046138c2565b611e62565b34801561073e57600080fd5b506102fa61074d36600461387b565b611e91565b34801561075e57600080fd5b506102ad611ee0565b34801561077357600080fd5b506102fa61078236600461387b565b611ff8565b34801561079357600080fd5b5061031b601c5481565b3480156107a957600080fd5b506102ad6107b83660046138c2565b612005565b3480156107c957600080fd5b5061031b6107d8366004613801565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561080f57600080fd5b5061031b601b5481565b34801561082557600080fd5b506102ad6108343660046137c7565b61209c565b34801561084557600080fd5b506102ad6108543660046137c7565b6120ee565b34801561086557600080fd5b50601f546102fa90610100900460ff1681565b6000546001600160a01b031633146108ab5760405162461bcd60e51b81526004016108a2906139d5565b60405180910390fd5b6014816018546108bb9190613a5f565b11156108c657600080fd5b6014819055601555565b6060600f80546108df90613ac1565b80601f016020809104026020016040519081016040528092919081815260200182805461090b90613ac1565b80156109585780601f1061092d57610100808354040283529160200191610958565b820191906000526020600020905b81548152906001019060200180831161093b57829003601f168201915b5050505050905090565b600061096f3384846121d8565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b81526004016108a2906139d5565b601d55565b60006109b58484846122fc565b610a078433610a0285604051806060016040528060288152602001613b86602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612986565b6121d8565b5060019392505050565b6000546001600160a01b03163314610a3b5760405162461bcd60e51b81526004016108a2906139d5565b6020805460ff60b01b1916600160b01b8315159081029190911782556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0910160405180910390a150565b6000600d54821115610af25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108a2565b6000610afc6129c0565b9050610b0883826129e3565b9392505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161096f918590610a029086612a25565b336000818152600a602052604090205460ff1615610bba5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108a2565b6000610bc583612a84565b505050506001600160a01b038416600090815260036020526040902054919250610bf191905082612ad3565b6001600160a01b038316600090815260036020526040902055600d54610c179082612ad3565b600d55600e54610c279084612a25565b600e55505050565b6000600c54831115610c835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108a2565b81610ca2576000610c9384612a84565b50939550610973945050505050565b6000610cad84612a84565b50929550610973945050505050565b6000546001600160a01b03163314610ce65760405162461bcd60e51b81526004016108a2906139d5565b601c55565b6001600160a01b0381166000908152600a602052604081205460ff1615610d2857506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461097390610a8b565b6000546001600160a01b03163314610d745760405162461bcd60e51b81526004016108a2906139d5565b60148054610d829083613a5f565b1115610d8d57600080fd5b601855565b6000546001600160a01b03163314610dbc5760405162461bcd60e51b81526004016108a2906139d5565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0e57600080fd5b505afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4691906137e4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec691906137e4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4691906137e4565b602080546001600160a01b0319166001600160a01b03928316179055601f805462010000600160b01b03191662010000848416021790556000805460019260099291166001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009835290812080548416600190811790915560079092527f57c722c10b286721330ce1e7368f87f549121277c4e5ffab2e83419c7564f96180548416831790556008805480840182557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fb4360de54da26af4127515af1e49997106b425ee5904e923f0902c7618138e598054871686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557faa01439ba306fcf815e716b248617e3c66941c4344ce5297e38ccc42cd30bc1180548716861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154881687179091558354808701855583018054831690911790557f20bb0313363229c48e5dca565476b9f004fcadd21a3cebd9148dbac2f2ba8e6d80548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557f185a84d37a19636863439d4bd8f79b953edfc2f2b332404b82e2c102dfbb4b8d80548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557ff405e61457986734bcc74d319afb38a21149b3d56f884ce85ec24a17fadbe35d80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557fa2988ed14d9641c67aefa7ee82d50112dd7b9326d1e98e9dce9d802915d3b36480548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f158b420708a0e60d8f36936f51360cee200d1017c9023a4ddcae85bff89c0f4e80548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557ff1d1c874a6478f85b6b904feafb9a196ead08dc959fdf0a523b19e42779d27ce8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f401a4c0ca7781d92989fe1809638f35a473d45b2aa1f20ea08b891ad153486ab8054871686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557fcdd749be89563b0fe17aff861f904dad7a5ecfebb7ff064b12d5552d5c400ea7805487168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557f3eca23c1fceac0076012235763bf4b524e34500801ac57fb32381013c0d6901e80548716861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557f297b29cec8a1eb621a328e39c96c47ebe5e4031f1f910cb41ad54c511034e73a805487168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557ffe44942143e318205a789f77df1b2bf735ffc548308bab5499d0216aec3332e48054871686179055825480860184558201805482166d084e91743124a982076c59f100841790557f3e4f611ed8482ea59e6424ad23a75453ec3ddb7677cd19d4c934256448de183a805487168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f7ee7f44cdecb2d7c9ebf96addf904d703c57dc894fdb6b132a783045f8ad751980548716861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557fb1c982ebec4b3ffbad67c2dd4b8d8215a47baa972366e4a63f51e9c6ce9a5d4e8054871686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fa11920fa7ae15c72226954c89a9e5c6f067c85fde0c317c7a78e3897c4aa229d80548716861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f1ea4ceff6c7cd2bd1aa871eb2c9e7b14363c267e1c8d45b2b4038682a83baef480548716861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f5ccd521e90776b08b8302e31941eda99ae5bb6dd0a4a30a038e75275ed151f1f8054871686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557f9aac9a42097620b1ff8454a6252a3d8b6aecd2746f5cc70c2496bd35cd9e69b18054871686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557fa9d6552d66baaa4186648ea67a6cabd630f6081027f5bf546135d86d60df82fd8054871686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557fe35fa26e68f804147088c2b96da426aeba0a986c80b2972d565ff073fcf3b2ed80548716861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f0974c6061423c59b1cc18edad4ab1f546201d6fbcde60ba3925dea5bbc1f3b92805487168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557fe96e4260a99427d26094e01497bcbf1209430052150bbba23c77691cfd3888de8054871686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557fc71bda09a50ffbca62ccd1161350db5851fbb6ddd35d31c3c3517822e54b5c55805487168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557f3848f2c08fb0667ee5b5086c84806cc492f6771453629ea470ad1bb4309b27df80548716861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557f954a0c36a45fcaf27e7a22dfaa2c9f3b813d726eab18c0fdbf36d3b835f9975c8054871686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f7985ebff531dc9ae85a3acb40e87a09c7806f6a13dabe868af5b0a8d22bd505e80548916881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557f6c52e41dd6b06a1bc9b96527098c91ef1536901d6b06ec3895465678b4d3cb2d8054891688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557f33bb6bc5e24dd699dcbf1756dad57e97b0d83832560d2b9372cac6749ec975d080548916881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557fc419d9cfed3cf702f7269baae5ca04d34554e3d12c577f99b455846286201a5c805489168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557fab78f0789a7bb7c5eaddd13a6a0e91c9346a2134aed2e32ec259fffe6a6a9c7680548916881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154881687179091558354808701855583018054831690911790557f1be75507d4b2cac3a24552f05fdfa14cf0f018e17cf718ca8d750a13ecaa3fb8805487168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f8499ee18ee603a2cfde0354d5d324ebcbe145b33d7bdb9c0e42bad4169d18d9d80548716861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557f47c3decdbf0327f6973c2489bb6b726e7c2d32891ee0e58aab41a4ba06f0745b8054871686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f327a45de5f4ec9398adddd1243a3de3a045557ad91bb3317327482f19cc2fa568054871686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557f91e3d6ffd1390da3bfbc0e0875515e89982841b064fcda9b67cffc63d8082ab68054871686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557f0f0787d14733cc845754e46f4b9ac4f1ad047fd749dc13e3d96a4ae78999260f80548716861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557f9e1cab7afd1c36c8834124180f41b4fdd617e5b830a32dbe4ad39ce2403f330180548716861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557ffce34a7b755f382e92d8fed99c280c08c64d82c48720533c065ce505a27e30c48054871686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557f036de65337957dcec72784f3b7bdcc4c1db7dca6197401781e45567a6282e7ec80548716861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557fb223036d049cf96d476dc559d24b358878d6abfa6d8b9398c62a0461b2db6f6a80548716861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f3f74e5026cf68c914529907c341f86db0d11f8d7bb07501e2da38fe88ece2d8a80548716861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a90811790915581549097168617905582549485018355919092529101805490911690911790555060118054741896bdf0327a5e20de16ad817dc70312edd7c63a00610100600160a81b0319909116179055565b6000546001600160a01b03163314611dff5760405162461bcd60e51b81526004016108a2906139d5565b671bc16d674ec80000601e55601460188190556016819055600090556020805460ff60a81b1916600160a81b179055601f805461ff001916610100179055426012819055611e4e9060f0613a5f565b601355565b6060601080546108df90613ac1565b6000546001600160a01b03163314611e8c5760405162461bcd60e51b81526004016108a2906139d5565b601b55565b600061096f3384610a0285604051806060016040528060258152602001613bae602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612986565b6001546001600160a01b03163314611f465760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108a2565b6002544211611f975760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108a2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061096f3384846122fc565b6000546001600160a01b0316331461202f5760405162461bcd60e51b81526004016108a2906139d5565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561205e8142613a5f565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146120c65760405162461bcd60e51b81526004016108a2906139d5565b601180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146121185760405162461bcd60e51b81526004016108a2906139d5565b6001600160a01b03811661217d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661223a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b6001600160a01b03821661229b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108a2565b6001600160a01b0382166123c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108a2565b600081116124245760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108a2565b6001600160a01b03821660009081526007602052604090205460ff16156124875760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108a2565b3360009081526007602052604090205460ff16156124e15760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108a2565b6000546001600160a01b0384811691161480159061250d57506000546001600160a01b03838116911614155b1561263857601f54610100900460ff166125c4576001600160a01b03831630148061254057506001600160a01b03821630145b8061255857506000546001600160a01b038481169116145b8061257057506000546001600160a01b038381169116145b6125c457601f54610100900460ff166125c45760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016108a2565b601f5460ff1615612638573360009081526006602052604090206002015460ff1661263857604080516060810182526000808252602080830182815260018486018181523385526006909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b6020546001600160a01b0384811691161480156126695750601f546001600160a01b03838116620100009092041614155b801561268e57506001600160a01b03821660009081526009602052604090205460ff16155b156127de57601f54610100900460ff166126ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016108a2565b601854601655601f5460ff16156127ab574260135411156127ab57601e5481111561271457600080fd5b6001600160a01b03821660009081526006602052604090205442116127865760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b60648201526084016108a2565b61279142602d613a5f565b6001600160a01b0383166000908152600660205260409020555b601f5460ff16156127de576127c142600f613a5f565b6001600160a01b0383166000908152600660205260409020600101555b602054600160a01b900460ff161580156128015750602054600160a81b900460ff165b801561281a57506020546001600160a01b038381169116145b156129295760195460ff161561287d576000612841601a5483612b1590919063ffffffff16565b60205490915061287090612869908490612863906001600160a01b0316610ceb565b90612a25565b82906129e3565b905061287b81612b94565b505b601654600061288b30610ceb565b9050801561289c5761289c81612be0565b6020544790600160b01b900460ff1680156128b95750601b548410155b15612923576000600a9050600061290e600a6128f86129056128fe6018546128f8601c546128f26018548e612ad390919063ffffffff16565b90612b15565b906129e3565b8690612a25565b601d5490612b15565b90508083106129205761292081612c43565b50505b50506016555b6001600160a01b03831660009081526009602052604090205460019060ff168061296b57506001600160a01b03831660009081526009602052604090205460ff165b15612974575060005b61298084848484612c75565b50505050565b600081848411156129aa5760405162461bcd60e51b81526004016108a29190613980565b5060006129b78486613aaa565b95945050505050565b60008060006129cd612d9a565b90925090506129dc82826129e3565b9250505090565b6000610b0883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f1c565b600080612a328385613a5f565b905083811015610b085760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a2565b6000806000806000806000806000612a9b8a612f4a565b9250925092506000806000612ab98d8686612ab46129c0565b612f8c565b919f909e50909c50959a5093985091965092945050505050565b6000610b0883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612986565b600082612b2457506000610973565b6000612b308385613a8b565b905082612b3d8583613a77565b14610b085760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a2565b60185480821015612ba85750601854612bbc565b6028821115612bb957506028612bbc565b50805b612bc7816002612fdc565b15612bda5780612bd681613afc565b9150505b60165550565b6020805460ff60a01b1916600160a01b17905547612bfd8261301e565b6000612c094783612ad3565b601154909150612c319061010090046001600160a01b0316612c2c8360026129e3565b6131e5565b50506020805460ff60a01b1916905550565b6020805460ff60a01b1916600160a01b1790558015612c6557612c6581613220565b506020805460ff60a01b19169055565b80612c8257612c826133e6565b6001600160a01b0384166000908152600a602052604090205460ff168015612cc357506001600160a01b0383166000908152600a602052604090205460ff16155b15612cd857612cd3848484613414565b612d84565b6001600160a01b0384166000908152600a602052604090205460ff16158015612d1957506001600160a01b0383166000908152600a602052604090205460ff165b15612d2957612cd384848461353a565b6001600160a01b0384166000908152600a602052604090205460ff168015612d6957506001600160a01b0383166000908152600a602052604090205460ff165b15612d7957612cd38484846135e3565b612d84848484613656565b8061298057612980601554601455601754601655565b600d54600c546000918291825b600b54811015612eec578260036000600b8481548110612dc957612dc9613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e3457508160046000600b8481548110612e0d57612e0d613b57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e4a57600d54600c54945094505050509091565b612e9060036000600b8481548110612e6457612e64613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ad3565b9250612ed860046000600b8481548110612eac57612eac613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ad3565b915080612ee481613afc565b915050612da7565b50600c54600d54612efc916129e3565b821015612f1357600d54600c549350935050509091565b90939092509050565b60008183612f3d5760405162461bcd60e51b81526004016108a29190613980565b5060006129b78486613a77565b600080600080612f598561369a565b90506000612f66866136b6565b90506000612f7e82612f788986612ad3565b90612ad3565b979296509094509092505050565b6000808080612f9b8886612b15565b90506000612fa98887612b15565b90506000612fb78888612b15565b90506000612fc982612f788686612ad3565b939b939a50919850919650505050505050565b6000610b0883836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506136d2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061305357613053613b57565b60200260200101906001600160a01b031690816001600160a01b031681525050601f60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130c157600080fd5b505afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f991906137e4565b8160018151811061310c5761310c613b57565b6001600160a01b039283166020918202929092010152601f5461313891309162010000900416846121d8565b601f5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613176908590600090869030904290600401613a23565b600060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516131d9929190613a0a565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561321b573d6000803e3d6000fd5b505050565b604080516002808252606082018352600092602083019080368337019050509050601f60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561328f57600080fd5b505afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c791906137e4565b816000815181106132da576132da613b57565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061330e5761330e613b57565b6001600160a01b039283166020918202929092010152601f546201000090041663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006133644261012c612a25565b6040518663ffffffff1660e01b8152600401613383949392919061394b565b6000604051808303818588803b15801561339c57600080fd5b505af11580156133b0573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516131d9929190613a0a565b6014541580156133f65750601654155b156133fd57565b601480546015556016805460175560009182905555565b60008060008060008061342687612a84565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506134589088612ad3565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546134879087612ad3565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546134b69086612a25565b6001600160a01b0389166000908152600360205260409020556134d881613706565b6134e2848361378e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161352791815260200190565b60405180910390a3505050505050505050565b60008060008060008061354c87612a84565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061357e9087612ad3565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546135b49084612a25565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546134b69086612a25565b6000806000806000806135f587612a84565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506136279088612ad3565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461357e9087612ad3565b60008060008060008061366887612a84565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134879087612ad3565b600061097360646128f860145485612b1590919063ffffffff16565b600061097360646128f860165485612b1590919063ffffffff16565b600081836136f35760405162461bcd60e51b81526004016108a29190613980565b506136fe8385613b17565b949350505050565b60006137106129c0565b9050600061371e8383612b15565b3060009081526003602052604090205490915061373b9082612a25565b30600090815260036020908152604080832093909355600a9052205460ff161561321b57306000908152600460205260409020546137799084612a25565b30600090815260046020526040902055505050565b600d5461379b9083612ad3565b600d55600e546137ab9082612a25565b600e555050565b803580151581146137c257600080fd5b919050565b6000602082840312156137d957600080fd5b8135610b0881613b6d565b6000602082840312156137f657600080fd5b8151610b0881613b6d565b6000806040838503121561381457600080fd5b823561381f81613b6d565b9150602083013561382f81613b6d565b809150509250929050565b60008060006060848603121561384f57600080fd5b833561385a81613b6d565b9250602084013561386a81613b6d565b929592945050506040919091013590565b6000806040838503121561388e57600080fd5b823561389981613b6d565b946020939093013593505050565b6000602082840312156138b957600080fd5b610b08826137b2565b6000602082840312156138d457600080fd5b5035919050565b600080604083850312156138ee57600080fd5b823591506138fe602084016137b2565b90509250929050565b600081518084526020808501945080840160005b838110156139405781516001600160a01b03168752958201959082019060010161391b565b509495945050505050565b8481526080602082015260006139646080830186613907565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156139ad57858101830151858201604001528201613991565b818111156139bf576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136fe6040830184613907565b85815284602082015260a060408201526000613a4260a0830186613907565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a7257613a72613b2b565b500190565b600082613a8657613a86613b41565b500490565b6000816000190483118215151615613aa557613aa5613b2b565b500290565b600082821015613abc57613abc613b2b565b500390565b600181811c90821680613ad557607f821691505b60208210811415613af657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1057613b10613b2b565b5060010190565b600082613b2657613b26613b41565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114613b8257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad4eec2decd463320835aaa20342c91f4302afde104fccd9e0988d556afbd3ee64736f6c63430008050033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063610d5b191161014f578063975c0ed3116100c1578063dd4670641161007a578063dd4670641461079d578063dd62ed3e146107bd578063e2c335db14610803578063f03e63b414610819578063f2fde38b14610839578063ffb54a991461085957600080fd5b8063975c0ed3146106fc578063a3b855ce14610712578063a457c2d714610732578063a69df4b514610752578063a9059cbb14610767578063b4f40c611461078757600080fd5b80637f160346116101135780637f160346146106465780638203f5fe1461066657806388f820201461067b5780638a8c523c146106b45780638da5cb5b146106c957806395d89b41146106e757600080fd5b8063610d5b19146105a157806367de8be9146105da5780636bc87c3a146105fa57806370a0823114610610578063790ca4131461063057600080fd5b8063313ce567116101f35780634a74bb02116101ac5780634a74bb02146104e85780634ddfae4b146105095780635342acb41461051f578063557ed1ba14610558578063602bc62b1461056b5780636053a0e31461058057600080fd5b8063313ce5671461043057806339509351146104525780633b124fe7146104725780633bd5d173146104885780634549b039146104a857806349bd5a5e146104c857600080fd5b806318160ddd1161024557806318160ddd14610367578063224a7c6a1461037c57806323b872dd1461039c57806327c8f835146103bc57806329370cc6146103f05780632d8381191461041057600080fd5b8063061c82d01461028d57806306fdde03146102af578063095ea7b3146102da57806313114a9d1461030a5780631694505e1461032957600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102ad6102a83660046138c2565b610878565b005b3480156102bb57600080fd5b506102c46108d0565b6040516102d19190613980565b60405180910390f35b3480156102e657600080fd5b506102fa6102f536600461387b565b610962565b60405190151581526020016102d1565b34801561031657600080fd5b50600e545b6040519081526020016102d1565b34801561033557600080fd5b50601f5461034f906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102d1565b34801561037357600080fd5b50600c5461031b565b34801561038857600080fd5b506102ad6103973660046138c2565b610979565b3480156103a857600080fd5b506102fa6103b736600461383a565b6109a8565b3480156103c857600080fd5b5061034f7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156103fc57600080fd5b506102ad61040b3660046138a7565b610a11565b34801561041c57600080fd5b5061031b61042b3660046138c2565b610a8b565b34801561043c57600080fd5b5060115460405160ff90911681526020016102d1565b34801561045e57600080fd5b506102fa61046d36600461387b565b610b0f565b34801561047e57600080fd5b5061031b60145481565b34801561049457600080fd5b506102ad6104a33660046138c2565b610b45565b3480156104b457600080fd5b5061031b6104c33660046138db565b610c2f565b3480156104d457600080fd5b5060205461034f906001600160a01b031681565b3480156104f457600080fd5b506020546102fa90600160a81b900460ff1681565b34801561051557600080fd5b5061031b601d5481565b34801561052b57600080fd5b506102fa61053a3660046137c7565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561056457600080fd5b504261031b565b34801561057757600080fd5b5060025461031b565b34801561058c57600080fd5b506020546102fa90600160b01b900460ff1681565b3480156105ad57600080fd5b506102fa6105bc3660046137c7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105e657600080fd5b506102ad6105f53660046138c2565b610cbc565b34801561060657600080fd5b5061031b60165481565b34801561061c57600080fd5b5061031b61062b3660046137c7565b610ceb565b34801561063c57600080fd5b5061031b60125481565b34801561065257600080fd5b506102ad6106613660046138c2565b610d4a565b34801561067257600080fd5b506102ad610d92565b34801561068757600080fd5b506102fa6106963660046137c7565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106c057600080fd5b506102ad611dd5565b3480156106d557600080fd5b506000546001600160a01b031661034f565b3480156106f357600080fd5b506102c4611e53565b34801561070857600080fd5b5061031b60185481565b34801561071e57600080fd5b506102ad61072d3660046138c2565b611e62565b34801561073e57600080fd5b506102fa61074d36600461387b565b611e91565b34801561075e57600080fd5b506102ad611ee0565b34801561077357600080fd5b506102fa61078236600461387b565b611ff8565b34801561079357600080fd5b5061031b601c5481565b3480156107a957600080fd5b506102ad6107b83660046138c2565b612005565b3480156107c957600080fd5b5061031b6107d8366004613801565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561080f57600080fd5b5061031b601b5481565b34801561082557600080fd5b506102ad6108343660046137c7565b61209c565b34801561084557600080fd5b506102ad6108543660046137c7565b6120ee565b34801561086557600080fd5b50601f546102fa90610100900460ff1681565b6000546001600160a01b031633146108ab5760405162461bcd60e51b81526004016108a2906139d5565b60405180910390fd5b6014816018546108bb9190613a5f565b11156108c657600080fd5b6014819055601555565b6060600f80546108df90613ac1565b80601f016020809104026020016040519081016040528092919081815260200182805461090b90613ac1565b80156109585780601f1061092d57610100808354040283529160200191610958565b820191906000526020600020905b81548152906001019060200180831161093b57829003601f168201915b5050505050905090565b600061096f3384846121d8565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b81526004016108a2906139d5565b601d55565b60006109b58484846122fc565b610a078433610a0285604051806060016040528060288152602001613b86602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612986565b6121d8565b5060019392505050565b6000546001600160a01b03163314610a3b5760405162461bcd60e51b81526004016108a2906139d5565b6020805460ff60b01b1916600160b01b8315159081029190911782556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0910160405180910390a150565b6000600d54821115610af25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108a2565b6000610afc6129c0565b9050610b0883826129e3565b9392505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161096f918590610a029086612a25565b336000818152600a602052604090205460ff1615610bba5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108a2565b6000610bc583612a84565b505050506001600160a01b038416600090815260036020526040902054919250610bf191905082612ad3565b6001600160a01b038316600090815260036020526040902055600d54610c179082612ad3565b600d55600e54610c279084612a25565b600e55505050565b6000600c54831115610c835760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108a2565b81610ca2576000610c9384612a84565b50939550610973945050505050565b6000610cad84612a84565b50929550610973945050505050565b6000546001600160a01b03163314610ce65760405162461bcd60e51b81526004016108a2906139d5565b601c55565b6001600160a01b0381166000908152600a602052604081205460ff1615610d2857506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461097390610a8b565b6000546001600160a01b03163314610d745760405162461bcd60e51b81526004016108a2906139d5565b60148054610d829083613a5f565b1115610d8d57600080fd5b601855565b6000546001600160a01b03163314610dbc5760405162461bcd60e51b81526004016108a2906139d5565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0e57600080fd5b505afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4691906137e4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec691906137e4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4691906137e4565b602080546001600160a01b0319166001600160a01b03928316179055601f805462010000600160b01b03191662010000848416021790556000805460019260099291166001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009835290812080548416600190811790915560079092527f57c722c10b286721330ce1e7368f87f549121277c4e5ffab2e83419c7564f96180548416831790556008805480840182557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fb4360de54da26af4127515af1e49997106b425ee5904e923f0902c7618138e598054871686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557faa01439ba306fcf815e716b248617e3c66941c4344ce5297e38ccc42cd30bc1180548716861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154881687179091558354808701855583018054831690911790557f20bb0313363229c48e5dca565476b9f004fcadd21a3cebd9148dbac2f2ba8e6d80548716861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557f185a84d37a19636863439d4bd8f79b953edfc2f2b332404b82e2c102dfbb4b8d80548716861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557ff405e61457986734bcc74d319afb38a21149b3d56f884ce85ec24a17fadbe35d80548716861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557fa2988ed14d9641c67aefa7ee82d50112dd7b9326d1e98e9dce9d802915d3b36480548716861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f158b420708a0e60d8f36936f51360cee200d1017c9023a4ddcae85bff89c0f4e80548716861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557ff1d1c874a6478f85b6b904feafb9a196ead08dc959fdf0a523b19e42779d27ce8054871686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f401a4c0ca7781d92989fe1809638f35a473d45b2aa1f20ea08b891ad153486ab8054871686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557fcdd749be89563b0fe17aff861f904dad7a5ecfebb7ff064b12d5552d5c400ea7805487168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557f3eca23c1fceac0076012235763bf4b524e34500801ac57fb32381013c0d6901e80548716861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557f297b29cec8a1eb621a328e39c96c47ebe5e4031f1f910cb41ad54c511034e73a805487168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557ffe44942143e318205a789f77df1b2bf735ffc548308bab5499d0216aec3332e48054871686179055825480860184558201805482166d084e91743124a982076c59f100841790557f3e4f611ed8482ea59e6424ad23a75453ec3ddb7677cd19d4c934256448de183a805487168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f7ee7f44cdecb2d7c9ebf96addf904d703c57dc894fdb6b132a783045f8ad751980548716861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557fb1c982ebec4b3ffbad67c2dd4b8d8215a47baa972366e4a63f51e9c6ce9a5d4e8054871686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fa11920fa7ae15c72226954c89a9e5c6f067c85fde0c317c7a78e3897c4aa229d80548716861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f1ea4ceff6c7cd2bd1aa871eb2c9e7b14363c267e1c8d45b2b4038682a83baef480548716861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f5ccd521e90776b08b8302e31941eda99ae5bb6dd0a4a30a038e75275ed151f1f8054871686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557f9aac9a42097620b1ff8454a6252a3d8b6aecd2746f5cc70c2496bd35cd9e69b18054871686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557fa9d6552d66baaa4186648ea67a6cabd630f6081027f5bf546135d86d60df82fd8054871686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557fe35fa26e68f804147088c2b96da426aeba0a986c80b2972d565ff073fcf3b2ed80548716861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f0974c6061423c59b1cc18edad4ab1f546201d6fbcde60ba3925dea5bbc1f3b92805487168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557fe96e4260a99427d26094e01497bcbf1209430052150bbba23c77691cfd3888de8054871686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557fc71bda09a50ffbca62ccd1161350db5851fbb6ddd35d31c3c3517822e54b5c55805487168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557f3848f2c08fb0667ee5b5086c84806cc492f6771453629ea470ad1bb4309b27df80548716861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557f954a0c36a45fcaf27e7a22dfaa2c9f3b813d726eab18c0fdbf36d3b835f9975c8054871686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f7985ebff531dc9ae85a3acb40e87a09c7806f6a13dabe868af5b0a8d22bd505e80548916881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557f6c52e41dd6b06a1bc9b96527098c91ef1536901d6b06ec3895465678b4d3cb2d8054891688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557f33bb6bc5e24dd699dcbf1756dad57e97b0d83832560d2b9372cac6749ec975d080548916881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557fc419d9cfed3cf702f7269baae5ca04d34554e3d12c577f99b455846286201a5c805489168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557fab78f0789a7bb7c5eaddd13a6a0e91c9346a2134aed2e32ec259fffe6a6a9c7680548916881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154881687179091558354808701855583018054831690911790557f1be75507d4b2cac3a24552f05fdfa14cf0f018e17cf718ca8d750a13ecaa3fb8805487168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f8499ee18ee603a2cfde0354d5d324ebcbe145b33d7bdb9c0e42bad4169d18d9d80548716861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557f47c3decdbf0327f6973c2489bb6b726e7c2d32891ee0e58aab41a4ba06f0745b8054871686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f327a45de5f4ec9398adddd1243a3de3a045557ad91bb3317327482f19cc2fa568054871686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557f91e3d6ffd1390da3bfbc0e0875515e89982841b064fcda9b67cffc63d8082ab68054871686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557f0f0787d14733cc845754e46f4b9ac4f1ad047fd749dc13e3d96a4ae78999260f80548716861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557f9e1cab7afd1c36c8834124180f41b4fdd617e5b830a32dbe4ad39ce2403f330180548716861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557ffce34a7b755f382e92d8fed99c280c08c64d82c48720533c065ce505a27e30c48054871686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557f036de65337957dcec72784f3b7bdcc4c1db7dca6197401781e45567a6282e7ec80548716861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557fb223036d049cf96d476dc559d24b358878d6abfa6d8b9398c62a0461b2db6f6a80548716861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f3f74e5026cf68c914529907c341f86db0d11f8d7bb07501e2da38fe88ece2d8a80548716861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a90811790915581549097168617905582549485018355919092529101805490911690911790555060118054741896bdf0327a5e20de16ad817dc70312edd7c63a00610100600160a81b0319909116179055565b6000546001600160a01b03163314611dff5760405162461bcd60e51b81526004016108a2906139d5565b671bc16d674ec80000601e55601460188190556016819055600090556020805460ff60a81b1916600160a81b179055601f805461ff001916610100179055426012819055611e4e9060f0613a5f565b601355565b6060601080546108df90613ac1565b6000546001600160a01b03163314611e8c5760405162461bcd60e51b81526004016108a2906139d5565b601b55565b600061096f3384610a0285604051806060016040528060258152602001613bae602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612986565b6001546001600160a01b03163314611f465760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108a2565b6002544211611f975760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108a2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061096f3384846122fc565b6000546001600160a01b0316331461202f5760405162461bcd60e51b81526004016108a2906139d5565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561205e8142613a5f565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146120c65760405162461bcd60e51b81526004016108a2906139d5565b601180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146121185760405162461bcd60e51b81526004016108a2906139d5565b6001600160a01b03811661217d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661223a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b6001600160a01b03821661229b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108a2565b6001600160a01b0382166123c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108a2565b600081116124245760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108a2565b6001600160a01b03821660009081526007602052604090205460ff16156124875760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108a2565b3360009081526007602052604090205460ff16156124e15760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108a2565b6000546001600160a01b0384811691161480159061250d57506000546001600160a01b03838116911614155b1561263857601f54610100900460ff166125c4576001600160a01b03831630148061254057506001600160a01b03821630145b8061255857506000546001600160a01b038481169116145b8061257057506000546001600160a01b038381169116145b6125c457601f54610100900460ff166125c45760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016108a2565b601f5460ff1615612638573360009081526006602052604090206002015460ff1661263857604080516060810182526000808252602080830182815260018486018181523385526006909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b6020546001600160a01b0384811691161480156126695750601f546001600160a01b03838116620100009092041614155b801561268e57506001600160a01b03821660009081526009602052604090205460ff16155b156127de57601f54610100900460ff166126ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016108a2565b601854601655601f5460ff16156127ab574260135411156127ab57601e5481111561271457600080fd5b6001600160a01b03821660009081526006602052604090205442116127865760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b60648201526084016108a2565b61279142602d613a5f565b6001600160a01b0383166000908152600660205260409020555b601f5460ff16156127de576127c142600f613a5f565b6001600160a01b0383166000908152600660205260409020600101555b602054600160a01b900460ff161580156128015750602054600160a81b900460ff165b801561281a57506020546001600160a01b038381169116145b156129295760195460ff161561287d576000612841601a5483612b1590919063ffffffff16565b60205490915061287090612869908490612863906001600160a01b0316610ceb565b90612a25565b82906129e3565b905061287b81612b94565b505b601654600061288b30610ceb565b9050801561289c5761289c81612be0565b6020544790600160b01b900460ff1680156128b95750601b548410155b15612923576000600a9050600061290e600a6128f86129056128fe6018546128f8601c546128f26018548e612ad390919063ffffffff16565b90612b15565b906129e3565b8690612a25565b601d5490612b15565b90508083106129205761292081612c43565b50505b50506016555b6001600160a01b03831660009081526009602052604090205460019060ff168061296b57506001600160a01b03831660009081526009602052604090205460ff165b15612974575060005b61298084848484612c75565b50505050565b600081848411156129aa5760405162461bcd60e51b81526004016108a29190613980565b5060006129b78486613aaa565b95945050505050565b60008060006129cd612d9a565b90925090506129dc82826129e3565b9250505090565b6000610b0883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f1c565b600080612a328385613a5f565b905083811015610b085760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a2565b6000806000806000806000806000612a9b8a612f4a565b9250925092506000806000612ab98d8686612ab46129c0565b612f8c565b919f909e50909c50959a5093985091965092945050505050565b6000610b0883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612986565b600082612b2457506000610973565b6000612b308385613a8b565b905082612b3d8583613a77565b14610b085760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a2565b60185480821015612ba85750601854612bbc565b6028821115612bb957506028612bbc565b50805b612bc7816002612fdc565b15612bda5780612bd681613afc565b9150505b60165550565b6020805460ff60a01b1916600160a01b17905547612bfd8261301e565b6000612c094783612ad3565b601154909150612c319061010090046001600160a01b0316612c2c8360026129e3565b6131e5565b50506020805460ff60a01b1916905550565b6020805460ff60a01b1916600160a01b1790558015612c6557612c6581613220565b506020805460ff60a01b19169055565b80612c8257612c826133e6565b6001600160a01b0384166000908152600a602052604090205460ff168015612cc357506001600160a01b0383166000908152600a602052604090205460ff16155b15612cd857612cd3848484613414565b612d84565b6001600160a01b0384166000908152600a602052604090205460ff16158015612d1957506001600160a01b0383166000908152600a602052604090205460ff165b15612d2957612cd384848461353a565b6001600160a01b0384166000908152600a602052604090205460ff168015612d6957506001600160a01b0383166000908152600a602052604090205460ff165b15612d7957612cd38484846135e3565b612d84848484613656565b8061298057612980601554601455601754601655565b600d54600c546000918291825b600b54811015612eec578260036000600b8481548110612dc957612dc9613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e3457508160046000600b8481548110612e0d57612e0d613b57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e4a57600d54600c54945094505050509091565b612e9060036000600b8481548110612e6457612e64613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ad3565b9250612ed860046000600b8481548110612eac57612eac613b57565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ad3565b915080612ee481613afc565b915050612da7565b50600c54600d54612efc916129e3565b821015612f1357600d54600c549350935050509091565b90939092509050565b60008183612f3d5760405162461bcd60e51b81526004016108a29190613980565b5060006129b78486613a77565b600080600080612f598561369a565b90506000612f66866136b6565b90506000612f7e82612f788986612ad3565b90612ad3565b979296509094509092505050565b6000808080612f9b8886612b15565b90506000612fa98887612b15565b90506000612fb78888612b15565b90506000612fc982612f788686612ad3565b939b939a50919850919650505050505050565b6000610b0883836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506136d2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061305357613053613b57565b60200260200101906001600160a01b031690816001600160a01b031681525050601f60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130c157600080fd5b505afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f991906137e4565b8160018151811061310c5761310c613b57565b6001600160a01b039283166020918202929092010152601f5461313891309162010000900416846121d8565b601f5460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790613176908590600090869030904290600401613a23565b600060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516131d9929190613a0a565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561321b573d6000803e3d6000fd5b505050565b604080516002808252606082018352600092602083019080368337019050509050601f60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561328f57600080fd5b505afa1580156132a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132c791906137e4565b816000815181106132da576132da613b57565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061330e5761330e613b57565b6001600160a01b039283166020918202929092010152601f546201000090041663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6133644261012c612a25565b6040518663ffffffff1660e01b8152600401613383949392919061394b565b6000604051808303818588803b15801561339c57600080fd5b505af11580156133b0573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516131d9929190613a0a565b6014541580156133f65750601654155b156133fd57565b601480546015556016805460175560009182905555565b60008060008060008061342687612a84565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506134589088612ad3565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546134879087612ad3565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546134b69086612a25565b6001600160a01b0389166000908152600360205260409020556134d881613706565b6134e2848361378e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161352791815260200190565b60405180910390a3505050505050505050565b60008060008060008061354c87612a84565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061357e9087612ad3565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546135b49084612a25565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546134b69086612a25565b6000806000806000806135f587612a84565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506136279088612ad3565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461357e9087612ad3565b60008060008060008061366887612a84565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506134879087612ad3565b600061097360646128f860145485612b1590919063ffffffff16565b600061097360646128f860165485612b1590919063ffffffff16565b600081836136f35760405162461bcd60e51b81526004016108a29190613980565b506136fe8385613b17565b949350505050565b60006137106129c0565b9050600061371e8383612b15565b3060009081526003602052604090205490915061373b9082612a25565b30600090815260036020908152604080832093909355600a9052205460ff161561321b57306000908152600460205260409020546137799084612a25565b30600090815260046020526040902055505050565b600d5461379b9083612ad3565b600d55600e546137ab9082612a25565b600e555050565b803580151581146137c257600080fd5b919050565b6000602082840312156137d957600080fd5b8135610b0881613b6d565b6000602082840312156137f657600080fd5b8151610b0881613b6d565b6000806040838503121561381457600080fd5b823561381f81613b6d565b9150602083013561382f81613b6d565b809150509250929050565b60008060006060848603121561384f57600080fd5b833561385a81613b6d565b9250602084013561386a81613b6d565b929592945050506040919091013590565b6000806040838503121561388e57600080fd5b823561389981613b6d565b946020939093013593505050565b6000602082840312156138b957600080fd5b610b08826137b2565b6000602082840312156138d457600080fd5b5035919050565b600080604083850312156138ee57600080fd5b823591506138fe602084016137b2565b90509250929050565b600081518084526020808501945080840160005b838110156139405781516001600160a01b03168752958201959082019060010161391b565b509495945050505050565b8481526080602082015260006139646080830186613907565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156139ad57858101830151858201604001528201613991565b818111156139bf576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136fe6040830184613907565b85815284602082015260a060408201526000613a4260a0830186613907565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a7257613a72613b2b565b500190565b600082613a8657613a86613b41565b500490565b6000816000190483118215151615613aa557613aa5613b2b565b500290565b600082821015613abc57613abc613b2b565b500390565b600181811c90821680613ad557607f821691505b60208210811415613af657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1057613b10613b2b565b5060010190565b600082613b2657613b26613b41565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114613b8257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad4eec2decd463320835aaa20342c91f4302afde104fccd9e0988d556afbd3ee64736f6c63430008050033
Deployed Bytecode Sourcemap
14932:28836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43324:176;;;;;;;;;;-1:-1:-1;43324:176:0;;;;;:::i;:::-;;:::i;:::-;;26222:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27134:161;;;;;;;;;;-1:-1:-1;27134:161:0;;;;;:::i;:::-;;:::i;:::-;;;3632:14:1;;3625:22;3607:41;;3595:2;3580:18;27134:161:0;3562:92:1;28255:87:0;;;;;;;;;;-1:-1:-1;28324:10:0;;28255:87;;;12118:25:1;;;12106:2;12091:18;28255:87:0;12073:76:1;16643:41:0;;;;;;;;;;-1:-1:-1;16643:41:0;;;;;;;-1:-1:-1;;;;;16643:41:0;;;;;;-1:-1:-1;;;;;3114:32:1;;;3096:51;;3084:2;3069:18;16643:41:0;3051:102:1;26499:95:0;;;;;;;;;;-1:-1:-1;26579:7:0;;26499:95;;43196:109;;;;;;;;;;-1:-1:-1;43196:109:0;;;;;:::i;:::-;;:::i;27303:313::-;;;;;;;;;;-1:-1:-1;27303:313:0;;;;;:::i;:::-;;:::i;15049:81::-;;;;;;;;;;;;;;;42695:150;;;;;;;;;;-1:-1:-1;42695:150:0;;;;;:::i;:::-;;:::i;29185:253::-;;;;;;;;;;-1:-1:-1;29185:253:0;;;;;:::i;:::-;;:::i;26408:83::-;;;;;;;;;;-1:-1:-1;26474:9:0;;26408:83;;26474:9;;;;13220:36:1;;13208:2;13193:18;26408:83:0;13175:87:1;27624:218:0;;;;;;;;;;-1:-1:-1;27624:218:0;;;;;:::i;:::-;;:::i;16042:26::-;;;;;;;;;;;;;;;;28354:377;;;;;;;;;;-1:-1:-1;28354:377:0;;;;;:::i;:::-;;:::i;28741:436::-;;;;;;;;;;-1:-1:-1;28741:436:0;;;;;:::i;:::-;;:::i;16691:28::-;;;;;;;;;;-1:-1:-1;16691:28:0;;;;-1:-1:-1;;;;;16691:28:0;;;16756:41;;;;;;;;;;-1:-1:-1;16756:41:0;;;;-1:-1:-1;;;16756:41:0;;;;;;16426:37;;;;;;;;;;;;;;;;42413:123;;;;;;;;;;-1:-1:-1;42413:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;42501:27:0;42477:4;42501:27;;;:18;:27;;;;;;;;;42413:123;6370:90;;;;;;;;;;-1:-1:-1;6437:15:0;6370:90;;6272;;;;;;;;;;-1:-1:-1;6345:9:0;;6272:90;;16804:34;;;;;;;;;;-1:-1:-1;16804:34:0;;;;-1:-1:-1;;;16804:34:0;;;;;;29446:113;;;;;;;;;;-1:-1:-1;29446:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;29533:18:0;29509:4;29533:18;;;:9;:18;;;;;;;;;29446:113;43111:77;;;;;;;;;;-1:-1:-1;43111:77:0;;;;;:::i;:::-;;:::i;16123:30::-;;;;;;;;;;;;;;;;26602:198;;;;;;;;;;-1:-1:-1;26602:198:0;;;;;:::i;:::-;;:::i;15964:25::-;;;;;;;;;;;;;;;;43512:159;;;;;;;;;;-1:-1:-1;43512:159:0;;;;;:::i;:::-;;:::i;17785:8429::-;;;;;;;;;;;;;:::i;28127:120::-;;;;;;;;;;-1:-1:-1;28127:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28219:20:0;28195:4;28219:20;;;:11;:20;;;;;;;;;28127:120;17434:343;;;;;;;;;;;;;:::i;5800:79::-;;;;;;;;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;5865:6:0;5800:79;;26313:87;;;;;;;;;;;;;:::i;16220:26::-;;;;;;;;;;;;;;;;42993:106;;;;;;;;;;-1:-1:-1;42993:106:0;;;;;:::i;:::-;;:::i;27850:269::-;;;;;;;;;;-1:-1:-1;27850:269:0;;;;;:::i;:::-;;:::i;6702:305::-;;;;;;;;;;;;;:::i;26808:167::-;;;;;;;;;;-1:-1:-1;26808:167:0;;;;;:::i;:::-;;:::i;16398:21::-;;;;;;;;;;;;;;;;6468:226;;;;;;;;;;-1:-1:-1;6468:226:0;;;;;:::i;:::-;;:::i;26983:143::-;;;;;;;;;;-1:-1:-1;26983:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;27091:18:0;;;27064:7;27091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26983:143;16361:30;;;;;;;;;;;;;;;;42546:133;;;;;;;;;;-1:-1:-1;42546:133:0;;;;;:::i;:::-;;:::i;6020:244::-;;;;;;;;;;-1:-1:-1;6020:244:0;;;;;:::i;:::-;;:::i;16548:31::-;;;;;;;;;;-1:-1:-1;16548:31:0;;;;;;;;;;;43324:176;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;;;;;;;;;43428:2:::1;43419:6;43407:11;;:18;;;;:::i;:::-;43406:24;;43398:33;;;::::0;::::1;;43443:7;:16:::0;;;43470:15:::1;:22:::0;43324:176::o;26222:83::-;26259:13;26292:5;26285:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26222:83;:::o;27134:161::-;27209:4;27226:39;198:10;27249:7;27258:6;27226:8;:39::i;:::-;-1:-1:-1;27283:4:0;27134:161;;;;;:::o;43196:109::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;43275:11:::1;:22:::0;43196:109::o;27303:313::-;27401:4;27418:36;27428:6;27436:9;27447:6;27418:9;:36::i;:::-;27465:121;27474:6;198:10;27496:89;27534:6;27496:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27496:19:0;;;;;;:11;:19;;;;;;;;198:10;27496:33;;;;;;;;;;:37;:89::i;:::-;27465:8;:121::i;:::-;-1:-1:-1;27604:4:0;27303:313;;;;;:::o;42695:150::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;42765:14:::1;:25:::0;;-1:-1:-1;;;;42765:25:0::1;-1:-1:-1::0;;;42765:25:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;42806:31:::1;::::0;3607:41:1;;;42806:31:0::1;::::0;3580:18:1;42806:31:0::1;;;;;;;42695:150:::0;:::o;29185:253::-;29251:7;29290;;29279;:18;;29271:73;;;;-1:-1:-1;;;29271:73:0;;5617:2:1;29271:73:0;;;5599:21:1;5656:2;5636:18;;;5629:30;5695:34;5675:18;;;5668:62;-1:-1:-1;;;5746:18:1;;;5739:40;5796:19;;29271:73:0;5589:232:1;29271:73:0;29355:19;29378:10;:8;:10::i;:::-;29355:33;-1:-1:-1;29406:24:0;:7;29355:33;29406:11;:24::i;:::-;29399:31;29185:253;-1:-1:-1;;;29185:253:0:o;27624:218::-;198:10;27712:4;27761:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27761:34:0;;;;;;;;;;27712:4;;27729:83;;27752:7;;27761:50;;27800:10;27761:38;:50::i;28354:377::-;198:10;28406:14;28455:19;;;:11;:19;;;;;;;;28454:20;28446:77;;;;-1:-1:-1;;;28446:77:0;;11005:2:1;28446:77:0;;;10987:21:1;11044:2;11024:18;;;11017:30;11083:34;11063:18;;;11056:62;-1:-1:-1;;;11134:18:1;;;11127:42;11186:19;;28446:77:0;10977:234:1;28446:77:0;28535:15;28559:19;28570:7;28559:10;:19::i;:::-;-1:-1:-1;;;;;;;;;28607:15:0;;;;;;:7;:15;;;;;;28534:44;;-1:-1:-1;28607:28:0;;:15;-1:-1:-1;28534:44:0;28607:19;:28::i;:::-;-1:-1:-1;;;;;28589:15:0;;;;;;:7;:15;;;;;:46;28656:7;;:20;;28668:7;28656:11;:20::i;:::-;28646:7;:30;28700:10;;:23;;28715:7;28700:14;:23::i;:::-;28687:10;:36;-1:-1:-1;;;28354:377:0:o;28741:436::-;28831:7;28870;;28859;:18;;28851:62;;;;-1:-1:-1;;;28851:62:0;;7948:2:1;28851:62:0;;;7930:21:1;7987:2;7967:18;;;7960:30;8026:33;8006:18;;;7999:61;8077:18;;28851:62:0;7920:181:1;28851:62:0;28929:17;28924:246;;28964:15;28988:19;28999:7;28988:10;:19::i;:::-;-1:-1:-1;28963:44:0;;-1:-1:-1;29022:14:0;;-1:-1:-1;;;;;29022:14:0;28924:246;29071:23;29102:19;29113:7;29102:10;:19::i;:::-;-1:-1:-1;29069:52:0;;-1:-1:-1;29136:22:0;;-1:-1:-1;;;;;29136:22:0;43111:77;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;43172:1:::1;:8:::0;43111:77::o;26602:198::-;-1:-1:-1;;;;;26692:20:0;;26668:7;26692:20;;;:11;:20;;;;;;;;26688:49;;;-1:-1:-1;;;;;;26721:16:0;;;;;:7;:16;;;;;;;26602:198::o;26688:49::-;-1:-1:-1;;;;;26775:16:0;;;;;;:7;:16;;;;;;26755:37;;:19;:37::i;43512:159::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;43624:2:::1;43614:7:::0;;43603:18:::1;::::0;:10;:18:::1;:::i;:::-;43602:24;;43594:33;;;::::0;::::1;;43639:11;:24:::0;43512:159::o;17785:8429::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;17841:35:::1;17898:42;17841:100;;17986:16;-1:-1:-1::0;;;;;17986:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17968:66:0::1;;18043:4;18050:16;-1:-1:-1::0;;;;;18050:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17968:106;::::0;-1:-1:-1;;;;;;17968:106:0::1;::::0;;;;;;-1:-1:-1;;;;;3388:15:1;;;17968:106:0::1;::::0;::::1;3370:34:1::0;3440:15;;3420:18;;;3413:43;3305:18;;17968:106:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17952:13;:122:::0;;-1:-1:-1;;;;;;17952:122:0::1;-1:-1:-1::0;;;;;17952:122:0;;::::1;;::::0;;18087:15:::1;:34:::0;;-1:-1:-1;;;;;;18087:34:0::1;::::0;;;::::1;;;::::0;;-1:-1:-1;5865:6:0;;-1:-1:-1;;18134:18:0::1;::::0;-1:-1:-1;5865:6:0;-1:-1:-1;;;;;18134:27:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;18134:27:0;;;:34;;;::::1;;-1:-1:-1::0;;18134:34:0;;::::1;;::::0;;18206:4:::1;18179:33:::0;;:18:::1;:33:::0;;;;;:40;;;::::1;18134:34:::0;18179:40;;::::1;::::0;;;18242:9:::1;:62:::0;;;;:69;;;::::1;::::0;::::1;::::0;;18322:17:::1;:75:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;18322:75:0;;::::1;18260:42;18322:75;::::0;;;18410:62;:69;;;::::1;::::0;::::1;::::0;;18490:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;18428:42;18490:75;::::0;;18578:62;:69;;;::::1;::::0;::::1;::::0;;18658:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;18596:42;18658:75:::0;;::::1;::::0;;;18746:69;;;::::1;::::0;::::1;::::0;;;18826:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;18914:62;:69;;;::::1;::::0;::::1;::::0;;18994:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;18932:42;18994:75;::::0;;19082:62;:69;;;::::1;::::0;::::1;::::0;;19162:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19100:42;19162:75;::::0;;19250:62;:69;;;::::1;::::0;::::1;::::0;;19330:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19268:42;19330:75;::::0;;19418:62;:69;;;::::1;::::0;::::1;::::0;;19498:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19436:42;19498:75;::::0;;19586:62;:69;;;::::1;::::0;::::1;::::0;;19666:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19604:42;19666:75;::::0;;19754:62;:69;;;::::1;::::0;::::1;::::0;;19834:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19772:42;19834:75;::::0;;19922:62;:69;;;::::1;::::0;::::1;::::0;;20002:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;19940:42;20002:75;::::0;;20090:62;:69;;;::::1;::::0;::::1;::::0;;20170:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20108:42;20170:75;::::0;;20258:62;:69;;;::::1;::::0;::::1;::::0;;20338:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20276:42;20338:75;::::0;;20426:62;:69;;;::::1;::::0;::::1;::::0;;20506:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20444:42;20506:75;::::0;;20594:62;:69;;;::::1;::::0;::::1;::::0;;20674:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20612:42;20674:75;::::0;;20762:62;:69;;;::::1;::::0;::::1;::::0;;20842:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20780:42;20842:75;::::0;;20930:62;:69;;;::::1;::::0;::::1;::::0;;21010:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;20948:42;21010:75;::::0;;21098:62;:69;;;::::1;::::0;::::1;::::0;;21178:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21116:42;21178:75;::::0;;21266:62;:69;;;::::1;::::0;::::1;::::0;;21346:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21284:42;21346:75;::::0;;21434:62;:69;;;::::1;::::0;::::1;::::0;;21514:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21452:42;21514:75;::::0;;21602:62;:69;;;::::1;::::0;::::1;::::0;;21682:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21620:42;21682:75;::::0;;21770:62;:69;;;::::1;::::0;::::1;::::0;;21850:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21788:42;21850:75;::::0;;21938:62;:69;;;::::1;::::0;::::1;::::0;;22018:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;21956:42;22018:75;::::0;;22106:62;:69;;;::::1;::::0;::::1;::::0;;22186:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22124:42;22186:75;::::0;;22274:62;:69;;;::::1;::::0;::::1;::::0;;22354:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22292:42;22354:75;::::0;;22442:62;:69;;;::::1;::::0;::::1;::::0;;22522:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22460:42;22522:75;::::0;;22610:62;:69;;;::::1;::::0;::::1;::::0;;22690:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22628:42;22690:75;::::0;;22778:62;:69;;;::::1;::::0;::::1;::::0;;22858:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22796:42;22858:75;::::0;;22946:62;:69;;;::::1;::::0;::::1;::::0;;23026:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;22964:42;23026:75:::0;;::::1;::::0;;;23114:62;:69;;;::::1;::::0;::::1;::::0;;23194:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;23132:42;23194:75;::::0;;23282:62;:69;;;::::1;::::0;::::1;::::0;;23362:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;23300:42;23362:75;::::0;;23450:62;:69;;;::::1;::::0;::::1;::::0;;23530:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;23468:42;23530:75;::::0;;23618:62;:69;;;::::1;::::0;::::1;::::0;;23698:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;23636:42;23698:75;::::0;;23786:62;:69;;;::::1;::::0;::::1;::::0;;23866:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;23804:42;23866:75;::::0;;23954:69;;;::::1;::::0;::::1;::::0;;;24034:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;24122:62;:69;;;::::1;::::0;::::1;::::0;;24202:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24140:42;24202:75;::::0;;24290:62;:69;;;::::1;::::0;::::1;::::0;;24370:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24308:42;24370:75;::::0;;24458:62;:69;;;::::1;::::0;::::1;::::0;;24538:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24476:42;24538:75;::::0;;24626:62;:69;;;::::1;::::0;::::1;::::0;;24706:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24644:42;24706:75;::::0;;24794:62;:69;;;::::1;::::0;::::1;::::0;;24874:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24812:42;24874:75;::::0;;24962:62;:69;;;::::1;::::0;::::1;::::0;;25042:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;24980:42;25042:75;::::0;;25130:62;:69;;;::::1;::::0;::::1;::::0;;25210:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;25148:42;25210:75;::::0;;25298:62;:69;;;::::1;::::0;::::1;::::0;;25378:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;25316:42;25378:75;::::0;;25466:62;:69;;;::::1;::::0;::::1;::::0;;25546:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;25484:42;25546:75;::::0;;25634:62;:69;;;::::1;::::0;::::1;::::0;;25714:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;25652:42;25714:75;::::0;;25802:62;:69;;;::::1;::::0;::::1;::::0;;25882:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;25820:42;25882:75:::0;;::::1;::::0;;;25970:69;;;;::::1;::::0;::::1;::::0;;26050:75;;;;::::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26138:14:0::1;:68:::0;;;-1:-1:-1;;;;;;26138:68:0;;::::1;;::::0;;17785:8429::o;17434:343::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;17507:18:::1;17491:13;:34:::0;17548:2:::1;17536:11;:14:::0;;;17561:13:::1;:25:::0;;;-1:-1:-1;17597:9:0;;17617:21:::1;:28:::0;;-1:-1:-1;;;;17617:28:0::1;-1:-1:-1::0;;;17617:28:0::1;::::0;;17656:11:::1;:18:::0;;-1:-1:-1;;17656:18:0::1;17617:28;17656:18;::::0;;17698:15:::1;17685:10;:28:::0;;;17738:31:::1;::::0;17757:11:::1;17738:31;:::i;:::-;17724:11;:45:::0;17434:343::o;26313:87::-;26352:13;26385:7;26378:14;;;;;:::i;42993:106::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;43068:11:::1;:23:::0;42993:106::o;27850:269::-;27943:4;27960:129;198:10;27983:7;27992:96;28031:15;27992:96;;;;;;;;;;;;;;;;;198:10;27992:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27992:34:0;;;;;;;;;;;;:38;:96::i;6702:305::-;6754:14;;-1:-1:-1;;;;;6754:14:0;6772:10;6754:28;6746:76;;;;-1:-1:-1;;;6746:76:0;;11418:2:1;6746:76:0;;;11400:21:1;11457:2;11437:18;;;11430:30;11496:34;11476:18;;;11469:62;-1:-1:-1;;;11547:18:1;;;11540:33;11590:19;;6746:76:0;11390:225:1;6746:76:0;6859:9;;6841:15;:27;6833:72;;;;-1:-1:-1;;;6833:72:0;;10292:2:1;6833:72:0;;;10274:21:1;10331:2;10311:18;;;10304:30;10370:33;10350:18;;;10343:61;10421:18;;6833:72:0;10264:181:1;6833:72:0;6950:14;;;6942:6;;6921:44;;-1:-1:-1;;;;;6950:14:0;;;;6942:6;;;;6921:44;;;6985:14;;;6976:23;;-1:-1:-1;;;;;;6976:23:0;-1:-1:-1;;;;;6985:14:0;;;6976:23;;;;;;6702:305::o;26808:167::-;26886:4;26903:42;198:10;26927:9;26938:6;26903:9;:42::i;6468:226::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;6549:6:::1;::::0;;;6532:23;;-1:-1:-1;;;;;;6532:23:0;;::::1;-1:-1:-1::0;;;;;6549:6:0;::::1;6532:23;::::0;;;6566:19:::1;::::0;;6608:22:::1;6626:4:::0;6608:15:::1;:22;:::i;:::-;6596:9;:34:::0;6683:1:::1;6667:6:::0;;6646:40:::1;::::0;-1:-1:-1;;;;;6667:6:0;;::::1;::::0;6646:40:::1;::::0;6683:1;;6646:40:::1;6468:226:::0;:::o;42546:133::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;42630:14:::1;:41:::0;;-1:-1:-1;;;;;42630:41:0;;::::1;;;-1:-1:-1::0;;;;;;42630:41:0;;::::1;::::0;;;::::1;::::0;;42546:133::o;6020:244::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6109:22:0;::::1;6101:73;;;::::0;-1:-1:-1;;;6101:73:0;;6028:2:1;6101:73:0::1;::::0;::::1;6010:21:1::0;6067:2;6047:18;;;6040:30;6106:34;6086:18;;;6079:62;-1:-1:-1;;;6157:18:1;;;6150:36;6203:19;;6101:73:0::1;6000:228:1::0;6101:73:0::1;6211:6;::::0;;6190:38:::1;::::0;-1:-1:-1;;;;;6190:38:0;;::::1;::::0;6211:6;::::1;::::0;6190:38:::1;::::0;::::1;6239:6;:17:::0;;-1:-1:-1;;;;;;6239:17:0::1;-1:-1:-1::0;;;;;6239:17:0;;;::::1;::::0;;;::::1;::::0;;6020:244::o;29567:337::-;-1:-1:-1;;;;;29660:19:0;;29652:68;;;;-1:-1:-1;;;29652:68:0;;9887:2:1;29652:68:0;;;9869:21:1;9926:2;9906:18;;;9899:30;9965:34;9945:18;;;9938:62;-1:-1:-1;;;10016:18:1;;;10009:34;10060:19;;29652:68:0;9859:226:1;29652:68:0;-1:-1:-1;;;;;29739:21:0;;29731:68;;;;-1:-1:-1;;;29731:68:0;;6435:2:1;29731:68:0;;;6417:21:1;6474:2;6454:18;;;6447:30;6513:34;6493:18;;;6486:62;-1:-1:-1;;;6564:18:1;;;6557:32;6606:19;;29731:68:0;6407:224:1;29731:68:0;-1:-1:-1;;;;;29812:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29864:32;;12118:25:1;;;29864:32:0;;12091:18:1;29864:32:0;;;;;;;29567:337;;;:::o;29912:3611::-;-1:-1:-1;;;;;30043:20:0;;30035:70;;;;-1:-1:-1;;;30035:70:0;;9481:2:1;30035:70:0;;;9463:21:1;9520:2;9500:18;;;9493:30;9559:34;9539:18;;;9532:62;-1:-1:-1;;;9610:18:1;;;9603:35;9655:19;;30035:70:0;9453:227:1;30035:70:0;-1:-1:-1;;;;;30124:23:0;;30116:71;;;;-1:-1:-1;;;30116:71:0;;5213:2:1;30116:71:0;;;5195:21:1;5252:2;5232:18;;;5225:30;5291:34;5271:18;;;5264:62;-1:-1:-1;;;5342:18:1;;;5335:33;5385:19;;30116:71:0;5185:225:1;30116:71:0;30215:1;30206:6;:10;30198:64;;;;-1:-1:-1;;;30198:64:0;;9071:2:1;30198:64:0;;;9053:21:1;9110:2;9090:18;;;9083:30;9149:34;9129:18;;;9122:62;-1:-1:-1;;;9200:18:1;;;9193:39;9249:19;;30198:64:0;9043:231:1;30198:64:0;-1:-1:-1;;;;;30282:20:0;;;;;;:9;:20;;;;;;;;30281:21;30273:57;;;;-1:-1:-1;;;30273:57:0;;11822:2:1;30273:57:0;;;11804:21:1;11861:2;11841:18;;;11834:30;-1:-1:-1;;;11880:18:1;;;11873:53;11943:18;;30273:57:0;11794:173:1;30273:57:0;30360:10;30350:21;;;;:9;:21;;;;;;;;30349:22;30341:58;;;;-1:-1:-1;;;30341:58:0;;11822:2:1;30341:58:0;;;11804:21:1;11861:2;11841:18;;;11834:30;-1:-1:-1;;;11880:18:1;;;11873:53;11943:18;;30341:58:0;11794:173:1;30341:58:0;5838:7;5865:6;-1:-1:-1;;;;;30417:17:0;;;5865:6;;30417:17;;;;:41;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;30438:20:0;;;5865:6;;30438:20;;30417:41;30414:553;;;30494:11;;;;;;;30489:283;;-1:-1:-1;;;;;30532:23:0;;30550:4;30532:23;;:53;;-1:-1:-1;;;;;;30559:26:0;;30580:4;30559:26;30532:53;:100;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;30606:26:0;;;5865:6;;30606:26;30532:100;:133;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;30636:29:0;;;5865:6;;30636:29;30532:133;30526:231;;30699:11;;;;;;;30691:46;;;;-1:-1:-1;;;30691:46:0;;7597:2:1;30691:46:0;;;7579:21:1;7636:2;7616:18;;;7609:30;-1:-1:-1;;;7655:18:1;;;7648:52;7717:18;;30691:46:0;7569:172:1;30691:46:0;30791:16;;;;30788:168;;;30841:10;30832:20;;;;:8;:20;;;;;:27;;;;;30828:113;;30907:14;;;;;;;;-1:-1:-1;30907:14:0;;;;;;;;;;30916:4;30907:14;;;;;;30893:10;30884:20;;:8;:20;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30884:37:0;;;;;;;;;;30828:113;31025:13;;-1:-1:-1;;;;;31015:23:0;;;31025:13;;31015:23;:64;;;;-1:-1:-1;31063:15:0;;-1:-1:-1;;;;;31042:37:0;;;31063:15;;;;;31042:37;;31015:64;:98;;;;-1:-1:-1;;;;;;31084:29:0;;;;;;:18;:29;;;;;;;;31083:30;31015:98;31012:797;;;31142:11;;;;;;;31134:48;;;;-1:-1:-1;;;31134:48:0;;10652:2:1;31134:48:0;;;10634:21:1;10691:2;10671:18;;;10664:30;10730:26;10710:18;;;10703:54;10774:18;;31134:48:0;10624:174:1;31134:48:0;31233:11;;31219:13;:25;31284:16;;;;31281:378;;;31342:15;31328:11;;:29;31325:315;;;31404:13;;31394:6;:23;;31386:32;;;;;;-1:-1:-1;;;;;31453:19:0;;;;;;:8;:19;;;;;:23;31479:15;-1:-1:-1;31445:88:0;;;;-1:-1:-1;;;31445:88:0;;6838:2:1;31445:88:0;;;6820:21:1;6877:2;6857:18;;;6850:30;6916:34;6896:18;;;6889:62;-1:-1:-1;;;6967:18:1;;;6960:32;7009:19;;31445:88:0;6810:224:1;31445:88:0;31586:30;:15;31605:10;31586:30;:::i;:::-;-1:-1:-1;;;;;31560:19:0;;;;;;:8;:19;;;;;:56;31325:315;31680:16;;;;31677:121;;;31748:30;:15;31767:10;31748:30;:::i;:::-;-1:-1:-1;;;;;31721:19:0;;;;;;:8;:19;;;;;:24;;:57;31677:121;31842:16;;-1:-1:-1;;;31842:16:0;;;;31841:17;:42;;;;-1:-1:-1;31862:21:0;;-1:-1:-1;;;31862:21:0;;;;31841:42;:72;;;;-1:-1:-1;31900:13:0;;-1:-1:-1;;;;;31887:26:0;;;31900:13;;31887:26;31841:72;31837:1357;;;31978:19;;;;31975:231;;;32022:16;32041:26;32052:14;;32041:6;:10;;:26;;;;:::i;:::-;32124:13;;32022:45;;-1:-1:-1;32101:50:0;;32114:36;;32143:6;;32114:24;;-1:-1:-1;;;;;32124:13:0;32114:9;:24::i;:::-;:28;;:36::i;:::-;32101:8;;:12;:50::i;:::-;32090:61;;32174:16;32181:8;32174:6;:16::i;:::-;31999:207;31975:231;32255:13;;32234:18;32374:24;32392:4;32374:9;:24::i;:::-;32343:55;-1:-1:-1;32417:24:0;;32414:96;;32462:32;32473:20;32462:10;:32::i;:::-;32691:14;;32579:21;;-1:-1:-1;;;32691:14:0;;;;:39;;;;;32719:11;;32709:6;:21;;32691:39;32687:393;;;32769:11;32783:2;32769:16;;32822:21;32846:89;32932:2;32846:81;32862:64;32870:55;32913:11;;32871:36;32905:1;;32872:27;32887:11;;32872:10;:14;;:27;;;;:::i;:::-;32871:33;;:36::i;:::-;32870:42;;:55::i;:::-;32862:3;;:7;:64::i;:::-;32846:11;;;:15;:81::i;:89::-;32822:113;;33019:13;33008:7;:24;33004:60;;33036:28;33050:13;33036;:28::i;:::-;32732:348;;32687:393;-1:-1:-1;;33156:13:0;:26;31837:1357;-1:-1:-1;;;;;33325:26:0;;33206:12;33325:26;;;:18;:26;;;;;;33221:4;;33325:26;;;:59;;-1:-1:-1;;;;;;33355:29:0;;;;;;:18;:29;;;;;;;;33325:59;33322:105;;;-1:-1:-1;33410:5:0;33322:105;33467:48;33482:6;33490:9;33500:6;33507:7;33467:14;:48::i;:::-;30024:3499;29912:3611;;;:::o;1509:192::-;1595:7;1631:12;1623:6;;;;1615:29;;;;-1:-1:-1;;;1615:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1655:9:0;1667:5;1671:1;1667;:5;:::i;:::-;1655:17;1509:192;-1:-1:-1;;;;;1509:192:0:o;40605:163::-;40646:7;40667:15;40684;40703:19;:17;:19::i;:::-;40666:56;;-1:-1:-1;40666:56:0;-1:-1:-1;40740:20:0;40666:56;;40740:11;:20::i;:::-;40733:27;;;;40605:163;:::o;1969:132::-;2027:7;2054:39;2058:1;2061;2054:39;;;;;;;;;;;;;;;;;:3;:39::i;1176:181::-;1234:7;;1266:5;1270:1;1266;:5;:::i;:::-;1254:17;;1295:1;1290;:6;;1282:46;;;;-1:-1:-1;;;1282:46:0;;7241:2:1;1282:46:0;;;7223:21:1;7280:2;7260:18;;;7253:30;7319:29;7299:18;;;7292:57;7366:18;;1282:46:0;7213:177:1;39403:419:0;39462:7;39471;39480;39489;39498;39507;39528:23;39553:12;39567:18;39589:20;39601:7;39589:11;:20::i;:::-;39527:82;;;;;;39621:15;39638:23;39663:12;39679:50;39691:7;39700:4;39706:10;39718;:8;:10::i;:::-;39679:11;:50::i;:::-;39620:109;;;;-1:-1:-1;39620:109:0;;-1:-1:-1;39780:15:0;;-1:-1:-1;39797:4:0;;-1:-1:-1;39803:10:0;;-1:-1:-1;39403:419:0;;-1:-1:-1;;;;;39403:419:0:o;1365:136::-;1423:7;1450:43;1454:1;1457;1450:43;;;;;;;;;;;;;;;;;:3;:43::i;1709:250::-;1767:7;1791:6;1787:47;;-1:-1:-1;1821:1:0;1814:8;;1787:47;1846:9;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;-1:-1:-1;1891:1:0;1882:5;1886:1;1846:17;1882:5;:::i;:::-;:10;1874:56;;;;-1:-1:-1;;;1874:56:0;;8308:2:1;1874:56:0;;;8290:21:1;8347:2;8327:18;;;8320:30;8386:34;8366:18;;;8359:62;-1:-1:-1;;;8437:18:1;;;8430:31;8478:19;;1874:56:0;8280:223:1;34043:428:0;34118:11;;34143:23;;;34140:201;;;-1:-1:-1;34196:11:0;;34140:201;;;34240:2;34228:9;:14;34225:116;;;-1:-1:-1;34272:2:0;34225:116;;;-1:-1:-1;34320:9:0;34225:116;34354:17;:10;34369:1;34354:14;:17::i;:::-;:22;34351:66;;34393:12;;;;:::i;:::-;;;;34351:66;34437:13;:26;-1:-1:-1;34043:428:0:o;33531:346::-;17216:16;:23;;-1:-1:-1;;;;17216:23:0;-1:-1:-1;;;17216:23:0;;;33639:21:::1;33671:38;33688:20:::0;33671:16:::1;:38::i;:::-;33720:26;33749:41;:21;33775:14:::0;33749:25:::1;:41::i;:::-;33825:14;::::0;33720:70;;-1:-1:-1;33804:63:0::1;::::0;33825:14:::1;::::0;::::1;-1:-1:-1::0;;;;;33825:14:0::1;33841:25;33720:70:::0;33864:1:::1;33841:22;:25::i;:::-;33804:20;:63::i;:::-;-1:-1:-1::0;;17262:16:0;:24;;-1:-1:-1;;;;17262:24:0;;;-1:-1:-1;33531:346:0:o;33887:144::-;17216:16;:23;;-1:-1:-1;;;;17216:23:0;-1:-1:-1;;;17216:23:0;;;33961:10;;33957:67:::1;;33988:24;34005:6;33988:16;:24::i;:::-;-1:-1:-1::0;17262:16:0;:24;;-1:-1:-1;;;;17262:24:0;;;33887:144::o;36246:688::-;36357:7;36353:40;;36379:14;:12;:14::i;:::-;-1:-1:-1;;;;;36410:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36434:22:0;;;;;;:11;:22;;;;;;;;36433:23;36410:46;36406:467;;;36473:48;36495:6;36503:9;36514:6;36473:21;:48::i;:::-;36406:467;;;-1:-1:-1;;;;;36544:19:0;;;;;;:11;:19;;;;;;;;36543:20;:46;;;;-1:-1:-1;;;;;;36567:22:0;;;;;;:11;:22;;;;;;;;36543:46;36539:334;;;36606:46;36626:6;36634:9;36645:6;36606:19;:46::i;36539:334::-;-1:-1:-1;;;;;36674:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;36697:22:0;;;;;;:11;:22;;;;;;;;36674:45;36670:203;;;36736:48;36758:6;36766:9;36777:6;36736:21;:48::i;36670:203::-;36817:44;36835:6;36843:9;36854:6;36817:17;:44::i;:::-;36889:7;36885:41;;36911:15;42334;;42324:7;:25;42376:21;;42360:13;:37;42280:125;40776:555;40873:7;;40909;;40826;;;;;40927:289;40951:9;:16;40947:20;;40927:289;;;41017:7;40993;:21;41001:9;41011:1;41001:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41001:12:0;40993:21;;;;;;;;;;;;;:31;;:66;;;41052:7;41028;:21;41036:9;41046:1;41036:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41036:12:0;41028:21;;;;;;;;;;;;;:31;40993:66;40989:97;;;41069:7;;41078;;41061:25;;;;;;;40776:555;;:::o;40989:97::-;41111:34;41123:7;:21;41131:9;41141:1;41131:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41131:12:0;41123:21;;;;;;;;;;;;;41111:7;;:11;:34::i;:::-;41101:44;;41170:34;41182:7;:21;41190:9;41200:1;41190:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41190:12:0;41182:21;;;;;;;;;;;;;41170:7;;:11;:34::i;:::-;41160:44;-1:-1:-1;40969:3:0;;;;:::i;:::-;;;;40927:289;;;-1:-1:-1;41252:7:0;;41240;;:20;;:11;:20::i;:::-;41230:7;:30;41226:61;;;41270:7;;41279;;41262:25;;;;;;40776:555;;:::o;41226:61::-;41306:7;;41315;;-1:-1:-1;40776:555:0;-1:-1:-1;40776:555:0:o;2109:278::-;2195:7;2230:12;2223:5;2215:28;;;;-1:-1:-1;;;2215:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2254:9:0;2266:5;2270:1;2266;:5;:::i;39830:330::-;39890:7;39899;39908;39928:12;39943:24;39959:7;39943:15;:24::i;:::-;39928:39;;39978:18;39999:30;40021:7;39999:21;:30::i;:::-;39978:51;-1:-1:-1;40040:23:0;40066:33;39978:51;40066:17;:7;40078:4;40066:11;:17::i;:::-;:21;;:33::i;:::-;40040:59;40135:4;;-1:-1:-1;40141:10:0;;-1:-1:-1;39830:330:0;;-1:-1:-1;;;39830:330:0:o;40168:429::-;40283:7;;;;40339:24;:7;40351:11;40339;:24::i;:::-;40321:42;-1:-1:-1;40374:12:0;40389:21;:4;40398:11;40389:8;:21::i;:::-;40374:36;-1:-1:-1;40421:18:0;40442:27;:10;40457:11;40442:14;:27::i;:::-;40421:48;-1:-1:-1;40480:23:0;40506:33;40421:48;40506:17;:7;40518:4;40506:11;:17::i;:33::-;40558:7;;;;-1:-1:-1;40584:4:0;;-1:-1:-1;40168:429:0;;-1:-1:-1;;;;;;;40168:429:0:o;2395:130::-;2453:7;2480:37;2484:1;2487;2480:37;;;;;;;;;;;;;;;;;:3;:37::i;34479:658::-;34629:16;;;34643:1;34629:16;;;;;;;;34605:21;;34629:16;;;;;;;;;;-1:-1:-1;34629:16:0;34605:40;;34674:4;34656;34661:1;34656:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;34656:23:0;;;-1:-1:-1;;;;;34656:23:0;;;;;34700:15;;;;;;;;;-1:-1:-1;;;;;34700:15:0;-1:-1:-1;;;;;34700:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34690:4;34695:1;34690:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34690:32:0;;;:7;;;;;;;;;:32;34767:15;;34735:62;;34752:4;;34767:15;;;;34785:11;34735:8;:62::i;:::-;34836:15;;:240;;-1:-1:-1;;;34836:240:0;;:15;;;;-1:-1:-1;;;;;34836:15:0;;:66;;:240;;34917:11;;34943:1;;34987:4;;35014;;35050:15;;34836:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:35;35111:11;35124:4;35094:35;;;;;;;:::i;:::-;;;;;;;;34534:603;34479:658;:::o;42853:126::-;42945:26;;-1:-1:-1;;;;;42945:18:0;;;:26;;;;;42964:6;;42945:26;;;;42964:6;42945:18;:26;;;;;;;;;;;;;;;;;;;;;42853:126;;:::o;35145:572::-;35290:16;;;35304:1;35290:16;;;;;;;;35266:21;;35290:16;;;;;;;;;;-1:-1:-1;35290:16:0;35266:40;;35327:15;;;;;;;;;-1:-1:-1;;;;;35327:15:0;-1:-1:-1;;;;;35327:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35317:4;35322:1;35317:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;35317:32:0;;;-1:-1:-1;;;;;35317:32:0;;;;;35378:4;35360;35365:1;35360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35360:23:0;;;:7;;;;;;;;;:23;35422:15;;;;;;:66;35496:6;35518:1;35565:4;35584:11;35626:24;:15;35646:3;35626:19;:24::i;:::-;35422:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35679:30;35696:6;35704:4;35679:30;;;;;;;:::i;42038:234::-;42084:7;;:12;:34;;;;-1:-1:-1;42100:13:0;;:18;42084:34;42081:46;;;42038:234::o;42081:46::-;42157:7;;;42139:15;:25;42199:13;;;42175:21;:37;-1:-1:-1;42225:11:0;;;;42247:17;42038:234::o;38035:563::-;38138:15;38155:23;38180:12;38194:23;38219:12;38233:18;38255:19;38266:7;38255:10;:19::i;:::-;-1:-1:-1;;;;;38303:15:0;;;;;;:7;:15;;;;;;38137:137;;-1:-1:-1;38137:137:0;;-1:-1:-1;38137:137:0;;-1:-1:-1;38137:137:0;-1:-1:-1;38137:137:0;-1:-1:-1;38137:137:0;-1:-1:-1;38303:28:0;;38323:7;38303:19;:28::i;:::-;-1:-1:-1;;;;;38285:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38360:7;:15;;;;:28;;38380:7;38360:19;:28::i;:::-;-1:-1:-1;;;;;38342:15:0;;;;;;;:7;:15;;;;;;:46;;;;38420:18;;;;;;;:39;;38443:15;38420:22;:39::i;:::-;-1:-1:-1;;;;;38399:18:0;;;;;;:7;:18;;;;;:60;38470:26;38485:10;38470:14;:26::i;:::-;38507:23;38519:4;38525;38507:11;:23::i;:::-;38563:9;-1:-1:-1;;;;;38546:44:0;38555:6;-1:-1:-1;;;;;38546:44:0;;38574:15;38546:44;;;;12118:25:1;;12106:2;12091:18;;12073:76;38546:44:0;;;;;;;;38126:472;;;;;;38035:563;;;:::o;37452:575::-;37553:15;37570:23;37595:12;37609:23;37634:12;37648:18;37670:19;37681:7;37670:10;:19::i;:::-;-1:-1:-1;;;;;37718:15:0;;;;;;:7;:15;;;;;;37552:137;;-1:-1:-1;37552:137:0;;-1:-1:-1;37552:137:0;;-1:-1:-1;37552:137:0;-1:-1:-1;37552:137:0;-1:-1:-1;37552:137:0;-1:-1:-1;37718:28:0;;37552:137;37718:19;:28::i;:::-;-1:-1:-1;;;;;37700:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37778:18;;;;;:7;:18;;;;;:39;;37801:15;37778:22;:39::i;:::-;-1:-1:-1;;;;;37757:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37849:7;:18;;;;:39;;37872:15;37849:22;:39::i;38606:634::-;38709:15;38726:23;38751:12;38765:23;38790:12;38804:18;38826:19;38837:7;38826:10;:19::i;:::-;-1:-1:-1;;;;;38874:15:0;;;;;;:7;:15;;;;;;38708:137;;-1:-1:-1;38708:137:0;;-1:-1:-1;38708:137:0;;-1:-1:-1;38708:137:0;-1:-1:-1;38708:137:0;-1:-1:-1;38708:137:0;-1:-1:-1;38874:28:0;;38894:7;38874:19;:28::i;:::-;-1:-1:-1;;;;;38856:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38931:7;:15;;;;:28;;38951:7;38931:19;:28::i;36942:502::-;37041:15;37058:23;37083:12;37097:23;37122:12;37136:18;37158:19;37169:7;37158:10;:19::i;:::-;-1:-1:-1;;;;;37206:15:0;;;;;;:7;:15;;;;;;37040:137;;-1:-1:-1;37040:137:0;;-1:-1:-1;37040:137:0;;-1:-1:-1;37040:137:0;-1:-1:-1;37040:137:0;-1:-1:-1;37040:137:0;-1:-1:-1;37206:28:0;;37040:137;37206:19;:28::i;41702:154::-;41766:7;41793:55;41832:5;41793:20;41805:7;;41793;:11;;:20;;;;:::i;41864:166::-;41934:7;41961:61;42006:5;41961:26;41973:13;;41961:7;:11;;:26;;;;:::i;2533:166::-;2619:7;2655:12;2647:6;2639:29;;;;-1:-1:-1;;;2639:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2686:5:0;2690:1;2686;:5;:::i;:::-;2679:12;2533:166;-1:-1:-1;;;;2533:166:0:o;41339:355::-;41402:19;41425:10;:8;:10::i;:::-;41402:33;-1:-1:-1;41446:18:0;41467:27;:10;41402:33;41467:14;:27::i;:::-;41546:4;41530:22;;;;:7;:22;;;;;;41446:48;;-1:-1:-1;41530:38:0;;41446:48;41530:26;:38::i;:::-;41521:4;41505:22;;;;:7;:22;;;;;;;;:63;;;;41582:11;:26;;;;;;41579:107;;;41664:4;41648:22;;;;:7;:22;;;;;;:38;;41675:10;41648:26;:38::i;:::-;41639:4;41623:22;;;;:7;:22;;;;;:63;41391:303;;41339:355;:::o;39248:147::-;39326:7;;:17;;39338:4;39326:11;:17::i;:::-;39316:7;:27;39367:10;;:20;;39382:4;39367:14;:20::i;:::-;39354:10;:33;-1:-1:-1;;39248:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;832:1;829;822:12;784:2;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;774:301;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1242:1;1239;1232:12;1194:2;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1184:352;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1184:352::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:2;;;1686:1;1683;1676:12;1638:2;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1628:228:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:2;;;1986:1;1983;1976:12;1938:2;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;2174:1;2171;2164:12;2126:2;-1:-1:-1;2197:23:1;;2116:110;-1:-1:-1;2116:110:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:2;;;2373:1;2370;2363:12;2325:2;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2315:164;;;;;:::o;2484:461::-;2537:3;2575:5;2569:12;2602:6;2597:3;2590:19;2628:4;2657:2;2652:3;2648:12;2641:19;;2694:2;2687:5;2683:14;2715:1;2725:195;2739:6;2736:1;2733:13;2725:195;;;2804:13;;-1:-1:-1;;;;;2800:39:1;2788:52;;2860:12;;;;2895:15;;;;2836:1;2754:9;2725:195;;;-1:-1:-1;2936:3:1;;2545:400;-1:-1:-1;;;;;2545:400:1:o;3894:510::-;4165:6;4154:9;4147:25;4208:3;4203:2;4192:9;4188:18;4181:31;4128:4;4229:57;4281:3;4270:9;4266:19;4258:6;4229:57;:::i;:::-;-1:-1:-1;;;;;4322:32:1;;;;4317:2;4302:18;;4295:60;-1:-1:-1;4386:2:1;4371:18;4364:34;4221:65;4137:267;-1:-1:-1;;4137:267:1:o;4409:597::-;4521:4;4550:2;4579;4568:9;4561:21;4611:6;4605:13;4654:6;4649:2;4638:9;4634:18;4627:34;4679:1;4689:140;4703:6;4700:1;4697:13;4689:140;;;4798:14;;;4794:23;;4788:30;4764:17;;;4783:2;4760:26;4753:66;4718:10;;4689:140;;;4847:6;4844:1;4841:13;4838:2;;;4917:1;4912:2;4903:6;4892:9;4888:22;4884:31;4877:42;4838:2;-1:-1:-1;4990:2:1;4969:15;-1:-1:-1;;4965:29:1;4950:45;;;;4997:2;4946:54;;4530:476;-1:-1:-1;;;4530:476:1:o;8508:356::-;8710:2;8692:21;;;8729:18;;;8722:30;8788:34;8783:2;8768:18;;8761:62;8855:2;8840:18;;8682:182::o;12154:332::-;12361:6;12350:9;12343:25;12404:2;12399;12388:9;12384:18;12377:30;12324:4;12424:56;12476:2;12465:9;12461:18;12453:6;12424:56;:::i;12491:582::-;12790:6;12779:9;12772:25;12833:6;12828:2;12817:9;12813:18;12806:34;12876:3;12871:2;12860:9;12856:18;12849:31;12753:4;12897:57;12949:3;12938:9;12934:19;12926:6;12897:57;:::i;:::-;-1:-1:-1;;;;;12990:32:1;;;;12985:2;12970:18;;12963:60;-1:-1:-1;13054:3:1;13039:19;13032:35;12889:65;12762:311;-1:-1:-1;;;12762:311:1:o;13267:128::-;13307:3;13338:1;13334:6;13331:1;13328:13;13325:2;;;13344:18;;:::i;:::-;-1:-1:-1;13380:9:1;;13315:80::o;13400:120::-;13440:1;13466;13456:2;;13471:18;;:::i;:::-;-1:-1:-1;13505:9:1;;13446:74::o;13525:168::-;13565:7;13631:1;13627;13623:6;13619:14;13616:1;13613:21;13608:1;13601:9;13594:17;13590:45;13587:2;;;13638:18;;:::i;:::-;-1:-1:-1;13678:9:1;;13577:116::o;13698:125::-;13738:4;13766:1;13763;13760:8;13757:2;;;13771:18;;:::i;:::-;-1:-1:-1;13808:9:1;;13747:76::o;13828:380::-;13907:1;13903:12;;;;13950;;;13971:2;;14025:4;14017:6;14013:17;14003:27;;13971:2;14078;14070:6;14067:14;14047:18;14044:38;14041:2;;;14124:10;14119:3;14115:20;14112:1;14105:31;14159:4;14156:1;14149:15;14187:4;14184:1;14177:15;14041:2;;13883:325;;;:::o;14213:135::-;14252:3;-1:-1:-1;;14273:17:1;;14270:2;;;14293:18;;:::i;:::-;-1:-1:-1;14340:1:1;14329:13;;14260:88::o;14353:112::-;14385:1;14411;14401:2;;14416:18;;:::i;:::-;-1:-1:-1;14450:9:1;;14391:74::o;14470:127::-;14531:10;14526:3;14522:20;14519:1;14512:31;14562:4;14559:1;14552:15;14586:4;14583:1;14576:15;14602:127;14663:10;14658:3;14654:20;14651:1;14644:31;14694:4;14691:1;14684:15;14718:4;14715:1;14708:15;14734:127;14795:10;14790:3;14786:20;14783:1;14776:31;14826:4;14823:1;14816:15;14850:4;14847:1;14840:15;14998:131;-1:-1:-1;;;;;15073:31:1;;15063:42;;15053:2;;15119:1;15116;15109:12;15053:2;15043:86;:::o
Swarm Source
ipfs://ad4eec2decd463320835aaa20342c91f4302afde104fccd9e0988d556afbd3ee
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.