More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 59 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21741768 | 79 days ago | IN | 0 ETH | 0.0000699 | ||||
Transfer | 21735523 | 80 days ago | IN | 0 ETH | 0.0001315 | ||||
Transfer | 21734731 | 80 days ago | IN | 0 ETH | 0.00016722 | ||||
Approve | 20379341 | 269 days ago | IN | 0 ETH | 0.00011999 | ||||
Approve | 20379338 | 269 days ago | IN | 0 ETH | 0.00011605 | ||||
Approve | 16913610 | 755 days ago | IN | 0 ETH | 0.00082257 | ||||
Transfer | 16837774 | 766 days ago | IN | 0 ETH | 0.00188585 | ||||
Approve | 16837626 | 766 days ago | IN | 0 ETH | 0.00045813 | ||||
Approve | 16837601 | 766 days ago | IN | 0 ETH | 0.00083905 | ||||
Approve | 16829382 | 767 days ago | IN | 0 ETH | 0.00113347 | ||||
Approve | 16819114 | 768 days ago | IN | 0 ETH | 0.00055922 | ||||
Approve | 16819114 | 768 days ago | IN | 0 ETH | 0.00096036 | ||||
Approve | 16763709 | 776 days ago | IN | 0 ETH | 0.00196313 | ||||
Approve | 16763692 | 776 days ago | IN | 0 ETH | 0.00207212 | ||||
Approve | 16730236 | 781 days ago | IN | 0 ETH | 0.0008598 | ||||
Approve | 16723403 | 782 days ago | IN | 0 ETH | 0.00094648 | ||||
Approve | 16714550 | 783 days ago | IN | 0 ETH | 0.00117436 | ||||
Approve | 16670521 | 789 days ago | IN | 0 ETH | 0.00365907 | ||||
Transfer | 16648800 | 792 days ago | IN | 0 ETH | 0.0016999 | ||||
Approve | 16648748 | 792 days ago | IN | 0 ETH | 0.00114771 | ||||
Approve | 16642835 | 793 days ago | IN | 0 ETH | 0.00180155 | ||||
Approve | 16635826 | 794 days ago | IN | 0 ETH | 0.00220928 | ||||
Approve | 16635690 | 794 days ago | IN | 0 ETH | 0.00237662 | ||||
Set Sell Fee Per... | 16626645 | 795 days ago | IN | 0 ETH | 0.00067287 | ||||
Set Buy Fee Perc... | 16626634 | 795 days ago | IN | 0 ETH | 0.00056835 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 21741775 | 79 days ago | 0.00078337 ETH | ||||
Transfer | 21741775 | 79 days ago | 0.00078337 ETH | ||||
Transfer | 21741775 | 79 days ago | 0.00000021 ETH | ||||
Add Liquidity ET... | 21741775 | 79 days ago | 0.0001024 ETH | ||||
Transfer | 21741775 | 79 days ago | 0.0001024 ETH | ||||
Transfer | 16819134 | 768 days ago | 0.00099001 ETH | ||||
Transfer | 16819134 | 768 days ago | 0.00099001 ETH | ||||
Add Liquidity ET... | 16819134 | 768 days ago | 0.0001238 ETH | ||||
Transfer | 16819134 | 768 days ago | 0.0001238 ETH | ||||
Transfer | 16719319 | 782 days ago | 0.0096939 ETH | ||||
Transfer | 16719319 | 782 days ago | 0.0096939 ETH | ||||
Add Liquidity ET... | 16719319 | 782 days ago | 0.00121642 ETH | ||||
Transfer | 16719319 | 782 days ago | 0.00121642 ETH | ||||
Transfer | 16674152 | 789 days ago | 0.00585128 ETH | ||||
Transfer | 16674152 | 789 days ago | 0.00585128 ETH | ||||
Add Liquidity ET... | 16674152 | 789 days ago | 0.00073297 ETH | ||||
Transfer | 16674152 | 789 days ago | 0.00073297 ETH | ||||
Transfer | 16639039 | 794 days ago | 0.00111908 ETH | ||||
Transfer | 16639039 | 794 days ago | 0.00111908 ETH | ||||
Add Liquidity ET... | 16639039 | 794 days ago | 0.00013994 ETH | ||||
Transfer | 16639039 | 794 days ago | 0.00013994 ETH | ||||
Transfer | 16624150 | 796 days ago | 0.00740278 ETH | ||||
Transfer | 16624150 | 796 days ago | 0.00740278 ETH | ||||
Add Liquidity ET... | 16624150 | 796 days ago | 0.00185635 ETH | ||||
Transfer | 16624150 | 796 days ago | 0.00185635 ETH |
Loading...
Loading
Contract Name:
BAP
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-30 */ // ░██████╗░█████╗░███████╗██╗░░░██╗ ██████╗░██╗░░░██╗ // ██╔════╝██╔══██╗██╔════╝██║░░░██║ ██╔══██╗╚██╗░██╔╝ // ╚█████╗░███████║█████╗░░██║░░░██║ ██████╦╝░╚████╔╝░ // ░╚═══██╗██╔══██║██╔══╝░░██║░░░██║ ██╔══██╗░░╚██╔╝░░ // ██████╔╝██║░░██║██║░░░░░╚██████╔╝ ██████╦╝░░░██║░░░ // ╚═════╝░╚═╝░░╚═╝╚═╝░░░░░░╚═════╝░ ╚═════╝░░░░╚═╝░░░ // ░█████╗░░█████╗░██╗███╗░░██╗░██████╗██╗░░░██╗██╗░░░░░████████╗░░░███╗░░██╗███████╗████████╗ // ██╔══██╗██╔══██╗██║████╗░██║██╔════╝██║░░░██║██║░░░░░╚══██╔══╝░░░████╗░██║██╔════╝╚══██╔══╝ // ██║░░╚═╝██║░░██║██║██╔██╗██║╚█████╗░██║░░░██║██║░░░░░░░░██║░░░░░░██╔██╗██║█████╗░░░░░██║░░░ // ██║░░██╗██║░░██║██║██║╚████║░╚═══██╗██║░░░██║██║░░░░░░░░██║░░░░░░██║╚████║██╔══╝░░░░░██║░░░ // ╚█████╔╝╚█████╔╝██║██║░╚███║██████╔╝╚██████╔╝███████╗░░░██║░░░██╗██║░╚███║███████╗░░░██║░░░ // ░╚════╝░░╚════╝░╚═╝╚═╝░░╚══╝╚═════╝░░╚═════╝░╚══════╝░░░╚═╝░░░╚═╝╚═╝░░╚══╝╚══════╝░░░╚═╝░░░ // SAFU By Coinsult // SPDX-License-Identifier: MIT pragma solidity 0.8.17; 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; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BAP is Context, IERC20, Ownable { using Address for address; using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcluded; address[] private _excluded; string private _name = "BabyAliens"; string private _symbol = "BAP"; uint8 private _decimals = 18; uint256 private constant MAX = type(uint256).max; uint256 private _tTotal = 100_000_000_000 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public taxFeeonBuy; uint256 public taxFeeonSell; uint256 public liquidityFeeonBuy; uint256 public liquidityFeeonSell; uint256 public marketingFeeonBuy; uint256 public marketingFeeonSell; uint256 public _taxFee; uint256 public _liquidityFee; uint256 public _marketingFee; uint256 totalBuyFees; uint256 totalSellFees; address public marketingWallet; address private DEAD = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapEnabled; uint256 public swapTokensAtAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event MarketingWalletChanged(address marketingWallet); event SwapEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity); event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 amount); event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee); event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee); constructor() { address router; if (block.chainid == 56) { router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if (block.chainid == 1 || block.chainid == 5) { router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert(); } IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), MAX); taxFeeonBuy = 2; taxFeeonSell = 3; liquidityFeeonBuy = 2; liquidityFeeonSell = 3; marketingFeeonBuy = 4; marketingFeeonSell = 6; totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy; totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell; marketingWallet = 0x23A01037deEEd9F2fD84400ae8a1d5f84A91ea16; swapEnabled = true; swapTokensAtAmount = _tTotal / 5000; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[marketingWallet] = true; _isExcludedFromFees[address(this)] = true; _isExcluded[address(this)] = true; _isExcluded[address(0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE)] = true; //pinklock _isExcluded[address(0xdead)] = true; _rOwned[owner()] = _rTotal; _tOwned[owner()] = _tTotal; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionDistributed() 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] - rAmount; _rTotal = _rTotal - rAmount; _tFeeTotal = _tFeeTotal + 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 / currentRate; } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } receive() external payable {} function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount - tFee - tLiquidity - tMarketing; return (tTransferAmount, tFee, tLiquidity, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rLiquidity = tLiquidity * currentRate; uint256 rMarketing = tMarketing * currentRate; uint256 rTransferAmount = rAmount - rFee - rLiquidity - rMarketing; return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / 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 - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { if (tLiquidity > 0) { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; } } function _takeMarketing(uint256 tMarketing) private { if (tMarketing > 0) { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rMarketing; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tMarketing; } } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount * _taxFee / 100; } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount * _liquidityFee / 100; } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount * _marketingFee / 100; } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function setBuyFee() private{ if(_taxFee == taxFeeonBuy && _liquidityFee == liquidityFeeonBuy && _marketingFee == marketingFeeonBuy) return; _taxFee = taxFeeonBuy; _marketingFee = marketingFeeonBuy; _liquidityFee = liquidityFeeonBuy; } function setSellFee() private{ if(_taxFee == taxFeeonSell && _liquidityFee == liquidityFeeonSell && _marketingFee == marketingFeeonSell) return; _taxFee = taxFeeonSell; _marketingFee = marketingFeeonSell; _liquidityFee = liquidityFeeonSell; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFees[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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapEnabled ) { inSwapAndLiquify = true; uint256 marketingShare = marketingFeeonBuy + marketingFeeonSell; uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell; uint256 totalShare = marketingShare + liquidityShare; if(totalShare > 0) { if(liquidityShare > 0) { uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare; swapAndLiquify(liquidityTokens); } if(marketingShare > 0) { uint256 marketingTokens = (contractTokenBalance * marketingShare) / totalShare; swapAndSendMarketing(marketingTokens); } } inSwapAndLiquify = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } //------------------Swap------------------// function swapAndLiquify(uint256 tokens) private { uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( half, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; uniswapV2Router.addLiquidityETH{value: newBalance}( address(this), otherHalf, 0, // slippage is unavoidable 0, // slippage is unavoidable DEAD, block.timestamp ); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapAndSendMarketing(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; payable(marketingWallet).sendValue(newBalance); emit SwapAndSendMarketing(tokenAmount, newBalance); } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() { require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply"); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(newAmount); } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } //------------------TaxAndTransfer------------------// function _tokenTransfer(address sender, address recipient, uint256 amount) private { if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient] ) { removeAllFee(); }else if(recipient == uniswapV2Pair){ setSellFee(); }else if(sender == uniswapV2Pair){ setBuyFee(); }else{ 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]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _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, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _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, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _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, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function changeMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != marketingWallet, "Marketing wallet is already that address"); require(_marketingWallet!=address(0), "Marketing wallet is the zero address"); marketingWallet = _marketingWallet; emit MarketingWalletChanged(marketingWallet); } function setBuyFeePercentages(uint256 _taxFeeonBuy, uint256 _liquidityFeeonBuy, uint256 _marketingFeeonBuy) external onlyOwner { taxFeeonBuy = _taxFeeonBuy; liquidityFeeonBuy = _liquidityFeeonBuy; marketingFeeonBuy = _marketingFeeonBuy; totalBuyFees = _taxFeeonBuy + _liquidityFeeonBuy + _marketingFeeonBuy; require(totalBuyFees <= 8, "Buy fees cannot be greater than 25%"); emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, marketingFeeonBuy); } function setSellFeePercentages(uint256 _taxFeeonSell, uint256 _liquidityFeeonSell, uint256 _marketingFeeonSell) external onlyOwner { taxFeeonSell = _taxFeeonSell; liquidityFeeonSell = _liquidityFeeonSell; marketingFeeonSell = _marketingFeeonSell; totalSellFees = _taxFeeonSell + _liquidityFeeonSell + _marketingFeeonSell; require(totalSellFees <= 12, "Sell fees cannot be greater than 25%"); emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, marketingFeeonSell); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","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":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeonSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600a60809081526942616279416c69656e7360b01b60a0526007906200002b90826200075e565b5060408051808201909152600381526204241560ec1b60208201526008906200005590826200075e565b506009805460ff191660129081179091556200007390600a6200093f565b620000849064174876e80062000957565b600a819055620000979060001962000987565b620000a5906000196200099e565b600b55601980546001600160a01b03191661dead179055348015620000c957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000466038036200013257507310ed43c718714eb63d5aa57b78b54704e256024e6200018e565b4660610362000157575073d99d1c33f9fc3444f8101754abc46c52416550d16200018e565b4660011480620001675750466005145b15620001895750737a250d5630b4cf539739df2c5dacb4c659f2488d6200018e565b600080fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f89190620009b4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c9190620009b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e09190620009b4565b601b80546001600160a01b039283166001600160a01b031991821617909155601a805492841692909116821790556200031e9030906000196200057e565b6002600d8190556003600e819055600f829055601055600460118190556006601255906200034d9080620009df565b620003599190620009df565b601655601254601054600e54620003719190620009df565b6200037d9190620009df565b601755601880546001600160a01b0319167323a01037deeed9f2fd84400ae8a1d5f84a91ea16179055601b805460ff60a81b1916600160a81b179055600a54620003cb9061138890620009f5565b601c55600160046000620003e76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018549091168152600483528181208054851660019081179091553082528282208054861682179055600590935290812080548416831790557f7e99e1e5c40ec22aa71ab68cea1ae3bb6f232576acb26d0b4e86f2583f2d4e3c805484168317905561dead81527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168217909255600b5491620004be6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a5460026000620004f9620006aa60201b60201c565b6001600160a01b03168152602081019190915260400160002055620005266000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200056e91815260200190565b60405180910390a3505062000a0c565b6001600160a01b038316620005e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620005dd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006e457607f821691505b6020821081036200070557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075957600081815260208120601f850160051c81016020861015620007345750805b601f850160051c820191505b81811015620007555782815560010162000740565b5050505b505050565b81516001600160401b038111156200077a576200077a620006b9565b62000792816200078b8454620006cf565b846200070b565b602080601f831160018114620007ca5760008415620007b15750858301515b600019600386901b1c1916600185901b17855562000755565b600085815260208120601f198616915b82811015620007fb57888601518255948401946001909101908401620007da565b50858210156200081a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008815781600019048211156200086557620008656200082a565b808516156200087357918102915b93841c939080029062000845565b509250929050565b6000826200089a5750600162000939565b81620008a95750600062000939565b8160018114620008c25760028114620008cd57620008ed565b600191505062000939565b60ff841115620008e157620008e16200082a565b50506001821b62000939565b5060208310610133831016604e8410600b841016171562000912575081810a62000939565b6200091e838362000840565b80600019048211156200093557620009356200082a565b0290505b92915050565b60006200095060ff84168362000889565b9392505050565b80820281158282048414176200093957620009396200082a565b634e487b7160e01b600052601260045260246000fd5b60008262000999576200099962000971565b500690565b818103818111156200093957620009396200082a565b600060208284031215620009c757600080fd5b81516001600160a01b03811681146200095057600080fd5b808201808211156200093957620009396200082a565b60008262000a075762000a0762000971565b500490565b612d0a8062000a1c6000396000f3fe6080604052600436106102605760003560e01c80636bc87c3a11610144578063a9059cbb116100b6578063d6a694f51161007a578063d6a694f5146106fc578063dd62ed3e1461071c578063e01af92c14610762578063e2f4560514610782578063f2fde38b14610798578063f9d0831a146107b857600080fd5b8063a9059cbb14610667578063afa4f3b214610687578063b577554a146106a7578063bb85c6d1146106bc578063c0246668146106dc57600080fd5b806388f820201161010857806388f82020146105a55780638da5cb5b146105de57806390a3dd9b146105fc57806393a7781f1461061c57806395d89b4114610632578063a457c2d71461064757600080fd5b80636bc87c3a146105195780636ddd17131461052f57806370a0823114610550578063715018a61461057057806375f0a8741461058557600080fd5b806339509351116101dd5780634b93d059116101a15780634b93d0591461046857806352390c021461047e5780635342acb41461049e5780635a04e035146104d75780635f35bc5c146104ed57806365a8ee4f1461050357600080fd5b806339509351146103d25780633b124fe7146103f25780633bd5d173146104085780634549b0391461042857806349bd5a5e1461044857600080fd5b806322976e0d1161022457806322976e0d1461033857806323b872dd1461034e5780632d8381191461036e578063313ce5671461038e5780633685d419146103b057600080fd5b806306fdde031461026c578063095ea7b314610297578063142725fc146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107d8565b60405161028e91906128d0565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612933565b61086a565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60105481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b50600a546102dd565b34801561034457600080fd5b506102dd60155481565b34801561035a57600080fd5b506102b761036936600461295f565b610881565b34801561037a57600080fd5b506102dd6103893660046129a0565b6108d3565b34801561039a57600080fd5b5060095460405160ff909116815260200161028e565b3480156103bc57600080fd5b506103d06103cb3660046129b9565b61095c565b005b3480156103de57600080fd5b506102b76103ed366004612933565b610b12565b3480156103fe57600080fd5b506102dd60135481565b34801561041457600080fd5b506103d06104233660046129a0565b610b49565b34801561043457600080fd5b506102dd6104433660046129e4565b610c37565b34801561045457600080fd5b50601b5461030b906001600160a01b031681565b34801561047457600080fd5b506102dd600f5481565b34801561048a57600080fd5b506103d06104993660046129b9565b610cc6565b3480156104aa57600080fd5b506102b76104b93660046129b9565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104e357600080fd5b506102dd60115481565b3480156104f957600080fd5b506102dd600e5481565b34801561050f57600080fd5b506102dd60125481565b34801561052557600080fd5b506102dd60145481565b34801561053b57600080fd5b50601b546102b790600160a81b900460ff1681565b34801561055c57600080fd5b506102dd61056b3660046129b9565b610e19565b34801561057c57600080fd5b506103d0610e78565b34801561059157600080fd5b5060185461030b906001600160a01b031681565b3480156105b157600080fd5b506102b76105c03660046129b9565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105ea57600080fd5b506000546001600160a01b031661030b565b34801561060857600080fd5b506103d0610617366004612a14565b610eec565b34801561062857600080fd5b506102dd600d5481565b34801561063e57600080fd5b50610281610fea565b34801561065357600080fd5b506102b7610662366004612933565b610ff9565b34801561067357600080fd5b506102b7610682366004612933565b611030565b34801561069357600080fd5b506103d06106a23660046129a0565b61103d565b3480156106b357600080fd5b50600c546102dd565b3480156106c857600080fd5b506103d06106d73660046129b9565b61112e565b3480156106e857600080fd5b506103d06106f7366004612a40565b611277565b34801561070857600080fd5b506103d0610717366004612a14565b611383565b34801561072857600080fd5b506102dd610737366004612a6e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561076e57600080fd5b506103d061077d366004612a9c565b611478565b34801561078e57600080fd5b506102dd601c5481565b3480156107a457600080fd5b506103d06107b33660046129b9565b6114ef565b3480156107c457600080fd5b506103d06107d33660046129b9565b6115d9565b6060600780546107e790612ab9565b80601f016020809104026020016040519081016040528092919081815260200182805461081390612ab9565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b5050505050905090565b600061087733848461177d565b5060015b92915050565b600061088e8484846118a1565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546108c99186916108c4908690612b09565b61177d565b5060019392505050565b6000600b5482111561093f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610949611a8c565b90506109558184612b1c565b9392505050565b6000546001600160a01b031633146109865760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811660009081526005602052604090205460ff166109ee5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610936565b60005b600654811015610b0e57816001600160a01b031660068281548110610a1857610a18612b73565b6000918252602090912001546001600160a01b031603610afc5760068054610a4290600190612b09565b81548110610a5257610a52612b73565b600091825260209091200154600680546001600160a01b039092169183908110610a7e57610a7e612b73565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610ad657610ad6612b89565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b0681612b9f565b9150506109f1565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108779185906108c4908690612bb8565b3360008181526005602052604090205460ff1615610bbe5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610936565b6000610bc983611aaf565b505050506001600160a01b038516600090815260016020526040902054929350610bf7928492509050612b09565b6001600160a01b038316600090815260016020526040902055600b54610c1e908290612b09565b600b55600c54610c2f908490612bb8565b600c55505050565b6000600a54831115610c8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610936565b81610cab576000610c9b84611aaf565b5094965061087b95505050505050565b6000610cb684611aaf565b5093965061087b95505050505050565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811660009081526005602052604090205460ff1615610d595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610936565b6001600160a01b03811660009081526001602052604090205415610db3576001600160a01b038116600090815260016020526040902054610d99906108d3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e5657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461087b906108d3565b6000546001600160a01b03163314610ea25760405162461bcd60e51b815260040161093690612b3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f165760405162461bcd60e51b815260040161093690612b3e565b600d839055600f829055601181905580610f308385612bb8565b610f3a9190612bb8565b601681905560081015610f9b5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526232352560e81b6064820152608401610936565b600d54600f54601154604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b6060600880546107e790612ab9565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108779185906108c4908690612b09565b60006108773384846118a1565b6000546001600160a01b031633146110675760405162461bcd60e51b815260040161093690612b3e565b620186a0611074600a5490565b61107e9190612b1c565b81116110f25760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610936565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145906020015b60405180910390a150565b6000546001600160a01b031633146111585760405162461bcd60e51b815260040161093690612b3e565b6018546001600160a01b03908116908216036111c75760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610936565b6001600160a01b0381166112295760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610936565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001611123565b6000546001600160a01b031633146112a15760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036113245760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610936565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146113ad5760405162461bcd60e51b815260040161093690612b3e565b600e83905560108290556012819055806113c78385612bb8565b6113d19190612bb8565b6017819055600c10156114325760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632032352560e01b6064820152608401610936565b600e54601054601254604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001610fdd565b6000546001600160a01b031633146114a25760405162461bcd60e51b815260040161093690612b3e565b601b8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129061112390831515815260200190565b6000546001600160a01b031633146115195760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811661157e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610936565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116035760405162461bcd60e51b815260040161093690612b3e565b306001600160a01b0382160361165b5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610936565b6001600160a01b0381166116955760405133904780156108fc02916000818181858888f19350505050158015610b0e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190612bcb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190612be4565b5050505b50565b6001600160a01b0383166117df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610936565b6001600160a01b0382166118405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610936565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610936565b600081116119675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610936565b600061197230610e19565b601c54909150811080159081906119935750601b54600160a01b900460ff16155b80156119ac5750601b546001600160a01b038581169116145b80156119c15750601b54600160a81b900460ff165b15611a7a57601b805460ff60a01b1916600160a01b1790556012546011546000916119eb91612bb8565b90506000601054600f546119ff9190612bb8565b90506000611a0d8284612bb8565b90508015611a69578115611a3f57600081611a288488612c01565b611a329190612b1c565b9050611a3d81611b0a565b505b8215611a6957600081611a528588612c01565b611a5c9190612b1c565b9050611a6781611d58565b505b5050601b805460ff60a01b19169055505b611a85858585611eff565b5050505050565b6000806000611a996120e8565b9092509050611aa88183612b1c565b9250505090565b6000806000806000806000806000806000611ac98c61226b565b93509350935093506000806000611aea8f878787611ae5611a8c565b6122ca565b919f509d509b509599509397509195509350505050919395979092949650565b6000611b17600283612b1c565b90506000611b258284612b09565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611b5f57611b5f612b73565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdc9190612c18565b81600181518110611bef57611bef612b73565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611c35908790600090869030904290600401612c35565b600060405180830381600087803b158015611c4f57600080fd5b505af1158015611c63573d6000803e3d6000fd5b5050505060008247611c759190612b09565b601a5460195460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015611ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d0c9190612ca6565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110611d9157611d91612b73565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0e9190612c18565b81600181518110611e2157611e21612b73565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611e67908690600090869030904290600401612c35565b600060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b5050505060008247611ea79190612b09565b601854909150611ec0906001600160a01b03168261233c565b60408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff1680611f3e57506001600160a01b03821660009081526004602052604090205460ff165b15611f5057611f4b612455565b611f94565b601b546001600160a01b0390811690831603611f6e57611f4b612489565b601b546001600160a01b0390811690841603611f8c57611f4b6124c9565b611f94612455565b6001600160a01b03831660009081526005602052604090205460ff168015611fd557506001600160a01b03821660009081526005602052604090205460ff16155b15611fea57611fe5838383612509565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561202b57506001600160a01b03821660009081526005602052604090205460ff165b1561203b57611fe583838361264a565b6001600160a01b03831660009081526005602052604090205460ff1615801561207d57506001600160a01b03821660009081526005602052604090205460ff16155b1561208d57611fe5838383612704565b6001600160a01b03831660009081526005602052604090205460ff1680156120cd57506001600160a01b03821660009081526005602052604090205460ff165b156120dd57611fe5838383612757565b611fe5838383612704565b600b54600a546000918291825b60065481101561223a5782600160006006848154811061211757612117612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612182575081600260006006848154811061215b5761215b612b73565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561219857600b54600a54945094505050509091565b60016000600683815481106121af576121af612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121de9084612b09565b925060026000600683815481106121f7576121f7612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122269083612b09565b91508061223281612b9f565b9150506120f5565b50600a54600b5461224b9190612b1c565b82101561226257600b54600a549350935050509091565b90939092509050565b600080600080600061227c866127da565b90506000612289876127f6565b9050600061229688612808565b9050600081836122a6868c612b09565b6122b09190612b09565b6122ba9190612b09565b9993985091965094509092505050565b60008080806122d9858a612c01565b905060006122e7868a612c01565b905060006122f5878a612c01565b90506000612303888a612c01565b9050600081836123138688612b09565b61231d9190612b09565b6123279190612b09565b949d949c50929a509298505050505050505050565b8047101561238c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610936565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123d9576040519150601f19603f3d011682016040523d82523d6000602084013e6123de565b606091505b5050905080611fe55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610936565b6013541580156124655750601454155b80156124715750601554155b1561247857565b600060138190556015819055601455565b600e5460135414801561249f5750601054601454145b80156124ae5750601254601554145b156124b557565b600e54601355601254601555601054601455565b600d546013541480156124df5750600f54601454145b80156124ee5750601154601554145b156124f557565b600d54601355601154601555600f54601455565b600080600080600080600061251d88611aaf565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461255c9190612b09565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461258c908890612b09565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546125bc908790612bb8565b6001600160a01b038a166000908152600160205260409020556125de8161281a565b6125e78261281a565b6125f185846128aa565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161263691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061265e88611aaf565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461269d9190612b09565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546126d4908590612bb8565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546125bc908790612bb8565b600080600080600080600061271888611aaf565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461258c9190612b09565b600080600080600080600061276b88611aaf565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546127aa9190612b09565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461269d908890612b09565b60006064601354836127ec9190612c01565b61087b9190612b1c565b60006064601454836127ec9190612c01565b60006064601554836127ec9190612c01565b801561177a57600061282a611a8c565b905060006128388284612c01565b30600090815260016020526040902054909150612856908290612bb8565b3060009081526001602090815260408083209390935560059052205460ff1615611fe55730600090815260026020526040902054612895908490612bb8565b30600090815260026020526040902055505050565b81600b546128b89190612b09565b600b55600c546128c9908290612bb8565b600c555050565b600060208083528351808285015260005b818110156128fd578581018301518582016040015282016128e1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461177a57600080fd5b6000806040838503121561294657600080fd5b82356129518161291e565b946020939093013593505050565b60008060006060848603121561297457600080fd5b833561297f8161291e565b9250602084013561298f8161291e565b929592945050506040919091013590565b6000602082840312156129b257600080fd5b5035919050565b6000602082840312156129cb57600080fd5b81356109558161291e565b801515811461177a57600080fd5b600080604083850312156129f757600080fd5b823591506020830135612a09816129d6565b809150509250929050565b600080600060608486031215612a2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a5357600080fd5b8235612a5e8161291e565b91506020830135612a09816129d6565b60008060408385031215612a8157600080fd5b8235612a8c8161291e565b91506020830135612a098161291e565b600060208284031215612aae57600080fd5b8135610955816129d6565b600181811c90821680612acd57607f821691505b602082108103612aed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087b5761087b612af3565b600082612b3957634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612bb157612bb1612af3565b5060010190565b8082018082111561087b5761087b612af3565b600060208284031215612bdd57600080fd5b5051919050565b600060208284031215612bf657600080fd5b8151610955816129d6565b808202811582820484141761087b5761087b612af3565b600060208284031215612c2a57600080fd5b81516109558161291e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c855784516001600160a01b031683529383019391830191600101612c60565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cbb57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122048e3a8d97f0a29fc849fd306f4eb6a0db5573c4812b52f88b26d2f72925e56d964736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102605760003560e01c80636bc87c3a11610144578063a9059cbb116100b6578063d6a694f51161007a578063d6a694f5146106fc578063dd62ed3e1461071c578063e01af92c14610762578063e2f4560514610782578063f2fde38b14610798578063f9d0831a146107b857600080fd5b8063a9059cbb14610667578063afa4f3b214610687578063b577554a146106a7578063bb85c6d1146106bc578063c0246668146106dc57600080fd5b806388f820201161010857806388f82020146105a55780638da5cb5b146105de57806390a3dd9b146105fc57806393a7781f1461061c57806395d89b4114610632578063a457c2d71461064757600080fd5b80636bc87c3a146105195780636ddd17131461052f57806370a0823114610550578063715018a61461057057806375f0a8741461058557600080fd5b806339509351116101dd5780634b93d059116101a15780634b93d0591461046857806352390c021461047e5780635342acb41461049e5780635a04e035146104d75780635f35bc5c146104ed57806365a8ee4f1461050357600080fd5b806339509351146103d25780633b124fe7146103f25780633bd5d173146104085780634549b0391461042857806349bd5a5e1461044857600080fd5b806322976e0d1161022457806322976e0d1461033857806323b872dd1461034e5780632d8381191461036e578063313ce5671461038e5780633685d419146103b057600080fd5b806306fdde031461026c578063095ea7b314610297578063142725fc146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107d8565b60405161028e91906128d0565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612933565b61086a565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60105481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b50600a546102dd565b34801561034457600080fd5b506102dd60155481565b34801561035a57600080fd5b506102b761036936600461295f565b610881565b34801561037a57600080fd5b506102dd6103893660046129a0565b6108d3565b34801561039a57600080fd5b5060095460405160ff909116815260200161028e565b3480156103bc57600080fd5b506103d06103cb3660046129b9565b61095c565b005b3480156103de57600080fd5b506102b76103ed366004612933565b610b12565b3480156103fe57600080fd5b506102dd60135481565b34801561041457600080fd5b506103d06104233660046129a0565b610b49565b34801561043457600080fd5b506102dd6104433660046129e4565b610c37565b34801561045457600080fd5b50601b5461030b906001600160a01b031681565b34801561047457600080fd5b506102dd600f5481565b34801561048a57600080fd5b506103d06104993660046129b9565b610cc6565b3480156104aa57600080fd5b506102b76104b93660046129b9565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104e357600080fd5b506102dd60115481565b3480156104f957600080fd5b506102dd600e5481565b34801561050f57600080fd5b506102dd60125481565b34801561052557600080fd5b506102dd60145481565b34801561053b57600080fd5b50601b546102b790600160a81b900460ff1681565b34801561055c57600080fd5b506102dd61056b3660046129b9565b610e19565b34801561057c57600080fd5b506103d0610e78565b34801561059157600080fd5b5060185461030b906001600160a01b031681565b3480156105b157600080fd5b506102b76105c03660046129b9565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105ea57600080fd5b506000546001600160a01b031661030b565b34801561060857600080fd5b506103d0610617366004612a14565b610eec565b34801561062857600080fd5b506102dd600d5481565b34801561063e57600080fd5b50610281610fea565b34801561065357600080fd5b506102b7610662366004612933565b610ff9565b34801561067357600080fd5b506102b7610682366004612933565b611030565b34801561069357600080fd5b506103d06106a23660046129a0565b61103d565b3480156106b357600080fd5b50600c546102dd565b3480156106c857600080fd5b506103d06106d73660046129b9565b61112e565b3480156106e857600080fd5b506103d06106f7366004612a40565b611277565b34801561070857600080fd5b506103d0610717366004612a14565b611383565b34801561072857600080fd5b506102dd610737366004612a6e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561076e57600080fd5b506103d061077d366004612a9c565b611478565b34801561078e57600080fd5b506102dd601c5481565b3480156107a457600080fd5b506103d06107b33660046129b9565b6114ef565b3480156107c457600080fd5b506103d06107d33660046129b9565b6115d9565b6060600780546107e790612ab9565b80601f016020809104026020016040519081016040528092919081815260200182805461081390612ab9565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b5050505050905090565b600061087733848461177d565b5060015b92915050565b600061088e8484846118a1565b6001600160a01b0384166000908152600360209081526040808320338085529252909120546108c99186916108c4908690612b09565b61177d565b5060019392505050565b6000600b5482111561093f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610949611a8c565b90506109558184612b1c565b9392505050565b6000546001600160a01b031633146109865760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811660009081526005602052604090205460ff166109ee5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610936565b60005b600654811015610b0e57816001600160a01b031660068281548110610a1857610a18612b73565b6000918252602090912001546001600160a01b031603610afc5760068054610a4290600190612b09565b81548110610a5257610a52612b73565b600091825260209091200154600680546001600160a01b039092169183908110610a7e57610a7e612b73565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610ad657610ad6612b89565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b0681612b9f565b9150506109f1565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108779185906108c4908690612bb8565b3360008181526005602052604090205460ff1615610bbe5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610936565b6000610bc983611aaf565b505050506001600160a01b038516600090815260016020526040902054929350610bf7928492509050612b09565b6001600160a01b038316600090815260016020526040902055600b54610c1e908290612b09565b600b55600c54610c2f908490612bb8565b600c55505050565b6000600a54831115610c8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610936565b81610cab576000610c9b84611aaf565b5094965061087b95505050505050565b6000610cb684611aaf565b5093965061087b95505050505050565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811660009081526005602052604090205460ff1615610d595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610936565b6001600160a01b03811660009081526001602052604090205415610db3576001600160a01b038116600090815260016020526040902054610d99906108d3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610e5657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461087b906108d3565b6000546001600160a01b03163314610ea25760405162461bcd60e51b815260040161093690612b3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f165760405162461bcd60e51b815260040161093690612b3e565b600d839055600f829055601181905580610f308385612bb8565b610f3a9190612bb8565b601681905560081015610f9b5760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526232352560e81b6064820152608401610936565b600d54600f54601154604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b6060600880546107e790612ab9565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108779185906108c4908690612b09565b60006108773384846118a1565b6000546001600160a01b031633146110675760405162461bcd60e51b815260040161093690612b3e565b620186a0611074600a5490565b61107e9190612b1c565b81116110f25760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610936565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145906020015b60405180910390a150565b6000546001600160a01b031633146111585760405162461bcd60e51b815260040161093690612b3e565b6018546001600160a01b03908116908216036111c75760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610936565b6001600160a01b0381166112295760405162461bcd60e51b8152602060048201526024808201527f4d61726b6574696e672077616c6c657420697320746865207a65726f206164646044820152637265737360e01b6064820152608401610936565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001611123565b6000546001600160a01b031633146112a15760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036113245760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610936565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146113ad5760405162461bcd60e51b815260040161093690612b3e565b600e83905560108290556012819055806113c78385612bb8565b6113d19190612bb8565b6017819055600c10156114325760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632032352560e01b6064820152608401610936565b600e54601054601254604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa5790606001610fdd565b6000546001600160a01b031633146114a25760405162461bcd60e51b815260040161093690612b3e565b601b8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129061112390831515815260200190565b6000546001600160a01b031633146115195760405162461bcd60e51b815260040161093690612b3e565b6001600160a01b03811661157e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610936565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116035760405162461bcd60e51b815260040161093690612b3e565b306001600160a01b0382160361165b5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610936565b6001600160a01b0381166116955760405133904780156108fc02916000818181858888f19350505050158015610b0e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190612bcb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190612be4565b5050505b50565b6001600160a01b0383166117df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610936565b6001600160a01b0382166118405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610936565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610936565b600081116119675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610936565b600061197230610e19565b601c54909150811080159081906119935750601b54600160a01b900460ff16155b80156119ac5750601b546001600160a01b038581169116145b80156119c15750601b54600160a81b900460ff165b15611a7a57601b805460ff60a01b1916600160a01b1790556012546011546000916119eb91612bb8565b90506000601054600f546119ff9190612bb8565b90506000611a0d8284612bb8565b90508015611a69578115611a3f57600081611a288488612c01565b611a329190612b1c565b9050611a3d81611b0a565b505b8215611a6957600081611a528588612c01565b611a5c9190612b1c565b9050611a6781611d58565b505b5050601b805460ff60a01b19169055505b611a85858585611eff565b5050505050565b6000806000611a996120e8565b9092509050611aa88183612b1c565b9250505090565b6000806000806000806000806000806000611ac98c61226b565b93509350935093506000806000611aea8f878787611ae5611a8c565b6122ca565b919f509d509b509599509397509195509350505050919395979092949650565b6000611b17600283612b1c565b90506000611b258284612b09565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611b5f57611b5f612b73565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdc9190612c18565b81600181518110611bef57611bef612b73565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611c35908790600090869030904290600401612c35565b600060405180830381600087803b158015611c4f57600080fd5b505af1158015611c63573d6000803e3d6000fd5b5050505060008247611c759190612b09565b601a5460195460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015611ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d0c9190612ca6565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b604080516002808252606082018352479260009291906020830190803683370190505090503081600081518110611d9157611d91612b73565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0e9190612c18565b81600181518110611e2157611e21612b73565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611e67908690600090869030904290600401612c35565b600060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b5050505060008247611ea79190612b09565b601854909150611ec0906001600160a01b03168261233c565b60408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff1680611f3e57506001600160a01b03821660009081526004602052604090205460ff165b15611f5057611f4b612455565b611f94565b601b546001600160a01b0390811690831603611f6e57611f4b612489565b601b546001600160a01b0390811690841603611f8c57611f4b6124c9565b611f94612455565b6001600160a01b03831660009081526005602052604090205460ff168015611fd557506001600160a01b03821660009081526005602052604090205460ff16155b15611fea57611fe5838383612509565b505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561202b57506001600160a01b03821660009081526005602052604090205460ff165b1561203b57611fe583838361264a565b6001600160a01b03831660009081526005602052604090205460ff1615801561207d57506001600160a01b03821660009081526005602052604090205460ff16155b1561208d57611fe5838383612704565b6001600160a01b03831660009081526005602052604090205460ff1680156120cd57506001600160a01b03821660009081526005602052604090205460ff165b156120dd57611fe5838383612757565b611fe5838383612704565b600b54600a546000918291825b60065481101561223a5782600160006006848154811061211757612117612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612182575081600260006006848154811061215b5761215b612b73565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561219857600b54600a54945094505050509091565b60016000600683815481106121af576121af612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121de9084612b09565b925060026000600683815481106121f7576121f7612b73565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122269083612b09565b91508061223281612b9f565b9150506120f5565b50600a54600b5461224b9190612b1c565b82101561226257600b54600a549350935050509091565b90939092509050565b600080600080600061227c866127da565b90506000612289876127f6565b9050600061229688612808565b9050600081836122a6868c612b09565b6122b09190612b09565b6122ba9190612b09565b9993985091965094509092505050565b60008080806122d9858a612c01565b905060006122e7868a612c01565b905060006122f5878a612c01565b90506000612303888a612c01565b9050600081836123138688612b09565b61231d9190612b09565b6123279190612b09565b949d949c50929a509298505050505050505050565b8047101561238c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610936565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123d9576040519150601f19603f3d011682016040523d82523d6000602084013e6123de565b606091505b5050905080611fe55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610936565b6013541580156124655750601454155b80156124715750601554155b1561247857565b600060138190556015819055601455565b600e5460135414801561249f5750601054601454145b80156124ae5750601254601554145b156124b557565b600e54601355601254601555601054601455565b600d546013541480156124df5750600f54601454145b80156124ee5750601154601554145b156124f557565b600d54601355601154601555600f54601455565b600080600080600080600061251d88611aaf565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b031681526020019081526020016000205461255c9190612b09565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461258c908890612b09565b6001600160a01b03808c1660009081526001602052604080822093909355908b16815220546125bc908790612bb8565b6001600160a01b038a166000908152600160205260409020556125de8161281a565b6125e78261281a565b6125f185846128aa565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161263691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061265e88611aaf565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461269d9190612b09565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546126d4908590612bb8565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546125bc908790612bb8565b600080600080600080600061271888611aaf565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461258c9190612b09565b600080600080600080600061276b88611aaf565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546127aa9190612b09565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461269d908890612b09565b60006064601354836127ec9190612c01565b61087b9190612b1c565b60006064601454836127ec9190612c01565b60006064601554836127ec9190612c01565b801561177a57600061282a611a8c565b905060006128388284612c01565b30600090815260016020526040902054909150612856908290612bb8565b3060009081526001602090815260408083209390935560059052205460ff1615611fe55730600090815260026020526040902054612895908490612bb8565b30600090815260026020526040902055505050565b81600b546128b89190612b09565b600b55600c546128c9908290612bb8565b600c555050565b600060208083528351808285015260005b818110156128fd578581018301518582016040015282016128e1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461177a57600080fd5b6000806040838503121561294657600080fd5b82356129518161291e565b946020939093013593505050565b60008060006060848603121561297457600080fd5b833561297f8161291e565b9250602084013561298f8161291e565b929592945050506040919091013590565b6000602082840312156129b257600080fd5b5035919050565b6000602082840312156129cb57600080fd5b81356109558161291e565b801515811461177a57600080fd5b600080604083850312156129f757600080fd5b823591506020830135612a09816129d6565b809150509250929050565b600080600060608486031215612a2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a5357600080fd5b8235612a5e8161291e565b91506020830135612a09816129d6565b60008060408385031215612a8157600080fd5b8235612a8c8161291e565b91506020830135612a098161291e565b600060208284031215612aae57600080fd5b8135610955816129d6565b600181811c90821680612acd57607f821691505b602082108103612aed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087b5761087b612af3565b600082612b3957634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612bb157612bb1612af3565b5060010190565b8082018082111561087b5761087b612af3565b600060208284031215612bdd57600080fd5b5051919050565b600060208284031215612bf657600080fd5b8151610955816129d6565b808202811582820484141761087b5761087b612af3565b600060208284031215612c2a57600080fd5b81516109558161291e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c855784516001600160a01b031683529383019391830191600101612c60565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cbb57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122048e3a8d97f0a29fc849fd306f4eb6a0db5573c4812b52f88b26d2f72925e56d964736f6c63430008110033
Deployed Bytecode Sourcemap
15597:22158:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19448:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20360:161;;;;;;;;;;-1:-1:-1;20360:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20360:161:0;1023:187:1;16495:33:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;16495:33:0;1215:177:1;16893:42:0;;;;;;;;;;-1:-1:-1;16893:42:0;;;;-1:-1:-1;;;;;16893:42:0;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;16893:42:0;1397:230:1;19725:95:0;;;;;;;;;;-1:-1:-1;19805:7:0;;19725:95;;16682:28;;;;;;;;;;;;;;;;20529:266;;;;;;;;;;-1:-1:-1;20529:266:0;;;;;:::i;:::-;;:::i;22322:250::-;;;;;;;;;;-1:-1:-1;22322:250:0;;;;;:::i;:::-;;:::i;19634:83::-;;;;;;;;;;-1:-1:-1;19700:9:0;;19634:83;;19700:9;;;;2420:36:1;;2408:2;2393:18;19634:83:0;2278:184:1;22921:479:0;;;;;;;;;;-1:-1:-1;22921:479:0;;;;;:::i;:::-;;:::i;:::-;;20803:215;;;;;;;;;;-1:-1:-1;20803:215:0;;;;;:::i;:::-;;:::i;16618:22::-;;;;;;;;;;;;;;;;21499:369;;;;;;;;;;-1:-1:-1;21499:369:0;;;;;:::i;:::-;;:::i;21876:438::-;;;;;;;;;;-1:-1:-1;21876:438:0;;;;;:::i;:::-;;:::i;16942:29::-;;;;;;;;;;-1:-1:-1;16942:29:0;;;;-1:-1:-1;;;;;16942:29:0;;;16456:32;;;;;;;;;;;;;;;;22580:333;;;;;;;;;;-1:-1:-1;22580:333:0;;;;;:::i;:::-;;:::i;28253:124::-;;;;;;;;;;-1:-1:-1;28253:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;28341:28:0;28317:4;28341:28;;;:19;:28;;;;;;;;;28253:124;16537:32;;;;;;;;;;;;;;;;16420:27;;;;;;;;;;;;;;;;16576:33;;;;;;;;;;;;;;;;16647:28;;;;;;;;;;;;;;;;17016:23;;;;;;;;;;-1:-1:-1;17016:23:0;;;;-1:-1:-1;;;17016:23:0;;;;;;19828:198;;;;;;;;;;-1:-1:-1;19828:198:0;;;;;:::i;:::-;;:::i;3662:148::-;;;;;;;;;;;;;:::i;16776:30::-;;;;;;;;;;-1:-1:-1;16776:30:0;;;;-1:-1:-1;;;;;16776:30:0;;;21259:120;;;;;;;;;;-1:-1:-1;21259:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21351:20:0;21327:4;21351:20;;;:11;:20;;;;;;;;;21259:120;3448:79;;;;;;;;;;-1:-1:-1;3486:7:0;3513:6;-1:-1:-1;;;;;3513:6:0;3448:79;;36709:507;;;;;;;;;;-1:-1:-1;36709:507:0;;;;;:::i;:::-;;:::i;16387:26::-;;;;;;;;;;;;;;;;19539:87;;;;;;;;;;;;;:::i;21026:225::-;;;;;;;;;;-1:-1:-1;21026:225:0;;;;;:::i;:::-;;:::i;20034:167::-;;;;;;;;;;-1:-1:-1;20034:167:0;;;;;:::i;:::-;;:::i;31951:289::-;;;;;;;;;;-1:-1:-1;31951:289:0;;;;;:::i;:::-;;:::i;21387:104::-;;;;;;;;;;-1:-1:-1;21473:10:0;;21387:104;;36330:371;;;;;;;;;;-1:-1:-1;36330:371:0;;;;;:::i;:::-;;:::i;36026:292::-;;;;;;;;;;-1:-1:-1;36026:292:0;;;;;:::i;:::-;;:::i;37224:528::-;;;;;;;;;;-1:-1:-1;37224:528:0;;;;;:::i;:::-;;:::i;20209:143::-;;;;;;;;;;-1:-1:-1;20209:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20317:18:0;;;20290:7;20317:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20209:143;32252;;;;;;;;;;-1:-1:-1;32252:143:0;;;;;:::i;:::-;;:::i;17046:33::-;;;;;;;;;;;;;;;;3818:244;;;;;;;;;;-1:-1:-1;3818:244:0;;;;;:::i;:::-;;:::i;23445:441::-;;;;;;;;;;-1:-1:-1;23445:441:0;;;;;:::i;:::-;;:::i;19448:83::-;19485:13;19518:5;19511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19448:83;:::o;20360:161::-;20435:4;20452:39;2852:10;20475:7;20484:6;20452:8;:39::i;:::-;-1:-1:-1;20509:4:0;20360:161;;;;;:::o;20529:266::-;20627:4;20644:36;20654:6;20662:9;20673:6;20644:9;:36::i;:::-;-1:-1:-1;;;;;20722:19:0;;;;;;:11;:19;;;;;;;;2852:10;20722:33;;;;;;;;;20691:74;;20700:6;;20722:42;;20758:6;;20722:42;:::i;:::-;20691:8;:74::i;:::-;-1:-1:-1;20783:4:0;20529:266;;;;;:::o;22322:250::-;22388:7;22427;;22416;:18;;22408:73;;;;-1:-1:-1;;;22408:73:0;;5563:2:1;22408:73:0;;;5545:21:1;5602:2;5582:18;;;5575:30;5641:34;5621:18;;;5614:62;-1:-1:-1;;;5692:18:1;;;5685:40;5742:19;;22408:73:0;;;;;;;;;22492:19;22515:10;:8;:10::i;:::-;22492:33;-1:-1:-1;22543:21:0;22492:33;22543:7;:21;:::i;:::-;22536:28;22322:250;-1:-1:-1;;;22322:250:0:o;22921:479::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23003:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22995:60;;;::::0;-1:-1:-1;;;22995:60:0;;6557:2:1;22995:60:0::1;::::0;::::1;6539:21:1::0;6596:2;6576:18;;;6569:30;6635:29;6615:18;;;6608:57;6682:18;;22995:60:0::1;6355:351:1::0;22995:60:0::1;23071:9;23066:327;23090:9;:16:::0;23086:20;::::1;23066:327;;;23148:7;-1:-1:-1::0;;;;;23132:23:0::1;:9;23142:1;23132:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23132:12:0::1;:23:::0;23128:254:::1;;23191:9;23201:16:::0;;:20:::1;::::0;23220:1:::1;::::0;23201:20:::1;:::i;:::-;23191:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23176:9:::1;:12:::0;;-1:-1:-1;;;;;23191:31:0;;::::1;::::0;23186:1;;23176:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23176:46:0::1;-1:-1:-1::0;;;;;23176:46:0;;::::1;;::::0;;23241:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23280:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23280:28:0::1;::::0;;23327:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23327:15:0;;;;;-1:-1:-1;;;;;;23327:15:0::1;::::0;;;;;23066:327:::1;22921:479:::0;:::o;23128:254::-:1;23108:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23066:327;;;;22921:479:::0;:::o;20803:215::-;2852:10;20891:4;20940:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20940:34:0;;;;;;;;;;20891:4;;20908:80;;20931:7;;20940:47;;20977:10;;20940:47;:::i;21499:369::-;2852:10;21551:14;21600:19;;;:11;:19;;;;;;;;21599:20;21591:77;;;;-1:-1:-1;;;21591:77:0;;7447:2:1;21591:77:0;;;7429:21:1;7486:2;7466:18;;;7459:30;7525:34;7505:18;;;7498:62;-1:-1:-1;;;7576:18:1;;;7569:42;7628:19;;21591:77:0;7245:408:1;21591:77:0;21680:15;21705:19;21716:7;21705:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21753:15:0;;;;;;:7;:15;;;;;;21679:45;;-1:-1:-1;21753:25:0;;21679:45;;-1:-1:-1;21753:15:0;-1:-1:-1;21753:25:0;:::i;:::-;-1:-1:-1;;;;;21735:15:0;;;;;;:7;:15;;;;;:43;21799:7;;:17;;21809:7;;21799:17;:::i;:::-;21789:7;:27;21840:10;;:20;;21853:7;;21840:20;:::i;:::-;21827:10;:33;-1:-1:-1;;;21499:369:0:o;21876:438::-;21966:7;22005;;21994;:18;;21986:62;;;;-1:-1:-1;;;21986:62:0;;7860:2:1;21986:62:0;;;7842:21:1;7899:2;7879:18;;;7872:30;7938:33;7918:18;;;7911:61;7989:18;;21986:62:0;7658:355:1;21986:62:0;22064:17;22059:248;;22099:15;22124:19;22135:7;22124:10;:19::i;:::-;-1:-1:-1;22098:45:0;;-1:-1:-1;22158:14:0;;-1:-1:-1;;;;;;22158:14:0;22059:248;22207:23;22239:19;22250:7;22239:10;:19::i;:::-;-1:-1:-1;22205:53:0;;-1:-1:-1;22273:22:0;;-1:-1:-1;;;;;;22273:22:0;22580:333;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22663:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22662:21;22654:61;;;::::0;-1:-1:-1;;;22654:61:0;;8220:2:1;22654:61:0::1;::::0;::::1;8202:21:1::0;8259:2;8239:18;;;8232:30;8298:29;8278:18;;;8271:57;8345:18;;22654:61:0::1;8018:351:1::0;22654:61:0::1;-1:-1:-1::0;;;;;22729:16:0;::::1;22748:1;22729:16:::0;;;:7:::1;:16;::::0;;;;;:20;22726:108:::1;;-1:-1:-1::0;;;;;22805:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22785:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22766:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22726:108:::1;-1:-1:-1::0;;;;;22844:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22844:27:0::1;22867:4;22844:27:::0;;::::1;::::0;;;22882:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22882:23:0::1;::::0;;::::1;::::0;;22580:333::o;19828:198::-;-1:-1:-1;;;;;19918:20:0;;19894:7;19918:20;;;:11;:20;;;;;;;;19914:49;;;-1:-1:-1;;;;;;19947:16:0;;;;;:7;:16;;;;;;;19828:198::o;19914:49::-;-1:-1:-1;;;;;20001:16:0;;;;;;:7;:16;;;;;;19981:37;;:19;:37::i;3662:148::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;3769:1:::1;3753:6:::0;;3732:40:::1;::::0;-1:-1:-1;;;;;3753:6:0;;::::1;::::0;3732:40:::1;::::0;3769:1;;3732:40:::1;3800:1;3783:19:::0;;-1:-1:-1;;;;;;3783:19:0::1;::::0;;3662:148::o;36709:507::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;36847:11:::1;:26:::0;;;36884:17:::1;:38:::0;;;36933:17:::1;:38:::0;;;36953:18;36997:33:::1;36904:18:::0;36861:12;36997:33:::1;:::i;:::-;:54;;;;:::i;:::-;36982:12;:69:::0;;;37086:1:::1;-1:-1:-1::0;37070:17:0::1;37062:65;;;::::0;-1:-1:-1;;;37062:65:0;;8576:2:1;37062:65:0::1;::::0;::::1;8558:21:1::0;8615:2;8595:18;;;8588:30;8654:34;8634:18;;;8627:62;-1:-1:-1;;;8705:18:1;;;8698:33;8748:19;;37062:65:0::1;8374:399:1::0;37062:65:0::1;37158:11;::::0;37171:17:::1;::::0;37190::::1;::::0;37143:65:::1;::::0;;8980:25:1;;;9036:2;9021:18;;9014:34;;;;9064:18;;;9057:34;37143:65:0::1;::::0;8968:2:1;8953:18;37143:65:0::1;;;;;;;;36709:507:::0;;;:::o;19539:87::-;19578:13;19611:7;19604:14;;;;;:::i;21026:225::-;2852:10;21119:4;21168:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21168:34:0;;;;;;;;;;21119:4;;21136:85;;21159:7;;21168:52;;21205:15;;21168:52;:::i;20034:167::-;20112:4;20129:42;2852:10;20153:9;20164:6;20129:9;:42::i;31951:289::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;32069:3:::1;32053:13;19805:7:::0;;;19725:95;32053:13:::1;:19;;;;:::i;:::-;32041:9;:31;32033:106;;;::::0;-1:-1:-1;;;32033:106:0;;9304:2:1;32033:106:0::1;::::0;::::1;9286:21:1::0;9343:2;9323:18;;;9316:30;9382:34;9362:18;;;9355:62;9453:32;9433:18;;;9426:60;9503:19;;32033:106:0::1;9102:426:1::0;32033:106:0::1;32150:18;:30:::0;;;32196:36:::1;::::0;1361:25:1;;;32196:36:0::1;::::0;1349:2:1;1334:18;32196:36:0::1;;;;;;;;31951:289:::0;:::o;36330:371::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;36445:15:::1;::::0;-1:-1:-1;;;;;36445:15:0;;::::1;36425:35:::0;;::::1;::::0;36417:88:::1;;;::::0;-1:-1:-1;;;36417:88:0;;9735:2:1;36417:88:0::1;::::0;::::1;9717:21:1::0;9774:2;9754:18;;;9747:30;9813:34;9793:18;;;9786:62;-1:-1:-1;;;9864:18:1;;;9857:38;9912:19;;36417:88:0::1;9533:404:1::0;36417:88:0::1;-1:-1:-1::0;;;;;36524:28:0;::::1;36516:77;;;::::0;-1:-1:-1;;;36516:77:0;;10144:2:1;36516:77:0::1;::::0;::::1;10126:21:1::0;10183:2;10163:18;;;10156:30;10222:34;10202:18;;;10195:62;-1:-1:-1;;;10273:18:1;;;10266:34;10317:19;;36516:77:0::1;9942:400:1::0;36516:77:0::1;36604:15;:34:::0;;-1:-1:-1;;;;;;36604:34:0::1;-1:-1:-1::0;;;;;36604:34:0;::::1;::::0;;::::1;::::0;;;36654:39:::1;::::0;1570:51:1;;;36654:39:0::1;::::0;1558:2:1;1543:18;36654:39:0::1;1397:230:1::0;36026:292:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36121:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;36113:95:::1;;;::::0;-1:-1:-1;;;36113:95:0;;10549:2:1;36113:95:0::1;::::0;::::1;10531:21:1::0;10588:2;10568:18;;;10561:30;10627:34;10607:18;;;10600:62;-1:-1:-1;;;10678:18:1;;;10671:40;10728:19;;36113:95:0::1;10347:406:1::0;36113:95:0::1;-1:-1:-1::0;;;;;36219:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36219:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36276:34;;1163:41:1;;;36276:34:0::1;::::0;1136:18:1;36276:34:0::1;;;;;;;36026:292:::0;;:::o;37224:528::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;37366:12:::1;:28:::0;;;37405:18:::1;:40:::0;;;37456:18:::1;:40:::0;;;37477:19;37523:35:::1;37426:19:::0;37381:13;37523:35:::1;:::i;:::-;:57;;;;:::i;:::-;37507:13;:73:::0;;;37616:2:::1;-1:-1:-1::0;37599:19:0::1;37591:68;;;::::0;-1:-1:-1;;;37591:68:0;;10960:2:1;37591:68:0::1;::::0;::::1;10942:21:1::0;10999:2;10979:18;;;10972:30;11038:34;11018:18;;;11011:62;-1:-1:-1;;;11089:18:1;;;11082:34;11133:19;;37591:68:0::1;10758:400:1::0;37591:68:0::1;37691:12;::::0;37705:18:::1;::::0;37725::::1;::::0;37675:69:::1;::::0;;8980:25:1;;;9036:2;9021:18;;9014:34;;;;9064:18;;;9057:34;37675:69:0::1;::::0;8968:2:1;8953:18;37675:69:0::1;8778:319:1::0;32252:143:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;32321:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32321:22:0::1;-1:-1:-1::0;;;;32321:22:0;;::::1;;::::0;;32359:28:::1;::::0;::::1;::::0;::::1;::::0;32335:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;3818:244:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3907:22:0;::::1;3899:73;;;::::0;-1:-1:-1;;;3899:73:0;;11365:2:1;3899:73:0::1;::::0;::::1;11347:21:1::0;11404:2;11384:18;;;11377:30;11443:34;11423:18;;;11416:62;-1:-1:-1;;;11494:18:1;;;11487:36;11540:19;;3899:73:0::1;11163:402:1::0;3899:73:0::1;4009:6;::::0;;3988:38:::1;::::0;-1:-1:-1;;;;;3988:38:0;;::::1;::::0;4009:6;::::1;::::0;3988:38:::1;::::0;::::1;4037:6;:17:::0;;-1:-1:-1;;;;;;4037:17:0::1;-1:-1:-1::0;;;;;4037:17:0;;;::::1;::::0;;;::::1;::::0;;3818:244::o;23445:441::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;23541:4:::1;-1:-1:-1::0;;;;;23524:22:0;::::1;::::0;23516:67:::1;;;::::0;-1:-1:-1;;;23516:67:0;;11772:2:1;23516:67:0::1;::::0;::::1;11754:21:1::0;;;11791:18;;;11784:30;11850:34;11830:18;;;11823:62;11902:18;;23516:67:0::1;11570:356:1::0;23516:67:0::1;-1:-1:-1::0;;;;;23598:21:0;::::1;23594:126;;23636:51;::::0;23644:10:::1;::::0;23665:21:::1;23636:51:::0;::::1;;;::::0;::::1;::::0;;;23665:21;23644:10;23636:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;23594:126;23792:35;::::0;-1:-1:-1;;;23792:35:0;;23821:4:::1;23792:35;::::0;::::1;1570:51:1::0;23757:5:0;;23730:17:::1;::::0;-1:-1:-1;;;;;23792:20:0;::::1;::::0;::::1;::::0;1543:18:1;;23792:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23838:40;::::0;-1:-1:-1;;;23838:40:0;;23858:10:::1;23838:40;::::0;::::1;12294:51:1::0;12361:18;;;12354:34;;;23774:53:0;;-1:-1:-1;;;;;;23838:19:0;::::1;::::0;::::1;::::0;12267:18:1;;23838:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23505:381;;3645:1;23445:441:::0;:::o;28385:337::-;-1:-1:-1;;;;;28478:19:0;;28470:68;;;;-1:-1:-1;;;28470:68:0;;12851:2:1;28470:68:0;;;12833:21:1;12890:2;12870:18;;;12863:30;12929:34;12909:18;;;12902:62;-1:-1:-1;;;12980:18:1;;;12973:34;13024:19;;28470:68:0;12649:400:1;28470:68:0;-1:-1:-1;;;;;28557:21:0;;28549:68;;;;-1:-1:-1;;;28549:68:0;;13256:2:1;28549:68:0;;;13238:21:1;13295:2;13275:18;;;13268:30;13334:34;13314:18;;;13307:62;-1:-1:-1;;;13385:18:1;;;13378:32;13427:19;;28549:68:0;13054:398:1;28549:68:0;-1:-1:-1;;;;;28630:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28682:32;;1361:25:1;;;28682:32:0;;1334:18:1;28682:32:0;;;;;;;28385:337;;;:::o;28732:1529::-;-1:-1:-1;;;;;28854:18:0;;28846:68;;;;-1:-1:-1;;;28846:68:0;;13659:2:1;28846:68:0;;;13641:21:1;13698:2;13678:18;;;13671:30;13737:34;13717:18;;;13710:62;-1:-1:-1;;;13788:18:1;;;13781:35;13833:19;;28846:68:0;13457:401:1;28846:68:0;28942:1;28933:6;:10;28925:64;;;;-1:-1:-1;;;28925:64:0;;14065:2:1;28925:64:0;;;14047:21:1;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;-1:-1:-1;;;14194:18:1;;;14187:39;14243:19;;28925:64:0;13863:405:1;28925:64:0;29002:28;29033:24;29051:4;29033:9;:24::i;:::-;29127:18;;29002:55;;-1:-1:-1;29103:42:0;;;;;;;29176:53;;-1:-1:-1;29213:16:0;;-1:-1:-1;;;29213:16:0;;;;29212:17;29176:53;:89;;;;-1:-1:-1;29252:13:0;;-1:-1:-1;;;;;29246:19:0;;;29252:13;;29246:19;29176:89;:117;;;;-1:-1:-1;29282:11:0;;-1:-1:-1;;;29282:11:0;;;;29176:117;29158:979;;;29320:16;:23;;-1:-1:-1;;;;29320:23:0;-1:-1:-1;;;29320:23:0;;;29417:18;;29397:17;;29320:23;;29397:38;;;:::i;:::-;29372:63;;29450:22;29495:18;;29475:17;;:38;;;;:::i;:::-;29450:63;-1:-1:-1;29528:18:0;29549:31;29450:63;29549:14;:31;:::i;:::-;29528:52;-1:-1:-1;29598:14:0;;29595:492;;29636:18;;29633:198;;29679:23;29747:10;29706:37;29729:14;29706:20;:37;:::i;:::-;29705:52;;;;:::i;:::-;29679:78;;29780:31;29795:15;29780:14;:31::i;:::-;29656:175;29633:198;29870:18;;29867:204;;29913:23;29981:10;29940:37;29963:14;29940:20;:37;:::i;:::-;29939:52;;;;:::i;:::-;29913:78;;30014:37;30035:15;30014:20;:37::i;:::-;29890:181;29867:204;-1:-1:-1;;30101:16:0;:24;;-1:-1:-1;;;;30101:24:0;;;-1:-1:-1;29158:979:0;30223:30;30238:4;30243:2;30246:6;30223:14;:30::i;:::-;28835:1426;;28732:1529;;;:::o;25462:160::-;25503:7;25524:15;25541;25560:19;:17;:19::i;:::-;25523:56;;-1:-1:-1;25523:56:0;-1:-1:-1;25597:17:0;25523:56;;25597:17;:::i;:::-;25590:24;;;;25462:160;:::o;24043:472::-;24102:7;24111;24120;24129;24138;24147;24156;24177:23;24202:12;24216:18;24236;24258:20;24270:7;24258:11;:20::i;:::-;24176:102;;;;;;;;24290:15;24307:23;24332:12;24348:62;24360:7;24369:4;24375:10;24387;24399;:8;:10::i;:::-;24348:11;:62::i;:::-;24289:121;;-1:-1:-1;24289:121:0;-1:-1:-1;24289:121:0;-1:-1:-1;24461:15:0;;-1:-1:-1;24478:4:0;;-1:-1:-1;24484:10:0;;-1:-1:-1;24496:10:0;-1:-1:-1;;;;24043:472:0;;;;;;;;;:::o;30313:947::-;30372:12;30387:10;30396:1;30387:6;:10;:::i;:::-;30372:25;-1:-1:-1;30408:17:0;30428:13;30372:25;30428:6;:13;:::i;:::-;30537:16;;;30551:1;30537:16;;;;;;;;30408:33;;-1:-1:-1;30479:21:0;;30454:22;;30537:16;;;;;;;;;;-1:-1:-1;30537:16:0;30513:40;;30582:4;30564;30569:1;30564:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30564:23:0;;;:7;;;;;;;;;;:23;;;;30608:15;;:22;;;-1:-1:-1;;;30608:22:0;;;;:15;;;;;:20;;:22;;;;;30564:7;;30608:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30598:4;30603:1;30598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30598:32:0;;;:7;;;;;;;;;:32;30643:15;;:207;;-1:-1:-1;;;30643:207:0;;:15;;;:66;;:207;;30724:4;;30643:15;;30787:4;;30814;;30834:15;;30643:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30871:18;30916:14;30892:21;:38;;;;:::i;:::-;30943:15;;31146:4;;30943:248;;-1:-1:-1;;;30943:248:0;;31016:4;30943:248;;;16160:34:1;16210:18;;;16203:34;;;30943:15:0;16253:18:1;;;16246:34;;;16296:18;;;16289:34;-1:-1:-1;;;;;31146:4:0;;;16339:19:1;;;16332:44;31165:15:0;16392:19:1;;;16385:35;30871:59:0;;-1:-1:-1;30943:15:0;;:31;;30871:59;;16094:19:1;;30943:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;31209:43:0;;;8980:25:1;;;9036:2;9021:18;;9014:34;;;9064:18;;;9057:34;;;31209:43:0;;-1:-1:-1;8968:2:1;8953:18;31209:43:0;;;;;;;30361:899;;;;;30313:947;:::o;31268:675::-;31421:16;;;31435:1;31421:16;;;;;;;;31363:21;;31338:22;;31421:16;31435:1;31421:16;;;;;;;;;;-1:-1:-1;31421:16:0;31397:40;;31466:4;31448;31453:1;31448:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31448:23:0;;;:7;;;;;;;;;;:23;;;;31492:15;;:22;;;-1:-1:-1;;;31492:22:0;;;;:15;;;;;:20;;:22;;;;;31448:7;;31492:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31482:4;31487:1;31482:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31482:32:0;;;:7;;;;;;;;;:32;31527:15;;:214;;-1:-1:-1;;;31527:214:0;;:15;;;:66;;:214;;31608:11;;31527:15;;31678:4;;31705;;31725:15;;31527:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31754:18;31799:14;31775:21;:38;;;;:::i;:::-;31834:15;;31754:59;;-1:-1:-1;31826:46:0;;-1:-1:-1;;;;;31834:15:0;31754:59;31826:34;:46::i;:::-;31890:45;;;16916:25:1;;;16972:2;16957:18;;16950:34;;;31890:45:0;;16889:18:1;31890:45:0;;;;;;;31327:616;;;31268:675;:::o;32459:1039::-;-1:-1:-1;;;;;32558:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;32603:30:0;;;;;;:19;:30;;;;;;;;32558:75;32554:326;;;32665:14;:12;:14::i;:::-;32554:326;;;32712:13;;-1:-1:-1;;;;;32712:13:0;;;32699:26;;;;32696:184;;32741:12;:10;:12::i;32696:184::-;32783:13;;-1:-1:-1;;;;;32783:13:0;;;32773:23;;;;32770:110;;32812:11;:9;:11::i;32770:110::-;32854:14;:12;:14::i;:::-;-1:-1:-1;;;;;32896:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32920:22:0;;;;;;:11;:22;;;;;;;;32919:23;32896:46;32892:597;;;32959:48;32981:6;32989:9;33000:6;32959:21;:48::i;:::-;32459:1039;;;:::o;32892:597::-;-1:-1:-1;;;;;33030:19:0;;;;;;:11;:19;;;;;;;;33029:20;:46;;;;-1:-1:-1;;;;;;33053:22:0;;;;;;:11;:22;;;;;;;;33029:46;33025:464;;;33092:46;33112:6;33120:9;33131:6;33092:19;:46::i;33025:464::-;-1:-1:-1;;;;;33161:19:0;;;;;;:11;:19;;;;;;;;33160:20;:47;;;;-1:-1:-1;;;;;;33185:22:0;;;;;;:11;:22;;;;;;;;33184:23;33160:47;33156:333;;;33224:44;33242:6;33250:9;33261:6;33224:17;:44::i;33156:333::-;-1:-1:-1;;;;;33290:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33313:22:0;;;;;;:11;:22;;;;;;;;33290:45;33286:203;;;33352:48;33374:6;33382:9;33393:6;33352:21;:48::i;33286:203::-;33433:44;33451:6;33459:9;33470:6;33433:17;:44::i;25630:552::-;25727:7;;25763;;25680;;;;;25787:283;25811:9;:16;25807:20;;25787:283;;;25877:7;25853;:21;25861:9;25871:1;25861:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25861:12:0;25853:21;;;;;;;;;;;;;:31;;:66;;;25912:7;25888;:21;25896:9;25906:1;25896:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25896:12:0;25888:21;;;;;;;;;;;;;:31;25853:66;25849:97;;;25929:7;;25938;;25921:25;;;;;;;25630:552;;:::o;25849:97::-;25981:7;:21;25989:9;25999:1;25989:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25989:12:0;25981:21;;;;;;;;;;;;;25971:31;;:7;:31;:::i;:::-;25961:41;;26037:7;:21;26045:9;26055:1;26045:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26045:12:0;26037:21;;;;;;;;;;;;;26027:31;;:7;:31;:::i;:::-;26017:41;-1:-1:-1;25829:3:0;;;;:::i;:::-;;;;25787:283;;;;26104:7;;26094;;:17;;;;:::i;:::-;26084:7;:27;26080:58;;;26121:7;;26130;;26113:25;;;;;;25630:552;;:::o;26080:58::-;26157:7;;26166;;-1:-1:-1;25630:552:0;-1:-1:-1;25630:552:0:o;24523:420::-;24583:7;24592;24601;24610;24630:12;24645:24;24661:7;24645:15;:24::i;:::-;24630:39;;24680:18;24701:30;24723:7;24701:21;:30::i;:::-;24680:51;;24742:18;24763:30;24785:7;24763:21;:30::i;:::-;24742:51;-1:-1:-1;24804:23:0;24742:51;24847:10;24830:14;24840:4;24830:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24804:66;24906:4;;-1:-1:-1;24912:10:0;;-1:-1:-1;24912:10:0;-1:-1:-1;24523:420:0;;-1:-1:-1;;;24523:420:0:o;24951:503::-;25086:7;;;;25142:21;25152:11;25142:7;:21;:::i;:::-;25124:39;-1:-1:-1;25174:12:0;25189:18;25196:11;25189:4;:18;:::i;:::-;25174:33;-1:-1:-1;25218:18:0;25239:24;25252:11;25239:10;:24;:::i;:::-;25218:45;-1:-1:-1;25274:18:0;25295:24;25308:11;25295:10;:24;:::i;:::-;25274:45;-1:-1:-1;25330:23:0;25274:45;25373:10;25356:14;25366:4;25356:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;25415:7;;;;-1:-1:-1;25441:4:0;;-1:-1:-1;24951:503:0;;-1:-1:-1;;;;;;;;;24951:503:0:o;5435:397::-;5550:6;5525:21;:31;;5517:73;;;;-1:-1:-1;;;5517:73:0;;17197:2:1;5517:73:0;;;17179:21:1;17236:2;17216:18;;;17209:30;17275:31;17255:18;;;17248:59;17324:18;;5517:73:0;16995:353:1;5517:73:0;5682:12;5700:9;-1:-1:-1;;;;;5700:14:0;5723:6;5700:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5681:54;;;5754:7;5746:78;;;;-1:-1:-1;;;5746:78:0;;17765:2:1;5746:78:0;;;17747:21:1;17804:2;17784:18;;;17777:30;17843:34;17823:18;;;17816:62;17914:28;17894:18;;;17887:56;17960:19;;5746:78:0;17563:422:1;27452:206:0;27498:7;;:12;:34;;;;-1:-1:-1;27514:13:0;;:18;27498:34;:56;;;;-1:-1:-1;27536:13:0;;:18;27498:56;27495:68;;;27452:206::o;27495:68::-;27593:1;27583:7;:11;;;27605:13;:17;;;27633:13;:17;27452:206::o;27956:285::-;28010:12;;27999:7;;:23;:62;;;;;28043:18;;28026:13;;:35;27999:62;:101;;;;;28082:18;;28065:13;;:35;27999:101;27996:113;;;27956:285::o;27996:113::-;28131:12;;28121:7;:22;28170:18;;28154:13;:34;28215:18;;28199:13;:34;27956:285::o;27670:278::-;27723:11;;27712:7;;:22;:60;;;;;27755:17;;27738:13;;:34;27712:60;:98;;;;;27793:17;;27776:13;;:34;27712:98;27709:110;;;27670:278::o;27709:110::-;27841:11;;27831:7;:21;27879:17;;27863:13;:33;27923:17;;27907:13;:33;27670:278::o;34709:614::-;34812:15;34829:23;34854:12;34868:23;34893:12;34907:18;34927;34949:19;34960:7;34949:10;:19::i;:::-;34811:157;;;;;;;;;;;;;;35015:7;34997;:15;35005:6;-1:-1:-1;;;;;34997:15:0;-1:-1:-1;;;;;34997:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34979:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35051:7;:15;;;;:25;;35069:7;;35051:25;:::i;:::-;-1:-1:-1;;;;;35033:15:0;;;;;;;:7;:15;;;;;;:43;;;;35108:18;;;;;;;:36;;35129:15;;35108:36;:::i;:::-;-1:-1:-1;;;;;35087:18:0;;;;;;:7;:18;;;;;:57;35156:26;35171:10;35156:14;:26::i;:::-;35195;35210:10;35195:14;:26::i;:::-;35232:23;35244:4;35250;35232:11;:23::i;:::-;35288:9;-1:-1:-1;;;;;35271:44:0;35280:6;-1:-1:-1;;;;;35271:44:0;;35299:15;35271:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;35271:44:0;;;;;;;;34800:523;;;;;;;34709:614;;;:::o;34067:634::-;34168:15;34185:23;34210:12;34224:23;34249:12;34263:18;34283;34305:19;34316:7;34305:10;:19::i;:::-;34167:157;;;;;;;;;;;;;;34371:7;34353;:15;34361:6;-1:-1:-1;;;;;34353:15:0;-1:-1:-1;;;;;34353:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34335:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;34410:18;;;;;:7;:18;;;;;:36;;34431:15;;34410:36;:::i;:::-;-1:-1:-1;;;;;34389:18:0;;;;;;:7;:18;;;;;;;;:57;;;;34478:7;:18;;;;:36;;34499:15;;34478:36;:::i;33506:553::-;33605:15;33622:23;33647:12;33661:23;33686:12;33700:18;33720;33742:19;33753:7;33742:10;:19::i;:::-;33604:157;;;;;;;;;;;;;;33808:7;33790;:15;33798:6;-1:-1:-1;;;;;33790:15:0;-1:-1:-1;;;;;33790:15:0;;;;;;;;;;;;;:25;;;;:::i;35331:687::-;35434:15;35451:23;35476:12;35490:23;35515:12;35529:18;35549;35571:19;35582:7;35571:10;:19::i;:::-;35433:157;;;;;;;;;;;;;;35637:7;35619;:15;35627:6;-1:-1:-1;;;;;35619:15:0;-1:-1:-1;;;;;35619:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;35601:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35673:7;:15;;;;:25;;35691:7;;35673:25;:::i;27030:122::-;27094:7;27141:3;27131:7;;27121;:17;;;;:::i;:::-;:23;;;;:::i;27160:134::-;27230:7;27283:3;27267:13;;27257:7;:23;;;;:::i;27306:134::-;27376:7;27429:3;27413:13;;27403:7;:23;;;;:::i;26610:408::-;26677:14;;26673:338;;26708:19;26731:10;:8;:10::i;:::-;26708:33;-1:-1:-1;26756:18:0;26777:24;26708:33;26777:10;:24;:::i;:::-;26857:4;26841:22;;;;:7;:22;;;;;;26756:45;;-1:-1:-1;26841:35:0;;26756:45;;26841:35;:::i;:::-;26832:4;26816:22;;;;:7;:22;;;;;;;;:60;;;;26894:11;:26;;;;;;26891:108;;;26980:4;26964:22;;;;:7;:22;;;;;;:35;;26989:10;;26964:35;:::i;:::-;26955:4;26939:22;;;;:7;:22;;;;;:60;26693:318;;26610:408;:::o;23894:141::-;23982:4;23972:7;;:14;;;;:::i;:::-;23962:7;:24;24010:10;;:17;;24023:4;;24010:17;:::i;:::-;23997:10;:30;-1:-1:-1;;23894:141:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2467:247::-;2526:6;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2634:9;2621:23;2653:31;2678:5;2653:31;:::i;2719:118::-;2805:5;2798:13;2791:21;2784:5;2781:32;2771:60;;2827:1;2824;2817:12;2842:309;2907:6;2915;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;3020:9;3007:23;2997:33;;3080:2;3069:9;3065:18;3052:32;3093:28;3115:5;3093:28;:::i;:::-;3140:5;3130:15;;;2842:309;;;;;:::o;3364:316::-;3441:6;3449;3457;3510:2;3498:9;3489:7;3485:23;3481:32;3478:52;;;3526:1;3523;3516:12;3478:52;-1:-1:-1;;3549:23:1;;;3619:2;3604:18;;3591:32;;-1:-1:-1;3670:2:1;3655:18;;;3642:32;;3364:316;-1:-1:-1;3364:316:1:o;3685:382::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3866:9;3853:23;3885:31;3910:5;3885:31;:::i;:::-;3935:5;-1:-1:-1;3992:2:1;3977:18;;3964:32;4005:30;3964:32;4005:30;:::i;4072:388::-;4140:6;4148;4201:2;4189:9;4180:7;4176:23;4172:32;4169:52;;;4217:1;4214;4207:12;4169:52;4256:9;4243:23;4275:31;4300:5;4275:31;:::i;:::-;4325:5;-1:-1:-1;4382:2:1;4367:18;;4354:32;4395:33;4354:32;4395:33;:::i;4465:241::-;4521:6;4574:2;4562:9;4553:7;4549:23;4545:32;4542:52;;;4590:1;4587;4580:12;4542:52;4629:9;4616:23;4648:28;4670:5;4648:28;:::i;4711:380::-;4790:1;4786:12;;;;4833;;;4854:61;;4908:4;4900:6;4896:17;4886:27;;4854:61;4961:2;4953:6;4950:14;4930:18;4927:38;4924:161;;5007:10;5002:3;4998:20;4995:1;4988:31;5042:4;5039:1;5032:15;5070:4;5067:1;5060:15;4924:161;;4711:380;;;:::o;5096:127::-;5157:10;5152:3;5148:20;5145:1;5138:31;5188:4;5185:1;5178:15;5212:4;5209:1;5202:15;5228:128;5295:9;;;5316:11;;;5313:37;;;5330:18;;:::i;5772:217::-;5812:1;5838;5828:132;;5882:10;5877:3;5873:20;5870:1;5863:31;5917:4;5914:1;5907:15;5945:4;5942:1;5935:15;5828:132;-1:-1:-1;5974:9:1;;5772:217::o;5994:356::-;6196:2;6178:21;;;6215:18;;;6208:30;6274:34;6269:2;6254:18;;6247:62;6341:2;6326:18;;5994:356::o;6711:127::-;6772:10;6767:3;6763:20;6760:1;6753:31;6803:4;6800:1;6793:15;6827:4;6824:1;6817:15;6843:127;6904:10;6899:3;6895:20;6892:1;6885:31;6935:4;6932:1;6925:15;6959:4;6956:1;6949:15;6975:135;7014:3;7035:17;;;7032:43;;7055:18;;:::i;:::-;-1:-1:-1;7102:1:1;7091:13;;6975:135::o;7115:125::-;7180:9;;;7201:10;;;7198:36;;;7214:18;;:::i;11931:184::-;12001:6;12054:2;12042:9;12033:7;12029:23;12025:32;12022:52;;;12070:1;12067;12060:12;12022:52;-1:-1:-1;12093:16:1;;11931:184;-1:-1:-1;11931:184:1:o;12399:245::-;12466:6;12519:2;12507:9;12498:7;12494:23;12490:32;12487:52;;;12535:1;12532;12525:12;12487:52;12567:9;12561:16;12586:28;12608:5;12586:28;:::i;14273:168::-;14346:9;;;14377;;14394:15;;;14388:22;;14374:37;14364:71;;14415:18;;:::i;14578:251::-;14648:6;14701:2;14689:9;14680:7;14676:23;14672:32;14669:52;;;14717:1;14714;14707:12;14669:52;14749:9;14743:16;14768:31;14793:5;14768:31;:::i;14834:980::-;15096:4;15144:3;15133:9;15129:19;15175:6;15164:9;15157:25;15201:2;15239:6;15234:2;15223:9;15219:18;15212:34;15282:3;15277:2;15266:9;15262:18;15255:31;15306:6;15341;15335:13;15372:6;15364;15357:22;15410:3;15399:9;15395:19;15388:26;;15449:2;15441:6;15437:15;15423:29;;15470:1;15480:195;15494:6;15491:1;15488:13;15480:195;;;15559:13;;-1:-1:-1;;;;;15555:39:1;15543:52;;15650:15;;;;15615:12;;;;15591:1;15509:9;15480:195;;;-1:-1:-1;;;;;;;15731:32:1;;;;15726:2;15711:18;;15704:60;-1:-1:-1;;;15795:3:1;15780:19;15773:35;15692:3;14834:980;-1:-1:-1;;;14834:980:1:o;16431:306::-;16519:6;16527;16535;16588:2;16576:9;16567:7;16563:23;16559:32;16556:52;;;16604:1;16601;16594:12;16556:52;16633:9;16627:16;16617:26;;16683:2;16672:9;16668:18;16662:25;16652:35;;16727:2;16716:9;16712:18;16706:25;16696:35;;16431:306;;;;;:::o
Swarm Source
ipfs://48e3a8d97f0a29fc849fd306f4eb6a0db5573c4812b52f88b26d2f72925e56d9
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.