Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Token Contract
Overview
Max Total Supply
100,000,000 APEX
Holders
279 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$33,123.31
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000001 APEXValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
APEX
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-28 */ // SPDX-License-Identifier: MIT /* X: https://x.com/0xApexAI Website: 0xapex.ai Medium: https://medium.com/@0xApexAI LinkTree: https://linktr.ee/0xApexAI */ pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IAccessControl { event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } library Math { enum Rounding { Down, Up, Zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { uint256 prod0; uint256 prod1; assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } if (prod1 == 0) { return prod0 / denominator; } require(denominator > prod1, "Math: mulDiv overflow"); uint256 remainder; assembly { remainder := mulmod(x, y, denominator) prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } uint256 twos = denominator & (~denominator + 1); assembly { denominator := div(denominator, twos) prod0 := div(prod0, twos) twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; uint256 inverse = (3 * denominator) ^ 2; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 result = 1 << (log2(a) >> 1); unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } library SignedMath { function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } function average(int256 a, int256 b) internal pure returns (int256) { int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } function abs(int256 n) internal pure returns (uint256) { unchecked { return uint256(n >= 0 ? n : -n); } } } library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; modifier onlyRole(bytes32 role) { _checkRole(role); _; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(account), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createInitialSupply( address account, uint256 amount ) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function getAmountsOut( uint256 amountIn, address[] calldata path ) external view returns (uint256[] memory amounts); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IDexFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); } contract APEX is ERC20, AccessControl { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public operationsAddress; uint256 public tradingActiveBlock = 0; mapping(address => bool) public markedAsSniper; bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant AUTHENTICATOR_ROLE = keccak256("AUTHENTICATOR_ROLE"); bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public flagSnipersEnabled = true; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedOperationsAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); // Modifiers modifier onlyManager() { require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager"); _; } modifier onlyAuthenticators() { require( hasRole(AUTHENTICATOR_ROLE, msg.sender), "Not an authenticator" ); _; } constructor() payable ERC20("Apex AI", "APEX") { address newOwner = msg.sender; _setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer _setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer uint256 totalSupply = 100 * 1e6 * 1e18; buyOperationsFee = 10; buyLiquidityFee = 0; buyTotalFees = buyOperationsFee + buyLiquidityFee; sellOperationsFee = 25; sellLiquidityFee = 0; sellTotalFees = sellOperationsFee + sellLiquidityFee; maxBuyAmount = (totalSupply * 1) / 100; // 1% maxSellAmount = (totalSupply * 1) / 100; // 1% maxWallet = (totalSupply * 1) / 100; // 1% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % operationsAddress = address(msg.sender); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); _createInitialSupply(address(this), totalSupply); } receive() external payable {} function addAuthenticator(address _authenticator) external onlyManager { require(_authenticator != address(0), "Invalid address"); grantRole(AUTHENTICATOR_ROLE, _authenticator); } function removeAuthenticator(address _authenticator) external onlyManager { require(_authenticator != address(0), "Invalid address"); revokeRole(AUTHENTICATOR_ROLE, _authenticator); } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyManager { transferDelayEnabled = false; } function _excludeFromMaxTransaction( address updAds, bool isExcluded ) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction( address updAds, bool isEx ) external onlyManager { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function setAutomatedMarketMakerPair( address pair, bool value ) external onlyManager { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyTax( uint256 _operationsFee, uint256 _liquidityFee ) external onlyManager { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyOperationsFee + buyLiquidityFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellTax( uint256 _operationsFee, uint256 _liquidityFee ) external onlyManager { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellOperationsFee + sellLiquidityFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyManager { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } else { require( !markedAsSniper[from], "Snipers cannot transfer tokens" ); } if (limitsInEffect) { if (to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(lpPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled. Try again later." ); _holderLastTransferTimestamp[tx.origin] = block.number; _holderLastTransferTimestamp[to] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 15) { contractBalance = swapTokensAtAmount * 15; } bool success; // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance; uint256 ethForLiquidity = ethBalance; uint256 ethForOperations = (ethBalance * tokensForOperations) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForOperations; tokensForLiquidity = 0; tokensForOperations = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(operationsAddress).call{ value: address(this).balance }(""); } function transferForeignToken( address _token, address _to ) external onlyManager returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } function setOperationsAddress( address _operationsAddress ) external onlyManager { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); emit UpdatedOperationsAddress(_operationsAddress); } function removeLimits() external onlyManager { limitsInEffect = false; } function restoreLimits() external onlyManager { limitsInEffect = true; } function flagSniper(address wallet) external onlyAuthenticators { require( flagSnipersEnabled, "Flag sniper functionality disabled forever!" ); require(!markedAsSniper[wallet], "Wallet is already flagged."); markedAsSniper[wallet] = true; } function massFlagSnipers(address[] calldata wallets) external onlyAuthenticators { require( flagSnipersEnabled, "Flag sniper functionality disabled forever!" ); for (uint256 i = 0; i < wallets.length; i++) { markedAsSniper[wallets[i]] = true; } } function unflagSniper(address wallet) external onlyAuthenticators { require(markedAsSniper[wallet], "Wallet is already not marked."); markedAsSniper[wallet] = false; } function massUnflagSnipers(address[] calldata wallets) external onlyAuthenticators { for (uint256 i = 0; i < wallets.length; i++) { markedAsSniper[wallets[i]] = false; } } function disableFlagSnipersForever() external onlyManager { require( flagSnipersEnabled, "Flag sniper functionality already disabled forever!!" ); flagSnipersEnabled = false; } function emergencyETHRecovery() external onlyManager { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function prepareLaunch() external onlyManager { require(!tradingActive, "Trading is already active, cannot relaunch."); address _dexRouter; if (block.chainid == 1) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2 } else if (block.chainid == 11155111) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia } else if (block.chainid == 56) { _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2 } else if (block.chainid == 97) { _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2 } else if (block.chainid == 42161) { _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap } else { revert("Chain not configured"); } // initialize router dexRouter = IDexRouter(_dexRouter); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(address(dexRouter), true); require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable msg.sender, block.timestamp ); } function enableTrading() external onlyAuthenticators { require(!tradingActive, "Cannot reenable trading"); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; emit EnabledTrading(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagSnipersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagSnipersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600d55600f805463ffffffff191663010000011790556011805460ff1916600117905560076080908152664170657820414960c81b60a052610100604052600460c090815263082a08ab60e31b60e05260036200005f83826200086b565b5060046200006e82826200086b565b503391506200008f905060008051602062004448833981519152826200023d565b620000b960008051602062004468833981519152600080516020620044488339815191526200024d565b620000d4600080516020620044688339815191528262000298565b600a6013819055600060148190556a52b7d2dcc80cd2e400000091620000fb91906200094d565b601255601960168190556000601781905562000117916200094d565b60155560646200012982600162000963565b6200013591906200097d565b60065560646200014782600162000963565b6200015391906200097d565b60075560646200016582600162000963565b6200017191906200097d565b6008556127106200018482600562000963565b6200019091906200097d565b600b55600c80546001600160a01b03191633179055620001b2826001620002c6565b620001bf306001620002c6565b620001ce61dead6001620002c6565b600c54620001e7906001600160a01b03166001620002c6565b620001f482600162000329565b6200020130600162000329565b6200021061dead600162000329565b600c5462000229906001600160a01b0316600162000329565b620002353082620003e5565b505062000aa4565b620002498282620004ca565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260056020526040902060010154620002b58162000554565b620002c18383620004ca565b505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b62000344600080516020620044488339815191523362000563565b620003865760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200043d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200037d565b80600260008282546200045191906200094d565b90915550506001600160a01b03821660009081526020819052604081208054839290620004809084906200094d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004d6828262000563565b620002495760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000560813362000590565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6200059c828262000563565b6200024957620005ac81620005f4565b620005b983602062000607565b604051602001620005cc929190620009c6565b60408051601f198184030181529082905262461bcd60e51b82526200037d9160040162000a3f565b60606200058a6001600160a01b03831660145b606060006200061883600262000963565b620006259060026200094d565b6001600160401b038111156200063f576200063f620007c7565b6040519080825280601f01601f1916602001820160405280156200066a576020820181803683370190505b509050600360fc1b8160008151811062000688576200068862000a74565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006ba57620006ba62000a74565b60200101906001600160f81b031916908160001a9053506000620006e084600262000963565b620006ed9060016200094d565b90505b60018111156200076f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000725576200072562000a74565b1a60f81b8282815181106200073e576200073e62000a74565b60200101906001600160f81b031916908160001a90535060049490941c93620007678162000a8a565b9050620006f0565b508315620007c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200037d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007f257607f821691505b6020821081036200081357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c157600081815260208120601f850160051c81016020861015620008425750805b601f850160051c820191505b8181101562000863578281556001016200084e565b505050505050565b81516001600160401b03811115620008875762000887620007c7565b6200089f81620008988454620007dd565b8462000819565b602080601f831160018114620008d75760008415620008be5750858301515b600019600386901b1c1916600185901b17855562000863565b600085815260208120601f198616915b828110156200090857888601518255948401946001909101908401620008e7565b5085821015620009275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200058a576200058a62000937565b80820281158282048414176200058a576200058a62000937565b6000826200099b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015620009bd578181015183820152602001620009a3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a00816017850160208801620009a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a33816028840160208801620009a0565b01602801949350505050565b602081526000825180602084015262000a60816040850160208701620009a0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a9c5762000a9c62000937565b506000190190565b6139948062000ab46000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081
Deployed Bytecode
0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033
Deployed Bytecode Sourcemap
20597:18323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:204;;;;;;;;;;-1:-1:-1;11244:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11244:204:0;;;;;;;;15216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20744:27::-;;;;;;;;;;-1:-1:-1;20744:27:0;;;;-1:-1:-1;;;;;20744:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20744:27:0;1153:222:1;16196:194:0;;;;;;;;;;-1:-1:-1;16196:194:0;;;;;:::i;:::-;;:::i;21835:63::-;;;;;;;;;;-1:-1:-1;21835:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15537:108;;;;;;;;;;-1:-1:-1;15625:12:0;;15537:108;;;2234:25:1;;;2222:2;2207:18;15537:108:0;2088:177:1;21734:33:0;;;;;;;;;;;;;;;;16398:529;;;;;;;;;;-1:-1:-1;16398:529:0;;;;;:::i;:::-;;:::i;12224:131::-;;;;;;;;;;-1:-1:-1;12224:131:0;;;;;:::i;:::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;;12224:131;12363:147;;;;;;;;;;-1:-1:-1;12363:147:0;;;;;:::i;:::-;;:::i;:::-;;15436:93;;;;;;;;;;-1:-1:-1;15436:93:0;;15519:2;3560:36:1;;3548:2;3533:18;15436:93:0;3418:184:1;12675:218:0;;;;;;;;;;-1:-1:-1;12675:218:0;;;;;:::i;:::-;;:::i;16935:290::-;;;;;;;;;;-1:-1:-1;16935:290:0;;;;;:::i;:::-;;:::i;24492:202::-;;;;;;;;;;-1:-1:-1;24492:202:0;;;;;:::i;:::-;;:::i;20778:21::-;;;;;;;;;;-1:-1:-1;20778:21:0;;;;-1:-1:-1;;;;;20778:21:0;;;34490:352;;;;;;;;;;-1:-1:-1;34490:352:0;;;;;:::i;:::-;;:::i;21185:33::-;;;;;;;;;;-1:-1:-1;21185:33:0;;;;;;;;35920:221;;;;;;;;;;-1:-1:-1;35920:221:0;;;;;:::i;:::-;;:::i;36401:191::-;;;;;;;;;;;;;:::i;21614:32::-;;;;;;;;;;;;;;;;35039:309;;;;;;;;;;-1:-1:-1;35039:309:0;;;;;:::i;:::-;;:::i;21502:31::-;;;;;;;;;;;;;;;;21303:37;;;;;;;;;;-1:-1:-1;21303:37:0;;;;;;;;;;;20676:28;;;;;;;;;;;;;;;;21579;;;;;;;;;;;;;;;;21265:31;;;;;;;;;;-1:-1:-1;21265:31:0;;;;;;;;;;;35356:350;;;;;;;;;;-1:-1:-1;35356:350:0;;;;;:::i;:::-;;:::i;15653:143::-;;;;;;;;;;-1:-1:-1;15653:143:0;;;;;:::i;:::-;;:::i;34850:86::-;;;;;;;;;;;;;:::i;25321:338::-;;;;;;;;;;-1:-1:-1;25321:338:0;;;;;:::i;:::-;;:::i;33920:562::-;;;;;;;;;;-1:-1:-1;33920:562:0;;;;;:::i;:::-;;:::i;20642:27::-;;;;;;;;;;;;;;;;38653:258;;;;;;;;;;;;;:::i;11456:147::-;;;;;;;;;;-1:-1:-1;11456:147:0;;;;;:::i;:::-;;:::i;15324:104::-;;;;;;;;;;;;;:::i;24702:206::-;;;;;;;;;;-1:-1:-1;24702:206:0;;;;;:::i;:::-;;:::i;36606:2039::-;;;;;;;;;;;;;:::i;25911:357::-;;;;;;;;;;-1:-1:-1;25911:357:0;;;;;:::i;:::-;;:::i;11099:49::-;;;;;;;;;;-1:-1:-1;11099:49:0;11144:4;11099:49;;34944:87;;;;;;;;;;;;;:::i;17233:475::-;;;;;;;;;;-1:-1:-1;17233:475:0;;;;;:::i;:::-;;:::i;15804:200::-;;;;;;;;;;-1:-1:-1;15804:200:0;;;;;:::i;:::-;;:::i;36153:236::-;;;;;;;;;;;;;:::i;26284:340::-;;;;;;;;;;-1:-1:-1;26284:340:0;;;;;:::i;:::-;;:::i;21905:57::-;;;;;;;;;;-1:-1:-1;21905:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21087:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21087:85:0;;26632:347;;;;;;;;;;-1:-1:-1;26632:347:0;;;;;:::i;:::-;;:::i;21225:33::-;;;;;;;;;;-1:-1:-1;21225:33:0;;;;;;;;;;;26991:184;;;;;;;;;;-1:-1:-1;26991:184:0;;;;;:::i;:::-;;:::i;20961:46::-;;;;;;;;;;-1:-1:-1;20961:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21420:39;;;;;;;;;;-1:-1:-1;21420:39:0;;;;;;;;12518:149;;;;;;;;;;-1:-1:-1;12518:149:0;;;;;:::i;:::-;;:::i;21468:27::-;;;;;;;;;;;;;;;;35714:190;;;;;;;;;;-1:-1:-1;35714:190:0;;;;;:::i;:::-;;:::i;16012:176::-;;;;;;;;;;-1:-1:-1;16012:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16153:18:0;;;16126:7;16153:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16012:176;20836:33;;;;;;;;;;;;;;;;24973:100;;;;;;;;;;;;;:::i;20876:32::-;;;;;;;;;;-1:-1:-1;20876:32:0;;;;-1:-1:-1;;;;;20876:32:0;;;21016:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21016:64:0;;20917:37;;;;;;;;;;;;;;;;21540:30;;;;;;;;;;;;;;;;21653:31;;;;;;;;;;;;;;;;20711:24;;;;;;;;;;;;;;;;21693:34;;;;;;;;;;;;;;;;11244:204;11329:4;-1:-1:-1;;;;;;11353:47:0;;-1:-1:-1;;;11353:47:0;;:87;;-1:-1:-1;;;;;;;;;;855:40:0;;;11404:36;11346:94;11244:204;-1:-1:-1;;11244:204:0:o;15216:100::-;15270:13;15303:5;15296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;:::o;16196:194::-;16304:4;16321:39;323:10;16344:7;16353:6;16321:8;:39::i;:::-;-1:-1:-1;16378:4:0;16196:194;;;;:::o;16398:529::-;16538:4;16555:36;16565:6;16573:9;16584:6;16555:9;:36::i;:::-;-1:-1:-1;;;;;16631:19:0;;16604:24;16631:19;;;:11;:19;;;;;;;;323:10;16631:33;;;;;;;;16697:26;;;;16675:116;;;;-1:-1:-1;;;16675:116:0;;6178:2:1;16675:116:0;;;6160:21:1;6217:2;6197:18;;;6190:30;6256:34;6236:18;;;6229:62;-1:-1:-1;;;6307:18:1;;;6300:38;6355:19;;16675:116:0;;;;;;;;;16827:57;16836:6;323:10;16877:6;16858:16;:25;16827:8;:57::i;:::-;-1:-1:-1;16915:4:0;;16398:529;-1:-1:-1;;;;16398:529:0:o;12363:147::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12477:25:::1;12488:4;12494:7;12477:10;:25::i;:::-;12363:147:::0;;;:::o;12675:218::-;-1:-1:-1;;;;;12771:23:0;;323:10;12771:23;12763:83;;;;-1:-1:-1;;;12763:83:0;;6587:2:1;12763:83:0;;;6569:21:1;6626:2;6606:18;;;6599:30;6665:34;6645:18;;;6638:62;-1:-1:-1;;;6716:18:1;;;6709:45;6771:19;;12763:83:0;6385:411:1;12763:83:0;12859:26;12871:4;12877:7;12859:11;:26::i;:::-;12675:218;;:::o;16935:290::-;323:10;17048:4;17137:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17137:34:0;;;;;;;;;;17048:4;;17065:130;;17115:7;;17137:47;;17174:10;;17137:47;:::i;:::-;17065:8;:130::i;24492:202::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24582:28:0;::::1;24574:56;;;::::0;-1:-1:-1;;;24574:56:0;;7607:2:1;24574:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24574:56:0::1;7405:339:1::0;24574:56:0::1;24641:45;-1:-1:-1::0;;;;;;;;;;;24671:14:0::1;24641:9;:45::i;:::-;24492:202:::0;:::o;34490:352::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34618:32:0;::::1;34596:120;;;::::0;-1:-1:-1;;;34596:120:0;;7951:2:1;34596:120:0::1;::::0;::::1;7933:21:1::0;7990:2;7970:18;;;7963:30;8029:34;8009:18;;;8002:62;-1:-1:-1;;;8080:18:1;;;8073:36;8126:19;;34596:120:0::1;7749:402:1::0;34596:120:0::1;34727:17;:47:::0;;-1:-1:-1;;;;;;34727:47:0::1;-1:-1:-1::0;;;;;34727:47:0;::::1;::::0;;::::1;::::0;;;34790:44:::1;::::0;::::1;::::0;-1:-1:-1;;34790:44:0::1;34490:352:::0;:::o;35920:221::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;36033:9:::1;36028:106;36048:18:::0;;::::1;36028:106;;;36117:5;36088:14;:26;36103:7;;36111:1;36103:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36088:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36088:26:0;:34;;-1:-1:-1;;36088:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36068:3;::::1;::::0;::::1;:::i;:::-;;;;36028:106;;36401:191:::0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36502:82:::1;::::0;36465:12:::1;::::0;36510:10:::1;::::0;36534:21:::1;::::0;36465:12;36502:82;36465:12;36502:82;36534:21;36510:10;36502:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36401:191:0:o;35039:309::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35136:18:::1;::::0;;;::::1;;;35114:111;;;;-1:-1:-1::0;;;35114:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35247:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35246:23;35238:62;;;::::0;-1:-1:-1;;;35238:62:0;;9601:2:1;35238:62:0::1;::::0;::::1;9583:21:1::0;9640:2;9620:18;;;9613:30;9679:28;9659:18;;;9652:56;9725:18;;35238:62:0::1;9399:350:1::0;35238:62:0::1;-1:-1:-1::0;;;;;35311:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;35311:29:0::1;35336:4;35311:29;::::0;;35039:309::o;35356:350::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35484:18:::1;::::0;;;::::1;;;35462:111;;;;-1:-1:-1::0;;;35462:111:0::1;;;;;;;:::i;:::-;35599:9;35594:105;35614:18:::0;;::::1;35594:105;;;35683:4;35654:14;:26;35669:7;;35677:1;35669:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35654:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35654:26:0;:33;;-1:-1:-1;;35654:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35634:3;::::1;::::0;::::1;:::i;:::-;;;;35594:105;;15653:143:::0;-1:-1:-1;;;;;15770:18:0;15743:7;15770:18;;;;;;;;;;;;15653:143::o;34850:86::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;34906:14:::1;:22:::0;;-1:-1:-1;;34906:22:0::1;::::0;;34850:86::o;25321:338::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25445:4:::1;25440:155;;25502:6;::::0;-1:-1:-1;;;;;25502:6:0;;::::1;25492:16:::0;;::::1;::::0;25466:117:::1;;;::::0;-1:-1:-1;;;25466:117:0;;9956:2:1;25466:117:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;10034:34;10014:18;;;10007:62;-1:-1:-1;;;10085:18:1;;;10078:37;10132:19;;25466:117:0::1;9754:403:1::0;25466:117:0::1;-1:-1:-1::0;;;;;25605:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25605:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25321:338::o;33920:562::-;34034:10;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34065:20:0;::::1;34057:59;;;::::0;-1:-1:-1;;;34057:59:0;;10364:2:1;34057:59:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442:28;10422:18;;;10415:56;10488:18;;34057:59:0::1;10162:350:1::0;34057:59:0::1;-1:-1:-1::0;;;;;34149:23:0;::::1;34167:4;34149:23;;::::0;:41:::1;;-1:-1:-1::0;34177:13:0::1;::::0;::::1;::::0;::::1;;;34176:14;34149:41;34127:143;;;::::0;-1:-1:-1;;;34127:143:0;;10719:2:1;34127:143:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:50;10908:19;;34127:143:0::1;10517:416:1::0;34127:143:0::1;34308:39;::::0;-1:-1:-1;;;34308:39:0;;34341:4:::1;34308:39;::::0;::::1;1318:51:1::0;34281:24:0::1;::::0;-1:-1:-1;;;;;34308:24:0;::::1;::::0;::::1;::::0;1291:18:1;;34308:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34366:46;::::0;-1:-1:-1;;;34366:46:0;;-1:-1:-1;;;;;11319:32:1;;;34366:46:0::1;::::0;::::1;11301:51:1::0;11368:18;;;11361:34;;;34281:66:0;;-1:-1:-1;34366:23:0;;::::1;::::0;::::1;::::0;11274:18:1;;34366:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34428;::::0;;-1:-1:-1;;;;;11319:32:1;;11301:51;;11383:2;11368:18;;11361:34;;;34358:54:0;;-1:-1:-1;34428:46:0::1;::::0;11274:18:1;34428:46:0::1;;;;;;;34046:436;33920:562:::0;;;;:::o;38653:258::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;38726:13:::1;::::0;::::1;::::0;::::1;;;38725:14;38717:50;;;::::0;-1:-1:-1;;;38717:50:0;;11858:2:1;38717:50:0::1;::::0;::::1;11840:21:1::0;11897:2;11877:18;;;11870:30;11936:25;11916:18;;;11909:53;11979:18;;38717:50:0::1;11656:347:1::0;38717:50:0::1;38778:13;:20:::0;;-1:-1:-1;;38809:18:0;;;;;38859:12:::1;38838:18;:33:::0;38887:16:::1;::::0;::::1;::::0;-1:-1:-1;;38887:16:0::1;38653:258::o:0;11456:147::-;11542:4;11566:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11566:29:0;;;;;;;;;;;;;;;11456:147::o;15324:104::-;15380:13;15413:7;15406:14;;;;;:::i;24702:206::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24795:28:0;::::1;24787:56;;;::::0;-1:-1:-1;;;24787:56:0;;7607:2:1;24787:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24787:56:0::1;7405:339:1::0;24787:56:0::1;24854:46;-1:-1:-1::0;;;;;;;;;;;24885:14:0::1;24854:10;:46::i;36606:2039::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36672:13:::1;::::0;::::1;::::0;::::1;;;36671:14;36663:70;;;::::0;-1:-1:-1;;;36663:70:0;;12210:2:1;36663:70:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;-1:-1:-1;;;12339:18:1;;;12332:41;12390:19;;36663:70:0::1;12008:407:1::0;36663:70:0::1;36751:18;36786:13;36803:1;36786:18:::0;36782:730:::1;;-1:-1:-1::0;36834:42:0::1;36782:730;;;36917:13;36934:8;36917:25:::0;36913:599:::1;;-1:-1:-1::0;36972:42:0::1;36913:599;;;37052:13;37069:2;37052:19:::0;37048:464:::1;;-1:-1:-1::0;37101:42:0::1;37048:464;;;37186:13;37203:2;37186:19:::0;37182:330:::1;;-1:-1:-1::0;37235:42:0::1;37182:330;;;37320:13;37337:5;37320:22:::0;37316:196:::1;;-1:-1:-1::0;37372:42:0::1;37316:196;;;37470:30;::::0;-1:-1:-1;;;37470:30:0;;12622:2:1;37470:30:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;-1:-1:-1;;;12680:18:1;;;12673:50;12740:18;;37470:30:0::1;12420:344:1::0;37316:196:0::1;37554:9;:34:::0;;-1:-1:-1;;;;;;37554:34:0::1;-1:-1:-1::0;;;;;37554:34:0;::::1;::::0;;::::1;::::0;;;37654:19:::1;::::0;;-1:-1:-1;;;37654:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;37554:34;37654:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37642:43:0::1;;37708:4;37728:9;;;;;;;;;-1:-1:-1::0;;;;;37728:9:0::1;-1:-1:-1::0;;;;;37728:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37642:113;::::0;-1:-1:-1;;;;;;37642:113:0::1;::::0;;;;;;-1:-1:-1;;;;;13255:15:1;;;37642:113:0::1;::::0;::::1;13237:34:1::0;13307:15;;13287:18;;;13280:43;13172:18;;37642:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37633:6;:122:::0;;-1:-1:-1;;;;;;37633:122:0::1;-1:-1:-1::0;;;;;37633:122:0;;;::::1;::::0;;::::1;::::0;;37768:49:::1;::::0;-1:-1:-1;37768:26:0::1;:49::i;:::-;37865:6;::::0;37828:51:::1;::::0;-1:-1:-1;;;;;37865:6:0::1;::::0;37828:28:::1;:51::i;:::-;37935:9;::::0;37900:52:::1;::::0;-1:-1:-1;;;;;37935:9:0::1;::::0;37900:26:::1;:52::i;:::-;37987:9;::::0;37963:41:::1;::::0;-1:-1:-1;;;;;37987:9:0::1;::::0;37963:15:::1;:41::i;:::-;38065:1;38041:21;:25;38019:110;;;::::0;-1:-1:-1;;;38019:110:0;;13536:2:1;38019:110:0::1;::::0;::::1;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:34;13594:18;;;13587:62;-1:-1:-1;;;13665:18:1;;;13658:33;13708:19;;38019:110:0::1;13334:399:1::0;38019:110:0::1;38189:1;38162:24;38180:4;38162:9;:24::i;:::-;:28;38140:116;;;::::0;-1:-1:-1;;;38140:116:0;;13940:2:1;38140:116:0::1;::::0;::::1;13922:21:1::0;13979:2;13959:18;;;13952:30;14018:34;13998:18;;;13991:62;-1:-1:-1;;;14069:18:1;;;14062:36;14115:19;;38140:116:0::1;13738:402:1::0;38140:116:0::1;38312:9;::::0;38280:69:::1;::::0;38297:4:::1;::::0;-1:-1:-1;;;;;38312:9:0::1;38324:24;38297:4:::0;38324:9:::1;:24::i;38280:69::-;38362:9;::::0;-1:-1:-1;;;;;38362:9:0::1;:25;38395:21;38440:4;38460:24;38440:4:::0;38460:9:::1;:24::i;:::-;38499:1;38542::::0;38585:10:::1;38610:15;38362:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25911:357::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26061:6:::1;::::0;-1:-1:-1;;;;;26061:6:0;;::::1;26053:14:::0;;::::1;::::0;26031:121:::1;;;::::0;-1:-1:-1;;;26031:121:0;;15270:2:1;26031:121:0::1;::::0;::::1;15252:21:1::0;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;15419:27;15399:18;;;15392:55;15464:19;;26031:121:0::1;15068:421:1::0;26031:121:0::1;26163:41;26192:4;26198:5;26163:28;:41::i;:::-;26220:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26220:40:0;::::1;::::0;::::1;::::0;;;::::1;25911:357:::0;;:::o;34944:87::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;35002:14:::1;:21:::0;;-1:-1:-1;;35002:21:0::1;35019:4;35002:21;::::0;;34944:87::o;17233:475::-;323:10;17351:4;17395:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17395:34:0;;;;;;;;;;17462:35;;;;17440:122;;;;-1:-1:-1;;;17440:122:0;;15696:2:1;17440:122:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:35;15870:19;;17440:122:0;15494:401:1;17440:122:0;17598:67;323:10;17621:7;17649:15;17630:16;:34;17598:8;:67::i;:::-;-1:-1:-1;17696:4:0;;17233:475;-1:-1:-1;;;17233:475:0:o;15804:200::-;15915:4;15932:42;323:10;15956:9;15967:6;15932:9;:42::i;36153:236::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36244:18:::1;::::0;;;::::1;;;36222:120;;;::::0;-1:-1:-1;;;36222:120:0;;16102:2:1;36222:120:0::1;::::0;::::1;16084:21:1::0;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:50;16291:19;;36222:120:0::1;15900:416:1::0;36222:120:0::1;36355:18;:26:::0;;-1:-1:-1;;36355:26:0::1;::::0;;36153:236::o;26284:340::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26410:16:::1;:33:::0;;;26454:15:::1;:31:::0;;;26511:34:::1;26472:13:::0;26429:14;26511:34:::1;:::i;:::-;26496:12;:49:::0;;;26580:2:::1;-1:-1:-1::0;26564:18:0::1;26556:60;;;::::0;-1:-1:-1;;;26556:60:0;;16523:2:1;26556:60:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26556:60:0::1;16321:353:1::0;26632:347:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26759:17:::1;:34:::0;;;26804:16:::1;:32:::0;;;26863:36:::1;26823:13:::0;26779:14;26863:36:::1;:::i;:::-;26847:13;:52:::0;;;26935:2:::1;-1:-1:-1::0;26918:19:0::1;26910:61;;;::::0;-1:-1:-1;;;26910:61:0;;16523:2:1;26910:61:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26910:61:0::1;16321:353:1::0;26991:184:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27078:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27078:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27133:34;;445:41:1;;;27133:34:0::1;::::0;418:18:1;27133:34:0::1;;;;;;;26991:184:::0;;:::o;12518:149::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12633:26:::1;12645:4;12651:7;12633:11;:26::i;35714:190::-:0;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35799:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35791:64;;;::::0;-1:-1:-1;;;35791:64:0;;16881:2:1;35791:64:0::1;::::0;::::1;16863:21:1::0;16920:2;16900:18;;;16893:30;16959:31;16939:18;;;16932:59;17008:18;;35791:64:0::1;16679:353:1::0;35791:64:0::1;-1:-1:-1::0;;;;;35866:22:0::1;35891:5;35866:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;35866:30:0::1;::::0;;35714:190::o;24973:100::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25037:20:::1;:28:::0;;-1:-1:-1;;25037:28:0::1;::::0;;24973:100::o;18699:380::-;-1:-1:-1;;;;;18835:19:0;;18827:68;;;;-1:-1:-1;;;18827:68:0;;17239:2:1;18827:68:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:34;17412:19;;18827:68:0;17037:400:1;18827:68:0;-1:-1:-1;;;;;18914:21:0;;18906:68;;;;-1:-1:-1;;;18906:68:0;;17644:2:1;18906:68:0;;;17626:21:1;17683:2;17663:18;;;17656:30;17722:34;17702:18;;;17695:62;-1:-1:-1;;;17773:18:1;;;17766:32;17815:19;;18906:68:0;17442:398:1;18906:68:0;-1:-1:-1;;;;;18987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19039:32;;2234:25:1;;;19039:32:0;;2207:18:1;19039:32:0;;;;;;;18699:380;;;:::o;27183:4356::-;-1:-1:-1;;;;;27315:18:0;;27307:68;;;;-1:-1:-1;;;27307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27394:16:0;;27386:64;;;;-1:-1:-1;;;27386:64:0;;;;;;;:::i;:::-;27478:1;27469:6;:10;27461:52;;;;-1:-1:-1;;;27461:52:0;;18857:2:1;27461:52:0;;;18839:21:1;18896:2;18876:18;;;18869:30;18935:31;18915:18;;;18908:59;18984:18;;27461:52:0;18655:353:1;27461:52:0;27531:13;;;;;;;27526:329;;-1:-1:-1;;;;;27587:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27616:23:0;;;;;;:19;:23;;;;;;;;27587:52;27561:136;;;;-1:-1:-1;;;27561:136:0;;19215:2:1;27561:136:0;;;19197:21:1;19254:2;19234:18;;;19227:30;-1:-1:-1;;;19273:18:1;;;19266:52;19335:18;;27561:136:0;19013:346:1;27561:136:0;27526:329;;;-1:-1:-1;;;;;27757:20:0;;;;;;:14;:20;;;;;;;;27756:21;27730:113;;;;-1:-1:-1;;;27730:113:0;;19566:2:1;27730:113:0;;;19548:21:1;19605:2;19585:18;;;19578:30;19644:32;19624:18;;;19617:60;19694:18;;27730:113:0;19364:354:1;27730:113:0;27871:14;;;;27867:2060;;;-1:-1:-1;;;;;27906:21:0;;27920:6;27906:21;;;;:68;;-1:-1:-1;;;;;;27949:25:0;;;;;;:19;:25;;;;;;;;27948:26;27906:68;:113;;;;-1:-1:-1;;;;;;27996:23:0;;;;;;:19;:23;;;;;;;;27995:24;27906:113;27902:2014;;;28058:20;;;;28054:692;;;28121:9;;-1:-1:-1;;;;;28107:24:0;;;28121:9;;28107:24;;;;:49;;-1:-1:-1;28149:6:0;;-1:-1:-1;;;;;28135:21:0;;;28149:6;;28135:21;;28107:49;28103:624;;;28298:16;28313:1;28298:12;:16;:::i;:::-;28252:9;28223:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;28419:16:0;28434:1;28419:12;:16;:::i;:::-;-1:-1:-1;;;;;28351:32:0;;;;;;:28;:32;;;;;;:84;28223:212;28185:363;;;;-1:-1:-1;;;28185:363:0;;20058:2:1;28185:363:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:51;20248:19;;28185:363:0;19856:417:1;28185:363:0;28604:9;28575:39;;;;:28;:39;;;;;;28617:12;28575:54;;;;-1:-1:-1;;;;;28656:32:0;;;;;;:47;28103:624;-1:-1:-1;;;;;28820:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28877:35:0;;;;;;:31;:35;;;;;;;;28876:36;28820:92;28794:1107;;;28999:12;;28989:6;:22;;28955:148;;;;-1:-1:-1;;;28955:148:0;;20480:2:1;28955:148:0;;;20462:21:1;20519:2;20499:18;;;20492:30;20558:34;20538:18;;;20531:62;-1:-1:-1;;;20609:18:1;;;20602:38;20657:19;;28955:148:0;20278:404:1;28955:148:0;29186:9;;29169:13;29179:2;29169:9;:13::i;:::-;29160:22;;:6;:22;:::i;:::-;:35;;29126:140;;;;-1:-1:-1;;;29126:140:0;;20889:2:1;29126:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29126:140:0;20687:343:1;29126:140:0;28794:1107;;;-1:-1:-1;;;;;29364:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;29419:37:0;;;;;;:31;:37;;;;;;;;29418:38;29364:92;29338:563;;;29543:13;;29533:6;:23;;29499:151;;;;-1:-1:-1;;;29499:151:0;;21237:2:1;29499:151:0;;;21219:21:1;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:40;21416:19;;29499:151:0;21035:406:1;29338:563:0;-1:-1:-1;;;;;29681:35:0;;;;;;:31;:35;;;;;;;;29676:225;;29801:9;;29784:13;29794:2;29784:9;:13::i;:::-;29775:22;;:6;:22;:::i;:::-;:35;;29741:140;;;;-1:-1:-1;;;29741:140:0;;20889:2:1;29741:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29741:140:0;20687:343:1;29741:140:0;29939:28;29970:24;29988:4;29970:9;:24::i;:::-;30046:18;;29939:55;;-1:-1:-1;30022:42:0;;;;;;;30095:22;;-1:-1:-1;30106:11:0;;;;;;;30095:22;:35;;;;-1:-1:-1;30122:8:0;;-1:-1:-1;;;30122:8:0;;;;30121:9;30095:35;:68;;;;-1:-1:-1;;;;;;30134:29:0;;;;;;:25;:29;;;;;;;;30095:68;30077:196;;;30190:8;:15;;-1:-1:-1;;;;30190:15:0;-1:-1:-1;;;30190:15:0;;;30220:10;:8;:10::i;:::-;30245:8;:16;;-1:-1:-1;;;;30245:16:0;;;30077:196;-1:-1:-1;;;;;30404:25:0;;30285:12;30404:25;;;:19;:25;;;;;;30300:4;;30404:25;;;:52;;-1:-1:-1;;;;;;30433:23:0;;;;;;:19;:23;;;;;;;;30404:52;30400:100;;;-1:-1:-1;30483:5:0;30400:100;30512:12;30617:7;30613:873;;;-1:-1:-1;;;;;30673:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30722:1;30706:13;;:17;30673:50;30669:668;;;30778:3;30761:13;;30752:6;:22;;;;:::i;:::-;30751:30;;;;:::i;:::-;30744:37;;30850:13;;30830:16;;30823:4;:23;;;;:::i;:::-;30822:41;;;;:::i;:::-;30800:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30976:13:0;;30934:17;;30927:24;;:4;:24;:::i;:::-;30926:63;;;;:::i;:::-;30882:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;30669:668:0;;-1:-1:-1;30669:668:0;;-1:-1:-1;;;;;31051:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;31101:1;31086:12;;:16;31051:51;31047:290;;;31156:3;31140:12;;31131:6;:21;;;;:::i;:::-;31130:29;;;;:::i;:::-;31123:36;;31227:12;;31208:15;;31201:4;:22;;;;:::i;:::-;31200:39;;;;:::i;:::-;31178:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31309:12:0;;31289:16;;31282:23;;:4;:23;:::i;:::-;31281:40;;;;:::i;:::-;31258:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31047:290:0;31357:8;;31353:91;;31386:42;31402:4;31416;31423;31386:15;:42::i;:::-;31460:14;31470:4;31460:14;;:::i;:::-;;;30613:873;31498:33;31514:4;31520:2;31524:6;31498:15;:33::i;:::-;27296:4243;;;;27183:4356;;;:::o;11611:105::-;11678:30;11689:4;323:10;11678;:30::i;13280:238::-;13364:22;13372:4;13378:7;13364;:22::i;:::-;13359:152;;13403:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13403:29:0;;;;;;;;;:36;;-1:-1:-1;;13403:36:0;13435:4;13403:36;;;13486:12;323:10;;243:98;13486:12;-1:-1:-1;;;;;13459:40:0;13477:7;-1:-1:-1;;;;;13459:40:0;13471:4;13459:40;;;;;;;;;;13280:238;;:::o;13526:239::-;13610:22;13618:4;13624:7;13610;:22::i;:::-;13606:152;;;13681:5;13649:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13649:29:0;;;;;;;;;;:37;;-1:-1:-1;;13649:37:0;;;13706:40;323:10;;13649:12;;13706:40;;13681:5;13706:40;13526:239;;:::o;25081:232::-;-1:-1:-1;;;;;25194:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;25194:52:0;;;;;;;;;;25262:43;;22009:51:1;;;22076:18;;;22069:50;25262:43:0;;21982:18:1;25262:43:0;;;;;;;25081:232;;:::o;25667:236::-;-1:-1:-1;;;;;25750:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25750:39:0;;;;;;;25800;25750:31;:39;25800:26;:39::i;32643:1269::-;32682:23;32708:24;32726:4;32708:9;:24::i;:::-;32682:50;;32743:25;32792:19;;32771:18;;:40;;;;:::i;:::-;32743:68;-1:-1:-1;32828:20:0;;;:46;;-1:-1:-1;32852:22:0;;32828:46;32824:85;;;32891:7;;32643:1269::o;32824:85::-;32943:18;;:23;;32964:2;32943:23;:::i;:::-;32925:15;:41;32921:115;;;33001:18;;:23;;33022:2;33001:23;:::i;:::-;32983:41;;32921:115;33048:12;33122:23;33235:1;33202:17;33167:18;;33149:15;:36;;;;:::i;:::-;33148:71;;;;:::i;:::-;:88;;;;:::i;:::-;33122:114;-1:-1:-1;33249:51:0;33266:33;33122:114;33266:15;:33;:::i;:::-;33249:16;:51::i;:::-;33514:18;;33334:21;;;;33313:18;;33514:22;;33535:1;;33514:22;:::i;:::-;33493:44;;:17;:44;:::i;:::-;33456:19;;33443:32;;:10;:32;:::i;:::-;33442:96;;;;:::i;:::-;33415:123;-1:-1:-1;33551:35:0;33415:123;33551:35;;:::i;:::-;33620:1;33599:18;:22;;;33632:19;:23;33551:35;-1:-1:-1;33672:19:0;;;;;:42;;;33713:1;33695:15;:19;33672:42;33668:121;;;33731:46;33744:15;33761;33731:12;:46::i;:::-;33823:17;;33815:89;;-1:-1:-1;;;;;33823:17:0;;;;33868:21;;33815:89;;;;33868:21;33823:17;33815:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32643:1269:0:o;17716:651::-;-1:-1:-1;;;;;17856:20:0;;17848:70;;;;-1:-1:-1;;;17848:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17937:23:0;;17929:71;;;;-1:-1:-1;;;17929:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18037:17:0;;18013:21;18037:17;;;;;;;;;;;18087:23;;;;18065:111;;;;-1:-1:-1;;;18065:111:0;;22332:2:1;18065:111:0;;;22314:21:1;22371:2;22351:18;;;22344:30;22410:34;22390:18;;;22383:62;-1:-1:-1;;;22461:18:1;;;22454:36;22507:19;;18065:111:0;22130:402:1;18065:111:0;-1:-1:-1;;;;;18212:17:0;;;:9;:17;;;;;;;;;;;18232:22;;;18212:42;;18276:20;;;;;;;;:30;;18248:6;;18212:9;18276:30;;18248:6;;18276:30;:::i;:::-;;;;;;;;18341:9;-1:-1:-1;;;;;18324:35:0;18333:6;-1:-1:-1;;;;;18324:35:0;;18352:6;18324:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;18324:35:0;;;;;;;;17837:530;17716:651;;;:::o;11724:492::-;11813:22;11821:4;11827:7;11813;:22::i;:::-;11808:401;;12001:28;12021:7;12001:19;:28::i;:::-;12102:38;12130:4;12137:2;12102:19;:38::i;:::-;11906:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11906:257:0;;;;;;;;;;-1:-1:-1;;;11852:345:0;;;;;;;:::i;31547:571::-;31697:16;;;31711:1;31697:16;;;;;;;;31673:21;;31697:16;;;;;;;;;;-1:-1:-1;31697:16:0;31673:40;;31742:4;31724;31729:1;31724:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31724:23:0;;;:7;;;;;;;;;;:23;;;;31768:9;;:16;;;-1:-1:-1;;;31768:16:0;;;;:9;;;;;:14;;:16;;;;;31724:7;;31768:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31758:4;31763:1;31758:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31758:26:0;;;:7;;;;;;;;;:26;31829:9;;31797:56;;31814:4;;31829:9;31841:11;31797:8;:56::i;:::-;31892:9;;:218;;-1:-1:-1;;;31892:218:0;;-1:-1:-1;;;;;31892:9:0;;;;:60;;:218;;31967:11;;31892:9;;32037:4;;32064;;32084:15;;31892:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31602:516;31547:571;:::o;32126:509::-;32306:9;;32274:56;;32291:4;;-1:-1:-1;;;;;32306:9:0;32318:11;32274:8;:56::i;:::-;32373:9;;:254;;-1:-1:-1;;;32373:254:0;;-1:-1:-1;;;;;32373:9:0;;;;:25;;32406:9;;32373:254;;32439:4;;32459:11;;32373:9;;;;32579:6;;32601:15;;32373:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32126:509;;:::o;10558:151::-;10616:13;10649:52;-1:-1:-1;;;;;10661:22:0;;9095:2;10103:447;10178:13;10204:19;10236:10;10240:6;10236:1;:10;:::i;:::-;:14;;10249:1;10236:14;:::i;:::-;10226:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10226:25:0;;10204:47;;-1:-1:-1;;;10262:6:0;10269:1;10262:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10262:15:0;;;;;;;;;-1:-1:-1;;;10288:6:0;10295:1;10288:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10288:15:0;;;;;;;;-1:-1:-1;10319:9:0;10331:10;10335:6;10331:1;:10;:::i;:::-;:14;;10344:1;10331:14;:::i;:::-;10319:26;;10314:131;10351:1;10347;:5;10314:131;;;-1:-1:-1;;;10395:5:0;10403:3;10395:11;10386:21;;;;;;;:::i;:::-;;;;10374:6;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10374:33:0;;;;;;;;-1:-1:-1;10432:1:0;10422:11;;;;;10354:3;;;:::i;:::-;;;10314:131;;;-1:-1:-1;10463:10:0;;10455:55;;;;-1:-1:-1;;;10455:55:0;;24814:2:1;10455:55:0;;;24796:21:1;;;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;24944:18;;10455:55:0;24612:356:1;10455:55:0;10535:6;10103:447;-1:-1:-1;;;10103:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2270:456::-;2347:6;2355;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2471:9;2458:23;2490:31;2515:5;2490:31;:::i;:::-;2540:5;-1:-1:-1;2597:2:1;2582:18;;2569:32;2610:33;2569:32;2610:33;:::i;:::-;2270:456;;2662:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2270:456::o;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;3098:315::-;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:31;3377:5;3352:31;:::i;:::-;3402:5;3392:15;;;3098:315;;;;;:::o;3815:615::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4142:6;4131:9;4127:22;4117:32;;4187:7;4180:4;4176:2;4172:13;4168:27;4158:55;;4209:1;4206;4199:12;4158:55;4249:2;4236:16;4275:2;4267:6;4264:14;4261:34;;;4291:1;4288;4281:12;4261:34;4344:7;4339:2;4329:6;4326:1;4322:14;4318:2;4314:23;4310:32;4307:45;4304:65;;;4365:1;4362;4355:12;4304:65;4396:2;4388:11;;;;;4418:6;;-1:-1:-1;3815:615:1;;-1:-1:-1;;;;3815:615:1:o;4435:118::-;4521:5;4514:13;4507:21;4500:5;4497:32;4487:60;;4543:1;4540;4533:12;4558:382;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;-1:-1:-1;4865:2:1;4850:18;;4837:32;4878:30;4837:32;4878:30;:::i;4945:388::-;5013:6;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5129:9;5116:23;5148:31;5173:5;5148:31;:::i;:::-;5198:5;-1:-1:-1;5255:2:1;5240:18;;5227:32;5268:33;5227:32;5268:33;:::i;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:380::-;5670:1;5666:12;;;;5713;;;5734:61;;5788:4;5780:6;5776:17;5766:27;;5734:61;5841:2;5833:6;5830:14;5810:18;5807:38;5804:161;;5887:10;5882:3;5878:20;5875:1;5868:31;5922:4;5919:1;5912:15;5950:4;5947:1;5940:15;5804:161;;5591:380;;;:::o;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:337::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;-1:-1:-1;;;7338:2:1;7323:18;;7316:43;7391:2;7376:18;;7063:337::o;8156:344::-;8358:2;8340:21;;;8397:2;8377:18;;;8370:30;-1:-1:-1;;;8431:2:1;8416:18;;8409:50;8491:2;8476:18;;8156:344::o;8505:127::-;8566:10;8561:3;8557:20;8554:1;8547:31;8597:4;8594:1;8587:15;8621:4;8618:1;8611:15;8637:135;8676:3;8697:17;;;8694:43;;8717:18;;:::i;:::-;-1:-1:-1;8764:1:1;8753:13;;8637:135::o;8987:407::-;9189:2;9171:21;;;9228:2;9208:18;;;9201:30;9267:34;9262:2;9247:18;;9240:62;-1:-1:-1;;;9333:2:1;9318:18;;9311:41;9384:3;9369:19;;8987:407::o;10938:184::-;11008:6;11061:2;11049:9;11040:7;11036:23;11032:32;11029:52;;;11077:1;11074;11067:12;11029:52;-1:-1:-1;11100:16:1;;10938:184;-1:-1:-1;10938:184:1:o;11406:245::-;11473:6;11526:2;11514:9;11505:7;11501:23;11497:32;11494:52;;;11542:1;11539;11532:12;11494:52;11574:9;11568:16;11593:28;11615:5;11593:28;:::i;12769:251::-;12839:6;12892:2;12880:9;12871:7;12867:23;12863:32;12860:52;;;12908:1;12905;12898:12;12860:52;12940:9;12934:16;12959:31;12984:5;12959:31;:::i;14145:607::-;-1:-1:-1;;;;;14504:15:1;;;14486:34;;14551:2;14536:18;;14529:34;;;;14594:2;14579:18;;14572:34;;;;14637:2;14622:18;;14615:34;;;;14686:15;;;14680:3;14665:19;;14658:44;14466:3;14718:19;;14711:35;;;;14435:3;14420:19;;14145:607::o;14757:306::-;14845:6;14853;14861;14914:2;14902:9;14893:7;14889:23;14885:32;14882:52;;;14930:1;14927;14920:12;14882:52;14959:9;14953:16;14943:26;;15009:2;14998:9;14994:18;14988:25;14978:35;;15053:2;15042:9;15038:18;15032:25;15022:35;;14757:306;;;;;:::o;17845:401::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:34;18120:2;18105:18;;18098:62;-1:-1:-1;;;18191:2:1;18176:18;;18169:35;18236:3;18221:19;;17845:401::o;18251:399::-;18453:2;18435:21;;;18492:2;18472:18;;;18465:30;18531:34;18526:2;18511:18;;18504:62;-1:-1:-1;;;18597:2:1;18582:18;;18575:33;18640:3;18625:19;;18251:399::o;19723:128::-;19790:9;;;19811:11;;;19808:37;;;19825:18;;:::i;21446:168::-;21519:9;;;21550;;21567:15;;;21561:22;;21547:37;21537:71;;21588:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;22537:812::-;22948:25;22943:3;22936:38;22918:3;23003:6;22997:13;23019:75;23087:6;23082:2;23077:3;23073:12;23066:4;23058:6;23054:17;23019:75;:::i;:::-;-1:-1:-1;;;23153:2:1;23113:16;;;23145:11;;;23138:40;23203:13;;23225:76;23203:13;23287:2;23279:11;;23272:4;23260:17;;23225:76;:::i;:::-;23321:17;23340:2;23317:26;;22537:812;-1:-1:-1;;;;22537:812:1:o;23354:127::-;23415:10;23410:3;23406:20;23403:1;23396:31;23446:4;23443:1;23436:15;23470:4;23467:1;23460:15;23486:980;23748:4;23796:3;23785:9;23781:19;23827:6;23816:9;23809:25;23853:2;23891:6;23886:2;23875:9;23871:18;23864:34;23934:3;23929:2;23918:9;23914:18;23907:31;23958:6;23993;23987:13;24024:6;24016;24009:22;24062:3;24051:9;24047:19;24040:26;;24101:2;24093:6;24089:15;24075:29;;24122:1;24132:195;24146:6;24143:1;24140:13;24132:195;;;24211:13;;-1:-1:-1;;;;;24207:39:1;24195:52;;24302:15;;;;24267:12;;;;24243:1;24161:9;24132:195;;;-1:-1:-1;;;;;;;24383:32:1;;;;24378:2;24363:18;;24356:60;-1:-1:-1;;;24447:3:1;24432:19;24425:35;24344:3;23486:980;-1:-1:-1;;;23486:980:1:o;24471:136::-;24510:3;24538:5;24528:39;;24547:18;;:::i;:::-;-1:-1:-1;;;24583:18:1;;24471:136::o
Swarm Source
ipfs://0504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f
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.