Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 RBT
Holders
182
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000008542329 RBTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WhiteRabbit
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-09 */ // SPDX-License-Identifier: CC-BY-ND-4.0 pragma solidity ^0.8.17; /* ██╗ ██╗██╗ ██╗██╗████████╗███████╗ ██████╗ █████╗ ██████╗ ██████╗ ██╗████████╗ ██║ ██║██║ ██║██║╚══██╔══╝██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║╚══██╔══╝ ██║ █╗ ██║███████║██║ ██║ █████╗ ██████╔╝███████║██████╔╝██████╔╝██║ ██║ ██║███╗██║██╔══██║██║ ██║ ██╔══╝ ██╔══██╗██╔══██║██╔══██╗██╔══██╗██║ ██║ ╚███╔███╔╝██║ ██║██║ ██║ ███████╗ ██║ ██║██║ ██║██████╔╝██████╔╝██║ ██║ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═╝ /\ .-" / / ; .' .' : :/ .' \ ;-.' .--""""--..__/ `. .' .' `o \ / ` ; : \ : .-; -. `.__.-' : ; \ , ; '._: ; : ( \/ .__ ; \ `-. ; "-,/_..--"`-..__) '""--.._: Beware of scammers! Follow the only legit WhiteRabbit on: +++ whiterabbit.click +++ +++ whiterabbit.click +++ FoLlOw ThE WhItE RabbIt .-. (o.o) |=| __|__ //.=|=.\\ ReD pIll (buy): you will discover the truth and you will discover how deep the rabbit hole goes. BlUe pIll (not buy): you will wake up in your bed and believe whatever you want to believe. */ // ANCHOR White Rabbit methods abstract contract WhiteRabbitSpecials { // White Rabbit Innovations string internal _website = "https://whiterabbit.click"; event Message (string message); event answerThePhone (string message); // NOTE Communications from the White Rabbit to the users function _answerThePhone(string memory message) internal { emit Message(message); emit answerThePhone(message); } // NOTE Antiphishing Method: you can check the website address of the contract // and compare it with the one on the website function getWebsiteAddress() public view returns (string memory) { return _website; } function _changeWebsite(string memory newWebsite) internal { _website = newWebsite; } } abstract contract safetyFirst { mapping(address => bool) is_auth; function authorized(address addy) public view returns (bool) { return is_auth[addy]; } function set_authorized(address addy, bool booly) public onlyAuth { is_auth[addy] = booly; } modifier onlyAuth() { require(is_auth[msg.sender] || msg.sender == owner, "not owner"); _; } address owner; modifier onlyOwner() { require(msg.sender == owner, "not owner"); _; } bool locked; modifier safe() { require(!locked, "reentrant"); locked = true; _; locked = false; } function change_owner(address new_owner) public onlyAuth { owner = new_owner; } receive() external payable {} fallback() external payable {} } // SECTION Interfaces interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool); } interface ERC721 is ERC165 { event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes memory data ) external payable; function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external payable; function transferFrom( address _from, address _to, uint256 _tokenId ) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface IERC20 { function getOwner() external view returns (address); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval( address indexed _owner, address indexed _spender, uint256 _value ); } // !SECTION Interfaces interface IUniswapERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } interface IUniswapFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapRouter01 { function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function factory() external pure returns (address); function WETH() external pure returns (address); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getamountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getamountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getamountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getamountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapRouter02 is IUniswapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } library Listables { struct Set { bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = valueIndex; set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require( set._values.length > index, "Listables: index out of bounds" ); return set._values[index]; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } struct ActorSet { Set _inner; } function add(ActorSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(ActorSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(ActorSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(ActorSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(ActorSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } contract WhiteRabbit is IERC20, safetyFirst, WhiteRabbitSpecials { using Listables for Listables.ActorSet; string public constant _name = "White Rabbit"; string public constant _symbol = "RBT"; uint8 public constant _decimals = 18; uint256 public constant InitialSupply = 100 * 10**6 * 10**_decimals; mapping(address => uint256) public _balances; mapping(address => mapping(address => uint256)) public _allowances; mapping(address => uint256) public _coolDown; Listables.ActorSet private _excluded; Listables.ActorSet private _excludedFromCoolDown; mapping(address => bool) public _botlist; bool isBotlist = true; uint256 swapTreshold = InitialSupply / 200; // 0.5% bool isSwapPegged = true; uint16 public BuyLimitDivider = 50; // 2% uint8 public BalanceLimitDivider = 25; // 4% uint16 public SellLimitDivider = 125; // 0.75% uint16 public MaxCoolDownTime = 10 seconds; bool public coolDownDisabled; uint256 public coolDownTime = 2 seconds; bool public manualConversion; address public constant UniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public constant Dead = 0x000000000000000000000000000000000000dEaD; uint256 public _circulatingSupply = InitialSupply; uint256 public balanceLimit = _circulatingSupply; uint256 public sellLimit = _circulatingSupply; uint256 public buyLimit = _circulatingSupply; uint8 public _buyTax = 1; uint8 public _sellTax = 25; // INITIAL amount decreasing after 1 day to avoid dumpers uint8 public _transferTax = 1; // Shares uint8 public _liquidityTax = 30; uint8 public _projectTax = 70; bool isTokenSwapManual; bool public antiSnipe; bool public tradingEnabled; address public _UniswapPairAddress; IUniswapRouter02 public _UniswapRouter; uint256 public projectBalance; bool private _isSwappingContractModifier; modifier lockTheSwap() { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } constructor() { // Ownership owner = msg.sender; is_auth[msg.sender] = true; _balances[msg.sender] = _circulatingSupply; emit Transfer(address(0), msg.sender, _circulatingSupply); // Defining the Uniswap Router and the Uniswap Pair _UniswapRouter = IUniswapRouter02(UniswapRouter); _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()) .createPair(address(this), _UniswapRouter.WETH()); // SECTION Limits, Taxes and Locks // Limits balanceLimit = InitialSupply / BalanceLimitDivider; sellLimit = InitialSupply / SellLimitDivider; buyLimit = InitialSupply / BuyLimitDivider; // !SECTION Limits, Taxes and Locks // SECTION Exclusions _excluded.add(msg.sender); _excludedFromCoolDown.add(UniswapRouter); _excludedFromCoolDown.add(_UniswapPairAddress); _excludedFromCoolDown.add(address(this)); // !SECTION Exclusions } // NOTE Public transfer method function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "Transfer from zero"); // Botlist check if (isBotlist) { require( !_botlist[sender] && !_botlist[recipient], "Botlisted!" ); } // Check if the transfer is to be excluded from cooldown and taxes bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient) || is_auth[sender] || is_auth[recipient]); bool isContractTransfer = (sender == address(this) || recipient == address(this)); bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter) || (recipient == _UniswapPairAddress && sender == UniswapRouter)); if ( isContractTransfer || isLiquidityTransfer || isExcluded ) { _whitelistTransfer(sender, recipient, amount); } else { // If not, check if trading is enabled if (!tradingEnabled) { // except for the owner if (sender != owner && recipient != owner) { // and apply anti-snipe if enabled if (antiSnipe) { emit Transfer(sender, recipient, 0); return; } else { // or revert if not require(tradingEnabled, "trading not yet enabled"); } } } // If trading is enabled, check if the transfer is a buy or a sell bool isBuy = sender == _UniswapPairAddress || sender == UniswapRouter; bool isSell = recipient == _UniswapPairAddress || recipient == UniswapRouter; // and initiate the transfer accordingly _normalTransfer(sender, recipient, amount, isBuy, isSell); } } // NOTE Transfer method for everyone function _normalTransfer( address sender, address recipient, uint256 amount, bool isBuy, bool isSell ) private { // Read the balances of the recipient locally to save gas as is used twice uint256 recipientBalance = _balances[recipient]; // Apply the requirements require(_balances[sender] >= amount, "Transfer exceeds balance"); // Prepare the tax variable uint8 tax; // Apply the cooldown for sells if (isSell) { if (!_excludedFromCoolDown.contains(sender)) { require( _coolDown[sender] <= block.timestamp || coolDownDisabled, "Seller in coolDown" ); _coolDown[sender] = block.timestamp + coolDownTime; } // Sell limit check require(amount <= sellLimit, "Dump protection"); tax = _sellTax; } else if (isBuy) { // Balance limit check require( recipientBalance + amount <= balanceLimit, "whale protection" ); // Buy limit check require(amount <= buyLimit, "whale protection"); tax = _buyTax; } else { require( // Balance limit check for transfers recipientBalance + amount <= balanceLimit, "whale protection" ); // Update the cooldown for the sender if not excluded if (!_excludedFromCoolDown.contains(sender)) require( _coolDown[sender] <= block.timestamp || coolDownDisabled, "Sender in Lock" ); tax = _transferTax; } // Check if the transaction is fit for token swapping if ( (sender != _UniswapPairAddress) && (!manualConversion) && (!_isSwappingContractModifier) ) _swapContractToken(amount); // Calculating the taxed amount uint256 contractToken = _calculateFee( amount, tax, _liquidityTax + _projectTax ); // Refactoring the various amounts uint256 taxedAmount = amount - (contractToken); _removeToken(sender, amount); _balances[address(this)] += contractToken; _addToken(recipient, taxedAmount); // Emitting the transfer event emit Transfer(sender, recipient, taxedAmount); } function _whitelistTransfer( address sender, address recipient, uint256 amount ) private { // Basic checks require(_balances[sender] >= amount, "Transfer exceeds balance"); // Plain transfer _removeToken(sender, amount); _addToken(recipient, amount); // Emitting the transfer event emit Transfer(sender, recipient, amount); } // NOTE To fully support decimal operations, we custom calculate the fees function _calculateFee( uint256 amount, uint8 tax, uint8 taxPercent ) private pure returns (uint256) { return (amount * tax * taxPercent) / 10000; } function _addToken(address addr, uint256 amount) private { uint256 newAmount = _balances[addr] + amount; _balances[addr] = newAmount; } function _removeToken(address addr, uint256 amount) private { uint256 newAmount = _balances[addr] - amount; _balances[addr] = newAmount; } // SECTION Swapping taxes and adding liquidity // NOTE Swap tokens on sells to create liquidity function _swapContractToken(uint256 totalMax) private lockTheSwap { uint256 contractBalance = _balances[address(this)]; // Do not swap if the contract balance is lower than the swap treshold if (contractBalance < swapTreshold) { return; } // Calculate the amount of tokens to swap uint16 totalTax = _liquidityTax; uint256 tokenToSwap = swapTreshold; // Avoid swapping more than the total max of the transaction if (swapTreshold > totalMax) { if (isSwapPegged) { tokenToSwap = totalMax; } } // Avoid swapping if there are no liquidity fees to generate if (totalTax == 0) { return; } // Calculate the amount of tokens to work on for liquidity and project uint256 tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax; uint256 tokenForProject = (tokenToSwap * _projectTax) / totalTax; // Divide the liquidity tokens in half to add liquidity uint256 liqToken = tokenForLiquidity / 2; uint256 liqETHToken = tokenForLiquidity - liqToken; // Calculate the amount of ETH to swap uint256 swapToken = liqETHToken + tokenForProject; // Swap the tokens for ETH uint256 initialETHBalance = address(this).balance; _swapTokenForETH(swapToken); // Calculate the amount of ETH generated and the amount of ETH to add liquidity with uint256 newETH = (address(this).balance - initialETHBalance); uint256 liqETH = (newETH * liqETHToken) / swapToken; // Add liquidity _addLiquidity(liqToken, liqETH); // Add the project ETH to the project balance uint256 generatedETH = (address(this).balance - initialETHBalance); projectBalance += generatedETH; } // NOTE Basic swap function for swapping tokens on Uniswap-v2 compatible routers function _swapTokenForETH(uint256 amount) private { // Preapprove the router to spend the tokens _approve(address(this), address(_UniswapRouter), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _UniswapRouter.WETH(); _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } // NOTE Basic add liquidity function for adding liquidity on Uniswap-v2 compatible routers function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private { // Approve the router to spend the tokens _approve(address(this), address(_UniswapRouter), tokenamount); _UniswapRouter.addLiquidityETH{value: ETHamount}( address(this), tokenamount, 0, 0, address(this), block.timestamp ); } // !SECTION Swapping taxes and adding liquidity /// SECTION Utility functions function getLimits() public view returns (uint256 balance, uint256 sell) { return (balanceLimit, sellLimit); } function getTaxes() public view returns ( uint256 projectShare, uint256 liquidityShare, uint256 buyTax, uint256 sellTax, uint256 transferTax ) { return ( _projectTax, _liquidityTax, _buyTax, _sellTax, _transferTax ); } // NOTE The actual cooldown time function getCoolDownTimeInSeconds() public view returns (uint256) { return coolDownTime; } // NOTE Pegged swap means that the contract won't dump when the swap treshold is reached function SetPeggedSwap(bool isPegged) public onlyAuth { isSwapPegged = isPegged; } // NOTE The token amount that triggers swap on sells function SetSwapTreshold(uint256 max) public onlyAuth { swapTreshold = max; } // !SECTION Utility functions function BotlistAddress(address addy, bool booly) public onlyAuth { _botlist[addy] = booly; } function ExcludeAccountFromFees(address account) public onlyAuth { _excluded.add(account); } function IncludeAccountToFees(address account) public onlyAuth { _excluded.remove(account); } function ExcludeAccountFromCoolDown(address account) public onlyAuth { _excludedFromCoolDown.add(account); } function IncludeAccountToCoolDown(address account) public onlyAuth { _excludedFromCoolDown.remove(account); } function WithdrawProjectETH() public onlyAuth { uint256 amount = projectBalance; projectBalance = 0; address sender = msg.sender; (bool sent, ) = sender.call{value: (amount)}(""); require(sent, "withdraw failed"); } function SwitchManualETHConversion(bool manual) public onlyAuth { manualConversion = manual; } function DisableCoolDown(bool disabled) public onlyAuth { coolDownDisabled = disabled; } function SetCoolDownTime(uint256 coolDownSeconds) public onlyAuth { coolDownTime = coolDownSeconds; } function SetTaxes( uint8 projectTaxes, uint8 liquidityTaxes, uint8 buyTax, uint8 sellTax, uint8 transferTax ) public onlyAuth { uint8 totalTax = projectTaxes + liquidityTaxes; require(totalTax == 100, "Project + Liquidity taxes needs to equal 100%"); _projectTax = projectTaxes; _liquidityTax = liquidityTaxes; _buyTax = buyTax; _sellTax = sellTax; _transferTax = transferTax; } function ManualGenerateTokenSwapBalance(uint256 _qty) public onlyAuth { _swapContractToken(_qty * 10**9); } function UpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public onlyAuth { newBalanceLimit = newBalanceLimit * 10**_decimals; newSellLimit = newSellLimit * 10**_decimals; balanceLimit = newBalanceLimit; sellLimit = newSellLimit; } function EnableTrading(bool booly) public onlyAuth { tradingEnabled = booly; } function LiquidityTokenAddress(address liquidityTokenAddress) public onlyAuth { _UniswapPairAddress = liquidityTokenAddress; } function RescueTokens(address tknAddress) public onlyAuth { IERC20 token = IERC20(tknAddress); uint256 ourBalance = token.balanceOf(address(this)); require(ourBalance > 0, "No tokens in our balance"); token.transfer(msg.sender, ourBalance); } function setBotlistEnabled(bool isBotlistEnabled) public onlyAuth { isBotlist = isBotlistEnabled; } function setContractTokenSwapManual(bool manual) public onlyAuth { isTokenSwapManual = manual; } function setBotlistedAddress(address toBotlist) public onlyAuth { _botlist[toBotlist] = true; } function removeBotlistedAddress(address toRemove) public onlyAuth { _botlist[toRemove] = false; } function AvoidLocks() public onlyAuth { (bool sent, ) = msg.sender.call{value: (address(this).balance)}(""); require(sent); } function getOwner() external view override returns (address) { return owner; } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _circulatingSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve( address _owner, address spender, uint256 amount ) private { require(_owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[_owner][spender] = amount; emit Approval(_owner, spender, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } // White Rabbit Derivations function messageFromTeam(string memory message) public onlyAuth { _answerThePhone(message); } function changeWebsite(string memory newWebsite) public onlyAuth { _changeWebsite(newWebsite); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Message","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"answerThePhone","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AvoidLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"BotlistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"DisableCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxCoolDownTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"coolDownSeconds","type":"uint256"}],"name":"SetCoolDownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"SetSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"projectTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawProjectETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_botlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_coolDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_projectTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"antiSnipe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"addy","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newWebsite","type":"string"}],"name":"changeWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_owner","type":"address"}],"name":"change_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCoolDownTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"projectShare","type":"uint256"},{"internalType":"uint256","name":"liquidityShare","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWebsiteAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"messageFromTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"projectBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeBotlistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isBotlistEnabled","type":"bool"}],"name":"setBotlistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toBotlist","type":"address"}],"name":"setBotlistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052601960809081527f68747470733a2f2f77686974657261626269742e636c69636b0000000000000060a0526002906200003e90826200057a565b50600b805460ff1916600117905560c86200005c6012600a62000759565b6200006c906305f5e1006200076a565b62000078919062000784565b600c55600d80546001600160401b031916660a007d190032011790556002600e55620000a76012600a62000759565b620000b7906305f5e1006200076a565b6010819055601181905560128190556013556014805464ffffffffff191664461e011901179055348015620000eb57600080fd5b50600180546001600160a01b031916339081178255600081815260208181526040808320805460ff1916909517909455601054600382528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e79190620007a7565b6001600160a01b031663c9c6539630601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620007a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620007a7565b601480546001600160a01b03929092166801000000000000000002600160401b600160e01b0319909216919091179055600d5460ff630100000090910416620003306012600a62000759565b62000340906305f5e1006200076a565b6200034c919062000784565b601155600d54640100000000900461ffff166200036c6012600a62000759565b6200037c906305f5e1006200076a565b62000388919062000784565b6012908155600d54610100900461ffff1690620003a790600a62000759565b620003b7906305f5e1006200076a565b620003c3919062000784565b601355620003df60063362000463602090811b62001c8717901c565b506200040f737a250d5630b4cf539739df2c5dacb4c659f2488d60086200046360201b62001c871790919060201c565b5062000440601460089054906101000a90046001600160a01b031660086200046360201b62001c871790919060201c565b506200045c3060086200046360201b62001c871790919060201c565b50620007d9565b60006200047a836001600160a01b03841662000483565b90505b92915050565b6000818152600183016020526040812054620004cc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200047d565b5060006200047d565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200050057607f821691505b6020821081036200052157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057557600081815260208120601f850160051c81016020861015620005505750805b601f850160051c820191505b8181101562000571578281556001016200055c565b5050505b505050565b81516001600160401b03811115620005965762000596620004d5565b620005ae81620005a78454620004eb565b8462000527565b602080601f831160018114620005e65760008415620005cd5750858301515b600019600386901b1c1916600185901b17855562000571565b600085815260208120601f198616915b828110156200061757888601518255948401946001909101908401620005f6565b5085821015620006365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069d57816000190482111562000681576200068162000646565b808516156200068f57918102915b93841c939080029062000661565b509250929050565b600082620006b6575060016200047d565b81620006c5575060006200047d565b8160018114620006de5760028114620006e95762000709565b60019150506200047d565b60ff841115620006fd57620006fd62000646565b50506001821b6200047d565b5060208310610133831016604e8410600b84101617156200072e575081810a6200047d565b6200073a83836200065c565b806000190482111562000751576200075162000646565b029392505050565b60006200047a60ff841683620006a5565b80820281158282048414176200047d576200047d62000646565b600082620007a257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007ba57600080fd5b81516001600160a01b0381168114620007d257600080fd5b9392505050565b6132f480620007e96000396000f3fe6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8a578063d9012d4a14610da0578063dd62ed3e14610dc0578063de65936814610e06578063fe48183c14610e2657005b8063c7639d8014610cd5578063ca9ec19914610cfd578063d28d885214610d1c578063d2ce0db214610d54578063d45c484114610d6a57005b8063b90291c3116100f4578063b90291c314610c1b578063b918161114610c3b578063c20c87b814610c74578063c2bcf5ea14610c94578063c41ba81014610cb457005b8063a6c4c88914610ba2578063a9059cbb14610bb7578063ada4c3e514610bd7578063b09f126614610bec57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b17578063a1337b4014610b37578063a253c06e14610b57578063a457c2d714610b6d578063a4993e7b14610b8d57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bab565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf2565b610e46565b34801561048557600080fd5b5060408051808201909152600c81526b15da1a5d1948149858989a5d60a21b60208201525b6040516104509190612c0f565b3480156104c357600080fd5b506104d76104d2366004612c5d565b610eb5565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c89565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbc565b610ecc565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6d565b610f1c565b3480156105dd57600080fd5b50610446610f8b565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c89565b610fa8565b34801561063257600080fd5b506104d7610641366004612d9b565b610ffb565b34801561065257600080fd5b5061040c610661366004612bf2565b611092565b34801561067257600080fd5b5061040c610681366004612c89565b6110f9565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf2565b61115f565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6d565b6111b6565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612ddc565b611225565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5d565b61127f565b34801561081757600080fd5b5061040c610826366004612e0b565b6112b6565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c89565b6113db565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c89565b611555565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf2565b6115a4565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612ddc565b6115fb565b34801561095557600080fd5b50610446610964366004612c89565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c89565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c89565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf2565b611644565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b5060408051808201909152600381526214909560ea1b60208201526104aa565b348015610b2357600080fd5b5061040c610b32366004612bf2565b6116aa565b348015610b4357600080fd5b5061040c610b52366004612c89565b611701565b348015610b6357600080fd5b5061044660105481565b348015610b7957600080fd5b506104d7610b88366004612c5d565b611769565b348015610b9957600080fd5b5061040c6117e5565b348015610bae57600080fd5b5061040c61187e565b348015610bc357600080fd5b506104d7610bd2366004612c5d565b61195c565b348015610be357600080fd5b506104aa611969565b348015610bf857600080fd5b506104aa6040518060400160405280600381526020016214909560ea1b81525081565b348015610c2757600080fd5b5061040c610c36366004612cbc565b6119fb565b348015610c4757600080fd5b506104d7610c56366004612c89565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8057600080fd5b5061040c610c8f366004612c89565b611a48565b348015610ca057600080fd5b5061040c610caf366004612e70565b611a97565b348015610cc057600080fd5b506014546104d790600160301b900460ff1681565b348015610ce157600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0957600080fd5b5060145461058a90610100900460ff1681565b348015610d2857600080fd5b506104aa6040518060400160405280600c81526020016b15da1a5d1948149858989a5d60a21b81525081565b348015610d6057600080fd5b50610446600e5481565b348015610d7657600080fd5b5061040c610d85366004612c89565b611b15565b348015610d9657600080fd5b5061044660165481565b348015610dac57600080fd5b5061040c610dbb366004612c89565b611b64565b348015610dcc57600080fd5b50610446610ddb366004612bab565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1257600080fd5b5061040c610e21366004612ddc565b611bc9565b348015610e3257600080fd5b5061040c610e41366004612c89565b611c12565b3360009081526020819052604090205460ff1680610e6e57506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610e8a90612e92565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec2338484611ca3565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef457506001546001600160a01b031633145b610f105760405162461bcd60e51b8152600401610e8a90612e92565b610f1981611d97565b50565b3360009081526020819052604090205460ff1680610f4457506001546001600160a01b031633145b610f605760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f976012600a612faf565b610fa5906305f5e100612fbe565b81565b3360009081526020819052604090205460ff1680610fd057506001546001600160a01b031633145b610fec5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611e08565b5050565b6000611008848484611e1d565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110735760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8a565b61108785336110828685612fd5565b611ca3565b506001949350505050565b3360009081526020819052604090205460ff16806110ba57506001546001600160a01b031633145b6110d65760405162461bcd60e51b8152600401610e8a90612e92565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112157506001546001600160a01b031633145b61113d5760405162461bcd60e51b8152600401610e8a90612e92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118757506001546001600160a01b031633145b6111a35760405162461bcd60e51b8152600401610e8a90612e92565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111de57506001546001600160a01b031633145b6111fa5760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124d57506001546001600160a01b031633145b6112695760405162461bcd60e51b8152600401610e8a90612e92565b610f1961127a82633b9aca00612fbe565b6121cd565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec2918590611082908690612fe8565b3360009081526020819052604090205460ff16806112de57506001546001600160a01b031633145b6112fa5760405162461bcd60e51b8152600401610e8a90612e92565b60006113068587612ffb565b90508060ff166064146113715760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8a565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140357506001546001600160a01b031633145b61141f5760405162461bcd60e51b8152600401610e8a90612e92565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613014565b9050600081116114de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061302d565b50505050565b3360009081526020819052604090205460ff168061157d57506001546001600160a01b031633145b6115995760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611c87565b3360009081526020819052604090205460ff16806115cc57506001546001600160a01b031633145b6115e85760405162461bcd60e51b8152600401610e8a90612e92565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162357506001546001600160a01b031633145b61163f5760405162461bcd60e51b8152600401610e8a90612e92565b600e55565b3360009081526020819052604090205460ff168061166c57506001546001600160a01b031633145b6116885760405162461bcd60e51b8152600401610e8a90612e92565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d257506001546001600160a01b031633145b6116ee5760405162461bcd60e51b8152600401610e8a90612e92565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172957506001546001600160a01b031633145b6117455760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117cc5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8a565b6117db33856110828685612fd5565b5060019392505050565b3360009081526020819052604090205460ff168061180d57506001546001600160a01b031633145b6118295760405162461bcd60e51b8152600401610e8a90612e92565b604051600090339047908381818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610f1957600080fd5b3360009081526020819052604090205460ff16806118a657506001546001600160a01b031633145b6118c25760405162461bcd60e51b8152600401610e8a90612e92565b6016805460009182905560405190913391829084908381818185875af1925050503d806000811461190f576040519150601f19603f3d011682016040523d82523d6000602084013e611914565b606091505b50509050806119575760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8a565b505050565b6000610ec2338484611e1d565b6060600280546119789061304a565b80601f01602080910402602001604051908101604052809291908181526020018280546119a49061304a565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2357506001546001600160a01b031633145b611a3f5760405162461bcd60e51b8152600401610e8a90612e92565b610f1981612335565b3360009081526020819052604090205460ff1680611a7057506001546001600160a01b031633145b611a8c5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611c87565b3360009081526020819052604090205460ff1680611abf57506001546001600160a01b031633145b611adb5760405162461bcd60e51b8152600401610e8a90612e92565b611ae76012600a612faf565b611af19083612fbe565b9150611aff6012600a612faf565b611b099082612fbe565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3d57506001546001600160a01b031633145b611b595760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611e08565b3360009081526020819052604090205460ff1680611b8c57506001546001600160a01b031633145b611ba85760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b8152600401610e8a90612e92565b600c55565b3360009081526020819052604090205460ff1680611c3a57506001546001600160a01b031633145b611c565760405162461bcd60e51b8152600401610e8a90612e92565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9c836001600160a01b038416612341565b9392505050565b6001600160a01b038316611ced5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8a565b6001600160a01b038216611d355760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc69190612c0f565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dfd9190612c0f565b60405180910390a150565b6000611c9c836001600160a01b038416612390565b6001600160a01b038316611e685760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8a565b600b5460ff1615611eee576001600160a01b0383166000908152600a602052604090205460ff16158015611eb557506001600160a01b0382166000908152600a602052604090205460ff16155b611eee5760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8a565b6000611efb60068561247d565b80611f0c5750611f0c60068461247d565b80611f2f57506001600160a01b03841660009081526020819052604090205460ff165b80611f5257506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7557506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbb57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200157506014546001600160a01b03868116600160401b9092041614801561200157506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200c5750805b806120145750825b156120295761202486868661249f565b6121c5565b601454600160381b900460ff1661212c576001546001600160a01b0387811691161480159061206657506001546001600160a01b03868116911614155b1561212c57601454600160301b900460ff16156120d357846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c391815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8a565b6014546000906001600160a01b03888116600160401b90920416148061216e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c2888888858561255b565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fa5750612328565b601454600c54630100000090910460ff16908381111561222257600d5460ff16156122225750825b8161ffff1660000361223657505050612328565b60145460009061ffff841690612256906301000000900460ff1684612fbe565b6122609190613084565b60145490915060009061ffff85169061228490640100000000900460ff1685612fbe565b61228e9190613084565b9050600061229d600284613084565b905060006122ab8285612fd5565b905060006122b98483612fe8565b9050476122c5826128f7565b60006122d18247612fd5565b90506000836122e08684612fbe565b6122ea9190613084565b90506122f68682612a48565b60006123028447612fd5565b905080601660008282546123169190612fe8565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff782826130ec565b600081815260018301602052604081205461238857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec6565b506000610ec6565b600081815260018301602052604081205480156124735760006123b4600183612fd5565b85549091506000906123c890600190612fd5565b905060008660000182815481106123e1576123e16131ac565b9060005260206000200154905080876000018481548110612404576124046131ac565b600091825260208083209091019290925582815260018901909152604090208490558654879080612437576124376131c2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec6565b6000915050610ec6565b6001600160a01b03811660009081526001830160205260408120541515611c9c565b6001600160a01b0383166000908152600360205260409020548111156125025760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b61250c8382612af9565b6125168282612b3e565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8a91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125c85760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b600082156126cc576125db60088861247d565b612677576001600160a01b0387166000908152600560205260409020544210158061260f5750600d54600160401b900460ff165b6126505760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8a565b600e5461265d9042612fe8565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bb5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8a565b50601454610100900460ff166127e0565b831561272b576011546126df8684612fe8565b11156126fd5760405162461bcd60e51b8152600401610e8a906131d8565b60135485111561271f5760405162461bcd60e51b8152600401610e8a906131d8565b5060145460ff166127e0565b6011546127388684612fe8565b11156127565760405162461bcd60e51b8152600401610e8a906131d8565b61276160088861247d565b6127d2576001600160a01b038716600090815260056020526040902054421015806127955750600d54600160401b900460ff165b6127d25760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8a565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b90920416148015906128085750600f5460ff16155b8015612817575060175460ff16155b1561282557612825856121cd565b60145460009061285690879084906128519060ff64010000000082048116916301000000900416612ffb565b612b62565b905060006128648288612fd5565b90506128708988612af9565b306000908152600360205260408120805484929061288f908490612fe8565b9091555061289f90508882612b3e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e491815260200190565b60405180910390a3505050505050505050565b60155461290f9030906001600160a01b031683611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612944576129446131ac565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190613202565b816001815181106129d4576129d46131ac565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1a90859060009086903090429060040161321f565b600060405180830381600087803b158015612a3457600080fd5b505af11580156121c5573d6000803e3d6000fd5b601554612a609030906001600160a01b031684611ca3565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af29190613290565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fd5565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fe8565b60006127108260ff168460ff1686612b7a9190612fbe565b612b849190612fbe565b612b8e9190613084565b949350505050565b6001600160a01b0381168114610f1957600080fd5b60008060408385031215612bbe57600080fd5b8235612bc981612b96565b91506020830135612bd981612b96565b809150509250929050565b8015158114610f1957600080fd5b600060208284031215612c0457600080fd5b8135611c9c81612be4565b600060208083528351808285015260005b81811015612c3c57858101830151858201604001528201612c20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7057600080fd5b8235612c7b81612b96565b946020939093013593505050565b600060208284031215612c9b57600080fd5b8135611c9c81612b96565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cce57600080fd5b813567ffffffffffffffff80821115612ce657600080fd5b818401915084601f830112612cfa57600080fd5b813581811115612d0c57612d0c612ca6565b604051601f8201601f19908116603f01168101908382118183101715612d3457612d34612ca6565b81604052828152876020848701011115612d4d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8057600080fd5b8235612d8b81612b96565b91506020830135612bd981612be4565b600080600060608486031215612db057600080fd5b8335612dbb81612b96565b92506020840135612dcb81612b96565b929592945050506040919091013590565b600060208284031215612dee57600080fd5b5035919050565b803560ff81168114612e0657600080fd5b919050565b600080600080600060a08688031215612e2357600080fd5b612e2c86612df5565b9450612e3a60208701612df5565b9350612e4860408701612df5565b9250612e5660608701612df5565b9150612e6460808701612df5565b90509295509295909350565b60008060408385031215612e8357600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f06578160001904821115612eec57612eec612eb5565b80851615612ef957918102915b93841c9390800290612ed0565b509250929050565b600082612f1d57506001610ec6565b81612f2a57506000610ec6565b8160018114612f405760028114612f4a57612f66565b6001915050610ec6565b60ff841115612f5b57612f5b612eb5565b50506001821b610ec6565b5060208310610133831016604e8410600b8410161715612f89575081810a610ec6565b612f938383612ecb565b8060001904821115612fa757612fa7612eb5565b029392505050565b6000611c9c60ff841683612f0e565b8082028115828204841417610ec657610ec6612eb5565b81810381811115610ec657610ec6612eb5565b80820180821115610ec657610ec6612eb5565b60ff8181168382160190811115610ec657610ec6612eb5565b60006020828403121561302657600080fd5b5051919050565b60006020828403121561303f57600080fd5b8151611c9c81612be4565b600181811c9082168061305e57607f821691505b60208210810361307e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a157634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195757600081815260208120601f850160051c810160208610156130cd5750805b601f850160051c820191505b818110156121c5578281556001016130d9565b815167ffffffffffffffff81111561310657613106612ca6565b61311a81613114845461304a565b846130a6565b602080601f83116001811461314f57600084156131375750858301515b600019600386901b1c1916600185901b1785556121c5565b600085815260208120601f198616915b8281101561317e5788860151825594840194600190910190840161315f565b508582101561319c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321457600080fd5b8151611c9c81612b96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326f5784516001600160a01b03168352938301939183019160010161324a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8a578063d9012d4a14610da0578063dd62ed3e14610dc0578063de65936814610e06578063fe48183c14610e2657005b8063c7639d8014610cd5578063ca9ec19914610cfd578063d28d885214610d1c578063d2ce0db214610d54578063d45c484114610d6a57005b8063b90291c3116100f4578063b90291c314610c1b578063b918161114610c3b578063c20c87b814610c74578063c2bcf5ea14610c94578063c41ba81014610cb457005b8063a6c4c88914610ba2578063a9059cbb14610bb7578063ada4c3e514610bd7578063b09f126614610bec57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b17578063a1337b4014610b37578063a253c06e14610b57578063a457c2d714610b6d578063a4993e7b14610b8d57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bab565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf2565b610e46565b34801561048557600080fd5b5060408051808201909152600c81526b15da1a5d1948149858989a5d60a21b60208201525b6040516104509190612c0f565b3480156104c357600080fd5b506104d76104d2366004612c5d565b610eb5565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c89565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbc565b610ecc565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6d565b610f1c565b3480156105dd57600080fd5b50610446610f8b565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c89565b610fa8565b34801561063257600080fd5b506104d7610641366004612d9b565b610ffb565b34801561065257600080fd5b5061040c610661366004612bf2565b611092565b34801561067257600080fd5b5061040c610681366004612c89565b6110f9565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf2565b61115f565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6d565b6111b6565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612ddc565b611225565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5d565b61127f565b34801561081757600080fd5b5061040c610826366004612e0b565b6112b6565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c89565b6113db565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c89565b611555565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf2565b6115a4565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612ddc565b6115fb565b34801561095557600080fd5b50610446610964366004612c89565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c89565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c89565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf2565b611644565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b5060408051808201909152600381526214909560ea1b60208201526104aa565b348015610b2357600080fd5b5061040c610b32366004612bf2565b6116aa565b348015610b4357600080fd5b5061040c610b52366004612c89565b611701565b348015610b6357600080fd5b5061044660105481565b348015610b7957600080fd5b506104d7610b88366004612c5d565b611769565b348015610b9957600080fd5b5061040c6117e5565b348015610bae57600080fd5b5061040c61187e565b348015610bc357600080fd5b506104d7610bd2366004612c5d565b61195c565b348015610be357600080fd5b506104aa611969565b348015610bf857600080fd5b506104aa6040518060400160405280600381526020016214909560ea1b81525081565b348015610c2757600080fd5b5061040c610c36366004612cbc565b6119fb565b348015610c4757600080fd5b506104d7610c56366004612c89565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8057600080fd5b5061040c610c8f366004612c89565b611a48565b348015610ca057600080fd5b5061040c610caf366004612e70565b611a97565b348015610cc057600080fd5b506014546104d790600160301b900460ff1681565b348015610ce157600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0957600080fd5b5060145461058a90610100900460ff1681565b348015610d2857600080fd5b506104aa6040518060400160405280600c81526020016b15da1a5d1948149858989a5d60a21b81525081565b348015610d6057600080fd5b50610446600e5481565b348015610d7657600080fd5b5061040c610d85366004612c89565b611b15565b348015610d9657600080fd5b5061044660165481565b348015610dac57600080fd5b5061040c610dbb366004612c89565b611b64565b348015610dcc57600080fd5b50610446610ddb366004612bab565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1257600080fd5b5061040c610e21366004612ddc565b611bc9565b348015610e3257600080fd5b5061040c610e41366004612c89565b611c12565b3360009081526020819052604090205460ff1680610e6e57506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610e8a90612e92565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec2338484611ca3565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef457506001546001600160a01b031633145b610f105760405162461bcd60e51b8152600401610e8a90612e92565b610f1981611d97565b50565b3360009081526020819052604090205460ff1680610f4457506001546001600160a01b031633145b610f605760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f976012600a612faf565b610fa5906305f5e100612fbe565b81565b3360009081526020819052604090205460ff1680610fd057506001546001600160a01b031633145b610fec5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611e08565b5050565b6000611008848484611e1d565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110735760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8a565b61108785336110828685612fd5565b611ca3565b506001949350505050565b3360009081526020819052604090205460ff16806110ba57506001546001600160a01b031633145b6110d65760405162461bcd60e51b8152600401610e8a90612e92565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112157506001546001600160a01b031633145b61113d5760405162461bcd60e51b8152600401610e8a90612e92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118757506001546001600160a01b031633145b6111a35760405162461bcd60e51b8152600401610e8a90612e92565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111de57506001546001600160a01b031633145b6111fa5760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124d57506001546001600160a01b031633145b6112695760405162461bcd60e51b8152600401610e8a90612e92565b610f1961127a82633b9aca00612fbe565b6121cd565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec2918590611082908690612fe8565b3360009081526020819052604090205460ff16806112de57506001546001600160a01b031633145b6112fa5760405162461bcd60e51b8152600401610e8a90612e92565b60006113068587612ffb565b90508060ff166064146113715760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8a565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140357506001546001600160a01b031633145b61141f5760405162461bcd60e51b8152600401610e8a90612e92565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613014565b9050600081116114de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061302d565b50505050565b3360009081526020819052604090205460ff168061157d57506001546001600160a01b031633145b6115995760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611c87565b3360009081526020819052604090205460ff16806115cc57506001546001600160a01b031633145b6115e85760405162461bcd60e51b8152600401610e8a90612e92565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162357506001546001600160a01b031633145b61163f5760405162461bcd60e51b8152600401610e8a90612e92565b600e55565b3360009081526020819052604090205460ff168061166c57506001546001600160a01b031633145b6116885760405162461bcd60e51b8152600401610e8a90612e92565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d257506001546001600160a01b031633145b6116ee5760405162461bcd60e51b8152600401610e8a90612e92565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172957506001546001600160a01b031633145b6117455760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117cc5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8a565b6117db33856110828685612fd5565b5060019392505050565b3360009081526020819052604090205460ff168061180d57506001546001600160a01b031633145b6118295760405162461bcd60e51b8152600401610e8a90612e92565b604051600090339047908381818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610f1957600080fd5b3360009081526020819052604090205460ff16806118a657506001546001600160a01b031633145b6118c25760405162461bcd60e51b8152600401610e8a90612e92565b6016805460009182905560405190913391829084908381818185875af1925050503d806000811461190f576040519150601f19603f3d011682016040523d82523d6000602084013e611914565b606091505b50509050806119575760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8a565b505050565b6000610ec2338484611e1d565b6060600280546119789061304a565b80601f01602080910402602001604051908101604052809291908181526020018280546119a49061304a565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2357506001546001600160a01b031633145b611a3f5760405162461bcd60e51b8152600401610e8a90612e92565b610f1981612335565b3360009081526020819052604090205460ff1680611a7057506001546001600160a01b031633145b611a8c5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611c87565b3360009081526020819052604090205460ff1680611abf57506001546001600160a01b031633145b611adb5760405162461bcd60e51b8152600401610e8a90612e92565b611ae76012600a612faf565b611af19083612fbe565b9150611aff6012600a612faf565b611b099082612fbe565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3d57506001546001600160a01b031633145b611b595760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611e08565b3360009081526020819052604090205460ff1680611b8c57506001546001600160a01b031633145b611ba85760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b8152600401610e8a90612e92565b600c55565b3360009081526020819052604090205460ff1680611c3a57506001546001600160a01b031633145b611c565760405162461bcd60e51b8152600401610e8a90612e92565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9c836001600160a01b038416612341565b9392505050565b6001600160a01b038316611ced5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8a565b6001600160a01b038216611d355760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc69190612c0f565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dfd9190612c0f565b60405180910390a150565b6000611c9c836001600160a01b038416612390565b6001600160a01b038316611e685760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8a565b600b5460ff1615611eee576001600160a01b0383166000908152600a602052604090205460ff16158015611eb557506001600160a01b0382166000908152600a602052604090205460ff16155b611eee5760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8a565b6000611efb60068561247d565b80611f0c5750611f0c60068461247d565b80611f2f57506001600160a01b03841660009081526020819052604090205460ff165b80611f5257506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7557506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbb57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200157506014546001600160a01b03868116600160401b9092041614801561200157506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200c5750805b806120145750825b156120295761202486868661249f565b6121c5565b601454600160381b900460ff1661212c576001546001600160a01b0387811691161480159061206657506001546001600160a01b03868116911614155b1561212c57601454600160301b900460ff16156120d357846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c391815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8a565b6014546000906001600160a01b03888116600160401b90920416148061216e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c2888888858561255b565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fa5750612328565b601454600c54630100000090910460ff16908381111561222257600d5460ff16156122225750825b8161ffff1660000361223657505050612328565b60145460009061ffff841690612256906301000000900460ff1684612fbe565b6122609190613084565b60145490915060009061ffff85169061228490640100000000900460ff1685612fbe565b61228e9190613084565b9050600061229d600284613084565b905060006122ab8285612fd5565b905060006122b98483612fe8565b9050476122c5826128f7565b60006122d18247612fd5565b90506000836122e08684612fbe565b6122ea9190613084565b90506122f68682612a48565b60006123028447612fd5565b905080601660008282546123169190612fe8565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff782826130ec565b600081815260018301602052604081205461238857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec6565b506000610ec6565b600081815260018301602052604081205480156124735760006123b4600183612fd5565b85549091506000906123c890600190612fd5565b905060008660000182815481106123e1576123e16131ac565b9060005260206000200154905080876000018481548110612404576124046131ac565b600091825260208083209091019290925582815260018901909152604090208490558654879080612437576124376131c2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec6565b6000915050610ec6565b6001600160a01b03811660009081526001830160205260408120541515611c9c565b6001600160a01b0383166000908152600360205260409020548111156125025760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b61250c8382612af9565b6125168282612b3e565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8a91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125c85760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b600082156126cc576125db60088861247d565b612677576001600160a01b0387166000908152600560205260409020544210158061260f5750600d54600160401b900460ff165b6126505760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8a565b600e5461265d9042612fe8565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bb5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8a565b50601454610100900460ff166127e0565b831561272b576011546126df8684612fe8565b11156126fd5760405162461bcd60e51b8152600401610e8a906131d8565b60135485111561271f5760405162461bcd60e51b8152600401610e8a906131d8565b5060145460ff166127e0565b6011546127388684612fe8565b11156127565760405162461bcd60e51b8152600401610e8a906131d8565b61276160088861247d565b6127d2576001600160a01b038716600090815260056020526040902054421015806127955750600d54600160401b900460ff165b6127d25760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8a565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b90920416148015906128085750600f5460ff16155b8015612817575060175460ff16155b1561282557612825856121cd565b60145460009061285690879084906128519060ff64010000000082048116916301000000900416612ffb565b612b62565b905060006128648288612fd5565b90506128708988612af9565b306000908152600360205260408120805484929061288f908490612fe8565b9091555061289f90508882612b3e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e491815260200190565b60405180910390a3505050505050505050565b60155461290f9030906001600160a01b031683611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612944576129446131ac565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190613202565b816001815181106129d4576129d46131ac565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1a90859060009086903090429060040161321f565b600060405180830381600087803b158015612a3457600080fd5b505af11580156121c5573d6000803e3d6000fd5b601554612a609030906001600160a01b031684611ca3565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af29190613290565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fd5565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fe8565b60006127108260ff168460ff1686612b7a9190612fbe565b612b849190612fbe565b612b8e9190613084565b949350505050565b6001600160a01b0381168114610f1957600080fd5b60008060408385031215612bbe57600080fd5b8235612bc981612b96565b91506020830135612bd981612b96565b809150509250929050565b8015158114610f1957600080fd5b600060208284031215612c0457600080fd5b8135611c9c81612be4565b600060208083528351808285015260005b81811015612c3c57858101830151858201604001528201612c20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7057600080fd5b8235612c7b81612b96565b946020939093013593505050565b600060208284031215612c9b57600080fd5b8135611c9c81612b96565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cce57600080fd5b813567ffffffffffffffff80821115612ce657600080fd5b818401915084601f830112612cfa57600080fd5b813581811115612d0c57612d0c612ca6565b604051601f8201601f19908116603f01168101908382118183101715612d3457612d34612ca6565b81604052828152876020848701011115612d4d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8057600080fd5b8235612d8b81612b96565b91506020830135612bd981612be4565b600080600060608486031215612db057600080fd5b8335612dbb81612b96565b92506020840135612dcb81612b96565b929592945050506040919091013590565b600060208284031215612dee57600080fd5b5035919050565b803560ff81168114612e0657600080fd5b919050565b600080600080600060a08688031215612e2357600080fd5b612e2c86612df5565b9450612e3a60208701612df5565b9350612e4860408701612df5565b9250612e5660608701612df5565b9150612e6460808701612df5565b90509295509295909350565b60008060408385031215612e8357600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f06578160001904821115612eec57612eec612eb5565b80851615612ef957918102915b93841c9390800290612ed0565b509250929050565b600082612f1d57506001610ec6565b81612f2a57506000610ec6565b8160018114612f405760028114612f4a57612f66565b6001915050610ec6565b60ff841115612f5b57612f5b612eb5565b50506001821b610ec6565b5060208310610133831016604e8410600b8410161715612f89575081810a610ec6565b612f938383612ecb565b8060001904821115612fa757612fa7612eb5565b029392505050565b6000611c9c60ff841683612f0e565b8082028115828204841417610ec657610ec6612eb5565b81810381811115610ec657610ec6612eb5565b80820180821115610ec657610ec6612eb5565b60ff8181168382160190811115610ec657610ec6612eb5565b60006020828403121561302657600080fd5b5051919050565b60006020828403121561303f57600080fd5b8151611c9c81612be4565b600181811c9082168061305e57607f821691505b60208210810361307e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a157634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195757600081815260208120601f850160051c810160208610156130cd5750805b601f850160051c820191505b818110156121c5578281556001016130d9565b815167ffffffffffffffff81111561310657613106612ca6565b61311a81613114845461304a565b846130a6565b602080601f83116001811461314f57600084156131375750858301515b600019600386901b1c1916600185901b1785556121c5565b600085815260208120601f198616915b8281101561317e5788860151825594840194600190910190840161315f565b508582101561319c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321457600080fd5b8151611c9c81612b96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326f5784516001600160a01b03168352938301939183019160010161324a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b64736f6c63430008110033
Deployed Bytecode Sourcemap
18671:19915:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19057:66;;;;;;;;;;-1:-1:-1;19057:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;19057:66:0;;;;;;;;35027:110;;;;;;;;;;-1:-1:-1;35027:110:0;;;;;:::i;:::-;;:::i;35683:94::-;;;;;;;;;;-1:-1:-1;35764:5:0;;;;;;;;;;;;-1:-1:-1;;;35764:5:0;;;;35683:94;;;;;;;:::i;36682:193::-;;;;;;;;;;-1:-1:-1;36682:193:0;;;;;:::i;:::-;;:::i;:::-;;;2132:14:1;;2125:22;2107:41;;2095:2;2080:18;36682:193:0;1967:187:1;19551:36:0;;;;;;;;;;-1:-1:-1;19551:36:0;;;;;;;;;;;;;;2333:6:1;2321:19;;;2303:38;;2291:2;2276:18;19551:36:0;2159:188:1;19130:44:0;;;;;;;;;;-1:-1:-1;19130:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;38356:107;;;;;;;;;;-1:-1:-1;38356:107:0;;;;;:::i;:::-;;:::i;20290:29::-;;;;;;;;;;-1:-1:-1;20290:29:0;;;;;;;;;;;;;;3835:4:1;3823:17;;;3805:36;;3793:2;3778:18;20290:29:0;3663:184:1;35993:108:0;;;;;;;;;;-1:-1:-1;36075:18:0;;35993:108;;32096:107;;;;;;;;;;-1:-1:-1;32096:107:0;;;;;:::i;:::-;;:::i;18930:67::-;;;;;;;;;;;;;:::i;19450:34::-;;;;;;;;;;-1:-1:-1;19450:34:0;;;;;;;;;;;32325:107;;;;;;;;;;-1:-1:-1;32325:107:0;;;;;:::i;:::-;;:::i;37228:426::-;;;;;;;;;;-1:-1:-1;37228:426:0;;;;;:::i;:::-;;:::i;33090:102::-;;;;;;;;;;-1:-1:-1;33090:102:0;;;;;:::i;:::-;;:::i;3883:93::-;;;;;;;;;;-1:-1:-1;3883:93:0;;;;;:::i;:::-;;:::i;31136:412::-;;;;;;;;;;-1:-1:-1;31418:11:0;;31136:412;;;31418:11;;;;;;4959:25:1;;31444:13:0;;;;;5015:2:1;5000:18;;4993:34;31472:7:0;;;5043:18:1;;;5036:34;;;;31418:11:0;31494:8;;;;5101:2:1;5086:18;;5079:34;31517:12:0;;;;;5144:3:1;5129:19;;5122:35;4946:3;4931:19;31136:412:0;4700:463:1;34883:136:0;;;;;;;;;;-1:-1:-1;34883:136:0;;;;;:::i;:::-;;:::i;20511:34::-;;;;;;;;;;-1:-1:-1;20511:34:0;;;;-1:-1:-1;;;20511:34:0;;-1:-1:-1;;;;;20511:34:0;;;;;;-1:-1:-1;;;;;5332:32:1;;;5314:51;;5302:2;5287:18;20511:34:0;5168:203:1;3378:106:0;;;;;;;;;;-1:-1:-1;3378:106:0;;;;;:::i;:::-;;:::i;19499:37::-;;;;;;;;;;-1:-1:-1;19499:37:0;;;;;;;;;;;35891:94;;;;;;;;;;-1:-1:-1;18921:2:0;35891:94;;33855:144;;;;;;;;;;-1:-1:-1;33855:144:0;;;;;:::i;:::-;;:::i;18887:36::-;;;;;;;;;;;;18921:2;18887:36;;20343:31;;;;;;;;;;-1:-1:-1;20343:31:0;;;;;;;;;;;37662:278;;;;;;;;;;-1:-1:-1;37662:278:0;;;;;:::i;:::-;;:::i;33323:524::-;;;;;;;;;;-1:-1:-1;33323:524:0;;;;;:::i;:::-;;:::i;31594:104::-;;;;;;;;;;-1:-1:-1;31678:12:0;;31594:104;;34592:283;;;;;;;;;;-1:-1:-1;34592:283:0;;;;;:::i;:::-;;:::i;20168:24::-;;;;;;;;;;-1:-1:-1;20168:24:0;;;;;;;;32211:106;;;;;;;;;;-1:-1:-1;32211:106:0;;;;;:::i;:::-;;:::i;20476:26::-;;;;;;;;;;-1:-1:-1;20476:26:0;;;;-1:-1:-1;;;20476:26:0;;;;;;20063:45;;;;;;;;;;;;;;;;20115:44;;;;;;;;;;;;;;;;31800:96;;;;;;;;;;-1:-1:-1;31800:96:0;;;;;:::i;:::-;;:::i;20381:29::-;;;;;;;;;;-1:-1:-1;20381:29:0;;;;;;;;;;;33200:115;;;;;;;;;;-1:-1:-1;33200:115:0;;;;;:::i;:::-;;:::i;19006:44::-;;;;;;;;;;-1:-1:-1;19006:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;30972:156;;;;;;;;;;-1:-1:-1;31096:12:0;;31110:9;;30972:156;;;6365:25:1;;;6421:2;6406:18;;6399:34;;;;6338:18;30972:156:0;6191:248:1;36109:162:0;;;;;;;;;;-1:-1:-1;36109:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;36245:18:0;36213:7;36245:18;;;:9;:18;;;;;;;36109:162;19605:42;;;;;;;;;;-1:-1:-1;19605:42:0;;;;-1:-1:-1;;;19605:42:0;;;;;;20008:48;;;;;;;;;;;;;;;;19281:40;;;;;;;;;;-1:-1:-1;19281:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19870:73;;;;;;;;;;;;19901:42;19870:73;;19654:28;;;;;;;;;;-1:-1:-1;19654:28:0;;;;-1:-1:-1;;;19654:28:0;;;;;;19735;;;;;;;;;;-1:-1:-1;19735:28:0;;;;;;;;35583:92;;;;;;;;;;-1:-1:-1;35662:5:0;;-1:-1:-1;;;;;35662:5:0;35583:92;;34321;;;;;;;;;;-1:-1:-1;34321:92:0;;;;;:::i;:::-;;:::i;20554:38::-;;;;;;;;;;-1:-1:-1;20554:38:0;;;;-1:-1:-1;;;;;20554:38:0;;;35785:98;;;;;;;;;;-1:-1:-1;35868:7:0;;;;;;;;;;;;-1:-1:-1;;;35868:7:0;;;;35785:98;;32974:108;;;;;;;;;;-1:-1:-1;32974:108:0;;;;;:::i;:::-;;:::i;35145:132::-;;;;;;;;;;-1:-1:-1;35145:132:0;;;;;:::i;:::-;;:::i;19952:49::-;;;;;;;;;;;;;;;;37948:365;;;;;;;;;;-1:-1:-1;37948:365:0;;;;;:::i;:::-;;:::i;35427:148::-;;;;;;;;;;;;;:::i;32701:265::-;;;;;;;;;;;;;:::i;36279:199::-;;;;;;;;;;-1:-1:-1;36279:199:0;;;;;:::i;:::-;;:::i;2979:99::-;;;;;;;;;;;;;:::i;18842:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18842:38:0;;;;;38471:110;;;;;;;;;;-1:-1:-1;38471:110:0;;;;;:::i;:::-;;:::i;3270:100::-;;;;;;;;;;-1:-1:-1;3270:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;3349:13:0;3325:4;3349:13;;;;;;;;;;;;;;3270:100;32440:122;;;;;;;;;;-1:-1:-1;32440:122:0;;;;;:::i;:::-;;:::i;34007:306::-;;;;;;;;;;-1:-1:-1;34007:306:0;;;;;:::i;:::-;;:::i;20448:21::-;;;;;;;;;;-1:-1:-1;20448:21:0;;;;-1:-1:-1;;;20448:21:0;;;;;;19772:91;;;;;;;;;;;;19821:42;19772:91;;20199:26;;;;;;;;;;-1:-1:-1;20199:26:0;;;;;;;;;;;18790:45;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18790:45:0;;;;;19689:39;;;;;;;;;;;;;;;;32570:123;;;;;;;;;;-1:-1:-1;32570:123:0;;;;;:::i;:::-;;:::i;20601:29::-;;;;;;;;;;;;;;;;35285:134;;;;;;;;;;-1:-1:-1;35285:134:0;;;;;:::i;:::-;;:::i;36486:188::-;;;;;;;;;;-1:-1:-1;36486:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;36638:19:0;;;36606:7;36638:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;36486:188;31962:91;;;;;;;;;;-1:-1:-1;31962:91:0;;;;;:::i;:::-;;:::i;34421:163::-;;;;;;;;;;-1:-1:-1;34421:163:0;;;;;:::i;:::-;;:::i;35027:110::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;;;;;;;;;35103:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35103:26:0;;::::1;::::0;;;::::1;::::0;;35027:110::o;36682:193::-;36786:4;36808:37;36817:10;36829:7;36838:6;36808:8;:37::i;:::-;-1:-1:-1;36863:4:0;36682:193;;;;;:::o;38356:107::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;38431:24:::1;38447:7;38431:15;:24::i;:::-;38356:107:::0;:::o;32096:::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32173:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;32173:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32096:107::o;18930:67::-;18984:13;18921:2;18984;:13;:::i;:::-;18970:27;;:11;:27;:::i;:::-;18930:67;:::o;32325:107::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32399:25:::1;:9;32416:7:::0;32399:16:::1;:25::i;:::-;;32325:107:::0;:::o;37228:426::-;37362:4;37379:36;37389:6;37397:9;37408:6;37379:9;:36::i;:::-;-1:-1:-1;;;;;37455:19:0;;37428:24;37455:19;;;:11;:19;;;;;;;;37475:10;37455:31;;;;;;;;37505:26;;;;37497:59;;;;-1:-1:-1;;;37497:59:0;;9156:2:1;37497:59:0;;;9138:21:1;9195:2;9175:18;;;9168:30;-1:-1:-1;;;9214:18:1;;;9207:50;9274:18;;37497:59:0;8954:344:1;37497:59:0;37569:55;37578:6;37586:10;37598:25;37617:6;37598:16;:25;:::i;:::-;37569:8;:55::i;:::-;-1:-1:-1;37642:4:0;;37228:426;-1:-1:-1;;;;37228:426:0:o;33090:102::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33157:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;33157:27:0::1;-1:-1:-1::0;;33157:27:0;;::::1;::::0;;;::::1;::::0;;33090:102::o;3883:93::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;3951:5:::1;:17:::0;;-1:-1:-1;;;;;;3951:17:0::1;-1:-1:-1::0;;;;;3951:17:0;;;::::1;::::0;;;::::1;::::0;;3883:93::o;34883:136::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34983:9:::1;:28:::0;;-1:-1:-1;;34983:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34883:136::o;3378:106::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3455:13:0;;;::::1;:7;:13:::0;;;::::1;::::0;;;;;;:21;;-1:-1:-1;;3455:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;3378:106::o;33855:144::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33959:32:::1;33978:12;:4:::0;33985:5:::1;33978:12;:::i;:::-;33959:18;:32::i;37662:278::-:0;37807:10;37762:4;37854:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;37854:32:0;;;;;;;;;;37762:4;;37784:126;;37832:7;;37854:45;;37889:10;;37854:45;:::i;33323:524::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33510:14:::1;33540:42;33568:14:::0;33540:12;:42:::1;:::i;:::-;33510:72;;33601:8;:15;;33613:3;33601:15;33593:73;;;::::0;-1:-1:-1;;;33593:73:0;;9921:2:1;33593:73:0::1;::::0;::::1;9903:21:1::0;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;-1:-1:-1;;;10050:18:1;;;10043:43;10103:19;;33593:73:0::1;9719:409:1::0;33593:73:0::1;-1:-1:-1::0;33677:11:0::1;:26:::0;;::::1;33813::::0;;::::1;::::0;::::1;-1:-1:-1::0;;33784:18:0;;::::1;33677:26;33784:18;-1:-1:-1::0;;33714:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;33677:26:0;;::::1;::::0;::::1;33714:30:::0;;;;-1:-1:-1;;33714:30:0;;;;;;;;;;::::1;33784:18:::0;;;;33757:16;;;::::1;33784:18:::0;;;;;;;::::1;33813:26:::0;;;::::1;::::0;;;::::1;::::0;;33323:524::o;34592:283::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34726:30:::1;::::0;-1:-1:-1;;;34726:30:0;;34750:4:::1;34726:30;::::0;::::1;5314:51:1::0;34683:10:0;;34661:12:::1;::::0;-1:-1:-1;;;;;34726:15:0;::::1;::::0;::::1;::::0;5287:18:1;;34726:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34705:51;;34788:1;34775:10;:14;34767:51;;;::::0;-1:-1:-1;;;34767:51:0;;10524:2:1;34767:51:0::1;::::0;::::1;10506:21:1::0;10563:2;10543:18;;;10536:30;10602:26;10582:18;;;10575:54;10646:18;;34767:51:0::1;10322:348:1::0;34767:51:0::1;34829:38;::::0;-1:-1:-1;;;34829:38:0;;34844:10:::1;34829:38;::::0;::::1;10849:51:1::0;10916:18;;;10909:34;;;-1:-1:-1;;;;;34829:14:0;::::1;::::0;::::1;::::0;10822:18:1;;34829:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34650:225;;34592:283:::0;:::o;32211:106::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32287:22:::1;:9;32301:7:::0;32287:13:::1;:22::i;31800:96::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;31865:12:::1;:23:::0;;-1:-1:-1;;31865:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31800:96::o;33200:115::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33277:12:::1;:30:::0;33200:115::o;34321:92::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34383:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34383:22:0::1;-1:-1:-1::0;;34383:22:0;;::::1;::::0;;;::::1;::::0;;34321:92::o;32974:108::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33049:16:::1;:25:::0;;-1:-1:-1;;33049:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32974:108::o;35145:132::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35243:19:0::1;;::::0;;;:8:::1;:19;::::0;;;;:26;;-1:-1:-1;;35243:26:0::1;35265:4;35243:26;::::0;;35145:132::o;37948:365::-;38114:10;38053:4;38102:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;38102:32:0;;;;;;;;;;38153:35;;;;38145:60;;;;-1:-1:-1;;;38145:60:0;;11406:2:1;38145:60:0;;;11388:21:1;11445:2;11425:18;;;11418:30;-1:-1:-1;;;11464:18:1;;;11457:42;11516:18;;38145:60:0;11204:336:1;38145:60:0;38218:65;38227:10;38239:7;38248:34;38267:15;38248:16;:34;:::i;38218:65::-;-1:-1:-1;38301:4:0;;37948:365;-1:-1:-1;;;37948:365:0:o;35427:148::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;35492:51:::1;::::0;35477:9:::1;::::0;35492:10:::1;::::0;35516:21:::1;::::0;35477:9;35492:51;35477:9;35492:51;35516:21;35492:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35476:67;;;35562:4;35554:13;;;::::0;::::1;32701:265:::0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32775:14:::1;::::0;;32758::::1;32800:18:::0;;;;32883:32:::1;::::0;32775:14;;32846:10:::1;::::0;;;32775:14;;32758;32883:32;32758:14;32883:32;32775:14;32846:10;32883:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32867:48;;;32934:4;32926:32;;;::::0;-1:-1:-1;;;32926:32:0;;11957:2:1;32926:32:0::1;::::0;::::1;11939:21:1::0;11996:2;11976:18;;;11969:30;-1:-1:-1;;;12015:18:1;;;12008:45;12070:18;;32926:32:0::1;11755:339:1::0;32926:32:0::1;32747:219;;;32701:265::o:0;36279:199::-;36386:4;36408:40;36418:10;36430:9;36441:6;36408:9;:40::i;2979:99::-;3029:13;3062:8;3055:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2979:99;:::o;38471:110::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;38547:26:::1;38562:10;38547:14;:26::i;32440:122::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32520:34:::1;:21;32546:7:::0;32520:25:::1;:34::i;34007:306::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34162:13:::1;18921:2;34162;:13;:::i;:::-;34144:31;::::0;:15;:31:::1;:::i;:::-;34126:49:::0;-1:-1:-1;34216:13:0::1;18921:2;34216;:13;:::i;:::-;34201:28;::::0;:12;:28:::1;:::i;:::-;34240:12;:30:::0;;;;-1:-1:-1;34281:9:0::1;:24:::0;34007:306::o;32570:123::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32648:37:::1;:21;32677:7:::0;32648:28:::1;:37::i;35285:134::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35385:18:0::1;35406:5;35385:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;35385:26:0::1;::::0;;35285:134::o;31962:91::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32027:12:::1;:18:::0;31962:91::o;34421:163::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34533:19:::1;:43:::0;;-1:-1:-1;;;;;34533:43:0;;::::1;-1:-1:-1::0;;;34533:43:0::1;-1:-1:-1::0;;;;;;34533:43:0;;::::1;::::0;;;::::1;::::0;;34421:163::o;16936:173::-;17022:4;17051:50;17056:3;-1:-1:-1;;;;;17076:23:0;;17051:4;:50::i;:::-;17044:57;16936:173;-1:-1:-1;;;16936:173:0:o;36883:337::-;-1:-1:-1;;;;;37011:20:0;;37003:50;;;;-1:-1:-1;;;37003:50:0;;12686:2:1;37003:50:0;;;12668:21:1;12725:2;12705:18;;;12698:30;-1:-1:-1;;;12744:18:1;;;12737:47;12801:18;;37003:50:0;12484:341:1;37003:50:0;-1:-1:-1;;;;;37072:21:0;;37064:49;;;;-1:-1:-1;;;37064:49:0;;13032:2:1;37064:49:0;;;13014:21:1;13071:2;13051:18;;;13044:30;-1:-1:-1;;;13090:18:1;;;13083:45;13145:18;;37064:49:0;12830:339:1;37064:49:0;-1:-1:-1;;;;;37126:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;37179:33;;689:25:1;;;37179:33:0;;662:18:1;37179:33:0;;;;;;;;36883:337;;;:::o;2699:136::-;2772:16;2780:7;2772:16;;;;;;:::i;:::-;;;;;;;;2804:23;2819:7;2804:23;;;;;;:::i;:::-;;;;;;;;2699:136;:::o;17117:179::-;17206:4;17235:53;17243:3;-1:-1:-1;;;;;17263:23:0;;17235:7;:53::i;21905:2117::-;-1:-1:-1;;;;;22036:20:0;;22028:51;;;;-1:-1:-1;;;22028:51:0;;13376:2:1;22028:51:0;;;13358:21:1;13415:2;13395:18;;;13388:30;-1:-1:-1;;;13434:18:1;;;13427:48;13492:18;;22028:51:0;13174:342:1;22028:51:0;22122:9;;;;22118:155;;;-1:-1:-1;;;;;22175:16:0;;;;;;:8;:16;;;;;;;;22174:17;:41;;;;-1:-1:-1;;;;;;22196:19:0;;;;;;:8;:19;;;;;;;;22195:20;22174:41;22148:113;;;;-1:-1:-1;;;22148:113:0;;13723:2:1;22148:113:0;;;13705:21:1;13762:2;13742:18;;;13735:30;-1:-1:-1;;;13781:18:1;;;13774:40;13831:18;;22148:113:0;13521:334:1;22148:113:0;22361:15;22380:26;:9;22399:6;22380:18;:26::i;:::-;:72;;;-1:-1:-1;22423:29:0;:9;22442;22423:18;:29::i;:::-;22380:104;;;-1:-1:-1;;;;;;22469:15:0;;:7;:15;;;;;;;;;;;;;22380:104;:139;;;-1:-1:-1;;;;;;22501:18:0;;:7;:18;;;;;;;;;;;;;22380:139;22361:159;-1:-1:-1;22533:23:0;-1:-1:-1;;;;;22560:23:0;;22578:4;22560:23;;:66;;-1:-1:-1;;;;;;22600:26:0;;22621:4;22600:26;22560:66;22679:19;;22533:94;;-1:-1:-1;22640:24:0;;-1:-1:-1;;;;;22669:29:0;;;-1:-1:-1;;;22679:19:0;;;;22669:29;:72;;;;-1:-1:-1;;;;;;22715:26:0;;19821:42;22715:26;22669:72;22668:152;;;-1:-1:-1;22773:19:0;;-1:-1:-1;;;;;22760:32:0;;;-1:-1:-1;;;22773:19:0;;;;22760:32;:59;;;;-1:-1:-1;;;;;;22796:23:0;;19821:42;22796:23;22760:59;22640:181;;22850:18;:41;;;;22872:19;22850:41;:55;;;;22895:10;22850:55;22832:1183;;;22932:45;22951:6;22959:9;22970:6;22932:18;:45::i;:::-;22832:1183;;;23067:14;;-1:-1:-1;;;23067:14:0;;;;23062:523;;23157:5;;-1:-1:-1;;;;;23147:15:0;;;23157:5;;23147:15;;;;:37;;-1:-1:-1;23179:5:0;;-1:-1:-1;;;;;23166:18:0;;;23179:5;;23166:18;;23147:37;23143:427;;;23269:9;;-1:-1:-1;;;23269:9:0;;;;23265:286;;;23329:9;-1:-1:-1;;;;;23312:30:0;23321:6;-1:-1:-1;;;;;23312:30:0;;23340:1;23312:30;;;;689:25:1;;677:2;662:18;;543:177;23312:30:0;;;;;;;;23369:7;;;21905:2117;;;:::o;23265:286::-;23485:14;;-1:-1:-1;;;23485:14:0;;;;23477:50;;;;-1:-1:-1;;;23477:50:0;;14252:2:1;23477:50:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:25;14310:18;;;14303:53;14373:18;;23477:50:0;14050:347:1;23477:50:0;23704:19;;23681:10;;-1:-1:-1;;;;;23694:29:0;;;-1:-1:-1;;;23704:19:0;;;;23694:29;;:73;;-1:-1:-1;;;;;;23744:23:0;;19821:42;23744:23;23694:73;23809:19;;23681:86;;-1:-1:-1;23782:11:0;;-1:-1:-1;;;;;23796:32:0;;;-1:-1:-1;;;23809:19:0;;;;23796:32;;:79;;-1:-1:-1;;;;;;23849:26:0;;19821:42;23849:26;23796:79;23782:93;;23944:57;23960:6;23968:9;23979:6;23987:5;23994:6;23944:15;:57::i;:::-;22995:1020;;22832:1183;22017:2005;;;21905:2117;;;:::o;27835:1912::-;20726:27;:34;;-1:-1:-1;;20726:34:0;20756:4;20726:34;;;27956:4:::1;20726:27:::0;27938:24;;;:9:::1;:24;::::0;;;;;28075:12:::1;::::0;28057:30;::::1;28053:69;;;28104:7;;;28053:69;28203:13;::::0;28249:12:::1;::::0;28203:13;;;::::1;;;::::0;28346:23;;::::1;28342:130;;;28390:12;::::0;::::1;;28386:75;;;-1:-1:-1::0;28437:8:0;28386:75:::1;28556:8;:13;;28568:1;28556:13:::0;28552:52:::1;;28586:7;;;;;28552:52;28739:13;::::0;28696:25:::1;::::0;28724:40:::1;::::0;::::1;::::0;28725:27:::1;::::0;28739:13;;::::1;;;28725:11:::0;:27:::1;:::i;:::-;28724:40;;;;:::i;:::-;28816:11;::::0;28696:68;;-1:-1:-1;28775:23:0::1;::::0;28801:38:::1;::::0;::::1;::::0;28802:25:::1;::::0;28816:11;;::::1;;;28802::::0;:25:::1;:::i;:::-;28801:38;;;;:::i;:::-;28775:64:::0;-1:-1:-1;28915:16:0::1;28934:21;28954:1;28934:17:::0;:21:::1;:::i;:::-;28915:40:::0;-1:-1:-1;28966:19:0::1;28988:28;28915:40:::0;28988:17;:28:::1;:::i;:::-;28966:50:::0;-1:-1:-1;29075:17:0::1;29095:42;29122:15:::0;28966:50;29095:42:::1;:::i;:::-;29075:62:::0;-1:-1:-1;29212:21:0::1;29244:27;29075:62:::0;29244:16:::1;:27::i;:::-;29376:14;29394:41;29418:17:::0;29394:21:::1;:41;:::i;:::-;29376:60:::0;-1:-1:-1;29447:14:0::1;29489:9:::0;29465:20:::1;29474:11:::0;29376:60;29465:20:::1;:::i;:::-;29464:34;;;;:::i;:::-;29447:51;;29535:31;29549:8;29559:6;29535:13;:31::i;:::-;29632:20;29656:41;29680:17:::0;29656:21:::1;:41;:::i;:::-;29632:66;;29727:12;29709:14;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;20771:1:0::1;-1:-1:-1::0;20783:27:0;:35;;-1:-1:-1;;20783:35:0;;;27835:1912::o;3086:99::-;3156:8;:21;3167:10;3156:8;:21;:::i;14563:291::-;14626:4;15600:19;;;:12;;;:19;;;;;;14643:204;;-1:-1:-1;14686:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;14746:18;;14724:19;;;:12;;;:19;;;;;;:40;;;;14779:11;;14643:204;-1:-1:-1;14830:5:0;14823:12;;14862:601;14928:4;14966:19;;;:12;;;:19;;;;;;15002:15;;14998:458;;15034:21;15058:14;15071:1;15058:10;:14;:::i;:::-;15107:18;;15034:38;;-1:-1:-1;15087:17:0;;15107:22;;15128:1;;15107:22;:::i;:::-;15087:42;;15146:17;15166:3;:11;;15178:9;15166:22;;;;;;;;:::i;:::-;;;;;;;;;15146:42;;15234:9;15205:3;:11;;15217:13;15205:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;15258:23;;;:12;;;:23;;;;;;:36;;;15311:17;;15258:3;;15311:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15352:3;:12;;:19;15365:5;15352:19;;;;;;;;;;;15345:26;;;15395:4;15388:11;;;;;;;;14998:458;15439:5;15432:12;;;;;17304:197;-1:-1:-1;;;;;17468:23:0;;17409:4;15600:19;;;:12;;;:19;;;;;;:24;;17438:55;15471:161;26678:425;-1:-1:-1;;;;;26843:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;26843:27:0;26835:64;;;;-1:-1:-1;;;26835:64:0;;17294:2:1;26835:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;26835:64:0;17092:348:1;26835:64:0;26937:28;26950:6;26958;26937:12;:28::i;:::-;26976;26986:9;26997:6;26976:9;:28::i;:::-;27077:9;-1:-1:-1;;;;;27060:35:0;27069:6;-1:-1:-1;;;;;27060:35:0;;27088:6;27060:35;;;;689:25:1;;677:2;662:18;;543:177;24072:2598:0;-1:-1:-1;;;;;24355:20:0;;;24328:24;24355:20;;;:9;:20;;;;;;;24429:17;;;;;;;;:27;-1:-1:-1;24429:27:0;24421:64;;;;-1:-1:-1;;;24421:64:0;;17294:2:1;24421:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;24421:64:0;17092:348:1;24421:64:0;24533:9;24598:6;24594:1307;;;24626:38;:21;24657:6;24626:30;:38::i;:::-;24621:297;;-1:-1:-1;;;;;24715:17:0;;;;;;:9;:17;;;;;;24736:15;-1:-1:-1;24715:36:0;;:56;;-1:-1:-1;24755:16:0;;-1:-1:-1;;;24755:16:0;;;;24715:56;24685:148;;;;-1:-1:-1;;;24685:148:0;;17647:2:1;24685:148:0;;;17629:21:1;17686:2;17666:18;;;17659:30;-1:-1:-1;;;17705:18:1;;;17698:48;17763:18;;24685:148:0;17445:342:1;24685:148:0;24890:12;;24872:30;;:15;:30;:::i;:::-;-1:-1:-1;;;;;24852:17:0;;;;;;:9;:17;;;;;:50;24621:297;24983:9;;24973:6;:19;;24965:47;;;;-1:-1:-1;;;24965:47:0;;17994:2:1;24965:47:0;;;17976:21:1;18033:2;18013:18;;;18006:30;-1:-1:-1;;;18052:18:1;;;18045:45;18107:18;;24965:47:0;17792:339:1;24965:47:0;-1:-1:-1;25033:8:0;;;;;;;24594:1307;;;25063:5;25059:842;;;25176:12;;25147:25;25166:6;25147:16;:25;:::i;:::-;:41;;25121:119;;;;-1:-1:-1;;;25121:119:0;;;;;;;:::i;:::-;25305:8;;25295:6;:18;;25287:47;;;;-1:-1:-1;;;25287:47:0;;;;;;;:::i;:::-;-1:-1:-1;25355:7:0;;;;25059:842;;;25504:12;;25475:25;25494:6;25475:16;:25;:::i;:::-;:41;;25395:173;;;;-1:-1:-1;;;25395:173:0;;;;;;;:::i;:::-;25655:38;:21;25686:6;25655:30;:38::i;:::-;25650:206;;-1:-1:-1;;;;;25742:17:0;;;;;;:9;:17;;;;;;25763:15;-1:-1:-1;25742:36:0;;:56;;-1:-1:-1;25782:16:0;;-1:-1:-1;;;25782:16:0;;;;25742:56;25712:144;;;;-1:-1:-1;;;25712:144:0;;18683:2:1;25712:144:0;;;18665:21:1;18722:2;18702:18;;;18695:30;-1:-1:-1;;;18741:18:1;;;18734:44;18795:18;;25712:144:0;18481:338:1;25712:144:0;-1:-1:-1;25877:12:0;;;;;;;25059:842;26005:19;;-1:-1:-1;;;;;25995:29:0;;;-1:-1:-1;;;26005:19:0;;;;25995:29;;;;25994:67;;-1:-1:-1;26044:16:0;;;;26043:17;25994:67;:114;;;;-1:-1:-1;26080:27:0;;;;26079:28;25994:114;25976:170;;;26120:26;26139:6;26120:18;:26::i;:::-;26307:11;;26200:21;;26224:106;;26252:6;;26273:3;;26291:27;;26307:11;;;;;;;26291:13;;;;:27;:::i;:::-;26224:13;:106::i;:::-;26200:130;-1:-1:-1;26385:19:0;26407:24;26200:130;26407:6;:24;:::i;:::-;26385:46;;26442:28;26455:6;26463;26442:12;:28::i;:::-;26499:4;26481:24;;;;:9;:24;;;;;:41;;26509:13;;26481:24;:41;;26509:13;;26481:41;:::i;:::-;;;;-1:-1:-1;26533:33:0;;-1:-1:-1;26543:9:0;26554:11;26533:9;:33::i;:::-;26639:9;-1:-1:-1;;;;;26622:40:0;26631:6;-1:-1:-1;;;;;26622:40:0;;26650:11;26622:40;;;;689:25:1;;677:2;662:18;;543:177;26622:40:0;;;;;;;;24233:2437;;;;24072:2598;;;;;:::o;29841:511::-;29988:14;;29956:56;;29973:4;;-1:-1:-1;;;;;29988:14:0;30005:6;29956:8;:56::i;:::-;30049:16;;;30063:1;30049:16;;;;;;;;30025:21;;30049:16;;;;;;;;;;-1:-1:-1;30049:16:0;30025:40;;30094:4;30076;30081:1;30076:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30076:23:0;;;:7;;;;;;;;;;:23;;;;30120:14;;:21;;;-1:-1:-1;;;30120:21:0;;;;:14;;;;;:19;;:21;;;;;30076:7;;30120:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30110:4;30115:1;30110:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30110:31:0;;;:7;;;;;;;;;:31;30154:14;;:190;;-1:-1:-1;;;30154:190:0;;:14;;;:65;;:190;;30234:6;;30154:14;;30271:4;;30298;;30318:15;;30154:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30456:418;30621:14;;30589:61;;30606:4;;-1:-1:-1;;;;;30621:14:0;30638:11;30589:8;:61::i;:::-;30663:14;;:203;;-1:-1:-1;;;30663:203:0;;30734:4;30663:203;;;20406:34:1;;;20456:18;;;20449:34;;;30663:14:0;20499:18:1;;;20492:34;;;20542:18;;;20535:34;20585:19;;;20578:44;30840:15:0;20638:19:1;;;20631:35;-1:-1:-1;;;;;30663:14:0;;;;:30;;30701:9;;20340:19:1;;30663:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30456:418;;:::o;27558:161::-;-1:-1:-1;;;;;27649:15:0;;27629:17;27649:15;;;:9;:15;;;;;;:24;;27667:6;;27649:24;:::i;:::-;-1:-1:-1;;;;;27684:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;27558:161:0:o;27392:158::-;-1:-1:-1;;;;;27480:15:0;;27460:17;27480:15;;;:9;:15;;;;;;:24;;27498:6;;27480:24;:::i;27190:194::-;27314:7;27371:5;27357:10;27342:25;;27351:3;27342:12;;:6;:12;;;;:::i;:::-;:25;;;;:::i;:::-;27341:35;;;;:::i;:::-;27334:42;27190:194;-1:-1:-1;;;;27190:194:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:388;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:118::-;811:5;804:13;797:21;790:5;787:32;777:60;;833:1;830;823:12;848:241;904:6;957:2;945:9;936:7;932:23;928:32;925:52;;;973:1;970;963:12;925:52;1012:9;999:23;1031:28;1053:5;1031:28;:::i;1094:548::-;1206:4;1235:2;1264;1253:9;1246:21;1296:6;1290:13;1339:6;1334:2;1323:9;1319:18;1312:34;1364:1;1374:140;1388:6;1385:1;1382:13;1374:140;;;1483:14;;;1479:23;;1473:30;1449:17;;;1468:2;1445:26;1438:66;1403:10;;1374:140;;;1378:3;1563:1;1558:2;1549:6;1538:9;1534:22;1530:31;1523:42;1633:2;1626;1622:7;1617:2;1609:6;1605:15;1601:29;1590:9;1586:45;1582:54;1574:62;;;;1094:548;;;;:::o;1647:315::-;1715:6;1723;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:31;1875:5;1850:31;:::i;:::-;1900:5;1952:2;1937:18;;;;1924:32;;-1:-1:-1;;;1647:315:1:o;2352:247::-;2411:6;2464:2;2452:9;2443:7;2439:23;2435:32;2432:52;;;2480:1;2477;2470:12;2432:52;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;2604:127::-;2665:10;2660:3;2656:20;2653:1;2646:31;2696:4;2693:1;2686:15;2720:4;2717:1;2710:15;2736:922;2805:6;2858:2;2846:9;2837:7;2833:23;2829:32;2826:52;;;2874:1;2871;2864:12;2826:52;2914:9;2901:23;2943:18;2984:2;2976:6;2973:14;2970:34;;;3000:1;2997;2990:12;2970:34;3038:6;3027:9;3023:22;3013:32;;3083:7;3076:4;3072:2;3068:13;3064:27;3054:55;;3105:1;3102;3095:12;3054:55;3141:2;3128:16;3163:2;3159;3156:10;3153:36;;;3169:18;;:::i;:::-;3244:2;3238:9;3212:2;3298:13;;-1:-1:-1;;3294:22:1;;;3318:2;3290:31;3286:40;3274:53;;;3342:18;;;3362:22;;;3339:46;3336:72;;;3388:18;;:::i;:::-;3428:10;3424:2;3417:22;3463:2;3455:6;3448:18;3503:7;3498:2;3493;3489;3485:11;3481:20;3478:33;3475:53;;;3524:1;3521;3514:12;3475:53;3580:2;3575;3571;3567:11;3562:2;3554:6;3550:15;3537:46;3625:1;3603:15;;;3620:2;3599:24;3592:35;;;;-1:-1:-1;3607:6:1;2736:922;-1:-1:-1;;;;;2736:922:1:o;3852:382::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4033:9;4020:23;4052:31;4077:5;4052:31;:::i;:::-;4102:5;-1:-1:-1;4159:2:1;4144:18;;4131:32;4172:30;4131:32;4172:30;:::i;4239:456::-;4316:6;4324;4332;4385:2;4373:9;4364:7;4360:23;4356:32;4353:52;;;4401:1;4398;4391:12;4353:52;4440:9;4427:23;4459:31;4484:5;4459:31;:::i;:::-;4509:5;-1:-1:-1;4566:2:1;4551:18;;4538:32;4579:33;4538:32;4579:33;:::i;:::-;4239:456;;4631:7;;-1:-1:-1;;;4685:2:1;4670:18;;;;4657:32;;4239:456::o;5376:180::-;5435:6;5488:2;5476:9;5467:7;5463:23;5459:32;5456:52;;;5504:1;5501;5494:12;5456:52;-1:-1:-1;5527:23:1;;5376:180;-1:-1:-1;5376:180:1:o;5561:156::-;5627:20;;5687:4;5676:16;;5666:27;;5656:55;;5707:1;5704;5697:12;5656:55;5561:156;;;:::o;5722:464::-;5807:6;5815;5823;5831;5839;5892:3;5880:9;5871:7;5867:23;5863:33;5860:53;;;5909:1;5906;5899:12;5860:53;5932:27;5949:9;5932:27;:::i;:::-;5922:37;;5978:36;6010:2;5999:9;5995:18;5978:36;:::i;:::-;5968:46;;6033:36;6065:2;6054:9;6050:18;6033:36;:::i;:::-;6023:46;;6088:36;6120:2;6109:9;6105:18;6088:36;:::i;:::-;6078:46;;6143:37;6175:3;6164:9;6160:19;6143:37;:::i;:::-;6133:47;;5722:464;;;;;;;;:::o;6676:248::-;6744:6;6752;6805:2;6793:9;6784:7;6780:23;6776:32;6773:52;;;6821:1;6818;6811:12;6773:52;-1:-1:-1;;6844:23:1;;;6914:2;6899:18;;;6886:32;;-1:-1:-1;6676:248:1:o;6929:332::-;7131:2;7113:21;;;7170:1;7150:18;;;7143:29;-1:-1:-1;;;7203:2:1;7188:18;;7181:39;7252:2;7237:18;;6929:332::o;7266:127::-;7327:10;7322:3;7318:20;7315:1;7308:31;7358:4;7355:1;7348:15;7382:4;7379:1;7372:15;7398:422;7487:1;7530:5;7487:1;7544:270;7565:7;7555:8;7552:21;7544:270;;;7624:4;7620:1;7616:6;7612:17;7606:4;7603:27;7600:53;;;7633:18;;:::i;:::-;7683:7;7673:8;7669:22;7666:55;;;7703:16;;;;7666:55;7782:22;;;;7742:15;;;;7544:270;;;7548:3;7398:422;;;;;:::o;7825:806::-;7874:5;7904:8;7894:80;;-1:-1:-1;7945:1:1;7959:5;;7894:80;7993:4;7983:76;;-1:-1:-1;8030:1:1;8044:5;;7983:76;8075:4;8093:1;8088:59;;;;8161:1;8156:130;;;;8068:218;;8088:59;8118:1;8109:10;;8132:5;;;8156:130;8193:3;8183:8;8180:17;8177:43;;;8200:18;;:::i;:::-;-1:-1:-1;;8256:1:1;8242:16;;8271:5;;8068:218;;8370:2;8360:8;8357:16;8351:3;8345:4;8342:13;8338:36;8332:2;8322:8;8319:16;8314:2;8308:4;8305:12;8301:35;8298:77;8295:159;;;-1:-1:-1;8407:19:1;;;8439:5;;8295:159;8486:34;8511:8;8505:4;8486:34;:::i;:::-;8556:6;8552:1;8548:6;8544:19;8535:7;8532:32;8529:58;;;8567:18;;:::i;:::-;8605:20;;7825:806;-1:-1:-1;;;7825:806:1:o;8636:140::-;8694:5;8723:47;8764:4;8754:8;8750:19;8744:4;8723:47;:::i;8781:168::-;8854:9;;;8885;;8902:15;;;8896:22;;8882:37;8872:71;;8923:18;;:::i;9303:128::-;9370:9;;;9391:11;;;9388:37;;;9405:18;;:::i;9436:125::-;9501:9;;;9522:10;;;9519:36;;;9535:18;;:::i;9566:148::-;9654:4;9633:12;;;9647;;;9629:31;;9672:13;;9669:39;;;9688:18;;:::i;10133:184::-;10203:6;10256:2;10244:9;10235:7;10231:23;10227:32;10224:52;;;10272:1;10269;10262:12;10224:52;-1:-1:-1;10295:16:1;;10133:184;-1:-1:-1;10133:184:1:o;10954:245::-;11021:6;11074:2;11062:9;11053:7;11049:23;11045:32;11042:52;;;11090:1;11087;11080:12;11042:52;11122:9;11116:16;11141:28;11163:5;11141:28;:::i;12099:380::-;12178:1;12174:12;;;;12221;;;12242:61;;12296:4;12288:6;12284:17;12274:27;;12242:61;12349:2;12341:6;12338:14;12318:18;12315:38;12312:161;;12395:10;12390:3;12386:20;12383:1;12376:31;12430:4;12427:1;12420:15;12458:4;12455:1;12448:15;12312:161;;12099:380;;;:::o;14402:217::-;14442:1;14468;14458:132;;14512:10;14507:3;14503:20;14500:1;14493:31;14547:4;14544:1;14537:15;14575:4;14572:1;14565:15;14458:132;-1:-1:-1;14604:9:1;;14402:217::o;14750:545::-;14852:2;14847:3;14844:11;14841:448;;;14888:1;14913:5;14909:2;14902:17;14958:4;14954:2;14944:19;15028:2;15016:10;15012:19;15009:1;15005:27;14999:4;14995:38;15064:4;15052:10;15049:20;15046:47;;;-1:-1:-1;15087:4:1;15046:47;15142:2;15137:3;15133:12;15130:1;15126:20;15120:4;15116:31;15106:41;;15197:82;15215:2;15208:5;15205:13;15197:82;;;15260:17;;;15241:1;15230:13;15197:82;;15471:1352;15597:3;15591:10;15624:18;15616:6;15613:30;15610:56;;;15646:18;;:::i;:::-;15675:97;15765:6;15725:38;15757:4;15751:11;15725:38;:::i;:::-;15719:4;15675:97;:::i;:::-;15827:4;;15891:2;15880:14;;15908:1;15903:663;;;;16610:1;16627:6;16624:89;;;-1:-1:-1;16679:19:1;;;16673:26;16624:89;-1:-1:-1;;15428:1:1;15424:11;;;15420:24;15416:29;15406:40;15452:1;15448:11;;;15403:57;16726:81;;15873:944;;15903:663;14697:1;14690:14;;;14734:4;14721:18;;-1:-1:-1;;15939:20:1;;;16057:236;16071:7;16068:1;16065:14;16057:236;;;16160:19;;;16154:26;16139:42;;16252:27;;;;16220:1;16208:14;;;;16087:19;;16057:236;;;16061:3;16321:6;16312:7;16309:19;16306:201;;;16382:19;;;16376:26;-1:-1:-1;;16465:1:1;16461:14;;;16477:3;16457:24;16453:37;16449:42;16434:58;16419:74;;16306:201;-1:-1:-1;;;;;16553:1:1;16537:14;;;16533:22;16520:36;;-1:-1:-1;15471:1352:1:o;16828:127::-;16889:10;16884:3;16880:20;16877:1;16870:31;16920:4;16917:1;16910:15;16944:4;16941:1;16934:15;16960:127;17021:10;17016:3;17012:20;17009:1;17002:31;17052:4;17049:1;17042:15;17076:4;17073:1;17066:15;18136:340;18338:2;18320:21;;;18377:2;18357:18;;;18350:30;-1:-1:-1;;;18411:2:1;18396:18;;18389:46;18467:2;18452:18;;18136:340::o;18824:251::-;18894:6;18947:2;18935:9;18926:7;18922:23;18918:32;18915:52;;;18963:1;18960;18953:12;18915:52;18995:9;18989:16;19014:31;19039:5;19014:31;:::i;19080:980::-;19342:4;19390:3;19379:9;19375:19;19421:6;19410:9;19403:25;19447:2;19485:6;19480:2;19469:9;19465:18;19458:34;19528:3;19523:2;19512:9;19508:18;19501:31;19552:6;19587;19581:13;19618:6;19610;19603:22;19656:3;19645:9;19641:19;19634:26;;19695:2;19687:6;19683:15;19669:29;;19716:1;19726:195;19740:6;19737:1;19734:13;19726:195;;;19805:13;;-1:-1:-1;;;;;19801:39:1;19789:52;;19896:15;;;;19861:12;;;;19837:1;19755:9;19726:195;;;-1:-1:-1;;;;;;;19977:32:1;;;;19972:2;19957:18;;19950:60;-1:-1:-1;;;20041:3:1;20026:19;20019:35;19938:3;19080:980;-1:-1:-1;;;19080:980:1:o;20677:306::-;20765:6;20773;20781;20834:2;20822:9;20813:7;20809:23;20805:32;20802:52;;;20850:1;20847;20840:12;20802:52;20879:9;20873:16;20863:26;;20929:2;20918:9;20914:18;20908:25;20898:35;;20973:2;20962:9;20958:18;20952:25;20942:35;;20677:306;;;;;:::o
Swarm Source
ipfs://a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.