Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 5 from a total of 5 transactions
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HATERCOIN
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-21 */ /** *Website: www.HaterCo.in *the anti crypto for our sister *nft platform www.NFTea.app * *Twitter: twitter.com/victorblokchain *https://discord.gg/tJDftMTueP * *HaterCo.in is a gamified meme token *if your balance exceeds 1% of the total supply others can hate on you... *when someone hates on you, it prevents you from selling... unless you pay (burn) the hater fee, which is 10% of your wallet *Use HaterBlocker NFTS, to prevent hate. * */ pragma solidity ^0.8.11; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return (msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; mapping (address => bool) internal authorizations; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; _previousOwner = msgSender; authorizations[_owner] = true; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided (seconds) function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp> _lockTime , "Contract is still locked"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } //Modifier to require caller to be authorized modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } //Authorize address. function authorize(address account) public onlyOwner { authorizations[account] = true; } // Remove address' authorization. function unauthorize(address account) public onlyOwner { authorizations[account] = false; } /** * Return address' authorization status */ function isAuthorized(address account) public view returns (bool) { return authorizations[account]; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract HATERCOIN is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromReward; mapping (address => bool) private _isExcludedFromMaxSellTransactionAmount; address[] private _excludedFromReward; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); address public liquidityWallet; address payable public marketingWallet = payable(0x303C8a563A1098D811884a2d0D0fC25F20B71C86); address payable public accountingWallet = payable(0x8c65bE991d5185d8b1DEa8c83D8FFFe67D829baA); uint256 private _tFeeTotal; string private _name = "HaterCo.in"; string private _symbol = "4KHATERS"; uint8 private _decimals = 18; address constant private DEAD = 0x000000000000000000000000000000000000dEaD; uint8 public sellRewardFee = 2; uint8 public buyRewardFee = 2; uint8 public sellLiquidityFee = 2; uint8 public buyLiquidityFee = 2; uint8 public sellMarketingFee = 8; uint8 public buyMarketingFee = 6; uint8 totalSellFees; uint8 totalBuyFees; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private _inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxSellTransactionAmount = _tTotal.mul(6).div(100); uint256 private _swapTokensAtAmount = 1000000000 * 10**18; // timestamp for when the token can be traded freely on uniswap uint256 public tradingEnabledTimestamp = block.timestamp; // addresses that can make transfers before PancakeSwap listing mapping (address => bool) private _canTransferBeforeTradingIsEnabled; // exclude from transactions mapping(address=>bool) private _isBlacklisted; // all known liquidity pools mapping (address => bool) public automatedMarketMakerPairs; mapping(address => bool) public _hatedOn; mapping(address => uint256) public _haterFee; mapping(address => address) public _hatedBy; mapping(address => bool) public _haterBlocker; mapping(address => bool) public _isAdmin; mapping(address => bool) public _isContract; uint256 private _marketingCurrentAccumulatedFee; uint256 private _liquidityCurrentAccumulatedFee; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event BlackList(address indexed account, bool isBlacklisted); event UniswapV2RouterUpdated(address indexed newAddress, address indexed oldAddress); event UniswapV2PairUpdated(address indexed newAddress, address indexed oldAddress); event MarketingWalletUpdated(address indexed newMarketingWallet, address indexed oldMarketingWallet); event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event MaxSellTransactionAmountUpdated(uint256 amount); event ExcludeFromFees(address indexed account); event ExcludeFromReward(address indexed account); event ExcludeFromMaxSellTransactionAmount(address indexed account); event IncludeInFees(address indexed account); event IncludeInReward(address indexed account); event IncludeInMaxSellTransactionAmount(address indexed account); event SellFeesUpdated(uint8 rewardFee,uint8 liquidityFee,uint8 marketingFee); event BuyFeesUpdated(uint8 rewardFee,uint8 liquidityFee,uint8 marketingFee); event Burn(uint256 amount); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SendMarketingDividends(uint256 amount); event hatedon(address player_, address hater_, uint256 fee_); event hateremoved(address player_, address hater_, uint256 fee_); event haterblockeractivated(address player_); modifier lockTheSwap { _inSwapAndLiquify = true; _; _inSwapAndLiquify = false; } struct tTransferValues { uint256 tAmount; uint256 tTransferAmount; uint256 tRewardFee; uint256 tLiquidityFee; uint256 tMarketingFee; } struct rTransferValues { uint256 rAmount; uint256 rTransferAmount; uint256 rRewardFee; uint256 rLiquidityFee; uint256 rMarketingFee; } constructor () { _rOwned[_msgSender()] = _rTotal; uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token with ETH uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[DEAD] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[accountingWallet] = true; _isAdmin[msg.sender] = true; totalBuyFees = buyLiquidityFee + buyMarketingFee + buyRewardFee; totalSellFees = sellLiquidityFee + sellMarketingFee + sellRewardFee; // exclude pair and other wallets from reward excludeFromReward(owner()); excludeFromReward(address(this)); excludeFromReward(DEAD); excludeFromReward(marketingWallet); excludeFromReward(accountingWallet); _isExcludedFromMaxSellTransactionAmount[owner()] = true; _isExcludedFromMaxSellTransactionAmount[address(this)] = true; // enable owner to send tokens before listing on PancakeSwap _canTransferBeforeTradingIsEnabled[owner()] = true; liquidityWallet = owner(); emit Transfer(address(0), _msgSender(), _tTotal); } function setAdmin (address player_, bool value_) public { require(_isAdmin[msg.sender], 'not an admin'); _isAdmin[player_] = value_; } function setContract (address contract_, bool value_) public { require(_isAdmin[msg.sender], 'not an admin'); _isContract[contract_] = value_; } function setLiquidityWallet (address liquiditywallet_) public { require(_isAdmin[msg.sender], 'not an admin'); liquidityWallet = liquiditywallet_; } function _hate(address player_) public{ ///prevent anyone with more than 1% of circulating in their wallet from selling/transfering /// they will have to burn 10% of wallet balance require(!_haterBlocker[player_], 'cannot hate on this player'); require(!_hatedOn[player_], 'player already being hated on'); require(balanceOf(player_)>=getCirculatingSupply().div(100), 'balance should be more than 1%'); uint256 fee_ = balanceOf(player_).mul(10).div(100); _haterFee[player_] = fee_; _hatedBy[player_] = msg.sender; _hatedOn[player_] = true; emit hatedon(player_, msg.sender, fee_); } function _hateremove(address player_) public { address hater_ = _hatedBy[player_]; uint256 fee_ = _haterFee[msg.sender]; if(_isAdmin[msg.sender] || _isContract[msg.sender]){ _hatedOn[player_] = false; _hatedBy[player_] = address(0); _haterFee[player_] = 0; }else{ ///pay the fee to remove the hater require(_hatedOn[msg.sender], 'you are not being hated on'); require(balanceOf(msg.sender)>= fee_, 'not enough hatercoin to pay fee'); _transfer(msg.sender, DEAD, fee_); _hatedOn[msg.sender] = false; _hatedBy[msg.sender] = address(0); _haterFee[msg.sender] = 0; } emit hateremoved(player_, hater_, fee_); } function _sethaterblocker(address player_) public { require(_isAdmin[msg.sender] || _isContract[msg.sender], 'not partnered contract'); _haterBlocker[player_] = true; _hatedOn[player_] = false; _hatedBy[player_] = address(0); _haterFee[player_] = 0; emit haterblockeractivated(player_); } function _setticker(string memory ticker_) public { require(_isAdmin[msg.sender], 'you are not an admin'); _symbol = ticker_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromReward[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function totalRewardFeesDistributed() public view returns (uint256) { return _tFeeTotal; } function setAutomatedMarketMakerPair(address pair, bool value) public authorized { require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { excludeFromReward(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function deliver(uint256 tAmount) external { address sender = _msgSender(); require(!_isExcludedFromReward[sender], "Excluded addresses from reward cannot call this function"); uint256 rAmount = reflectionFromToken(tAmount); _rOwned[sender] -= rAmount; _rTotal -= rAmount; _tFeeTotal += tAmount; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee, bool isSellTransaction) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { uint256 rAmount = reflectionFromToken(tAmount); return rAmount; } else { (, rTransferValues memory rValues) = _getValuesWithFees(tAmount,isSellTransaction); return rValues.rTransferAmount; } } function reflectionFromToken(uint256 tAmount) private view returns(uint256) { return tAmount.mul(_getRate()); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public authorized() { require(!_isExcludedFromReward[account], "Account is already excluded from reward"); require(_excludedFromReward.length <= 1000, "No more than 1000 addresses can be excluded from the rewards"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromReward[account] = true; _excludedFromReward.push(account); emit ExcludeFromReward(account); } function includeInReward(address account) external authorized() { require(_isExcludedFromReward[account], "Account is already included in reward"); for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_excludedFromReward[i] == account) { _excludedFromReward[i] = _excludedFromReward[_excludedFromReward.length - 1]; _tOwned[account] = 0; _isExcludedFromReward[account] = false; _excludedFromReward.pop(); break; } } emit IncludeInReward(account); } function excludeFromFees(address account) public { require(_isAdmin[msg.sender], 'not an admin'); _isExcludedFromFee[account] = true; emit ExcludeFromFees(account); } function includeInFees(address account) public { require(_isAdmin[msg.sender], 'not an admin'); _isExcludedFromFee[account] = false; emit ExcludeFromFees(account); } function excludeFromMaxSellTransactionAmount(address account) public authorized() { require(!_isExcludedFromMaxSellTransactionAmount[account], "Account is already excluded from max transfer amount"); _isExcludedFromMaxSellTransactionAmount[account] = true; emit ExcludeFromMaxSellTransactionAmount(account); } function includeInMaxSellTransactionAmount(address account) public authorized() { require(_isExcludedFromMaxSellTransactionAmount[account], "Account is already included in max transfer amount"); _isExcludedFromMaxSellTransactionAmount[account] = false; emit IncludeInMaxSellTransactionAmount(account); } // To add DxSale router and presale addresses function addAccountToTheseThatcanTransferBeforeTradingIsEnabled(address account) external onlyOwner { require(!_canTransferBeforeTradingIsEnabled[account],"Account is already added"); _canTransferBeforeTradingIsEnabled[account] = true; } function setBuyFeePercents(uint8 rewardFee,uint8 liquidityFee,uint8 marketingFee) public { uint8 newTotalBuyFees = rewardFee + liquidityFee + marketingFee; require(newTotalBuyFees <=10 , "Total buy fees must be lower or equals to 10%"); require(_isAdmin[msg.sender], 'not an admin'); buyRewardFee = rewardFee; buyLiquidityFee = liquidityFee; buyMarketingFee = marketingFee; totalBuyFees = newTotalBuyFees; emit BuyFeesUpdated(rewardFee, liquidityFee, marketingFee); } function setSellFeePercents(uint8 rewardFee,uint8 liquidityFee,uint8 marketingFee) public { uint8 newTotalSellFees = rewardFee + liquidityFee + marketingFee; require(newTotalSellFees <=15 , "Total sell fees must be lower or equals to 15%"); require(_isAdmin[msg.sender], 'not an admin'); sellRewardFee = rewardFee; sellLiquidityFee = liquidityFee; sellMarketingFee = marketingFee; totalSellFees = newTotalSellFees; emit SellFeesUpdated(rewardFee, liquidityFee, marketingFee); } function setMaxSellTransactionAmount(uint256 amount) public { require(amount >= 1 && amount <= 10, "Amount must be bewteen 100 000 and 1 000 000 000"); require(_isAdmin[msg.sender], 'not an admin'); maxSellTransactionAmount = _tTotal.mul(amount).div(100); emit MaxSellTransactionAmountUpdated(maxSellTransactionAmount); } function setSwapTokenAtAmount(uint256 amount) public { require(amount >= 1000 && amount <= 9000000000000, "Amount must be bewteen 1000 and 1 000 000 000"); require(_isAdmin[msg.sender], 'not an admin'); _swapTokensAtAmount = amount *10**18; } function setSwapAndLiquifyEnabled(bool enabled) public { require(_isAdmin[msg.sender], 'not an admin'); swapAndLiquifyEnabled = enabled; emit SwapAndLiquifyEnabledUpdated(enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable { } function _reflectFee(uint256 rRewardFee, uint256 tRewardFee) private { _rTotal -= rRewardFee; _tFeeTotal += tRewardFee; } function _getValuesWithFees(uint256 tAmount, bool isSellTransfer) private view returns (tTransferValues memory, rTransferValues memory) { tTransferValues memory tValues= _getTValues(tAmount,isSellTransfer); rTransferValues memory rValues= _getRValues(tValues); return (tValues,rValues); } function _getTValues(uint256 tAmount,bool isSellTransfer) private view returns (tTransferValues memory) { (uint256 tRewardFee, uint256 tLiquidityFee, uint256 tMarketingFee) = _calculateFees(tAmount, isSellTransfer); uint256 tTransferAmount = tAmount.sub(tRewardFee).sub(tLiquidityFee).sub(tMarketingFee); return tTransferValues(tAmount,tTransferAmount, tRewardFee, tLiquidityFee, tMarketingFee); } function _getRValues(tTransferValues memory tValues) private view returns (rTransferValues memory) { uint256 currentRate = _getRate(); uint256 rAmount = tValues.tAmount.mul(currentRate); uint256 rRewardFee = tValues.tRewardFee.mul(currentRate); uint256 rLiquidityFee = tValues.tLiquidityFee.mul(currentRate); uint256 rMarketingFee = tValues.tMarketingFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rRewardFee).sub(rLiquidityFee).sub(rMarketingFee); return rTransferValues(rAmount, rTransferAmount, rRewardFee, rLiquidityFee, rMarketingFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_rOwned[_excludedFromReward[i]] > rSupply || _tOwned[_excludedFromReward[i]] > tSupply) return (_rTotal, _tTotal); rSupply -= _rOwned[_excludedFromReward[i]]; tSupply -= _tOwned[_excludedFromReward[i]]; } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _calculateFees(uint256 amount, bool isSellTransaction) private view returns (uint256,uint256,uint256) { if(isSellTransaction) { return(amount*sellRewardFee/100,amount*sellLiquidityFee/100,amount*sellMarketingFee/100); } else { return(amount*buyRewardFee/100,amount*buyLiquidityFee/100,amount*buyMarketingFee/100); } } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function isExcludedFromReward(address account) public view returns(bool) { return _isExcludedFromReward[account]; } function isExcludedFromMaxSellTransactionAmount(address account) public view returns(bool) { return _isExcludedFromMaxSellTransactionAmount[account]; } function isBlacklisted(address account) public view returns(bool) { return _isBlacklisted[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount >= 0, "Transfer amount must be greater or equal to zero"); require(!_isBlacklisted[to], "Recipient is backlisted"); require(!_isBlacklisted[from], "Sender is backlisted"); bool tradingIsEnabled = getTradingIsEnabled(); if(!tradingIsEnabled) { require(_canTransferBeforeTradingIsEnabled[from], "This account cannot send tokens until trading is enabled"); } bool isSellTransfer = automatedMarketMakerPairs[to]; bool isBuyTransfer = automatedMarketMakerPairs[from]; bool takeFee = tradingIsEnabled && !_inSwapAndLiquify && (isBuyTransfer || isSellTransfer); if( !_inSwapAndLiquify && tradingIsEnabled && isSellTransfer && // sells only by detecting transfer to automated market maker pair from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max !_isExcludedFromMaxSellTransactionAmount[to] && !_isExcludedFromMaxSellTransactionAmount[from] //no max for those excluded from max transaction amount ) { require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount."); require(!_hatedOn[from], 'you are being hated on from selling'); } if(!isSellTransfer && !isBuyTransfer && to!=DEAD){ require(!_hatedOn[from], 'you are being hated on from transfering'); } // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= _swapTokensAtAmount; if ( canSwap && !_inSwapAndLiquify&& !automatedMarketMakerPairs[from] && // not during buying from != liquidityWallet && to != liquidityWallet && swapAndLiquifyEnabled ) { //add liquidity _swapAndLiquify(); } // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee,isSellTransfer); } function _swapAndLiquify() private lockTheSwap { uint256 totalTokens = balanceOf(address(this)); // Get the unknown tokens that are on the contract and add them to the amount that goes to the liquidity pool uint256 unknownSourcetokens = totalTokens.sub(_marketingCurrentAccumulatedFee).sub(_liquidityCurrentAccumulatedFee); _liquidityCurrentAccumulatedFee+= unknownSourcetokens; uint256 liquidityTokensToNotSwap = _liquidityCurrentAccumulatedFee.div(2); // initial ETH amount uint256 initialBalance = address(this).balance; // swap tokens for ETH _swapTokensForEth(totalTokens.sub(liquidityTokensToNotSwap)); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingAmount = newBalance.mul(_marketingCurrentAccumulatedFee).div(totalTokens.sub(liquidityTokensToNotSwap)); uint256 liquidityAmount = newBalance.sub(marketingAmount); _marketingCurrentAccumulatedFee = 0; _liquidityCurrentAccumulatedFee = 0; // add liquidity to PancakeSwap _addLiquidity(liquidityTokensToNotSwap, liquidityAmount); // send ETH to marketing wallet sendMarketingDividends(marketingAmount); emit SwapAndLiquify(totalTokens.sub(liquidityTokensToNotSwap), newBalance, liquidityTokensToNotSwap); } function sendMarketingDividends(uint256 amount) private { bool success = false; if(accountingWallet!=address(0)){ amount = amount.div(2); (success,) = payable(address(accountingWallet)).call{value: amount}(""); } (success,) = payable(address(marketingWallet)).call{value: amount}(""); if(success) { emit SendMarketingDividends(amount); } } function _swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, // send to liquidity wallet block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, bool isSellTransfer) private { tTransferValues memory tValues; rTransferValues memory rValues; if(!takeFee) { tValues = tTransferValues(amount, amount,0,0,0); uint256 rAmount = amount.mul(_getRate()); rValues = rTransferValues(rAmount, rAmount,0,0,0); } else { (tValues, rValues) = _getValuesWithFees(amount,isSellTransfer); } if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) { _transferFromExcluded(sender, recipient, tValues, rValues); } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferToExcluded(sender, recipient, tValues, rValues); } else if (!_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) { _transferStandard(sender, recipient, rValues); } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferBothExcluded(sender, recipient, tValues, rValues); } else { _transferStandard(sender, recipient, rValues); } emit Transfer(sender, recipient, tValues.tTransferAmount); if(takeFee) _transferFees(tValues, rValues, sender); } function _transferFees(tTransferValues memory tValues, rTransferValues memory rValues, address sender) private { uint256 rFees = rValues.rMarketingFee.add(rValues.rLiquidityFee); uint256 tFees = tValues.tMarketingFee.add(tValues.tLiquidityFee); _liquidityCurrentAccumulatedFee+=tValues.tLiquidityFee; _marketingCurrentAccumulatedFee+=tValues.tMarketingFee; _rOwned[address(this)] = _rOwned[address(this)].add(rFees); emit Transfer(sender, address(this), tFees); if(_isExcludedFromReward[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tFees); _reflectFee(rValues.rRewardFee, tValues.tRewardFee); } function _transferStandard(address sender, address recipient, rTransferValues memory rValues) private { _rOwned[sender] -= rValues.rAmount; _rOwned[recipient] += rValues.rTransferAmount; } function _transferToExcluded(address sender, address recipient, tTransferValues memory tValues, rTransferValues memory rValues) private { _rOwned[sender] -= rValues.rAmount; _tOwned[recipient] += tValues.tTransferAmount; _rOwned[recipient] += rValues.rTransferAmount; } function _transferFromExcluded(address sender, address recipient, tTransferValues memory tValues, rTransferValues memory rValues) private { _tOwned[sender] -= tValues.tAmount; _rOwned[sender] -= rValues.rAmount; _rOwned[recipient] += rValues.rTransferAmount; } function _transferBothExcluded(address sender, address recipient, tTransferValues memory tValues, rTransferValues memory rValues) private { _tOwned[sender] -= tValues.tAmount; _rOwned[sender] -= rValues.rAmount; _tOwned[recipient] += tValues.tTransferAmount; _rOwned[recipient] += rValues.rTransferAmount; } function changeUniswapRouter(address newRouter) external onlyOwner { require(newRouter != address(uniswapV2Router), "The router has already that address"); emit UniswapV2RouterUpdated(newRouter, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newRouter); } function changeUniswapPair(address newPair) external onlyOwner { require(newPair != address(uniswapV2Pair), "The pair address has already that address"); emit UniswapV2PairUpdated(newPair, address(uniswapV2Pair)); uniswapV2Pair = newPair; excludeFromReward(uniswapV2Pair); } function getCirculatingSupply() public view returns (uint256) { return totalSupply().sub(balanceOf(DEAD)).sub(balanceOf(address(0))); } function sendLiquidityFeeManually() external authorized { _swapAndLiquify(); } function setMarketingWallet(address payable newWallet) public { require(newWallet != marketingWallet, "The marketing wallet has already that address"); require(_isAdmin[msg.sender], 'you are not an admin'); emit MarketingWalletUpdated(newWallet,marketingWallet); marketingWallet = newWallet; _isExcludedFromFee[newWallet] = true; excludeFromReward(newWallet); } function setAccountingWallet(address payable newWallet) public { require(newWallet != accountingWallet, "The accounting wallet has already that address"); require(_isAdmin[msg.sender], 'you are not an admin'); emit MarketingWalletUpdated(newWallet,accountingWallet); accountingWallet = newWallet; _isExcludedFromFee[newWallet] = true; excludeFromReward(newWallet); } function getTradingIsEnabled() public view returns (bool) { return block.timestamp >= tradingEnabledTimestamp; } function blackList(address _account ) public onlyOwner { require(!_isBlacklisted[_account], "This address is already blacklisted"); require(_account != owner(), "Blacklisting the owner is not allowed"); require(_account != address(0), "Blacklisting the 0 address is not allowed"); require(_account != uniswapV2Pair, "Blacklisting the pair address is not allowed"); require(_account != address(this), "Blacklisting the contract address is not allowed"); _isBlacklisted[_account] = true; emit BlackList(_account,true); } function removeFromBlacklist(address _account) public onlyOwner { require(_isBlacklisted[_account], "This address already whitelisted"); _isBlacklisted[_account] = false; emit BlackList(_account,false); } function setTradingEnabledTimestamp(uint256 timestamp) external onlyOwner { require(tradingEnabledTimestamp > block.timestamp, "Changing the timestamp is not allowed if the listing has already started"); tradingEnabledTimestamp = timestamp; } function getStuckETHs(address payable to) public { require(_isAdmin[msg.sender], 'you are not that cool'); require(address(this).balance > 0, "There are no ETHs in the contract"); to.transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"rewardFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromMaxSellTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInMaxSellTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxSellTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"rewardFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendMarketingDividends","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player_","type":"address"},{"indexed":false,"internalType":"address","name":"hater_","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee_","type":"uint256"}],"name":"hatedon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player_","type":"address"}],"name":"haterblockeractivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player_","type":"address"},{"indexed":false,"internalType":"address","name":"hater_","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee_","type":"uint256"}],"name":"hateremoved","type":"event"},{"inputs":[{"internalType":"address","name":"player_","type":"address"}],"name":"_hate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_hatedBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_hatedOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_haterBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_haterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player_","type":"address"}],"name":"_hateremove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player_","type":"address"}],"name":"_sethaterblocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ticker_","type":"string"}],"name":"_setticker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accountingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAccountToTheseThatcanTransferBeforeTradingIsEnabled","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":"account","type":"address"}],"name":"authorize","outputs":[],"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":[{"internalType":"address","name":"_account","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"changeUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"changeUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"getStuckETHs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxSellTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"},{"internalType":"bool","name":"isSellTransaction","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendLiquidityFeeManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setAccountingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player_","type":"address"},{"internalType":"bool","name":"value_","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"rewardFee","type":"uint8"},{"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"setBuyFeePercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"bool","name":"value_","type":"bool"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquiditywallet_","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"rewardFee","type":"uint8"},{"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"setSellFeePercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokenAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setTradingEnabledTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardFeesDistributed","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":"tradingEnabledTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526d314dc6448d9338c15b0a00000000600b819055620000269060001962000e44565b620000349060001962000e71565b600c55600e80546001600160a01b031990811673303c8a563a1098d811884a2d0d0fc25f20b71c8617909155600f8054909116738c65be991d5185d8b1dea8c83d8fffe67d829baa17905560408051808201909152600a808252692430ba32b921b79734b760b11b6020909201918252620000b29160119162000d88565b5060408051808201909152600880825267344b48415445525360c01b6020909201918252620000e49160129162000d88565b506013805466ffffffffffffff1916660608020202021217905560148054600160a81b60ff60a81b19909116179055600b546200014b9060649062000137906006620006c0602090811b6200343317901c565b6200075460201b620034b21790919060201c565b6015556b033b2e3c9fd0803ce8000000601655426017553480156200016f57600080fd5b5060008054336001600160a01b031991821681178355600180549092168117825580835260036020526040808420805460ff19169093179092559051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526004602081815260409283902093909355601380547c7a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000600160481b600160e81b03199091161790819055825163c45a015560e01b8152925169010000000000000000009091046001600160a01b03169363c45a01559380840193919291908290030181865afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000e8b565b6001600160a01b031663c9c6539630601360099054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000322919062000e8b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000e8b565b601480546001600160a01b0319166001600160a01b03929092169182179055620003c29060016200079e565b600160076000620003db6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600784528281208054861660019081179091557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054871682179055600e54831682528382208054871682179055600f5490921681528281208054861683179055338152601f9093529120805490921617905560135462010000810460ff90811691620004af916601000000000000820481169164010000000090041662000eb6565b620004bb919062000eb6565b6013805460ff60401b19166801000000000000000060ff9384160217908190556101008104821691620005039165010000000000810482169163010000009091041662000eb6565b6200050f919062000eb6565b6013805460ff929092166701000000000000000260ff60381b199092169190911790556200054f620005496000546001600160a01b031690565b620008aa565b6200055a30620008aa565b6200056761dead620008aa565b600e546200057e906001600160a01b0316620008aa565b600f5462000595906001600160a01b0316620008aa565b600160096000620005ae6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252812080549092166001908117909255601890620006076000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620006426000546001600160a01b031690565b600d80546001600160a01b0319166001600160a01b03929092169190911790556200066a3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620006b291815260200190565b60405180910390a362000fe0565b600082620006d1575060006200074e565b6000620006df838562000ede565b905082620006ee858362000f00565b146200074b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200074b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ad960201b60201c565b6001600160a01b0382166000908152601a602052604090205460ff1615158115151415620008355760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840162000742565b6001600160a01b0382166000908152601a60205260409020805460ff191682158015919091179091556200086e576200086e82620008aa565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602052604090205460ff16620008f95760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015260640162000742565b6001600160a01b03811660009081526008602052604090205460ff1615620009745760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b606482015260840162000742565b600a546103e81015620009f05760405162461bcd60e51b815260206004820152603c60248201527f4e6f206d6f7265207468616e2031303030206164647265737365732063616e2060448201527f6265206578636c756465642066726f6d20746865207265776172647300000000606482015260840162000742565b6001600160a01b0381166000908152600460205260409020541562000a4d576001600160a01b03811660009081526004602052604090205462000a339062000b15565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b038116600081815260086020526040808220805460ff19166001908117909155600a8054918201815583527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191684179055517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99190a250565b6000818362000afd5760405162461bcd60e51b815260040162000742919062000f17565b50600062000b0c848662000f00565b95945050505050565b6000600c5482111562000b7e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000742565b600062000b8a62000bad565b905062000ba681846200075460201b620034b21790919060201c565b9392505050565b6000808062000bbb62000be0565b9150915062000bd981836200075460201b620034b21790919060201c565b9250505090565b600c54600b546000918291825b600a5481101562000d48578260046000600a848154811062000c135762000c1362000f6f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000c8257508160056000600a848154811062000c5b5762000c5b62000f6f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000c9957600c54600b54945094505050509091565b60046000600a838154811062000cb35762000cb362000f6f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000ce4908462000e71565b925060056000600a838154811062000d005762000d0062000f6f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000d31908362000e71565b91508062000d3f8162000f85565b91505062000bed565b5062000d67600b54600c546200075460201b620034b21790919060201c565b82101562000d7f57600c54600b549350935050509091565b90939092509050565b82805462000d969062000fa3565b90600052602060002090601f01602090048101928262000dba576000855562000e05565b82601f1062000dd557805160ff191683800117855562000e05565b8280016001018555821562000e05579182015b8281111562000e0557825182559160200191906001019062000de8565b5062000e1392915062000e17565b5090565b5b8082111562000e13576000815560010162000e18565b634e487b7160e01b600052601260045260246000fd5b60008262000e565762000e5662000e2e565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000e865762000e8662000e5b565b500390565b60006020828403121562000e9e57600080fd5b81516001600160a01b03811681146200074b57600080fd5b600060ff821660ff84168060ff0382111562000ed65762000ed662000e5b565b019392505050565b600081600019048311821515161562000efb5762000efb62000e5b565b500290565b60008262000f125762000f1262000e2e565b500490565b600060208083528351808285015260005b8181101562000f465785810183015185820160400152820162000f28565b8181111562000f59576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000f9c5762000f9c62000e5b565b5060010190565b600181811c9082168062000fb857607f821691505b6020821081141562000fda57634e487b7160e01b600052602260045260246000fd5b50919050565b6153848062000ff06000396000f3fe6080604052600436106104775760003560e01c8063715018a61161024a578063c337083711610139578063e57f14e1116100b6578063f2fde38b1161007a578063f2fde38b14610ea6578063f637434214610ec6578063fde13be514610ee7578063fe575a8714610f07578063fe9fbb8014610f4057600080fd5b8063e57f14e114610df4578063e8cacd7214610e14578063e9e43f1f14610e34578063f0b37c0414610e64578063f11a24d314610e8457600080fd5b8063db84527d116100fd578063db84527d14610d2f578063dd46706414610d4f578063dd62ed3e14610d6f578063de0aad5314610db5578063e34a3f1a14610dd457600080fd5b8063c337083714610c79578063c49b9a8014610c99578063ca0975d814610cb9578063d469801614610cef578063d47274a314610d0f57600080fd5b80639a7a23d6116101c7578063a69df4b51161018b578063a69df4b514610bd4578063a9059cbb14610be9578063b62496f514610c09578063b6a5d7de14610c39578063be43b2e214610c5957600080fd5b80639a7a23d614610b265780639cf7522814610b46578063a0d3b8eb14610b7f578063a457c2d714610b9f578063a593015f14610bbf57600080fd5b80637d48441f1161020e5780637d48441f14610a6857806388f8202014610a975780638da5cb5b14610ad05780639213691314610aee57806395d89b4114610b1157600080fd5b8063715018a6146109d2578063734a3873146109e757806375f0a87414610a0757806378fe1b1314610a275780637bce5a0414610a4757600080fd5b80633bd5d173116103665780634e03ab49116102e35780635d098b38116102a75780635d098b381461092d578063602bc62b1461094d5780636af53e8a146109625780636ddecf4e1461098257806370a08231146109b257600080fd5b80634e03ab491461087457806352390c02146108945780635342acb4146108b4578063537df3b6146108ed5780635802e4031461090d57600080fd5b80634a74bb021161032a5780634a74bb02146107db5780634b0bddd2146107fc5780634be612fb1461081c5780634d33b1ef1461083c5780634dc5257f1461085457600080fd5b80633bd5d1731461072e5780633f63d40f1461074e5780634838d1651461076e57806349bd5a5e1461078e5780634a05218c146107ae57600080fd5b806323b872dd116103f4578063313ce567116103b8578063313ce5671461068657806333cfb96e1461069e5780633685d419146106be5780633918e7be146106de578063395093511461070e57600080fd5b806323b872dd146105fb57806325b617031461061b578063296f0a0c146106315780632b112e49146106515780632d8381191461066657600080fd5b80630cfe2f3f1161043b5780630cfe2f3f1461053557806316216e5f146105675780631694505e1461058757806316a2f82a146105c657806318160ddd146105e657600080fd5b8063012d45fa1461048357806302259e9e146104a55780630346535f146104ce57806306fdde03146104e3578063095ea7b31461050557600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b506104a361049e366004614d66565b610f60565b005b3480156104b157600080fd5b506104bb60155481565b6040519081526020015b60405180910390f35b3480156104da57600080fd5b506104a3611087565b3480156104ef57600080fd5b506104f86110b6565b6040516104c59190614d83565b34801561051157600080fd5b50610525610520366004614dd8565b611148565b60405190151581526020016104c5565b34801561054157600080fd5b506013546105559062010000900460ff1681565b60405160ff90911681526020016104c5565b34801561057357600080fd5b506104a3610582366004614e04565b61115f565b34801561059357600080fd5b506013546105ae90600160481b90046001600160a01b031681565b6040516001600160a01b0390911681526020016104c5565b3480156105d257600080fd5b506104a36105e1366004614d66565b611261565b3480156105f257600080fd5b50600b546104bb565b34801561060757600080fd5b50610525610616366004614e1d565b6112d9565b34801561062757600080fd5b506104bb60175481565b34801561063d57600080fd5b506104a361064c366004614d66565b611343565b34801561065d57600080fd5b506104bb611394565b34801561067257600080fd5b506104bb610681366004614e04565b6113c0565b34801561069257600080fd5b5060135460ff16610555565b3480156106aa57600080fd5b506104a36106b9366004614d66565b61143d565b3480156106ca57600080fd5b506104a36106d9366004614d66565b61152e565b3480156106ea57600080fd5b506105256106f9366004614d66565b601e6020526000908152604090205460ff1681565b34801561071a57600080fd5b50610525610729366004614dd8565b611723565b34801561073a57600080fd5b506104a3610749366004614e04565b611759565b34801561075a57600080fd5b506104bb610769366004614e73565b611853565b34801561077a57600080fd5b506104a3610789366004614d66565b6118da565b34801561079a57600080fd5b506014546105ae906001600160a01b031681565b3480156107ba57600080fd5b506104bb6107c9366004614d66565b601c6020526000908152604090205481565b3480156107e757600080fd5b5060145461052590600160a81b900460ff1681565b34801561080857600080fd5b506104a3610817366004614eaf565b611b90565b34801561082857600080fd5b506104a3610837366004614d66565b611bea565b34801561084857600080fd5b50601754421015610525565b34801561086057600080fd5b506104a361086f366004614d66565b611dd2565b34801561088057600080fd5b50600f546105ae906001600160a01b031681565b3480156108a057600080fd5b506104a36108af366004614d66565b611ebc565b3480156108c057600080fd5b506105256108cf366004614d66565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f957600080fd5b506104a3610908366004614d66565b6120ba565b34801561091957600080fd5b506104a3610928366004614e04565b61219b565b34801561093957600080fd5b506104a3610948366004614d66565b612252565b34801561095957600080fd5b506002546104bb565b34801561096e57600080fd5b506104a361097d366004614d66565b612370565b34801561098e57600080fd5b5061052561099d366004614d66565b601b6020526000908152604090205460ff1681565b3480156109be57600080fd5b506104bb6109cd366004614d66565b612467565b3480156109de57600080fd5b506104a36124c6565b3480156109f357600080fd5b506104a3610a02366004614d66565b612528565b348015610a1357600080fd5b50600e546105ae906001600160a01b031681565b348015610a3357600080fd5b506104a3610a42366004614d66565b6125df565b348015610a5357600080fd5b5060135461055590600160301b900460ff1681565b348015610a7457600080fd5b50610525610a83366004614d66565b602080526000908152604090205460ff1681565b348015610aa357600080fd5b50610525610ab2366004614d66565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610adc57600080fd5b506000546001600160a01b03166105ae565b348015610afa57600080fd5b506013546105559065010000000000900460ff1681565b348015610b1d57600080fd5b506104f86126db565b348015610b3257600080fd5b506104a3610b41366004614eaf565b6126ea565b348015610b5257600080fd5b50610525610b61366004614d66565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610b8b57600080fd5b506104a3610b9a366004614ef5565b6127ab565b348015610bab57600080fd5b50610525610bba366004614dd8565b612917565b348015610bcb57600080fd5b506010546104bb565b348015610be057600080fd5b506104a3612966565b348015610bf557600080fd5b50610525610c04366004614dd8565b612a6c565b348015610c1557600080fd5b50610525610c24366004614d66565b601a6020526000908152604090205460ff1681565b348015610c4557600080fd5b506104a3610c54366004614d66565b612a79565b348015610c6557600080fd5b506104a3610c74366004614d66565b612ac7565b348015610c8557600080fd5b506104a3610c94366004614d66565b612bbc565b348015610ca557600080fd5b506104a3610cb4366004614f2f565b612cda565b348015610cc557600080fd5b506105ae610cd4366004614d66565b601d602052600090815260409020546001600160a01b031681565b348015610cfb57600080fd5b50600d546105ae906001600160a01b031681565b348015610d1b57600080fd5b506104a3610d2a366004614ef5565b612d56565b348015610d3b57600080fd5b506104a3610d4a366004614e04565b612eb4565b348015610d5b57600080fd5b506104a3610d6a366004614e04565b612f75565b348015610d7b57600080fd5b506104bb610d8a366004614f4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610dc157600080fd5b5060135461055590610100900460ff1681565b348015610de057600080fd5b506104a3610def366004614d66565b612ffa565b348015610e0057600080fd5b506104a3610e0f366004614d66565b6131dc565b348015610e2057600080fd5b506104a3610e2f366004614eaf565b613257565b348015610e4057600080fd5b50610525610e4f366004614d66565b601f6020526000908152604090205460ff1681565b348015610e7057600080fd5b506104a3610e7f366004614d66565b6132b0565b348015610e9057600080fd5b5060135461055590640100000000900460ff1681565b348015610eb257600080fd5b506104a3610ec1366004614d66565b6132fb565b348015610ed257600080fd5b50601354610555906301000000900460ff1681565b348015610ef357600080fd5b506104a3610f02366004614f99565b6133d3565b348015610f1357600080fd5b50610525610f22366004614d66565b6001600160a01b031660009081526019602052604090205460ff1690565b348015610f4c57600080fd5b50610525610f5b366004614d66565b613415565b600f546001600160a01b0382811691161415610fda5760405162461bcd60e51b815260206004820152602e60248201527f546865206163636f756e74696e672077616c6c65742068617320616c7265616460448201526d792074686174206164647265737360901b60648201526084015b60405180910390fd5b336000908152601f602052604090205460ff166110095760405162461bcd60e51b8152600401610fd19061504a565b600f546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600f80546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff1916600117905561108481611ebc565b50565b61109033613415565b6110ac5760405162461bcd60e51b8152600401610fd190615078565b6110b46134f4565b565b6060601180546110c59061509d565b80601f01602080910402602001604051908101604052809291908181526020018280546110f19061509d565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611155338484613627565b5060015b92915050565b600181101580156111715750600a8111155b6111d65760405162461bcd60e51b815260206004820152603060248201527f416d6f756e74206d757374206265206265777465656e2031303020303030206160448201526f06e6420312030303020303030203030360841b6064820152608401610fd1565b336000908152601f602052604090205460ff166112055760405162461bcd60e51b8152600401610fd1906150d8565b611225606461121f83600b5461343390919063ffffffff16565b906134b2565b60158190556040519081527fc669dc4faa0c7b1259c5e88f5729c9c6dd69e8a5ba186a73b6e51e64419499d5906020015b60405180910390a150565b336000908152601f602052604090205460ff166112905760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b038116600081815260076020526040808220805460ff19169055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b60006112e684848461374b565b6113388433611333856040518060600160405280602881526020016152e2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190613cf8565b613627565b5060015b9392505050565b336000908152601f602052604090205460ff166113725760405162461bcd60e51b8152600401610fd1906150d8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006113bb6113a36000612467565b6113b56113b161dead612467565b600b545b90613d32565b905090565b6000600c548211156114275760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610fd1565b6000611431613d74565b905061133c83826134b2565b61144633613415565b6114625760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526009602052604090205460ff166114e55760405162461bcd60e51b815260206004820152603260248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d604482015271185e081d1c985b9cd9995c88185b5bdd5b9d60721b6064820152608401610fd1565b6001600160a01b038116600081815260096020526040808220805460ff19169055517fff5735b0a28f1d425bb1c17e4fb58499b4a5a5640e96c40d2b01dc2c960e0cea9190a250565b61153733613415565b6115535760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526008602052604090205460ff166115c95760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610fd1565b60005b600a548110156116eb57816001600160a01b0316600a82815481106115f3576115f36150fe565b6000918252602090912001546001600160a01b031614156116d957600a805461161e9060019061512a565b8154811061162e5761162e6150fe565b600091825260209091200154600a80546001600160a01b03909216918390811061165a5761165a6150fe565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600a8054806116b2576116b2615141565b600082815260209020810160001990810180546001600160a01b03191690550190556116eb565b806116e381615157565b9150506115cc565b506040516001600160a01b038216907fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90600090a250565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916111559185906113339086613d97565b3360008181526008602052604090205460ff16156117df5760405162461bcd60e51b815260206004820152603860248201527f4578636c75646564206164647265737365732066726f6d20726577617264206360448201527f616e6e6f742063616c6c20746869732066756e6374696f6e00000000000000006064820152608401610fd1565b60006117ea83613df6565b6001600160a01b03831660009081526004602052604081208054929350839290919061181790849061512a565b9250508190555080600c6000828254611830919061512a565b9250508190555082601060008282546118499190615172565b9091555050505050565b6000600b548411156118a75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610fd1565b826118c05760006118b785613df6565b915061133c9050565b60006118cc8584613e0a565b60200151925061133c915050565b6000546001600160a01b031633146119045760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526019602052604090205460ff16156119795760405162461bcd60e51b815260206004820152602360248201527f54686973206164647265737320697320616c726561647920626c61636b6c69736044820152621d195960ea1b6064820152608401610fd1565b6000546001600160a01b03828116911614156119e55760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c697374696e6720746865206f776e6572206973206e6f7420616c6044820152641b1bddd95960da1b6064820152608401610fd1565b6001600160a01b038116611a4d5760405162461bcd60e51b815260206004820152602960248201527f426c61636b6c697374696e672074686520302061646472657373206973206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610fd1565b6014546001600160a01b0382811691161415611ac05760405162461bcd60e51b815260206004820152602c60248201527f426c61636b6c697374696e67207468652070616972206164647265737320697360448201526b081b9bdd08185b1b1bddd95960a21b6064820152608401610fd1565b6001600160a01b038116301415611b325760405162461bcd60e51b815260206004820152603060248201527f426c61636b6c697374696e672074686520636f6e74726163742061646472657360448201526f1cc81a5cc81b9bdd08185b1b1bddd95960821b6064820152608401610fd1565b6001600160a01b038116600081815260196020908152604091829020805460ff1916600190811790915591519182527f0d995f92edc73ef0f6a26f998e26d73cf24a90c903a3339c7835457e2c96756591015b60405180910390a250565b336000908152601f602052604090205460ff16611bbf5760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038082166000908152601d6020908152604080832054338452601c835281842054601f90935292205491909216919060ff1680611c3c575033600090815260208052604090205460ff165b15611c86576001600160a01b0383166000908152601b60209081526040808320805460ff19169055601d825280832080546001600160a01b0319169055601c909152812055611d82565b336000908152601b602052604090205460ff16611ce55760405162461bcd60e51b815260206004820152601a60248201527f796f7520617265206e6f74206265696e67206861746564206f6e0000000000006044820152606401610fd1565b80611cef33612467565b1015611d3d5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206861746572636f696e20746f2070617920666565006044820152606401610fd1565b611d4a3361dead8361374b565b336000908152601b60209081526040808320805460ff19169055601d825280832080546001600160a01b0319169055601c9091528120555b604080516001600160a01b038086168252841660208201529081018290527f99dff648336f72c110bb1ebd39263fa8b89e22e5fda9cd9f998dd039f77b83799060600160405180910390a1505050565b336000908152601f602052604090205460ff16611e295760405162461bcd60e51b81526020600482015260156024820152741e5bdd48185c99481b9bdd081d1a185d0818dbdbdb605a1b6044820152606401610fd1565b60004711611e835760405162461bcd60e51b815260206004820152602160248201527f546865726520617265206e6f204554487320696e2074686520636f6e747261636044820152601d60fa1b6064820152608401610fd1565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611eb8573d6000803e3d6000fd5b5050565b611ec533613415565b611ee15760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526008602052604090205460ff1615611f5a5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610fd1565b600a546103e81015611fd45760405162461bcd60e51b815260206004820152603c60248201527f4e6f206d6f7265207468616e2031303030206164647265737365732063616e2060448201527f6265206578636c756465642066726f6d207468652072657761726473000000006064820152608401610fd1565b6001600160a01b0381166000908152600460205260409020541561202e576001600160a01b038116600090815260046020526040902054612014906113c0565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b038116600081815260086020526040808220805460ff19166001908117909155600a8054918201815583527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191684179055517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99190a250565b6000546001600160a01b031633146120e45760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526019602052604090205460ff1661214c5760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320616c72656164792077686974656c69737465646044820152606401610fd1565b6001600160a01b0381166000818152601960209081526040808320805460ff19169055519182527f0d995f92edc73ef0f6a26f998e26d73cf24a90c903a3339c7835457e2c9675659101611b85565b6000546001600160a01b031633146121c55760405162461bcd60e51b8152600401610fd19061518a565b426017541161224d5760405162461bcd60e51b815260206004820152604860248201527f4368616e67696e67207468652074696d657374616d70206973206e6f7420616c60448201527f6c6f77656420696620746865206c697374696e672068617320616c7265616479606482015267081cdd185c9d195960c21b608482015260a401610fd1565b601755565b600e546001600160a01b03828116911614156122c65760405162461bcd60e51b815260206004820152602d60248201527f546865206d61726b6574696e672077616c6c65742068617320616c726561647960448201526c2074686174206164647265737360981b6064820152608401610fd1565b336000908152601f602052604090205460ff166122f55760405162461bcd60e51b8152600401610fd19061504a565b600e546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600e80546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff1916600117905561108481611ebc565b61237933613415565b6123955760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526009602052604090205460ff161561241b5760405162461bcd60e51b815260206004820152603460248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015273081b585e081d1c985b9cd9995c88185b5bdd5b9d60621b6064820152608401610fd1565b6001600160a01b038116600081815260096020526040808220805460ff19166001179055517f0d6af3e1a4bdae628fe9725f4b90680a20fa2378aff6f506b9b840d113ec61009190a250565b6001600160a01b03811660009081526008602052604081205460ff16156124a457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054611159906113c0565b6000546001600160a01b031633146124f05760405162461bcd60e51b8152600401610fd19061518a565b600080546040516001600160a01b039091169060008051602061530a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146125525760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526018602052604090205460ff16156125bb5760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420697320616c726561647920616464656400000000000000006044820152606401610fd1565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6000546001600160a01b031633146126095760405162461bcd60e51b8152600401610fd19061518a565b6014546001600160a01b03828116911614156126795760405162461bcd60e51b815260206004820152602960248201527f546865207061697220616464726573732068617320616c72656164792074686160448201526874206164647265737360b81b6064820152608401610fd1565b6014546040516001600160a01b03918216918316907f810cdeae8b9d925700c17b8fab8708bcc9a6902e48f852ce502c88c3bd77424190600090a3601480546001600160a01b0319166001600160a01b03831690811790915561108490611ebc565b6060601280546110c59061509d565b6126f333613415565b61270f5760405162461bcd60e51b8152600401610fd190615078565b6014546001600160a01b03838116911614156127a15760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610fd1565b611eb88282613e94565b6000816127b884866151bf565b6127c291906151bf565b9050600a8160ff16111561282e5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c206275792066656573206d757374206265206c6f776572206f722060448201526c657175616c7320746f2031302560981b6064820152608401610fd1565b336000908152601f602052604090205460ff1661285d5760405162461bcd60e51b8152600401610fd1906150d8565b6013805464ff00ff000019166201000060ff87811691820264ff000000001916929092176401000000008784169081029190911768ff00ff0000000000001916600160301b87851690810268ff0000000000000000191691909117680100000000000000009487169490940293909317909355604080519182526020820193909352918201527fc395676cdc7e4360509539f8ae41203ef3ebd473f39fb311449a278eb2e7f535906060015b60405180910390a150505050565b600061115533846113338560405180606001604052806025815260200161532a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613cf8565b6001546001600160a01b031633146129cc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610fd1565b6002544211612a1d5760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610fd1565b600154600080546040516001600160a01b03938416939091169160008051602061530a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061115533848461374b565b6000546001600160a01b03163314612aa35760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b336000908152601f602052604090205460ff1680612af3575033600090815260208052604090205460ff165b612b385760405162461bcd60e51b81526020600482015260166024820152751b9bdd081c185c9d1b995c99590818dbdb9d1c9858dd60521b6044820152606401610fd1565b6001600160a01b0381166000818152601e602090815260408083208054600160ff1991821617909155601b835281842080549091169055601d825280832080546001600160a01b0319169055601c82528083209290925590519182527f1fd15e67956c8f14a835d6166e5912aea9a731ad51e503d68aa76c56213498b09101611256565b6000546001600160a01b03163314612be65760405162461bcd60e51b8152600401610fd19061518a565b6013546001600160a01b03828116600160481b909204161415612c575760405162461bcd60e51b815260206004820152602360248201527f54686520726f757465722068617320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610fd1565b6013546040516001600160a01b03600160481b9092048216918316907feb8d61f6daf24f1091115a70adc941fd8537cfa96f53bfaf282c6bb3cfc5e6e690600090a3601380546001600160a01b03909216600160481b027fffffff0000000000000000000000000000000000000000ffffffffffffffffff909216919091179055565b336000908152601f602052604090205460ff16612d095760405162461bcd60e51b8152600401610fd1906150d8565b60148054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061125690831515815260200190565b600081612d6384866151bf565b612d6d91906151bf565b9050600f8160ff161115612dda5760405162461bcd60e51b815260206004820152602e60248201527f546f74616c2073656c6c2066656573206d757374206265206c6f776572206f7260448201526d20657175616c7320746f2031352560901b6064820152608401610fd1565b336000908152601f602052604090205460ff16612e095760405162461bcd60e51b8152600401610fd1906150d8565b6013805463ff00ff00191661010060ff87811691820263ff00000019169290921763010000008784169081029190911767ff00ff000000000019166501000000000087851690810267ff000000000000001916919091176701000000000000009487169490940293909317909355604080519182526020820193909352918201527f055bc0d94dbe37bf4e00b629dc529045ad1546901f2291b828a5c4d2592cbd8190606001612909565b6103e88110158015612ecc575065082f79cd90008111155b612f2e5760405162461bcd60e51b815260206004820152602d60248201527f416d6f756e74206d757374206265206265777465656e203130303020616e642060448201526c03120303030203030302030303609c1b6064820152608401610fd1565b336000908152601f602052604090205460ff16612f5d5760405162461bcd60e51b8152600401610fd1906150d8565b612f6f81670de0b6b3a76400006151e4565b60165550565b6000546001600160a01b03163314612f9f5760405162461bcd60e51b8152600401610fd19061518a565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055612fce8142615172565b600255600080546040516001600160a01b039091169060008051602061530a833981519152908390a350565b6001600160a01b0381166000908152601e602052604090205460ff16156130635760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f742068617465206f6e207468697320706c617965720000000000006044820152606401610fd1565b6001600160a01b0381166000908152601b602052604090205460ff16156130cc5760405162461bcd60e51b815260206004820152601d60248201527f706c6179657220616c7265616479206265696e67206861746564206f6e0000006044820152606401610fd1565b6130d9606461121f611394565b6130e282612467565b10156131305760405162461bcd60e51b815260206004820152601e60248201527f62616c616e63652073686f756c64206265206d6f7265207468616e20312500006044820152606401610fd1565b600061314b606461121f600a61314586612467565b90613433565b6001600160a01b0383166000818152601c60209081526040808320859055601d825280832080546001600160a01b03191633908117909155601b835292819020805460ff1916600117905580519384529083019190915281018290529091507f0cb67ba29144db0fb3b85cc6344dcbc03c262300e32c7d9eb64733ce8e2e2b93906060015b60405180910390a15050565b336000908152601f602052604090205460ff1661320b5760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b038116600081815260076020526040808220805460ff19166001179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b336000908152601f602052604090205460ff166132865760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6000546001600160a01b031633146132da5760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146133255760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811661338a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b600080546040516001600160a01b038085169392169160008051602061530a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152601f602052604090205460ff166134025760405162461bcd60e51b8152600401610fd19061504a565b8051611eb8906012906020840190614cb8565b6001600160a01b031660009081526003602052604090205460ff1690565b60008261344257506000611159565b600061344e83856151e4565b90508261345b8583615203565b1461133c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610fd1565b600061133c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9b565b6014805460ff60a01b1916600160a01b179055600061351230612467565b905060006135316022546113b560215485613d3290919063ffffffff16565b905080602260008282546135459190615172565b909155505060225460009061355b9060026134b2565b90504761357061356b8584613d32565b613fc9565b600061357c4783613d32565b9050600061359b61358d8786613d32565b60215461121f908590613433565b905060006135a98383613d32565b6000602181905560225590506135bf858261414a565b6135c88261420c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5616135f38887613d32565b6040805191825260208201869052810187905260600160405180910390a150506014805460ff60a01b191690555050505050565b6001600160a01b0383166136895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b0382166136ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166137af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610fd1565b6001600160a01b0382166138115760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610fd1565b6001600160a01b03821660009081526019602052604090205460ff161561387a5760405162461bcd60e51b815260206004820152601760248201527f526563697069656e74206973206261636b6c69737465640000000000000000006044820152606401610fd1565b6001600160a01b03831660009081526019602052604090205460ff16156138da5760405162461bcd60e51b815260206004820152601460248201527314d95b99195c881a5cc8189858dadb1a5cdd195960621b6044820152606401610fd1565b60006138e860175442101590565b90508061397d576001600160a01b03841660009081526018602052604090205460ff1661397d5760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610fd1565b6001600160a01b038084166000908152601a602052604080822054928716825281205460ff9283169216908380156139bf5750601454600160a01b900460ff16155b80156139cf575081806139cf5750825b601454909150600160a01b900460ff161580156139e95750835b80156139f25750825b8015613a1357506013546001600160a01b03888116600160481b9092041614155b8015613a3857506001600160a01b03861660009081526009602052604090205460ff16155b8015613a5d57506001600160a01b03871660009081526009602052604090205460ff16155b15613b4f57601554851115613ada5760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610fd1565b6001600160a01b0387166000908152601b602052604090205460ff1615613b4f5760405162461bcd60e51b815260206004820152602360248201527f796f7520617265206265696e67206861746564206f6e2066726f6d2073656c6c604482015262696e6760e81b6064820152608401610fd1565b82158015613b5b575081155b8015613b7257506001600160a01b03861661dead14155b15613bf0576001600160a01b0387166000908152601b602052604090205460ff1615613bf05760405162461bcd60e51b815260206004820152602760248201527f796f7520617265206265696e67206861746564206f6e2066726f6d207472616e60448201526673666572696e6760c81b6064820152608401610fd1565b6000613bfb30612467565b60165490915081108015908190613c1c5750601454600160a01b900460ff16155b8015613c4157506001600160a01b0389166000908152601a602052604090205460ff16155b8015613c5b5750600d546001600160a01b038a8116911614155b8015613c755750600d546001600160a01b03898116911614155b8015613c8a5750601454600160a81b900460ff165b15613c9757613c976134f4565b6001600160a01b03891660009081526007602052604090205460ff1680613cd657506001600160a01b03881660009081526007602052604090205460ff165b15613ce057600092505b613ced8989898689614311565b505050505050505050565b60008184841115613d1c5760405162461bcd60e51b8152600401610fd19190614d83565b506000613d29848661512a565b95945050505050565b600061133c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf8565b6000806000613d816145c0565b9092509050613d9082826134b2565b9250505090565b600080613da48385615172565b90508381101561133c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610fd1565b6000611159613e03613d74565b8390613433565b613e3c6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b613e6e6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000613e7a8585614742565b90506000613e87826147cc565b9196919550909350505050565b6001600160a01b0382166000908152601a602052604090205460ff1615158115151415613f295760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610fd1565b6001600160a01b0382166000908152601a60205260409020805460ff19168215801591909117909155613f5f57613f5f82611ebc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183613fbc5760405162461bcd60e51b8152600401610fd19190614d83565b506000613d298486615203565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ffe57613ffe6150fe565b60200260200101906001600160a01b031690816001600160a01b031681525050601360099054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190615225565b816001815181106140a8576140a86150fe565b6001600160a01b0392831660209182029290920101526013546140d5913091600160481b90041684613627565b60135460405163791ac94760e01b8152600160481b9091046001600160a01b03169063791ac94790614114908590600090869030904290600401615242565b600060405180830381600087803b15801561412e57600080fd5b505af1158015614142573d6000803e3d6000fd5b505050505050565b601354614169903090600160481b90046001600160a01b031684613627565b601354600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152600160481b909204169063f305d71990839060c40160606040518083038185885af11580156141e0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061420591906152b3565b5050505050565b600f546000906001600160a01b0316156142845761422b8260026134b2565b600f546040519193506001600160a01b0316908390600081818185875af1925050503d8060008114614279576040519150601f19603f3d011682016040523d82523d6000602084013e61427e565b606091505b50909150505b600e546040516001600160a01b03909116908390600081818185875af1925050503d80600081146142d1576040519150601f19603f3d011682016040523d82523d6000602084013e6142d6565b606091505b50909150508015611eb8576040518281527f5aa109c2bc1af426c123454c7b5e7932fc32d6e634889dff405a24c9f2e805ed906020016131d0565b6143436040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6143756040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b836143ee576040518060a0016040528086815260200186815260200160008152602001600081526020016000815250915060006143ba6143b3613d74565b8790613433565b90506040518060a00160405280828152602001828152602001600081526020016000815260200160008152509150506143fe565b6143f88584613e0a565b90925090505b6001600160a01b03871660009081526008602052604090205460ff16801561443f57506001600160a01b03861660009081526008602052604090205460ff16155b1561445557614450878784846148af565b614555565b6001600160a01b03871660009081526008602052604090205460ff1615801561449657506001600160a01b03861660009081526008602052604090205460ff165b156144a75761445087878484614947565b6001600160a01b03871660009081526008602052604090205460ff161580156144e957506001600160a01b03861660009081526008602052604090205460ff16155b156144f9576144508787836149a5565b6001600160a01b03871660009081526008602052604090205460ff16801561453957506001600160a01b03861660009081526008602052604090205460ff165b1561454a5761445087878484614a03565b6145558787836149a5565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846020015160405161459e91815260200190565b60405180910390a383156145b7576145b7828289614a5c565b50505050505050565b600c54600b546000918291825b600a54811015614712578260046000600a84815481106145ef576145ef6150fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061465a57508160056000600a8481548110614633576146336150fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561467057600c54600b54945094505050509091565b60046000600a8381548110614687576146876150fe565b60009182526020808320909101546001600160a01b031683528201929092526040019020546146b6908461512a565b925060056000600a83815481106146cf576146cf6150fe565b60009182526020808320909101546001600160a01b031683528201929092526040019020546146fe908361512a565b91508061470a81615157565b9150506145cd565b50600b54600c54614722916134b2565b82101561473957600c54600b549350935050509091565b90939092509050565b6147746040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008060006147838686614b99565b91945092509050600061479c826113b585818b89613d32565b6040805160a081018252988952602089019190915287019390935260608601919091526080850152509192915050565b6147fe6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000614808613d74565b835190915060009061481a9083613433565b9050600061483583866040015161343390919063ffffffff16565b9050600061485084876060015161343390919063ffffffff16565b9050600061486b85886080015161343390919063ffffffff16565b9050600061487f826113b585818989613d32565b6040805160a081018252968752602087019190915285019390935260608401919091526080830152509392505050565b81516001600160a01b038516600090815260056020526040812080549091906148d990849061512a565b909155505080516001600160a01b0385166000908152600460205260408120805490919061490890849061512a565b90915550506020808201516001600160a01b038516600090815260049092526040822080549192909161493c908490615172565b909155505050505050565b80516001600160a01b0385166000908152600460205260408120805490919061497190849061512a565b90915550506020808301516001600160a01b0385166000908152600590925260408220805491929091614908908490615172565b80516001600160a01b038416600090815260046020526040812080549091906149cf90849061512a565b90915550506020808201516001600160a01b0384166000908152600490925260408220805491929091611849908490615172565b81516001600160a01b03851660009081526005602052604081208054909190614a2d90849061512a565b909155505080516001600160a01b0385166000908152600460205260408120805490919061497190849061512a565b6000614a7983606001518460800151613d9790919063ffffffff16565b90506000614a9885606001518660800151613d9790919063ffffffff16565b9050846060015160226000828254614ab09190615172565b9091555050608085015160218054600090614acc908490615172565b909155505030600090815260046020526040902054614aeb9083613d97565b30600081815260046020526040908190209290925590516001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90614b3c9085815260200190565b60405180910390a33060009081526008602052604090205460ff1615614b875730600090815260056020526040902054614b769082613d97565b306000908152600560205260409020555b61420584604001518660400151614c84565b60008060008315614c1b57601354606490614bbc90610100900460ff16876151e4565b614bc69190615203565b601354606490614be0906301000000900460ff16886151e4565b614bea9190615203565b601354606490614c069065010000000000900460ff16896151e4565b614c109190615203565b925092509250614c7d565b601354606490614c349062010000900460ff16876151e4565b614c3e9190615203565b601354606490614c5990640100000000900460ff16886151e4565b614c639190615203565b601354606490614c0690600160301b900460ff16896151e4565b9250925092565b81600c6000828254614c96919061512a565b925050819055508060106000828254614caf9190615172565b90915550505050565b828054614cc49061509d565b90600052602060002090601f016020900481019282614ce65760008555614d2c565b82601f10614cff57805160ff1916838001178555614d2c565b82800160010185558215614d2c579182015b82811115614d2c578251825591602001919060010190614d11565b50614d38929150614d3c565b5090565b5b80821115614d385760008155600101614d3d565b6001600160a01b038116811461108457600080fd5b600060208284031215614d7857600080fd5b813561133c81614d51565b600060208083528351808285015260005b81811015614db057858101830151858201604001528201614d94565b81811115614dc2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215614deb57600080fd5b8235614df681614d51565b946020939093013593505050565b600060208284031215614e1657600080fd5b5035919050565b600080600060608486031215614e3257600080fd5b8335614e3d81614d51565b92506020840135614e4d81614d51565b929592945050506040919091013590565b80358015158114614e6e57600080fd5b919050565b600080600060608486031215614e8857600080fd5b83359250614e9860208501614e5e565b9150614ea660408501614e5e565b90509250925092565b60008060408385031215614ec257600080fd5b8235614ecd81614d51565b9150614edb60208401614e5e565b90509250929050565b803560ff81168114614e6e57600080fd5b600080600060608486031215614f0a57600080fd5b614f1384614ee4565b9250614f2160208501614ee4565b9150614ea660408501614ee4565b600060208284031215614f4157600080fd5b61133c82614e5e565b60008060408385031215614f5d57600080fd5b8235614f6881614d51565b91506020830135614f7881614d51565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614fab57600080fd5b813567ffffffffffffffff80821115614fc357600080fd5b818401915084601f830112614fd757600080fd5b813581811115614fe957614fe9614f83565b604051601f8201601f19908116603f0116810190838211818310171561501157615011614f83565b8160405282815287602084870101111561502a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252601490820152733cb7ba9030b932903737ba1030b71030b236b4b760611b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600181811c908216806150b157607f821691505b602082108114156150d257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b3737ba1030b71030b236b4b760a11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561513c5761513c615114565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561516b5761516b615114565b5060010190565b6000821982111561518557615185615114565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060ff821660ff84168060ff038211156151dc576151dc615114565b019392505050565b60008160001904831182151516156151fe576151fe615114565b500290565b60008261522057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561523757600080fd5b815161133c81614d51565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156152925784516001600160a01b03168352938301939183019160010161526d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156152c857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3ba9b46e64bd1025bc8e81f32ca0bf11d37d9e1f0dabc4095059c6549d41dcc64736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106104775760003560e01c8063715018a61161024a578063c337083711610139578063e57f14e1116100b6578063f2fde38b1161007a578063f2fde38b14610ea6578063f637434214610ec6578063fde13be514610ee7578063fe575a8714610f07578063fe9fbb8014610f4057600080fd5b8063e57f14e114610df4578063e8cacd7214610e14578063e9e43f1f14610e34578063f0b37c0414610e64578063f11a24d314610e8457600080fd5b8063db84527d116100fd578063db84527d14610d2f578063dd46706414610d4f578063dd62ed3e14610d6f578063de0aad5314610db5578063e34a3f1a14610dd457600080fd5b8063c337083714610c79578063c49b9a8014610c99578063ca0975d814610cb9578063d469801614610cef578063d47274a314610d0f57600080fd5b80639a7a23d6116101c7578063a69df4b51161018b578063a69df4b514610bd4578063a9059cbb14610be9578063b62496f514610c09578063b6a5d7de14610c39578063be43b2e214610c5957600080fd5b80639a7a23d614610b265780639cf7522814610b46578063a0d3b8eb14610b7f578063a457c2d714610b9f578063a593015f14610bbf57600080fd5b80637d48441f1161020e5780637d48441f14610a6857806388f8202014610a975780638da5cb5b14610ad05780639213691314610aee57806395d89b4114610b1157600080fd5b8063715018a6146109d2578063734a3873146109e757806375f0a87414610a0757806378fe1b1314610a275780637bce5a0414610a4757600080fd5b80633bd5d173116103665780634e03ab49116102e35780635d098b38116102a75780635d098b381461092d578063602bc62b1461094d5780636af53e8a146109625780636ddecf4e1461098257806370a08231146109b257600080fd5b80634e03ab491461087457806352390c02146108945780635342acb4146108b4578063537df3b6146108ed5780635802e4031461090d57600080fd5b80634a74bb021161032a5780634a74bb02146107db5780634b0bddd2146107fc5780634be612fb1461081c5780634d33b1ef1461083c5780634dc5257f1461085457600080fd5b80633bd5d1731461072e5780633f63d40f1461074e5780634838d1651461076e57806349bd5a5e1461078e5780634a05218c146107ae57600080fd5b806323b872dd116103f4578063313ce567116103b8578063313ce5671461068657806333cfb96e1461069e5780633685d419146106be5780633918e7be146106de578063395093511461070e57600080fd5b806323b872dd146105fb57806325b617031461061b578063296f0a0c146106315780632b112e49146106515780632d8381191461066657600080fd5b80630cfe2f3f1161043b5780630cfe2f3f1461053557806316216e5f146105675780631694505e1461058757806316a2f82a146105c657806318160ddd146105e657600080fd5b8063012d45fa1461048357806302259e9e146104a55780630346535f146104ce57806306fdde03146104e3578063095ea7b31461050557600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b506104a361049e366004614d66565b610f60565b005b3480156104b157600080fd5b506104bb60155481565b6040519081526020015b60405180910390f35b3480156104da57600080fd5b506104a3611087565b3480156104ef57600080fd5b506104f86110b6565b6040516104c59190614d83565b34801561051157600080fd5b50610525610520366004614dd8565b611148565b60405190151581526020016104c5565b34801561054157600080fd5b506013546105559062010000900460ff1681565b60405160ff90911681526020016104c5565b34801561057357600080fd5b506104a3610582366004614e04565b61115f565b34801561059357600080fd5b506013546105ae90600160481b90046001600160a01b031681565b6040516001600160a01b0390911681526020016104c5565b3480156105d257600080fd5b506104a36105e1366004614d66565b611261565b3480156105f257600080fd5b50600b546104bb565b34801561060757600080fd5b50610525610616366004614e1d565b6112d9565b34801561062757600080fd5b506104bb60175481565b34801561063d57600080fd5b506104a361064c366004614d66565b611343565b34801561065d57600080fd5b506104bb611394565b34801561067257600080fd5b506104bb610681366004614e04565b6113c0565b34801561069257600080fd5b5060135460ff16610555565b3480156106aa57600080fd5b506104a36106b9366004614d66565b61143d565b3480156106ca57600080fd5b506104a36106d9366004614d66565b61152e565b3480156106ea57600080fd5b506105256106f9366004614d66565b601e6020526000908152604090205460ff1681565b34801561071a57600080fd5b50610525610729366004614dd8565b611723565b34801561073a57600080fd5b506104a3610749366004614e04565b611759565b34801561075a57600080fd5b506104bb610769366004614e73565b611853565b34801561077a57600080fd5b506104a3610789366004614d66565b6118da565b34801561079a57600080fd5b506014546105ae906001600160a01b031681565b3480156107ba57600080fd5b506104bb6107c9366004614d66565b601c6020526000908152604090205481565b3480156107e757600080fd5b5060145461052590600160a81b900460ff1681565b34801561080857600080fd5b506104a3610817366004614eaf565b611b90565b34801561082857600080fd5b506104a3610837366004614d66565b611bea565b34801561084857600080fd5b50601754421015610525565b34801561086057600080fd5b506104a361086f366004614d66565b611dd2565b34801561088057600080fd5b50600f546105ae906001600160a01b031681565b3480156108a057600080fd5b506104a36108af366004614d66565b611ebc565b3480156108c057600080fd5b506105256108cf366004614d66565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108f957600080fd5b506104a3610908366004614d66565b6120ba565b34801561091957600080fd5b506104a3610928366004614e04565b61219b565b34801561093957600080fd5b506104a3610948366004614d66565b612252565b34801561095957600080fd5b506002546104bb565b34801561096e57600080fd5b506104a361097d366004614d66565b612370565b34801561098e57600080fd5b5061052561099d366004614d66565b601b6020526000908152604090205460ff1681565b3480156109be57600080fd5b506104bb6109cd366004614d66565b612467565b3480156109de57600080fd5b506104a36124c6565b3480156109f357600080fd5b506104a3610a02366004614d66565b612528565b348015610a1357600080fd5b50600e546105ae906001600160a01b031681565b348015610a3357600080fd5b506104a3610a42366004614d66565b6125df565b348015610a5357600080fd5b5060135461055590600160301b900460ff1681565b348015610a7457600080fd5b50610525610a83366004614d66565b602080526000908152604090205460ff1681565b348015610aa357600080fd5b50610525610ab2366004614d66565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610adc57600080fd5b506000546001600160a01b03166105ae565b348015610afa57600080fd5b506013546105559065010000000000900460ff1681565b348015610b1d57600080fd5b506104f86126db565b348015610b3257600080fd5b506104a3610b41366004614eaf565b6126ea565b348015610b5257600080fd5b50610525610b61366004614d66565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610b8b57600080fd5b506104a3610b9a366004614ef5565b6127ab565b348015610bab57600080fd5b50610525610bba366004614dd8565b612917565b348015610bcb57600080fd5b506010546104bb565b348015610be057600080fd5b506104a3612966565b348015610bf557600080fd5b50610525610c04366004614dd8565b612a6c565b348015610c1557600080fd5b50610525610c24366004614d66565b601a6020526000908152604090205460ff1681565b348015610c4557600080fd5b506104a3610c54366004614d66565b612a79565b348015610c6557600080fd5b506104a3610c74366004614d66565b612ac7565b348015610c8557600080fd5b506104a3610c94366004614d66565b612bbc565b348015610ca557600080fd5b506104a3610cb4366004614f2f565b612cda565b348015610cc557600080fd5b506105ae610cd4366004614d66565b601d602052600090815260409020546001600160a01b031681565b348015610cfb57600080fd5b50600d546105ae906001600160a01b031681565b348015610d1b57600080fd5b506104a3610d2a366004614ef5565b612d56565b348015610d3b57600080fd5b506104a3610d4a366004614e04565b612eb4565b348015610d5b57600080fd5b506104a3610d6a366004614e04565b612f75565b348015610d7b57600080fd5b506104bb610d8a366004614f4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610dc157600080fd5b5060135461055590610100900460ff1681565b348015610de057600080fd5b506104a3610def366004614d66565b612ffa565b348015610e0057600080fd5b506104a3610e0f366004614d66565b6131dc565b348015610e2057600080fd5b506104a3610e2f366004614eaf565b613257565b348015610e4057600080fd5b50610525610e4f366004614d66565b601f6020526000908152604090205460ff1681565b348015610e7057600080fd5b506104a3610e7f366004614d66565b6132b0565b348015610e9057600080fd5b5060135461055590640100000000900460ff1681565b348015610eb257600080fd5b506104a3610ec1366004614d66565b6132fb565b348015610ed257600080fd5b50601354610555906301000000900460ff1681565b348015610ef357600080fd5b506104a3610f02366004614f99565b6133d3565b348015610f1357600080fd5b50610525610f22366004614d66565b6001600160a01b031660009081526019602052604090205460ff1690565b348015610f4c57600080fd5b50610525610f5b366004614d66565b613415565b600f546001600160a01b0382811691161415610fda5760405162461bcd60e51b815260206004820152602e60248201527f546865206163636f756e74696e672077616c6c65742068617320616c7265616460448201526d792074686174206164647265737360901b60648201526084015b60405180910390fd5b336000908152601f602052604090205460ff166110095760405162461bcd60e51b8152600401610fd19061504a565b600f546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600f80546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff1916600117905561108481611ebc565b50565b61109033613415565b6110ac5760405162461bcd60e51b8152600401610fd190615078565b6110b46134f4565b565b6060601180546110c59061509d565b80601f01602080910402602001604051908101604052809291908181526020018280546110f19061509d565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611155338484613627565b5060015b92915050565b600181101580156111715750600a8111155b6111d65760405162461bcd60e51b815260206004820152603060248201527f416d6f756e74206d757374206265206265777465656e2031303020303030206160448201526f06e6420312030303020303030203030360841b6064820152608401610fd1565b336000908152601f602052604090205460ff166112055760405162461bcd60e51b8152600401610fd1906150d8565b611225606461121f83600b5461343390919063ffffffff16565b906134b2565b60158190556040519081527fc669dc4faa0c7b1259c5e88f5729c9c6dd69e8a5ba186a73b6e51e64419499d5906020015b60405180910390a150565b336000908152601f602052604090205460ff166112905760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b038116600081815260076020526040808220805460ff19169055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b60006112e684848461374b565b6113388433611333856040518060600160405280602881526020016152e2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190613cf8565b613627565b5060015b9392505050565b336000908152601f602052604090205460ff166113725760405162461bcd60e51b8152600401610fd1906150d8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006113bb6113a36000612467565b6113b56113b161dead612467565b600b545b90613d32565b905090565b6000600c548211156114275760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610fd1565b6000611431613d74565b905061133c83826134b2565b61144633613415565b6114625760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526009602052604090205460ff166114e55760405162461bcd60e51b815260206004820152603260248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d604482015271185e081d1c985b9cd9995c88185b5bdd5b9d60721b6064820152608401610fd1565b6001600160a01b038116600081815260096020526040808220805460ff19169055517fff5735b0a28f1d425bb1c17e4fb58499b4a5a5640e96c40d2b01dc2c960e0cea9190a250565b61153733613415565b6115535760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526008602052604090205460ff166115c95760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2072604482015264195dd85c9960da1b6064820152608401610fd1565b60005b600a548110156116eb57816001600160a01b0316600a82815481106115f3576115f36150fe565b6000918252602090912001546001600160a01b031614156116d957600a805461161e9060019061512a565b8154811061162e5761162e6150fe565b600091825260209091200154600a80546001600160a01b03909216918390811061165a5761165a6150fe565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600a8054806116b2576116b2615141565b600082815260209020810160001990810180546001600160a01b03191690550190556116eb565b806116e381615157565b9150506115cc565b506040516001600160a01b038216907fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90600090a250565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916111559185906113339086613d97565b3360008181526008602052604090205460ff16156117df5760405162461bcd60e51b815260206004820152603860248201527f4578636c75646564206164647265737365732066726f6d20726577617264206360448201527f616e6e6f742063616c6c20746869732066756e6374696f6e00000000000000006064820152608401610fd1565b60006117ea83613df6565b6001600160a01b03831660009081526004602052604081208054929350839290919061181790849061512a565b9250508190555080600c6000828254611830919061512a565b9250508190555082601060008282546118499190615172565b9091555050505050565b6000600b548411156118a75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610fd1565b826118c05760006118b785613df6565b915061133c9050565b60006118cc8584613e0a565b60200151925061133c915050565b6000546001600160a01b031633146119045760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526019602052604090205460ff16156119795760405162461bcd60e51b815260206004820152602360248201527f54686973206164647265737320697320616c726561647920626c61636b6c69736044820152621d195960ea1b6064820152608401610fd1565b6000546001600160a01b03828116911614156119e55760405162461bcd60e51b815260206004820152602560248201527f426c61636b6c697374696e6720746865206f776e6572206973206e6f7420616c6044820152641b1bddd95960da1b6064820152608401610fd1565b6001600160a01b038116611a4d5760405162461bcd60e51b815260206004820152602960248201527f426c61636b6c697374696e672074686520302061646472657373206973206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610fd1565b6014546001600160a01b0382811691161415611ac05760405162461bcd60e51b815260206004820152602c60248201527f426c61636b6c697374696e67207468652070616972206164647265737320697360448201526b081b9bdd08185b1b1bddd95960a21b6064820152608401610fd1565b6001600160a01b038116301415611b325760405162461bcd60e51b815260206004820152603060248201527f426c61636b6c697374696e672074686520636f6e74726163742061646472657360448201526f1cc81a5cc81b9bdd08185b1b1bddd95960821b6064820152608401610fd1565b6001600160a01b038116600081815260196020908152604091829020805460ff1916600190811790915591519182527f0d995f92edc73ef0f6a26f998e26d73cf24a90c903a3339c7835457e2c96756591015b60405180910390a250565b336000908152601f602052604090205460ff16611bbf5760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038082166000908152601d6020908152604080832054338452601c835281842054601f90935292205491909216919060ff1680611c3c575033600090815260208052604090205460ff165b15611c86576001600160a01b0383166000908152601b60209081526040808320805460ff19169055601d825280832080546001600160a01b0319169055601c909152812055611d82565b336000908152601b602052604090205460ff16611ce55760405162461bcd60e51b815260206004820152601a60248201527f796f7520617265206e6f74206265696e67206861746564206f6e0000000000006044820152606401610fd1565b80611cef33612467565b1015611d3d5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206861746572636f696e20746f2070617920666565006044820152606401610fd1565b611d4a3361dead8361374b565b336000908152601b60209081526040808320805460ff19169055601d825280832080546001600160a01b0319169055601c9091528120555b604080516001600160a01b038086168252841660208201529081018290527f99dff648336f72c110bb1ebd39263fa8b89e22e5fda9cd9f998dd039f77b83799060600160405180910390a1505050565b336000908152601f602052604090205460ff16611e295760405162461bcd60e51b81526020600482015260156024820152741e5bdd48185c99481b9bdd081d1a185d0818dbdbdb605a1b6044820152606401610fd1565b60004711611e835760405162461bcd60e51b815260206004820152602160248201527f546865726520617265206e6f204554487320696e2074686520636f6e747261636044820152601d60fa1b6064820152608401610fd1565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611eb8573d6000803e3d6000fd5b5050565b611ec533613415565b611ee15760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526008602052604090205460ff1615611f5a5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610fd1565b600a546103e81015611fd45760405162461bcd60e51b815260206004820152603c60248201527f4e6f206d6f7265207468616e2031303030206164647265737365732063616e2060448201527f6265206578636c756465642066726f6d207468652072657761726473000000006064820152608401610fd1565b6001600160a01b0381166000908152600460205260409020541561202e576001600160a01b038116600090815260046020526040902054612014906113c0565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b038116600081815260086020526040808220805460ff19166001908117909155600a8054918201815583527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191684179055517f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99190a250565b6000546001600160a01b031633146120e45760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526019602052604090205460ff1661214c5760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320616c72656164792077686974656c69737465646044820152606401610fd1565b6001600160a01b0381166000818152601960209081526040808320805460ff19169055519182527f0d995f92edc73ef0f6a26f998e26d73cf24a90c903a3339c7835457e2c9675659101611b85565b6000546001600160a01b031633146121c55760405162461bcd60e51b8152600401610fd19061518a565b426017541161224d5760405162461bcd60e51b815260206004820152604860248201527f4368616e67696e67207468652074696d657374616d70206973206e6f7420616c60448201527f6c6f77656420696620746865206c697374696e672068617320616c7265616479606482015267081cdd185c9d195960c21b608482015260a401610fd1565b601755565b600e546001600160a01b03828116911614156122c65760405162461bcd60e51b815260206004820152602d60248201527f546865206d61726b6574696e672077616c6c65742068617320616c726561647960448201526c2074686174206164647265737360981b6064820152608401610fd1565b336000908152601f602052604090205460ff166122f55760405162461bcd60e51b8152600401610fd19061504a565b600e546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600e80546001600160a01b0319166001600160a01b0383169081179091556000908152600760205260409020805460ff1916600117905561108481611ebc565b61237933613415565b6123955760405162461bcd60e51b8152600401610fd190615078565b6001600160a01b03811660009081526009602052604090205460ff161561241b5760405162461bcd60e51b815260206004820152603460248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015273081b585e081d1c985b9cd9995c88185b5bdd5b9d60621b6064820152608401610fd1565b6001600160a01b038116600081815260096020526040808220805460ff19166001179055517f0d6af3e1a4bdae628fe9725f4b90680a20fa2378aff6f506b9b840d113ec61009190a250565b6001600160a01b03811660009081526008602052604081205460ff16156124a457506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054611159906113c0565b6000546001600160a01b031633146124f05760405162461bcd60e51b8152600401610fd19061518a565b600080546040516001600160a01b039091169060008051602061530a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146125525760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811660009081526018602052604090205460ff16156125bb5760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420697320616c726561647920616464656400000000000000006044820152606401610fd1565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6000546001600160a01b031633146126095760405162461bcd60e51b8152600401610fd19061518a565b6014546001600160a01b03828116911614156126795760405162461bcd60e51b815260206004820152602960248201527f546865207061697220616464726573732068617320616c72656164792074686160448201526874206164647265737360b81b6064820152608401610fd1565b6014546040516001600160a01b03918216918316907f810cdeae8b9d925700c17b8fab8708bcc9a6902e48f852ce502c88c3bd77424190600090a3601480546001600160a01b0319166001600160a01b03831690811790915561108490611ebc565b6060601280546110c59061509d565b6126f333613415565b61270f5760405162461bcd60e51b8152600401610fd190615078565b6014546001600160a01b03838116911614156127a15760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610fd1565b611eb88282613e94565b6000816127b884866151bf565b6127c291906151bf565b9050600a8160ff16111561282e5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c206275792066656573206d757374206265206c6f776572206f722060448201526c657175616c7320746f2031302560981b6064820152608401610fd1565b336000908152601f602052604090205460ff1661285d5760405162461bcd60e51b8152600401610fd1906150d8565b6013805464ff00ff000019166201000060ff87811691820264ff000000001916929092176401000000008784169081029190911768ff00ff0000000000001916600160301b87851690810268ff0000000000000000191691909117680100000000000000009487169490940293909317909355604080519182526020820193909352918201527fc395676cdc7e4360509539f8ae41203ef3ebd473f39fb311449a278eb2e7f535906060015b60405180910390a150505050565b600061115533846113338560405180606001604052806025815260200161532a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190613cf8565b6001546001600160a01b031633146129cc5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610fd1565b6002544211612a1d5760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610fd1565b600154600080546040516001600160a01b03938416939091169160008051602061530a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061115533848461374b565b6000546001600160a01b03163314612aa35760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b336000908152601f602052604090205460ff1680612af3575033600090815260208052604090205460ff165b612b385760405162461bcd60e51b81526020600482015260166024820152751b9bdd081c185c9d1b995c99590818dbdb9d1c9858dd60521b6044820152606401610fd1565b6001600160a01b0381166000818152601e602090815260408083208054600160ff1991821617909155601b835281842080549091169055601d825280832080546001600160a01b0319169055601c82528083209290925590519182527f1fd15e67956c8f14a835d6166e5912aea9a731ad51e503d68aa76c56213498b09101611256565b6000546001600160a01b03163314612be65760405162461bcd60e51b8152600401610fd19061518a565b6013546001600160a01b03828116600160481b909204161415612c575760405162461bcd60e51b815260206004820152602360248201527f54686520726f757465722068617320616c72656164792074686174206164647260448201526265737360e81b6064820152608401610fd1565b6013546040516001600160a01b03600160481b9092048216918316907feb8d61f6daf24f1091115a70adc941fd8537cfa96f53bfaf282c6bb3cfc5e6e690600090a3601380546001600160a01b03909216600160481b027fffffff0000000000000000000000000000000000000000ffffffffffffffffff909216919091179055565b336000908152601f602052604090205460ff16612d095760405162461bcd60e51b8152600401610fd1906150d8565b60148054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061125690831515815260200190565b600081612d6384866151bf565b612d6d91906151bf565b9050600f8160ff161115612dda5760405162461bcd60e51b815260206004820152602e60248201527f546f74616c2073656c6c2066656573206d757374206265206c6f776572206f7260448201526d20657175616c7320746f2031352560901b6064820152608401610fd1565b336000908152601f602052604090205460ff16612e095760405162461bcd60e51b8152600401610fd1906150d8565b6013805463ff00ff00191661010060ff87811691820263ff00000019169290921763010000008784169081029190911767ff00ff000000000019166501000000000087851690810267ff000000000000001916919091176701000000000000009487169490940293909317909355604080519182526020820193909352918201527f055bc0d94dbe37bf4e00b629dc529045ad1546901f2291b828a5c4d2592cbd8190606001612909565b6103e88110158015612ecc575065082f79cd90008111155b612f2e5760405162461bcd60e51b815260206004820152602d60248201527f416d6f756e74206d757374206265206265777465656e203130303020616e642060448201526c03120303030203030302030303609c1b6064820152608401610fd1565b336000908152601f602052604090205460ff16612f5d5760405162461bcd60e51b8152600401610fd1906150d8565b612f6f81670de0b6b3a76400006151e4565b60165550565b6000546001600160a01b03163314612f9f5760405162461bcd60e51b8152600401610fd19061518a565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055612fce8142615172565b600255600080546040516001600160a01b039091169060008051602061530a833981519152908390a350565b6001600160a01b0381166000908152601e602052604090205460ff16156130635760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f742068617465206f6e207468697320706c617965720000000000006044820152606401610fd1565b6001600160a01b0381166000908152601b602052604090205460ff16156130cc5760405162461bcd60e51b815260206004820152601d60248201527f706c6179657220616c7265616479206265696e67206861746564206f6e0000006044820152606401610fd1565b6130d9606461121f611394565b6130e282612467565b10156131305760405162461bcd60e51b815260206004820152601e60248201527f62616c616e63652073686f756c64206265206d6f7265207468616e20312500006044820152606401610fd1565b600061314b606461121f600a61314586612467565b90613433565b6001600160a01b0383166000818152601c60209081526040808320859055601d825280832080546001600160a01b03191633908117909155601b835292819020805460ff1916600117905580519384529083019190915281018290529091507f0cb67ba29144db0fb3b85cc6344dcbc03c262300e32c7d9eb64733ce8e2e2b93906060015b60405180910390a15050565b336000908152601f602052604090205460ff1661320b5760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b038116600081815260076020526040808220805460ff19166001179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b336000908152601f602052604090205460ff166132865760405162461bcd60e51b8152600401610fd1906150d8565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6000546001600160a01b031633146132da5760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146133255760405162461bcd60e51b8152600401610fd19061518a565b6001600160a01b03811661338a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b600080546040516001600160a01b038085169392169160008051602061530a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152601f602052604090205460ff166134025760405162461bcd60e51b8152600401610fd19061504a565b8051611eb8906012906020840190614cb8565b6001600160a01b031660009081526003602052604090205460ff1690565b60008261344257506000611159565b600061344e83856151e4565b90508261345b8583615203565b1461133c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610fd1565b600061133c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9b565b6014805460ff60a01b1916600160a01b179055600061351230612467565b905060006135316022546113b560215485613d3290919063ffffffff16565b905080602260008282546135459190615172565b909155505060225460009061355b9060026134b2565b90504761357061356b8584613d32565b613fc9565b600061357c4783613d32565b9050600061359b61358d8786613d32565b60215461121f908590613433565b905060006135a98383613d32565b6000602181905560225590506135bf858261414a565b6135c88261420c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5616135f38887613d32565b6040805191825260208201869052810187905260600160405180910390a150506014805460ff60a01b191690555050505050565b6001600160a01b0383166136895760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b0382166136ea5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166137af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610fd1565b6001600160a01b0382166138115760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610fd1565b6001600160a01b03821660009081526019602052604090205460ff161561387a5760405162461bcd60e51b815260206004820152601760248201527f526563697069656e74206973206261636b6c69737465640000000000000000006044820152606401610fd1565b6001600160a01b03831660009081526019602052604090205460ff16156138da5760405162461bcd60e51b815260206004820152601460248201527314d95b99195c881a5cc8189858dadb1a5cdd195960621b6044820152606401610fd1565b60006138e860175442101590565b90508061397d576001600160a01b03841660009081526018602052604090205460ff1661397d5760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610fd1565b6001600160a01b038084166000908152601a602052604080822054928716825281205460ff9283169216908380156139bf5750601454600160a01b900460ff16155b80156139cf575081806139cf5750825b601454909150600160a01b900460ff161580156139e95750835b80156139f25750825b8015613a1357506013546001600160a01b03888116600160481b9092041614155b8015613a3857506001600160a01b03861660009081526009602052604090205460ff16155b8015613a5d57506001600160a01b03871660009081526009602052604090205460ff16155b15613b4f57601554851115613ada5760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610fd1565b6001600160a01b0387166000908152601b602052604090205460ff1615613b4f5760405162461bcd60e51b815260206004820152602360248201527f796f7520617265206265696e67206861746564206f6e2066726f6d2073656c6c604482015262696e6760e81b6064820152608401610fd1565b82158015613b5b575081155b8015613b7257506001600160a01b03861661dead14155b15613bf0576001600160a01b0387166000908152601b602052604090205460ff1615613bf05760405162461bcd60e51b815260206004820152602760248201527f796f7520617265206265696e67206861746564206f6e2066726f6d207472616e60448201526673666572696e6760c81b6064820152608401610fd1565b6000613bfb30612467565b60165490915081108015908190613c1c5750601454600160a01b900460ff16155b8015613c4157506001600160a01b0389166000908152601a602052604090205460ff16155b8015613c5b5750600d546001600160a01b038a8116911614155b8015613c755750600d546001600160a01b03898116911614155b8015613c8a5750601454600160a81b900460ff165b15613c9757613c976134f4565b6001600160a01b03891660009081526007602052604090205460ff1680613cd657506001600160a01b03881660009081526007602052604090205460ff165b15613ce057600092505b613ced8989898689614311565b505050505050505050565b60008184841115613d1c5760405162461bcd60e51b8152600401610fd19190614d83565b506000613d29848661512a565b95945050505050565b600061133c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf8565b6000806000613d816145c0565b9092509050613d9082826134b2565b9250505090565b600080613da48385615172565b90508381101561133c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610fd1565b6000611159613e03613d74565b8390613433565b613e3c6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b613e6e6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000613e7a8585614742565b90506000613e87826147cc565b9196919550909350505050565b6001600160a01b0382166000908152601a602052604090205460ff1615158115151415613f295760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610fd1565b6001600160a01b0382166000908152601a60205260409020805460ff19168215801591909117909155613f5f57613f5f82611ebc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183613fbc5760405162461bcd60e51b8152600401610fd19190614d83565b506000613d298486615203565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ffe57613ffe6150fe565b60200260200101906001600160a01b031690816001600160a01b031681525050601360099054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140959190615225565b816001815181106140a8576140a86150fe565b6001600160a01b0392831660209182029290920101526013546140d5913091600160481b90041684613627565b60135460405163791ac94760e01b8152600160481b9091046001600160a01b03169063791ac94790614114908590600090869030904290600401615242565b600060405180830381600087803b15801561412e57600080fd5b505af1158015614142573d6000803e3d6000fd5b505050505050565b601354614169903090600160481b90046001600160a01b031684613627565b601354600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152600160481b909204169063f305d71990839060c40160606040518083038185885af11580156141e0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061420591906152b3565b5050505050565b600f546000906001600160a01b0316156142845761422b8260026134b2565b600f546040519193506001600160a01b0316908390600081818185875af1925050503d8060008114614279576040519150601f19603f3d011682016040523d82523d6000602084013e61427e565b606091505b50909150505b600e546040516001600160a01b03909116908390600081818185875af1925050503d80600081146142d1576040519150601f19603f3d011682016040523d82523d6000602084013e6142d6565b606091505b50909150508015611eb8576040518281527f5aa109c2bc1af426c123454c7b5e7932fc32d6e634889dff405a24c9f2e805ed906020016131d0565b6143436040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6143756040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b836143ee576040518060a0016040528086815260200186815260200160008152602001600081526020016000815250915060006143ba6143b3613d74565b8790613433565b90506040518060a00160405280828152602001828152602001600081526020016000815260200160008152509150506143fe565b6143f88584613e0a565b90925090505b6001600160a01b03871660009081526008602052604090205460ff16801561443f57506001600160a01b03861660009081526008602052604090205460ff16155b1561445557614450878784846148af565b614555565b6001600160a01b03871660009081526008602052604090205460ff1615801561449657506001600160a01b03861660009081526008602052604090205460ff165b156144a75761445087878484614947565b6001600160a01b03871660009081526008602052604090205460ff161580156144e957506001600160a01b03861660009081526008602052604090205460ff16155b156144f9576144508787836149a5565b6001600160a01b03871660009081526008602052604090205460ff16801561453957506001600160a01b03861660009081526008602052604090205460ff165b1561454a5761445087878484614a03565b6145558787836149a5565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846020015160405161459e91815260200190565b60405180910390a383156145b7576145b7828289614a5c565b50505050505050565b600c54600b546000918291825b600a54811015614712578260046000600a84815481106145ef576145ef6150fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061465a57508160056000600a8481548110614633576146336150fe565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561467057600c54600b54945094505050509091565b60046000600a8381548110614687576146876150fe565b60009182526020808320909101546001600160a01b031683528201929092526040019020546146b6908461512a565b925060056000600a83815481106146cf576146cf6150fe565b60009182526020808320909101546001600160a01b031683528201929092526040019020546146fe908361512a565b91508061470a81615157565b9150506145cd565b50600b54600c54614722916134b2565b82101561473957600c54600b549350935050509091565b90939092509050565b6147746040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60008060006147838686614b99565b91945092509050600061479c826113b585818b89613d32565b6040805160a081018252988952602089019190915287019390935260608601919091526080850152509192915050565b6147fe6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000614808613d74565b835190915060009061481a9083613433565b9050600061483583866040015161343390919063ffffffff16565b9050600061485084876060015161343390919063ffffffff16565b9050600061486b85886080015161343390919063ffffffff16565b9050600061487f826113b585818989613d32565b6040805160a081018252968752602087019190915285019390935260608401919091526080830152509392505050565b81516001600160a01b038516600090815260056020526040812080549091906148d990849061512a565b909155505080516001600160a01b0385166000908152600460205260408120805490919061490890849061512a565b90915550506020808201516001600160a01b038516600090815260049092526040822080549192909161493c908490615172565b909155505050505050565b80516001600160a01b0385166000908152600460205260408120805490919061497190849061512a565b90915550506020808301516001600160a01b0385166000908152600590925260408220805491929091614908908490615172565b80516001600160a01b038416600090815260046020526040812080549091906149cf90849061512a565b90915550506020808201516001600160a01b0384166000908152600490925260408220805491929091611849908490615172565b81516001600160a01b03851660009081526005602052604081208054909190614a2d90849061512a565b909155505080516001600160a01b0385166000908152600460205260408120805490919061497190849061512a565b6000614a7983606001518460800151613d9790919063ffffffff16565b90506000614a9885606001518660800151613d9790919063ffffffff16565b9050846060015160226000828254614ab09190615172565b9091555050608085015160218054600090614acc908490615172565b909155505030600090815260046020526040902054614aeb9083613d97565b30600081815260046020526040908190209290925590516001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90614b3c9085815260200190565b60405180910390a33060009081526008602052604090205460ff1615614b875730600090815260056020526040902054614b769082613d97565b306000908152600560205260409020555b61420584604001518660400151614c84565b60008060008315614c1b57601354606490614bbc90610100900460ff16876151e4565b614bc69190615203565b601354606490614be0906301000000900460ff16886151e4565b614bea9190615203565b601354606490614c069065010000000000900460ff16896151e4565b614c109190615203565b925092509250614c7d565b601354606490614c349062010000900460ff16876151e4565b614c3e9190615203565b601354606490614c5990640100000000900460ff16886151e4565b614c639190615203565b601354606490614c0690600160301b900460ff16896151e4565b9250925092565b81600c6000828254614c96919061512a565b925050819055508060106000828254614caf9190615172565b90915550505050565b828054614cc49061509d565b90600052602060002090601f016020900481019282614ce65760008555614d2c565b82601f10614cff57805160ff1916838001178555614d2c565b82800160010185558215614d2c579182015b82811115614d2c578251825591602001919060010190614d11565b50614d38929150614d3c565b5090565b5b80821115614d385760008155600101614d3d565b6001600160a01b038116811461108457600080fd5b600060208284031215614d7857600080fd5b813561133c81614d51565b600060208083528351808285015260005b81811015614db057858101830151858201604001528201614d94565b81811115614dc2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215614deb57600080fd5b8235614df681614d51565b946020939093013593505050565b600060208284031215614e1657600080fd5b5035919050565b600080600060608486031215614e3257600080fd5b8335614e3d81614d51565b92506020840135614e4d81614d51565b929592945050506040919091013590565b80358015158114614e6e57600080fd5b919050565b600080600060608486031215614e8857600080fd5b83359250614e9860208501614e5e565b9150614ea660408501614e5e565b90509250925092565b60008060408385031215614ec257600080fd5b8235614ecd81614d51565b9150614edb60208401614e5e565b90509250929050565b803560ff81168114614e6e57600080fd5b600080600060608486031215614f0a57600080fd5b614f1384614ee4565b9250614f2160208501614ee4565b9150614ea660408501614ee4565b600060208284031215614f4157600080fd5b61133c82614e5e565b60008060408385031215614f5d57600080fd5b8235614f6881614d51565b91506020830135614f7881614d51565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614fab57600080fd5b813567ffffffffffffffff80821115614fc357600080fd5b818401915084601f830112614fd757600080fd5b813581811115614fe957614fe9614f83565b604051601f8201601f19908116603f0116810190838211818310171561501157615011614f83565b8160405282815287602084870101111561502a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252601490820152733cb7ba9030b932903737ba1030b71030b236b4b760611b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600181811c908216806150b157607f821691505b602082108114156150d257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b3737ba1030b71030b236b4b760a11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561513c5761513c615114565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561516b5761516b615114565b5060010190565b6000821982111561518557615185615114565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060ff821660ff84168060ff038211156151dc576151dc615114565b019392505050565b60008160001904831182151516156151fe576151fe615114565b500290565b60008261522057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561523757600080fd5b815161133c81614d51565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156152925784516001600160a01b03168352938301939183019160010161526d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156152c857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3ba9b46e64bd1025bc8e81f32ca0bf11d37d9e1f0dabc4095059c6549d41dcc64736f6c634300080b0033
Deployed Bytecode Sourcemap
26567:33248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57882:426;;;;;;;;;;-1:-1:-1;57882:426:0;;;;;:::i;:::-;;:::i;:::-;;28209:65;;;;;;;;;;;;;;;;;;;572:25:1;;;560:2;545:18;28209:65:0;;;;;;;;57355:92;;;;;;;;;;;;;:::i;35353:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36275:161::-;;;;;;;;;;-1:-1:-1;36275:161:0;;;;;:::i;:::-;;:::i;:::-;;;1703:14:1;;1696:22;1678:41;;1666:2;1651:18;36275:161:0;1538:187:1;27785:29:0;;;;;;;;;;-1:-1:-1;27785:29:0;;;;;;;;;;;;;;1902:4:1;1890:17;;;1872:36;;1860:2;1845:18;27785:29:0;1730:184:1;42993:362:0;;;;;;;;;;-1:-1:-1;42993:362:0;;;;;:::i;:::-;;:::i;28038:41::-;;;;;;;;;;-1:-1:-1;28038:41:0;;;;-1:-1:-1;;;28038:41:0;;-1:-1:-1;;;;;28038:41:0;;;;;;-1:-1:-1;;;;;2295:32:1;;;2277:51;;2265:2;2250:18;28038:41:0;2104:230:1;40667:197:0;;;;;;;;;;-1:-1:-1;40667:197:0;;;;;:::i;:::-;;:::i;35630:95::-;;;;;;;;;;-1:-1:-1;35710:7:0;;35630:95;;36444:313;;;;;;;;;;-1:-1:-1;36444:313:0;;;;;:::i;:::-;;:::i;28419:56::-;;;;;;;;;;;;;;;;33218:169;;;;;;;;;;-1:-1:-1;33218:169:0;;;;;:::i;:::-;;:::i;57198:149::-;;;;;;;;;;;;;:::i;39038:253::-;;;;;;;;;;-1:-1:-1;39038:253:0;;;;;:::i;:::-;;:::i;35539:83::-;;;;;;;;;;-1:-1:-1;35605:9:0;;;;35539:83;;41219:335;;;;;;;;;;-1:-1:-1;41219:335:0;;;;;:::i;:::-;;:::i;39843:610::-;;;;;;;;;;-1:-1:-1;39843:610:0;;;;;:::i;:::-;;:::i;28961:45::-;;;;;;;;;;-1:-1:-1;28961:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36765:218;;;;;;;;;;-1:-1:-1;36765:218:0;;;;;:::i;:::-;;:::i;38033:356::-;;;;;;;;;;-1:-1:-1;38033:356:0;;;;;:::i;:::-;;:::i;38397:500::-;;;;;;;;;;-1:-1:-1;38397:500:0;;;;;:::i;:::-;;:::i;58450:588::-;;;;;;;;;;-1:-1:-1;58450:588:0;;;;;:::i;:::-;;:::i;28086:28::-;;;;;;;;;;-1:-1:-1;28086:28:0;;;;-1:-1:-1;;;;;28086:28:0;;;28860:44;;;;;;;;;;-1:-1:-1;28860:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;28160:40;;;;;;;;;;-1:-1:-1;28160:40:0;;;;-1:-1:-1;;;28160:40:0;;;;;;32876:155;;;;;;;;;;-1:-1:-1;32876:155:0;;;;;:::i;:::-;;:::i;34064:766::-;;;;;;;;;;-1:-1:-1;34064:766:0;;;;;:::i;:::-;;:::i;58316:126::-;;;;;;;;;;-1:-1:-1;58411:23:0;;58392:15;:42;;58316:126;;59563:249;;;;;;;;;;-1:-1:-1;59563:249:0;;;;;:::i;:::-;;:::i;27414:93::-;;;;;;;;;;-1:-1:-1;27414:93:0;;;;-1:-1:-1;;;;;27414:93:0;;;39299:536;;;;;;;;;;-1:-1:-1;39299:536:0;;;;;:::i;:::-;;:::i;46682:123::-;;;;;;;;;;-1:-1:-1;46682:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;46770:27:0;46746:4;46770:27;;;:18;:27;;;;;;;;;46682:123;59046:236;;;;;;;;;;-1:-1:-1;59046:236:0;;;;;:::i;:::-;;:::i;59290:265::-;;;;;;;;;;-1:-1:-1;59290:265:0;;;;;:::i;:::-;;:::i;57455:421::-;;;;;;;;;;-1:-1:-1;57455:421:0;;;;;:::i;:::-;;:::i;17108:90::-;;;;;;;;;;-1:-1:-1;17181:9:0;;17108:90;;40872:341;;;;;;;;;;-1:-1:-1;40872:341:0;;;;;:::i;:::-;;:::i;28813:40::-;;;;;;;;;;-1:-1:-1;28813:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35733:208;;;;;;;;;;-1:-1:-1;35733:208:0;;;;;:::i;:::-;;:::i;16553:148::-;;;;;;;;;;;;;:::i;41611:260::-;;;;;;;;;;-1:-1:-1;41611:260:0;;;;;:::i;:::-;;:::i;27315:92::-;;;;;;;;;;-1:-1:-1;27315:92:0;;;;-1:-1:-1;;;;;27315:92:0;;;56875:315;;;;;;;;;;-1:-1:-1;56875:315:0;;;;;:::i;:::-;;:::i;27944:32::-;;;;;;;;;;-1:-1:-1;27944:32:0;;;;-1:-1:-1;;;27944:32:0;;;;;;29060:43;;;;;;;;;;-1:-1:-1;29060:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46811:129;;;;;;;;;;-1:-1:-1;46811:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;46902:30:0;46878:4;46902:30;;;:21;:30;;;;;;;;;46811:129;15910:79;;;;;;;;;;-1:-1:-1;15948:7:0;15975:6;-1:-1:-1;;;;;15975:6:0;15910:79;;27904:33;;;;;;;;;;-1:-1:-1;27904:33:0;;;;;;;;;;;35444:87;;;;;;;;;;;;;:::i;37380:257::-;;;;;;;;;;-1:-1:-1;37380:257:0;;;;;:::i;:::-;;:::i;46946:165::-;;;;;;;;;;-1:-1:-1;46946:165:0;;;;;:::i;:::-;-1:-1:-1;;;;;47055:48:0;47031:4;47055:48;;;:39;:48;;;;;;;;;46946:165;41879:544;;;;;;;;;;-1:-1:-1;41879:544:0;;;;;:::i;:::-;;:::i;36991:269::-;;;;;;;;;;-1:-1:-1;36991:269:0;;;;;:::i;:::-;;:::i;37268:104::-;;;;;;;;;;-1:-1:-1;37354:10:0;;37268:104;;17582:297;;;;;;;;;;;;;:::i;35949:167::-;;;;;;;;;;-1:-1:-1;35949:167:0;;;;;:::i;:::-;;:::i;28748:58::-;;;;;;;;;;-1:-1:-1;28748:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18064:102;;;;;;;;;;-1:-1:-1;18064:102:0;;;;;:::i;:::-;;:::i;34838:347::-;;;;;;;;;;-1:-1:-1;34838:347:0;;;;;:::i;:::-;;:::i;56563:304::-;;;;;;;;;;-1:-1:-1;56563:304:0;;;;;:::i;:::-;;:::i;43649:214::-;;;;;;;;;;-1:-1:-1;43649:214:0;;;;;:::i;:::-;;:::i;28911:43::-;;;;;;;;;;-1:-1:-1;28911:43:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;28911:43:0;;;27278:30;;;;;;;;;;-1:-1:-1;27278:30:0;;;;-1:-1:-1;;;;;27278:30:0;;;42431:554;;;;;;;;;;-1:-1:-1;42431:554:0;;;;;:::i;:::-;;:::i;43363:278::-;;;;;;;;;;-1:-1:-1;43363:278:0;;;;;:::i;:::-;;:::i;17284:226::-;;;;;;;;;;-1:-1:-1;17284:226:0;;;;;:::i;:::-;;:::i;36124:143::-;;;;;;;;;;-1:-1:-1;36124:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;36232:18:0;;;36205:7;36232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36124:143;27748:30;;;;;;;;;;-1:-1:-1;27748:30:0;;;;;;;;;;;33395:661;;;;;;;;;;-1:-1:-1;33395:661:0;;;;;:::i;:::-;;:::i;40461:198::-;;;;;;;;;;-1:-1:-1;40461:198:0;;;;;:::i;:::-;;:::i;33039:171::-;;;;;;;;;;-1:-1:-1;33039:171:0;;;;;:::i;:::-;;:::i;29013:40::-;;;;;;;;;;-1:-1:-1;29013:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18213:105;;;;;;;;;;-1:-1:-1;18213:105:0;;;;;:::i;:::-;;:::i;27863:32::-;;;;;;;;;;-1:-1:-1;27863:32:0;;;;;;;;;;;16856:244;;;;;;;;;;-1:-1:-1;16856:244:0;;;;;:::i;:::-;;:::i;27823:33::-;;;;;;;;;;-1:-1:-1;27823:33:0;;;;;;;;;;;35193:152;;;;;;;;;;-1:-1:-1;35193:152:0;;;;;:::i;:::-;;:::i;47117:115::-;;;;;;;;;;-1:-1:-1;47117:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;47201:23:0;47177:4;47201:23;;;:14;:23;;;;;;;;;47117:115;18389;;;;;;;;;;-1:-1:-1;18389:115:0;;;;;:::i;:::-;;:::i;57882:426::-;57977:16;;-1:-1:-1;;;;;57964:29:0;;;57977:16;;57964:29;;57956:88;;;;-1:-1:-1;;;57956:88:0;;6665:2:1;57956:88:0;;;6647:21:1;6704:2;6684:18;;;6677:30;6743:34;6723:18;;;6716:62;-1:-1:-1;;;6794:18:1;;;6787:44;6848:19;;57956:88:0;;;;;;;;;58072:10;58063:20;;;;:8;:20;;;;;;;;58055:53;;;;-1:-1:-1;;;58055:53:0;;;;;;;:::i;:::-;58157:16;;58124:50;;-1:-1:-1;;;;;58157:16:0;;;;58124:50;;;;;58157:16;;58124:50;58186:16;:28;;-1:-1:-1;;;;;;58186:28:0;-1:-1:-1;;;;;58186:28:0;;;;;;;;-1:-1:-1;58225:29:0;;;:18;:29;;;;;:36;;-1:-1:-1;;58225:36:0;-1:-1:-1;58225:36:0;;;58272:28;58186;58272:17;:28::i;:::-;57882:426;:::o;57355:92::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;57422:17:::1;:15;:17::i;:::-;57355:92::o:0;35353:83::-;35390:13;35423:5;35416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35353:83;:::o;36275:161::-;36350:4;36367:39;8388:10;36390:7;36399:6;36367:8;:39::i;:::-;-1:-1:-1;36424:4:0;36275:161;;;;;:::o;42993:362::-;43082:1;43072:6;:11;;:27;;;;;43097:2;43087:6;:12;;43072:27;43064:88;;;;-1:-1:-1;;;43064:88:0;;8154:2:1;43064:88:0;;;8136:21:1;8193:2;8173:18;;;8166:30;8232:34;8212:18;;;8205:62;-1:-1:-1;;;8283:18:1;;;8276:46;8339:19;;43064:88:0;7952:412:1;43064:88:0;43180:10;43171:20;;;;:8;:20;;;;;;;;43163:45;;;;-1:-1:-1;;;43163:45:0;;;;;;;:::i;:::-;43246:28;43270:3;43246:19;43258:6;43246:7;;:11;;:19;;;;:::i;:::-;:23;;:28::i;:::-;43219:24;:55;;;43290:57;;572:25:1;;;43290:57:0;;560:2:1;545:18;43290:57:0;;;;;;;;42993:362;:::o;40667:197::-;40742:10;40733:20;;;;:8;:20;;;;;;;;40725:45;;;;-1:-1:-1;;;40725:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40781:27:0;;40811:5;40781:27;;;:18;:27;;;;;;:35;;-1:-1:-1;;40781:35:0;;;40832:24;;;40811:5;40832:24;40667:197;:::o;36444:313::-;36542:4;36559:36;36569:6;36577:9;36588:6;36559:9;:36::i;:::-;36606:121;36615:6;8388:10;36637:89;36675:6;36637:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36637:19:0;;;;;;:11;:19;;;;;;;;8388:10;36637:33;;;;;;;;;;:37;:89::i;:::-;36606:8;:121::i;:::-;-1:-1:-1;36745:4:0;36444:313;;;;;;:::o;33218:169::-;33308:10;33299:20;;;;:8;:20;;;;;;;;33291:45;;;;-1:-1:-1;;;33291:45:0;;;;;;;:::i;:::-;33345:15;:34;;-1:-1:-1;;;;;;33345:34:0;-1:-1:-1;;;;;33345:34:0;;;;;;;;;;33218:169::o;57198:149::-;57251:7;57278:61;57317:21;57335:1;57317:9;:21::i;:::-;57278:34;57296:15;27699:42;57296:9;:15::i;:::-;35710:7;;57278:13;:17;;:34::i;:61::-;57271:68;;57198:149;:::o;39038:253::-;39104:7;39143;;39132;:18;;39124:73;;;;-1:-1:-1;;;39124:73:0;;8912:2:1;39124:73:0;;;8894:21:1;8951:2;8931:18;;;8924:30;8990:34;8970:18;;;8963:62;-1:-1:-1;;;9041:18:1;;;9034:40;9091:19;;39124:73:0;8710:406:1;39124:73:0;39208:19;39231:10;:8;:10::i;:::-;39208:33;-1:-1:-1;39259:24:0;:7;39208:33;39259:11;:24::i;41219:335::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41318:48:0;::::1;;::::0;;;:39:::1;:48;::::0;;;;;::::1;;41310:111;;;::::0;-1:-1:-1;;;41310:111:0;;9323:2:1;41310:111:0::1;::::0;::::1;9305:21:1::0;9362:2;9342:18;;;9335:30;9401:34;9381:18;;;9374:62;-1:-1:-1;;;9452:18:1;;;9445:48;9510:19;;41310:111:0::1;9121:414:1::0;41310:111:0::1;-1:-1:-1::0;;;;;41432:48:0;::::1;41483:5;41432:48:::0;;;:39:::1;:48;::::0;;;;;:56;;-1:-1:-1;;41432:56:0::1;::::0;;41504:42;::::1;::::0;41483:5;41504:42:::1;41219:335:::0;:::o;39843:610::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39926:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;39918:80;;;::::0;-1:-1:-1;;;39918:80:0;;9742:2:1;39918:80:0::1;::::0;::::1;9724:21:1::0;9781:2;9761:18;;;9754:30;9820:34;9800:18;;;9793:62;-1:-1:-1;;;9871:18:1;;;9864:35;9916:19;;39918:80:0::1;9540:401:1::0;39918:80:0::1;40014:9;40009:397;40033:19;:26:::0;40029:30;::::1;40009:397;;;40111:7;-1:-1:-1::0;;;;;40085:33:0::1;:19;40105:1;40085:22;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40085:22:0::1;:33;40081:314;;;40164:19;40184:26:::0;;:30:::1;::::0;40213:1:::1;::::0;40184:30:::1;:::i;:::-;40164:51;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;40139:19:::1;:22:::0;;-1:-1:-1;;;;;40164:51:0;;::::1;::::0;40159:1;;40139:22;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:76:::0;;-1:-1:-1;;;;;;40139:76:0::1;-1:-1:-1::0;;;;;40139:76:0;;::::1;;::::0;;40234:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;40273:21:::1;:30:::0;;;;:38;;-1:-1:-1;;40273:38:0::1;::::0;;40330:19:::1;:25:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;40330:25:0;;;;;-1:-1:-1;;;;;;40330:25:0::1;::::0;;;;;40374:5:::1;;40081:314;40061:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40009:397;;;-1:-1:-1::0;40421:24:0::1;::::0;-1:-1:-1;;;;;40421:24:0;::::1;::::0;::::1;::::0;;;::::1;39843:610:::0;:::o;36765:218::-;8388:10;36853:4;36902:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36902:34:0;;;;;;;;;;36853:4;;36870:83;;36893:7;;36902:50;;36941:10;36902:38;:50::i;38033:356::-;8388:10;38087:14;38136:29;;;:21;:29;;;;;;;;38135:30;38127:99;;;;-1:-1:-1;;;38127:99:0;;10814:2:1;38127:99:0;;;10796:21:1;10853:2;10833:18;;;10826:30;10892:34;10872:18;;;10865:62;10963:26;10943:18;;;10936:54;11007:19;;38127:99:0;10612:420:1;38127:99:0;38237:15;38255:28;38275:7;38255:19;:28::i;:::-;-1:-1:-1;;;;;38294:15:0;;;;;;:7;:15;;;;;:26;;38237:46;;-1:-1:-1;38237:46:0;;38294:15;;;:26;;38237:46;;38294:26;:::i;:::-;;;;;;;;38342:7;38331;;:18;;;;;;;:::i;:::-;;;;;;;;38374:7;38360:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;38033:356:0:o;38397:500::-;38511:7;38550;;38539;:18;;38531:62;;;;-1:-1:-1;;;38531:62:0;;11372:2:1;38531:62:0;;;11354:21:1;11411:2;11391:18;;;11384:30;11450:33;11430:18;;;11423:61;11501:18;;38531:62:0;11170:355:1;38531:62:0;38609:17;38604:286;;38643:15;38661:28;38681:7;38661:19;:28::i;:::-;38643:46;-1:-1:-1;38704:14:0;;-1:-1:-1;38704:14:0;38604:286;38754:30;38788:45;38807:7;38815:17;38788:18;:45::i;:::-;38855:23;;;;-1:-1:-1;38848:30:0;;-1:-1:-1;;38848:30:0;58450:588;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;58525:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;::::1;;58524:25;58516:73;;;::::0;-1:-1:-1;;;58516:73:0;;12093:2:1;58516:73:0::1;::::0;::::1;12075:21:1::0;12132:2;12112:18;;;12105:30;12171:34;12151:18;;;12144:62;-1:-1:-1;;;12222:18:1;;;12215:33;12265:19;;58516:73:0::1;11891:399:1::0;58516:73:0::1;15948:7:::0;15975:6;-1:-1:-1;;;;;58608:19:0;;::::1;15975:6:::0;;58608:19:::1;;58600:69;;;::::0;-1:-1:-1;;;58600:69:0;;12497:2:1;58600:69:0::1;::::0;::::1;12479:21:1::0;12536:2;12516:18;;;12509:30;12575:34;12555:18;;;12548:62;-1:-1:-1;;;12626:18:1;;;12619:35;12671:19;;58600:69:0::1;12295:401:1::0;58600:69:0::1;-1:-1:-1::0;;;;;58688:22:0;::::1;58680:76;;;::::0;-1:-1:-1;;;58680:76:0;;12903:2:1;58680:76:0::1;::::0;::::1;12885:21:1::0;12942:2;12922:18;;;12915:30;12981:34;12961:18;;;12954:62;-1:-1:-1;;;13032:18:1;;;13025:39;13081:19;;58680:76:0::1;12701:405:1::0;58680:76:0::1;58787:13;::::0;-1:-1:-1;;;;;58775:25:0;;::::1;58787:13:::0;::::1;58775:25;;58767:82;;;::::0;-1:-1:-1;;;58767:82:0;;13313:2:1;58767:82:0::1;::::0;::::1;13295:21:1::0;13352:2;13332:18;;;13325:30;13391:34;13371:18;;;13364:62;-1:-1:-1;;;13442:18:1;;;13435:42;13494:19;;58767:82:0::1;13111:408:1::0;58767:82:0::1;-1:-1:-1::0;;;;;58868:25:0;::::1;58888:4;58868:25;;58860:86;;;::::0;-1:-1:-1;;;58860:86:0;;13726:2:1;58860:86:0::1;::::0;::::1;13708:21:1::0;13765:2;13745:18;;;13738:30;13804:34;13784:18;;;13777:62;-1:-1:-1;;;13855:18:1;;;13848:46;13911:19;;58860:86:0::1;13524:412:1::0;58860:86:0::1;-1:-1:-1::0;;;;;58959:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:31;;-1:-1:-1;;58959:31:0::1;58986:4;58959:31:::0;;::::1;::::0;;;59006:24;;1678:41:1;;;59006:24:0::1;::::0;1651:18:1;59006:24:0::1;;;;;;;;58450:588:::0;:::o;32876:155::-;32960:10;32951:20;;;;:8;:20;;;;;;;;32943:45;;;;-1:-1:-1;;;32943:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32997:17:0;;;;;;;;:8;:17;;;;;:26;;-1:-1:-1;;32997:26:0;;;;;;;;;;32876:155::o;34064:766::-;-1:-1:-1;;;;;34139:17:0;;;34122:14;34139:17;;;:8;:17;;;;;;;;;34192:10;34182:21;;:9;:21;;;;;;34217:8;:20;;;;;;34139:17;;;;;34182:21;34217:20;;;:47;;-1:-1:-1;34253:10:0;34241:23;;;;:11;:23;;;;;;;;34217:47;34214:559;;;-1:-1:-1;;;;;34278:17:0;;34298:5;34278:17;;;:8;:17;;;;;;;;:25;;-1:-1:-1;;34278:25:0;;;34314:8;:17;;;;;:30;;-1:-1:-1;;;;;;34314:30:0;;;34355:9;:18;;;;;:22;34214:559;;;34469:10;34460:20;;;;:8;:20;;;;;;;;34452:59;;;;-1:-1:-1;;;34452:59:0;;14143:2:1;34452:59:0;;;14125:21:1;14182:2;14162:18;;;14155:30;14221:28;14201:18;;;14194:56;14267:18;;34452:59:0;13941:350:1;34452:59:0;34554:4;34530:21;34540:10;34530:9;:21::i;:::-;:28;;34522:72;;;;-1:-1:-1;;;34522:72:0;;14498:2:1;34522:72:0;;;14480:21:1;14537:2;14517:18;;;14510:30;14576:33;14556:18;;;14549:61;14627:18;;34522:72:0;14296:355:1;34522:72:0;34607:33;34617:10;27699:42;34635:4;34607:9;:33::i;:::-;34660:10;34674:5;34651:20;;;:8;:20;;;;;;;;:28;;-1:-1:-1;;34651:28:0;;;34690:8;:20;;;;;:33;;-1:-1:-1;;;;;;34690:33:0;;;34734:9;:21;;;;;:25;34214:559;34788:34;;;-1:-1:-1;;;;;14914:15:1;;;14896:34;;14966:15;;14961:2;14946:18;;14939:43;14998:18;;;14991:34;;;34788::0;;14846:2:1;14831:18;34788:34:0;;;;;;;34109:721;;34064:766;:::o;59563:249::-;59640:10;59631:20;;;;:8;:20;;;;;;;;59623:54;;;;-1:-1:-1;;;59623:54:0;;15238:2:1;59623:54:0;;;15220:21:1;15277:2;15257:18;;;15250:30;-1:-1:-1;;;15296:18:1;;;15289:51;15357:18;;59623:54:0;15036:345:1;59623:54:0;59720:1;59696:21;:25;59688:71;;;;-1:-1:-1;;;59688:71:0;;15588:2:1;59688:71:0;;;15570:21:1;15627:2;15607:18;;;15600:30;15666:34;15646:18;;;15639:62;-1:-1:-1;;;15717:18:1;;;15710:31;15758:19;;59688:71:0;15386:397:1;59688:71:0;59770:34;;-1:-1:-1;;;;;59770:11:0;;;59782:21;59770:34;;;;;;;;;59782:21;59770:11;:34;;;;;;;;;;;;;;;;;;;;;59563:249;:::o;39299:536::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39383:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;39382:31;39374:83;;;::::0;-1:-1:-1;;;39374:83:0;;15990:2:1;39374:83:0::1;::::0;::::1;15972:21:1::0;16029:2;16009:18;;;16002:30;16068:34;16048:18;;;16041:62;-1:-1:-1;;;16119:18:1;;;16112:37;16166:19;;39374:83:0::1;15788:403:1::0;39374:83:0::1;39476:19;:26:::0;39506:4:::1;-1:-1:-1::0;39476:34:0::1;39468:107;;;::::0;-1:-1:-1;;;39468:107:0;;16398:2:1;39468:107:0::1;::::0;::::1;16380:21:1::0;16437:2;16417:18;;;16410:30;16476:34;16456:18;;;16449:62;16547:30;16527:18;;;16520:58;16595:19;;39468:107:0::1;16196:424:1::0;39468:107:0::1;-1:-1:-1::0;;;;;39589:16:0;::::1;39608:1;39589:16:::0;;;:7:::1;:16;::::0;;;;;:20;39586:108:::1;;-1:-1:-1::0;;;;;39665:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;39645:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;39626:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;39586:108:::1;-1:-1:-1::0;;;;;39704:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;:37;;-1:-1:-1;;39704:37:0::1;39737:4;39704:37:::0;;::::1;::::0;;;39752:19:::1;:33:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;39752:33:0::1;::::0;::::1;::::0;;39801:26;::::1;::::0;39704:30;39801:26:::1;39299:536:::0;:::o;59046:236::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;59129:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;::::1;;59121:69;;;::::0;-1:-1:-1;;;59121:69:0;;16827:2:1;59121:69:0::1;::::0;::::1;16809:21:1::0;;;16846:18;;;16839:30;16905:34;16885:18;;;16878:62;16957:18;;59121:69:0::1;16625:356:1::0;59121:69:0::1;-1:-1:-1::0;;;;;59201:24:0;::::1;59228:5;59201:24:::0;;;:14:::1;:24;::::0;;;;;;;:32;;-1:-1:-1;;59201:32:0::1;::::0;;59249:25;1678:41:1;;;59249:25:0::1;::::0;1651:18:1;59249:25:0::1;1538:187:1::0;59290:265:0;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;59409:15:::1;59383:23;;:41;59375:126;;;::::0;-1:-1:-1;;;59375:126:0;;17188:2:1;59375:126:0::1;::::0;::::1;17170:21:1::0;17227:2;17207:18;;;17200:30;17266:34;17246:18;;;17239:62;17337:34;17317:18;;;17310:62;-1:-1:-1;;;17388:19:1;;;17381:39;17437:19;;59375:126:0::1;16986:476:1::0;59375:126:0::1;59512:23;:35:::0;59290:265::o;57455:421::-;57549:15;;-1:-1:-1;;;;;57536:28:0;;;57549:15;;57536:28;;57528:86;;;;-1:-1:-1;;;57528:86:0;;17669:2:1;57528:86:0;;;17651:21:1;17708:2;17688:18;;;17681:30;17747:34;17727:18;;;17720:62;-1:-1:-1;;;17798:18:1;;;17791:43;17851:19;;57528:86:0;17467:409:1;57528:86:0;57642:10;57633:20;;;;:8;:20;;;;;;;;57625:53;;;;-1:-1:-1;;;57625:53:0;;;;;;;:::i;:::-;57727:15;;57694:49;;-1:-1:-1;;;;;57727:15:0;;;;57694:49;;;;;57727:15;;57694:49;57755:15;:27;;-1:-1:-1;;;;;;57755:27:0;-1:-1:-1;;;;;57755:27:0;;;;;;;;-1:-1:-1;57793:29:0;;;:18;:29;;;;;:36;;-1:-1:-1;;57793:36:0;-1:-1:-1;57793:36:0;;;57840:28;57755:27;57840:17;:28::i;40872:341::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40974:48:0;::::1;;::::0;;;:39:::1;:48;::::0;;;;;::::1;;40973:49;40965:114;;;::::0;-1:-1:-1;;;40965:114:0;;18083:2:1;40965:114:0::1;::::0;::::1;18065:21:1::0;18122:2;18102:18;;;18095:30;18161:34;18141:18;;;18134:62;-1:-1:-1;;;18212:18:1;;;18205:50;18272:19;;40965:114:0::1;17881:416:1::0;40965:114:0::1;-1:-1:-1::0;;;;;41090:48:0;::::1;;::::0;;;:39:::1;:48;::::0;;;;;:55;;-1:-1:-1;;41090:55:0::1;41141:4;41090:55;::::0;;41161:44;::::1;::::0;41090:48;41161:44:::1;40872:341:::0;:::o;35733:208::-;-1:-1:-1;;;;;35823:30:0;;35799:7;35823:30;;;:21;:30;;;;;;;;35819:59;;;-1:-1:-1;;;;;;35862:16:0;;;;;:7;:16;;;;;;;35733:208::o;35819:59::-;-1:-1:-1;;;;;35916:16:0;;;;;;:7;:16;;;;;;35896:37;;:19;:37::i;16553:148::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;16660:1:::1;16644:6:::0;;16623:40:::1;::::0;-1:-1:-1;;;;;16644:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16623:40:0;16660:1;;16623:40:::1;16691:1;16674:19:::0;;-1:-1:-1;;;;;;16674:19:0::1;::::0;;16553:148::o;41611:260::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41731:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;::::1;;41730:44;41722:80;;;::::0;-1:-1:-1;;;41722:80:0;;18504:2:1;41722:80:0::1;::::0;::::1;18486:21:1::0;18543:2;18523:18;;;18516:30;18582:26;18562:18;;;18555:54;18626:18;;41722:80:0::1;18302:348:1::0;41722:80:0::1;-1:-1:-1::0;;;;;41813:43:0::1;;::::0;;;:34:::1;:43;::::0;;;;:50;;-1:-1:-1;;41813:50:0::1;41859:4;41813:50;::::0;;41611:260::o;56875:315::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;56976:13:::1;::::0;-1:-1:-1;;;;;56957:33:0;;::::1;56976:13:::0;::::1;56957:33;;56949:87;;;::::0;-1:-1:-1;;;56949:87:0;;18857:2:1;56949:87:0::1;::::0;::::1;18839:21:1::0;18896:2;18876:18;;;18869:30;18935:34;18915:18;;;18908:62;-1:-1:-1;;;18986:18:1;;;18979:39;19035:19;;56949:87:0::1;18655:405:1::0;56949:87:0::1;57090:13;::::0;57052:53:::1;::::0;-1:-1:-1;;;;;57090:13:0;;::::1;::::0;57052:53;::::1;::::0;::::1;::::0;57090:13:::1;::::0;57052:53:::1;57116:13;:23:::0;;-1:-1:-1;;;;;;57116:23:0::1;-1:-1:-1::0;;;;;57116:23:0;::::1;::::0;;::::1;::::0;;;57150:32:::1;::::0;:17:::1;:32::i;35444:87::-:0;35483:13;35516:7;35509:14;;;;;:::i;37380:257::-;17979:24;17992:10;17979:12;:24::i;:::-;17971:48;;;;-1:-1:-1;;;17971:48:0;;;;;;;:::i;:::-;37488:13:::1;::::0;-1:-1:-1;;;;;37480:21:0;;::::1;37488:13:::0;::::1;37480:21;;37472:103;;;::::0;-1:-1:-1;;;37472:103:0;;19267:2:1;37472:103:0::1;::::0;::::1;19249:21:1::0;19306:2;19286:18;;;19279:30;19345:34;19325:18;;;19318:62;19416:34;19396:18;;;19389:62;-1:-1:-1;;;19467:19:1;;;19460:36;19513:19;;37472:103:0::1;19065:473:1::0;37472:103:0::1;37588:41;37617:4;37623:5;37588:28;:41::i;41879:544::-:0;41979:21;42030:12;42003:24;42015:12;42003:9;:24;:::i;:::-;:39;;;;:::i;:::-;41979:63;;42079:2;42061:15;:20;;;;42053:79;;;;-1:-1:-1;;;42053:79:0;;19954:2:1;42053:79:0;;;19936:21:1;19993:2;19973:18;;;19966:30;20032:34;20012:18;;;20005:62;-1:-1:-1;;;20083:18:1;;;20076:43;20136:19;;42053:79:0;19752:409:1;42053:79:0;42160:10;42151:20;;;;:8;:20;;;;;;;;42143:45;;;;-1:-1:-1;;;42143:45:0;;;;;;;:::i;:::-;42199:12;:24;;-1:-1:-1;;42234:30:0;42199:24;;;;;;;;-1:-1:-1;;42234:30:0;;;;;;;;;;;;;;;;-1:-1:-1;;42316:30:0;-1:-1:-1;;;42275:30:0;;;;;;-1:-1:-1;;42316:30:0;;;;;;;;;;;;;;;;;;;;42362:53;;;20356:36:1;;;20423:2;20408:18;;20401:45;;;;20462:18;;;20455:45;42362:53:0;;20344:2:1;20329:18;42362:53:0;;;;;;;;41968:455;41879:544;;;:::o;36991:269::-;37084:4;37101:129;8388:10;37124:7;37133:96;37172:15;37133:96;;;;;;;;;;;;;;;;;8388:10;37133:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37133:34:0;;;;;;;;;;;;:38;:96::i;17582:297::-;17634:14;;-1:-1:-1;;;;;17634:14:0;17652:10;17634:28;17626:76;;;;-1:-1:-1;;;17626:76:0;;20713:2:1;17626:76:0;;;20695:21:1;20752:2;20732:18;;;20725:30;20791:34;20771:18;;;20764:62;-1:-1:-1;;;20842:18:1;;;20835:33;20885:19;;17626:76:0;20511:399:1;17626:76:0;17738:9;;17721:15;:26;17713:64;;;;-1:-1:-1;;;17713:64:0;;21117:2:1;17713:64:0;;;21099:21:1;21156:2;21136:18;;;21129:30;21195:26;21175:18;;;21168:54;21239:18;;17713:64:0;20915:348:1;17713:64:0;17822:14;;;17814:6;;17793:44;;-1:-1:-1;;;;;17822:14:0;;;;17814:6;;;;-1:-1:-1;;;;;;;;;;;17793:44:0;;17857:14;;;17848:23;;-1:-1:-1;;;;;;17848:23:0;-1:-1:-1;;;;;17857:14:0;;;17848:23;;;;;;17582:297::o;35949:167::-;36027:4;36044:42;8388:10;36068:9;36079:6;36044:9;:42::i;18064:102::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18128:23:0::1;;::::0;;;:14:::1;:23;::::0;;;;:30;;-1:-1:-1;;18128:30:0::1;18154:4;18128:30;::::0;;18064:102::o;34838:347::-;34916:10;34907:20;;;;:8;:20;;;;;;;;;:47;;-1:-1:-1;34943:10:0;34931:23;;;;:11;:23;;;;;;;;34907:47;34899:82;;;;-1:-1:-1;;;34899:82:0;;21470:2:1;34899:82:0;;;21452:21:1;21509:2;21489:18;;;21482:30;-1:-1:-1;;;21528:18:1;;;21521:52;21590:18;;34899:82:0;21268:346:1;34899:82:0;-1:-1:-1;;;;;34992:22:0;;;;;;:13;:22;;;;;;;;:29;;35017:4;-1:-1:-1;;34992:29:0;;;;;;;35032:8;:17;;;;;:25;;;;;;;35068:8;:17;;;;;:30;;-1:-1:-1;;;;;;35068:30:0;;;35109:9;:18;;;;;:22;;;;35147:30;;2277:51:1;;;35147:30:0;;2250:18:1;35147:30:0;2104:230:1;56563:304:0;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;56670:15:::1;::::0;-1:-1:-1;;;;;56649:37:0;;::::1;-1:-1:-1::0;;;56670:15:0;;::::1;;56649:37;;56641:85;;;::::0;-1:-1:-1;;;56641:85:0;;21821:2:1;56641:85:0::1;::::0;::::1;21803:21:1::0;21860:2;21840:18;;;21833:30;21899:34;21879:18;;;21872:62;-1:-1:-1;;;21950:18:1;;;21943:33;21993:19;;56641:85:0::1;21619:399:1::0;56641:85:0::1;56784:15;::::0;56742:59:::1;::::0;-1:-1:-1;;;;;;;;56784:15:0;;::::1;::::0;::::1;::::0;56742:59;::::1;::::0;::::1;::::0;;;::::1;56812:15;:47:::0;;-1:-1:-1;;;;;56812:47:0;;::::1;-1:-1:-1::0;;;56812:47:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;56563:304::o;43649:214::-;43732:10;43723:20;;;;:8;:20;;;;;;;;43715:45;;;;-1:-1:-1;;;43715:45:0;;;;;;;:::i;:::-;43771:21;:31;;;;;-1:-1:-1;;;43771:31:0;-1:-1:-1;;;;43771:31:0;;;;;;43818:37;;;;;;43795:7;1703:14:1;1696:22;1678:41;;1666:2;1651:18;;1538:187;42431:554:0;42532:22;42584:12;42557:24;42569:12;42557:9;:24;:::i;:::-;:39;;;;:::i;:::-;42532:64;;42634:2;42615:16;:21;;;;42607:81;;;;-1:-1:-1;;;42607:81:0;;22225:2:1;42607:81:0;;;22207:21:1;22264:2;22244:18;;;22237:30;22303:34;22283:18;;;22276:62;-1:-1:-1;;;22354:18:1;;;22347:44;22408:19;;42607:81:0;22023:410:1;42607:81:0;42716:10;42707:20;;;;:8;:20;;;;;;;;42699:45;;;;-1:-1:-1;;;42699:45:0;;;;;;;:::i;:::-;42755:13;:25;;-1:-1:-1;;42791:31:0;42755:25;;;;;;;;-1:-1:-1;;42791:31:0;;;;;;;;;;;;;;;;-1:-1:-1;;42875:32:0;42833:31;;;;;;;-1:-1:-1;;42875:32:0;;;;;;;;;;;;;;;;;;;;42923:54;;;20356:36:1;;;20423:2;20408:18;;20401:45;;;;20462:18;;;20455:45;42923:54:0;;20344:2:1;20329:18;42923:54:0;20166:340:1;43363:278:0;43445:4;43435:6;:14;;:41;;;;;43463:13;43453:6;:23;;43435:41;43427:99;;;;-1:-1:-1;;;43427:99:0;;22640:2:1;43427:99:0;;;22622:21:1;22679:2;22659:18;;;22652:30;22718:34;22698:18;;;22691:62;-1:-1:-1;;;22769:18:1;;;22762:43;22822:19;;43427:99:0;22438:409:1;43427:99:0;43554:10;43545:20;;;;:8;:20;;;;;;;;43537:45;;;;-1:-1:-1;;;43537:45:0;;;;;;;:::i;:::-;43617:14;:6;43625;43617:14;:::i;:::-;43595:19;:36;-1:-1:-1;43363:278:0:o;17284:226::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;17365:6:::1;::::0;;;17348:23;;-1:-1:-1;;;;;;17348:23:0;;::::1;-1:-1:-1::0;;;;;17365:6:0;::::1;17348:23;::::0;;;17382:19:::1;::::0;;17424:22:::1;17442:4:::0;17424:15:::1;:22;:::i;:::-;17412:9;:34:::0;17499:1:::1;17483:6:::0;;17462:40:::1;::::0;-1:-1:-1;;;;;17483:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17462:40:0;17499:1;;17462:40:::1;17284:226:::0;:::o;33395:661::-;-1:-1:-1;;;;;33608:22:0;;;;;;:13;:22;;;;;;;;33607:23;33599:62;;;;-1:-1:-1;;;33599:62:0;;23227:2:1;33599:62:0;;;23209:21:1;23266:2;23246:18;;;23239:30;23305:28;23285:18;;;23278:56;23351:18;;33599:62:0;23025:350:1;33599:62:0;-1:-1:-1;;;;;33679:17:0;;;;;;:8;:17;;;;;;;;33678:18;33670:60;;;;-1:-1:-1;;;33670:60:0;;23582:2:1;33670:60:0;;;23564:21:1;23621:2;23601:18;;;23594:30;23660:31;23640:18;;;23633:59;23709:18;;33670:60:0;23380:353:1;33670:60:0;33767:31;33794:3;33767:22;:20;:22::i;:31::-;33747:18;33757:7;33747:9;:18::i;:::-;:51;;33739:94;;;;-1:-1:-1;;;33739:94:0;;23940:2:1;33739:94:0;;;23922:21:1;23979:2;23959:18;;;23952:30;24018:32;23998:18;;;23991:60;24068:18;;33739:94:0;23738:354:1;33739:94:0;33844:12;33859:35;33890:3;33859:26;33882:2;33859:18;33869:7;33859:9;:18::i;:::-;:22;;:26::i;:35::-;-1:-1:-1;;;;;33903:18:0;;;;;;:9;:18;;;;;;;;:25;;;33937:8;:17;;;;;:30;;-1:-1:-1;;;;;;33937:30:0;33957:10;33937:30;;;;;;33976:8;:17;;;;;;:24;;-1:-1:-1;;33976:24:0;-1:-1:-1;33976:24:0;;;34014:34;;14896::1;;;14946:18;;;14939:43;;;;14998:18;;14991:34;;;33903:25:0;;-1:-1:-1;34014:34:0;;14846:2:1;14831:18;34014:34:0;;;;;;;;33433:623;33395:661;:::o;40461:198::-;40538:10;40529:20;;;;:8;:20;;;;;;;;40521:45;;;;-1:-1:-1;;;40521:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40577:27:0;;;;;;:18;:27;;;;;;:34;;-1:-1:-1;;40577:34:0;40607:4;40577:34;;;40627:24;;;40577:27;40627:24;40461:198;:::o;33039:171::-;33128:10;33119:20;;;;:8;:20;;;;;;;;33111:45;;;;-1:-1:-1;;;33111:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33171:22:0;;;;;;;;:11;:22;;;;;:31;;-1:-1:-1;;33171:31:0;;;;;;;;;;33039:171::o;18213:105::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18279:23:0::1;18305:5;18279:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;18279:31:0::1;::::0;;18213:105::o;16856:244::-;16122:6;;-1:-1:-1;;;;;16122:6:0;8388:10;16122:22;16114:67;;;;-1:-1:-1;;;16114:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16945:22:0;::::1;16937:73;;;::::0;-1:-1:-1;;;16937:73:0;;24299:2:1;16937:73:0::1;::::0;::::1;24281:21:1::0;24338:2;24318:18;;;24311:30;24377:34;24357:18;;;24350:62;-1:-1:-1;;;24428:18:1;;;24421:36;24474:19;;16937:73:0::1;24097:402:1::0;16937:73:0::1;17047:6;::::0;;17026:38:::1;::::0;-1:-1:-1;;;;;17026:38:0;;::::1;::::0;17047:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17026:38:0;::::1;17075:6;:17:::0;;-1:-1:-1;;;;;;17075:17:0::1;-1:-1:-1::0;;;;;17075:17:0;;;::::1;::::0;;;::::1;::::0;;16856:244::o;35193:152::-;35273:10;35264:20;;;;:8;:20;;;;;;;;35256:53;;;;-1:-1:-1;;;35256:53:0;;;;;;;:::i;:::-;35320:17;;;;:7;;:17;;;;;:::i;18389:115::-;-1:-1:-1;;;;;18473:23:0;18449:4;18473:23;;;:14;:23;;;;;;;;;18389:115::o;5168:471::-;5226:7;5471:6;5467:47;;-1:-1:-1;5501:1:0;5494:8;;5467:47;5526:9;5538:5;5542:1;5538;:5;:::i;:::-;5526:17;-1:-1:-1;5571:1:0;5562:5;5566:1;5526:17;5562:5;:::i;:::-;:10;5554:56;;;;-1:-1:-1;;;5554:56:0;;24928:2:1;5554:56:0;;;24910:21:1;24967:2;24947:18;;;24940:30;25006:34;24986:18;;;24979:62;-1:-1:-1;;;25057:18:1;;;25050:31;25098:19;;5554:56:0;24726:397:1;6115:132:0;6173:7;6200:39;6204:1;6207;6200:39;;;;;;;;;;;;;;;;;:3;:39::i;50232:1422::-;30921:17;:24;;-1:-1:-1;;;;30921:24:0;-1:-1:-1;;;30921:24:0;;;;50312::::1;50330:4;50312:9;:24::i;:::-;50290:46;;50466:27;50496:85;50549:31;;50496:48;50512:31;;50496:11;:15;;:48;;;;:::i;:85::-;50466:115;;50626:19;50592:31;;:53;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;50691:31:0::1;::::0;50656:32:::1;::::0;50691:38:::1;::::0;50727:1:::1;50691:35;:38::i;:::-;50656:73:::0;-1:-1:-1;50796:21:0::1;50860:60;50878:41;:11:::0;50656:73;50878:15:::1;:41::i;:::-;50860:17;:60::i;:::-;50981:18;51002:41;:21;51028:14:::0;51002:25:::1;:41::i;:::-;50981:62:::0;-1:-1:-1;51056:23:0::1;51082:94;51134:41;:11:::0;51150:24;51134:15:::1;:41::i;:::-;51097:31;::::0;51082:47:::1;::::0;:10;;:14:::1;:47::i;:94::-;51056:120:::0;-1:-1:-1;51187:23:0::1;51213:31;:10:::0;51056:120;51213:14:::1;:31::i;:::-;51289:1;51255:31;:35:::0;;;51301:31:::1;:35:::0;51187:57;-1:-1:-1;51388:56:0::1;51402:24:::0;51187:57;51388:13:::1;:56::i;:::-;51496:39;51519:15;51496:22;:39::i;:::-;51551:95;51566:41;:11:::0;51582:24;51566:15:::1;:41::i;:::-;51551:95;::::0;;25330:25:1;;;25386:2;25371:18;;25364:34;;;25414:18;;25407:34;;;25318:2;25303:18;51551:95:0::1;;;;;;;-1:-1:-1::0;;30968:17:0;:25;;-1:-1:-1;;;;30968:25:0;;;-1:-1:-1;;;;;50232:1422:0:o;47240:337::-;-1:-1:-1;;;;;47333:19:0;;47325:68;;;;-1:-1:-1;;;47325:68:0;;25654:2:1;47325:68:0;;;25636:21:1;25693:2;25673:18;;;25666:30;25732:34;25712:18;;;25705:62;-1:-1:-1;;;25783:18:1;;;25776:34;25827:19;;47325:68:0;25452:400:1;47325:68:0;-1:-1:-1;;;;;47412:21:0;;47404:68;;;;-1:-1:-1;;;47404:68:0;;26059:2:1;47404:68:0;;;26041:21:1;26098:2;26078:18;;;26071:30;26137:34;26117:18;;;26110:62;-1:-1:-1;;;26188:18:1;;;26181:32;26230:19;;47404:68:0;25857:398:1;47404:68:0;-1:-1:-1;;;;;47485:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;47537:32;;572:25:1;;;47537:32:0;;545:18:1;47537:32:0;;;;;;;47240:337;;;:::o;47585:2639::-;-1:-1:-1;;;;;47707:18:0;;47699:68;;;;-1:-1:-1;;;47699:68:0;;26462:2:1;47699:68:0;;;26444:21:1;26501:2;26481:18;;;26474:30;26540:34;26520:18;;;26513:62;-1:-1:-1;;;26591:18:1;;;26584:35;26636:19;;47699:68:0;26260:401:1;47699:68:0;-1:-1:-1;;;;;47786:16:0;;47778:64;;;;-1:-1:-1;;;47778:64:0;;26868:2:1;47778:64:0;;;26850:21:1;26907:2;26887:18;;;26880:30;26946:34;26926:18;;;26919:62;-1:-1:-1;;;26997:18:1;;;26990:33;27040:19;;47778:64:0;26666:399:1;47778:64:0;-1:-1:-1;;;;;47945:18:0;;;;;;:14;:18;;;;;;;;47944:19;47936:55;;;;-1:-1:-1;;;47936:55:0;;27689:2:1;47936:55:0;;;27671:21:1;27728:2;27708:18;;;27701:30;27767:25;27747:18;;;27740:53;27810:18;;47936:55:0;27487:347:1;47936:55:0;-1:-1:-1;;;;;48011:20:0;;;;;;:14;:20;;;;;;;;48010:21;48002:54;;;;-1:-1:-1;;;48002:54:0;;28041:2:1;48002:54:0;;;28023:21:1;28080:2;28060:18;;;28053:30;-1:-1:-1;;;28099:18:1;;;28092:50;28159:18;;48002:54:0;27839:344:1;48002:54:0;48069:21;48093;58411:23;;58392:15;:42;;;58316:126;48093:21;48069:45;;48131:16;48127:158;;-1:-1:-1;;;;;48172:40:0;;;;;;:34;:40;;;;;;;;48164:109;;;;-1:-1:-1;;;48164:109:0;;28390:2:1;48164:109:0;;;28372:21:1;28429:2;28409:18;;;28402:30;28468:34;28448:18;;;28441:62;28539:26;28519:18;;;28512:54;28583:19;;48164:109:0;28188:420:1;48164:109:0;-1:-1:-1;;;;;48317:29:0;;;48295:19;48317:29;;;:25;:29;;;;;;;48378:31;;;;;;;;48317:29;;;;;48378:31;;48435:16;:38;;;;-1:-1:-1;48456:17:0;;-1:-1:-1;;;48456:17:0;;;;48455:18;48435:38;:75;;;;;48478:13;:31;;;;48495:14;48478:31;48538:17;;48420:90;;-1:-1:-1;;;;48538:17:0;;;;48537:18;:48;;;;;48569:16;48537:48;:79;;;;;48602:14;48537:79;:192;;;;-1:-1:-1;48713:15:0;;-1:-1:-1;;;;;48697:32:0;;;-1:-1:-1;;;48713:15:0;;;;48697:32;;48537:192;:317;;;;-1:-1:-1;;;;;;48811:43:0;;;;;;:39;:43;;;;;;;;48810:44;48537:317;:380;;;;-1:-1:-1;;;;;;48872:45:0;;;;;;:39;:45;;;;;;;;48871:46;48537:380;48523:672;;;49018:24;;49008:6;:34;;49000:105;;;;-1:-1:-1;;;49000:105:0;;28815:2:1;49000:105:0;;;28797:21:1;28854:2;28834:18;;;28827:30;28893:34;28873:18;;;28866:62;28964:28;28944:18;;;28937:56;29010:19;;49000:105:0;28613:422:1;49000:105:0;-1:-1:-1;;;;;49129:14:0;;;;;;:8;:14;;;;;;;;49128:15;49120:63;;;;-1:-1:-1;;;49120:63:0;;29242:2:1;49120:63:0;;;29224:21:1;29281:2;29261:18;;;29254:30;29320:34;29300:18;;;29293:62;-1:-1:-1;;;29371:18:1;;;29364:33;29414:19;;49120:63:0;29040:399:1;49120:63:0;49209:14;49208:15;:33;;;;;49228:13;49227:14;49208:33;:45;;;;-1:-1:-1;;;;;;49245:8:0;;27699:42;49245:8;;49208:45;49205:145;;;-1:-1:-1;;;;;49278:14:0;;;;;;:8;:14;;;;;;;;49277:15;49269:67;;;;-1:-1:-1;;;49269:67:0;;29646:2:1;49269:67:0;;;29628:21:1;29685:2;29665:18;;;29658:30;29724:34;29704:18;;;29697:62;-1:-1:-1;;;29775:18:1;;;29768:37;29822:19;;49269:67:0;29444:403:1;49269:67:0;49488:28;49519:24;49537:4;49519:9;:24::i;:::-;49595:19;;49488:55;;-1:-1:-1;49571:43:0;;;;;;;49645:42;;-1:-1:-1;49670:17:0;;-1:-1:-1;;;49670:17:0;;;;49669:18;49645:42;:90;;;;-1:-1:-1;;;;;;49704:31:0;;;;;;:25;:31;;;;;;;;49703:32;49645:90;:151;;;;-1:-1:-1;49781:15:0;;-1:-1:-1;;;;;49773:23:0;;;49781:15;;49773:23;;49645:151;:189;;;;-1:-1:-1;49819:15:0;;-1:-1:-1;;;;;49813:21:0;;;49819:15;;49813:21;;49645:189;:227;;;;-1:-1:-1;49851:21:0;;-1:-1:-1;;;49851:21:0;;;;49645:227;49627:330;;;49928:17;:15;:17::i;:::-;-1:-1:-1;;;;;50057:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;50085:22:0;;;;;;:18;:22;;;;;;;;50057:50;50054:97;;;50134:5;50124:15;;50054:97;50163:53;50178:4;50183:2;50186:6;50193:7;50201:14;50163;:53::i;:::-;47688:2536;;;;;;47585:2639;;;:::o;4717:192::-;4803:7;4839:12;4831:6;;;;4823:29;;;;-1:-1:-1;;;4823:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4863:9:0;4875:5;4879:1;4875;:5;:::i;:::-;4863:17;4717:192;-1:-1:-1;;;;;4717:192:0:o;4278:136::-;4336:7;4363:43;4367:1;4370;4363:43;;;;;;;;;;;;;;;;;:3;:43::i;45519:163::-;45560:7;45581:15;45598;45617:19;:17;:19::i;:::-;45580:56;;-1:-1:-1;45580:56:0;-1:-1:-1;45654:20:0;45580:56;;45654:11;:20::i;:::-;45647:27;;;;45519:163;:::o;3814:181::-;3872:7;;3904:5;3908:1;3904;:5;:::i;:::-;3892:17;;3933:1;3928;:6;;3920:46;;;;-1:-1:-1;;;3920:46:0;;30054:2:1;3920:46:0;;;30036:21:1;30093:2;30073:18;;;30066:30;30132:29;30112:18;;;30105:57;30179:18;;3920:46:0;29852:351:1;38905:125:0;38972:7;38999:23;39011:10;:8;:10::i;:::-;38999:7;;:11;:23::i;44125:320::-;44213:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44213:22:0;44237;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44237:22:0;44272:30;44304:35;44316:7;44324:14;44304:11;:35::i;:::-;44272:67;;44350:30;44382:20;44394:7;44382:11;:20::i;:::-;44421:7;;;;-1:-1:-1;44125:320:0;;-1:-1:-1;;;;44125:320:0:o;37645:380::-;-1:-1:-1;;;;;37736:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;37728:109;;;;-1:-1:-1;;;37728:109:0;;30410:2:1;37728:109:0;;;30392:21:1;30449:2;30429:18;;;30422:30;30488:34;30468:18;;;30461:62;30559:26;30539:18;;;30532:54;30603:19;;37728:109:0;30208:420:1;37728:109:0;-1:-1:-1;;;;;37848:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;37848:39:0;;;;;;;;;;;;37900:60;;37925:23;37943:4;37925:17;:23::i;:::-;37977:40;;;;;;-1:-1:-1;;;;;37977:40:0;;;;;;;;37645:380;;:::o;6743:278::-;6829:7;6864:12;6857:5;6849:28;;;;-1:-1:-1;;;6849:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6888:9:0;6900:5;6904:1;6900;:5;:::i;52109:590::-;52260:16;;;52274:1;52260:16;;;;;;;;52236:21;;52260:16;;;;;;;;;;-1:-1:-1;52260:16:0;52236:40;;52305:4;52287;52292:1;52287:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;52287:23:0;;;-1:-1:-1;;;;;52287:23:0;;;;;52331:15;;;;;;;;;-1:-1:-1;;;;;52331:15:0;-1:-1:-1;;;;;52331:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52321:4;52326:1;52321:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52321:32:0;;;:7;;;;;;;;;:32;52398:15;;52366:62;;52383:4;;-1:-1:-1;;;52398:15:0;;;52416:11;52366:8;:62::i;:::-;52467:15;;:224;;-1:-1:-1;;;52467:224:0;;-1:-1:-1;;;52467:15:0;;;-1:-1:-1;;;;;52467:15:0;;:66;;:224;;52548:11;;52574:1;;52618:4;;52645;;52665:15;;52467:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52165:534;52109:590;:::o;52707:548::-;52888:15;;52856:62;;52873:4;;-1:-1:-1;;;52888:15:0;;-1:-1:-1;;;;;52888:15:0;52906:11;52856:8;:62::i;:::-;52959:15;;53163;;52959:288;;-1:-1:-1;;;52959:288:0;;53031:4;52959:288;;;32223:34:1;32273:18;;;32266:34;;;53077:1:0;32316:18:1;;;32309:34;;;32359:18;;;32352:34;-1:-1:-1;;;;;53163:15:0;;;32402:19:1;;;32395:44;53221:15:0;32455:19:1;;;32448:35;-1:-1:-1;;;52959:15:0;;;;;:31;;52998:9;;32157:19:1;;52959:288:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;52707:548;;:::o;51662:439::-;51765:16;;51731:12;;-1:-1:-1;;;;;51765:16:0;:28;51762:163;;51816:13;:6;51827:1;51816:10;:13::i;:::-;51871:16;;51855:58;;51807:22;;-1:-1:-1;;;;;;51871:16:0;;51807:22;;51855:58;;;;51807:22;51871:16;51855:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51842:71:0;;-1:-1:-1;;51762:163:0;51966:15;;51950:57;;-1:-1:-1;;;;;51966:15:0;;;;51996:6;;51950:57;;;;51996:6;51966:15;51950:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51937:70:0;;-1:-1:-1;;52020:74:0;;;;52050:30;;572:25:1;;;52050:30:0;;560:2:1;545:18;52050:30:0;426:177:1;53263:1389:0;53391:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53391:30:0;53432;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53432:30:0;53477:7;53473:306;;53511:37;;;;;;;;53527:6;53511:37;;;;53535:6;53511:37;;;;53542:1;53511:37;;;;53544:1;53511:37;;;;53546:1;53511:37;;;53501:47;;53563:15;53581:22;53592:10;:8;:10::i;:::-;53581:6;;:10;:22::i;:::-;53563:40;;53628:39;;;;;;;;53644:7;53628:39;;;;53653:7;53628:39;;;;53661:1;53628:39;;;;53663:1;53628:39;;;;53665:1;53628:39;;;53618:49;;53486:193;53473:306;;;53726:41;53745:6;53752:14;53726:18;:41::i;:::-;53705:62;;-1:-1:-1;53705:62:0;-1:-1:-1;53473:306:0;-1:-1:-1;;;;;53795:29:0;;;;;;:21;:29;;;;;;;;:66;;;;-1:-1:-1;;;;;;53829:32:0;;;;;;:21;:32;;;;;;;;53828:33;53795:66;53791:709;;;53878:58;53900:6;53908:9;53919:7;53928;53878:21;:58::i;:::-;53791:709;;;-1:-1:-1;;;;;53959:29:0;;;;;;:21;:29;;;;;;;;53958:30;:66;;;;-1:-1:-1;;;;;;53992:32:0;;;;;;:21;:32;;;;;;;;53958:66;53954:546;;;54041:56;54061:6;54069:9;54080:7;54089;54041:19;:56::i;53954:546::-;-1:-1:-1;;;;;54120:29:0;;;;;;:21;:29;;;;;;;;54119:30;:67;;;;-1:-1:-1;;;;;;54154:32:0;;;;;;:21;:32;;;;;;;;54153:33;54119:67;54115:385;;;54203:45;54221:6;54229:9;54240:7;54203:17;:45::i;54115:385::-;-1:-1:-1;;;;;54270:29:0;;;;;;:21;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;54303:32:0;;;;;;:21;:32;;;;;;;;54270:65;54266:234;;;54352:58;54374:6;54382:9;54393:7;54402;54352:21;:58::i;54266:234::-;54443:45;54461:6;54469:9;54480:7;54443:17;:45::i;:::-;54534:9;-1:-1:-1;;;;;54517:52:0;54526:6;-1:-1:-1;;;;;54517:52:0;;54545:7;:23;;;54517:52;;;;572:25:1;;560:2;545:18;;426:177;54517:52:0;;;;;;;;54583:7;54580:64;;;54605:39;54619:7;54628;54637:6;54605:13;:39::i;:::-;53380:1272;;53263:1389;;;;;:::o;45690:581::-;45787:7;;45823;;45740;;;;;45841:315;45865:19;:26;45861:30;;45841:315;;;45951:7;45917;:31;45925:19;45945:1;45925:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45925:22:0;45917:31;;;;;;;;;;;;;:41;;:86;;;45996:7;45962;:31;45970:19;45990:1;45970:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45970:22:0;45962:31;;;;;;;;;;;;;:41;45917:86;45913:117;;;46013:7;;46022;;46005:25;;;;;;;45690:581;;:::o;45913:117::-;46056:7;:31;46064:19;46084:1;46064:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;46064:22:0;46056:31;;;;;;;;;;;;;46045:42;;;;:::i;:::-;;;46113:7;:31;46121:19;46141:1;46121:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;46121:22:0;46113:31;;;;;;;;;;;;;46102:42;;;;:::i;:::-;;-1:-1:-1;45893:3:0;;;;:::i;:::-;;;;45841:315;;;-1:-1:-1;46192:7:0;;46180;;:20;;:11;:20::i;:::-;46170:7;:30;46166:61;;;46210:7;;46219;;46202:25;;;;;;45690:581;;:::o;46166:61::-;46246:7;;46255;;-1:-1:-1;45690:581:0;-1:-1:-1;45690:581:0:o;44453:429::-;44533:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44533:22:0;44569:18;44589:21;44612;44637:39;44652:7;44661:14;44637;:39::i;:::-;44568:108;;-1:-1:-1;44568:108:0;-1:-1:-1;44568:108:0;-1:-1:-1;44687:23:0;44713:61;44568:108;44713:42;44568:108;44713:42;:7;44568:108;44713:11;:23::i;:61::-;44792:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44792:82:0;;44453:429;-1:-1:-1;;44453:429:0:o;44890:623::-;44965:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44965:22:0;45000:19;45022:10;:8;:10::i;:::-;45061:15;;45000:32;;-1:-1:-1;45043:15:0;;45061:32;;45000;45061:19;:32::i;:::-;45043:50;;45104:18;45125:35;45148:11;45125:7;:18;;;:22;;:35;;;;:::i;:::-;45104:56;;45171:21;45195:38;45221:11;45195:7;:21;;;:25;;:38;;;;:::i;:::-;45171:62;;45244:21;45268:38;45294:11;45268:7;:21;;;:25;;:38;;;;:::i;:::-;45244:62;-1:-1:-1;45317:23:0;45343:61;45244:62;45343:42;45371:13;45343:42;:7;45355:10;45343:11;:23::i;:61::-;45422:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45422:83:0;44890:623;-1:-1:-1;;;44890:623:0:o;55907:292::-;56075:15;;-1:-1:-1;;;;;56056:15:0;;56075;56056;;;:7;:15;;;;;:34;;:15;;56075;56056:34;;56075:15;;56056:34;:::i;:::-;;;;-1:-1:-1;;56120:15:0;;-1:-1:-1;;;;;56101:15:0;;56120;56101;;;:7;:15;;;;;:34;;:15;;56120;56101:34;;56120:15;;56101:34;:::i;:::-;;;;-1:-1:-1;;56168:23:0;;;;;-1:-1:-1;;;;;56146:18:0;;;;;;:7;:18;;;;;;:45;;56168:23;;56146:18;;:45;;56168:23;;56146:45;:::i;:::-;;;;-1:-1:-1;;;;;;55907:292:0:o;55598:301::-;55764:15;;-1:-1:-1;;;;;55745:15:0;;55764;55745;;;:7;:15;;;;;:34;;:15;;55764;55745:34;;55764:15;;55745:34;:::i;:::-;;;;-1:-1:-1;;55812:23:0;;;;;-1:-1:-1;;;;;55790:18:0;;;;;;:7;:18;;;;;;:45;;55812:23;;55790:18;;:45;;55812:23;;55790:45;:::i;55377:213::-;55511:15;;-1:-1:-1;;;;;55492:15:0;;55511;55492;;;:7;:15;;;;;:34;;:15;;55511;55492:34;;55511:15;;55492:34;:::i;:::-;;;;-1:-1:-1;;55559:23:0;;;;;-1:-1:-1;;;;;55537:18:0;;;;;;:7;:18;;;;;;:45;;55559:23;;55537:18;;:45;;55559:23;;55537:45;:::i;56207:348::-;56375:15;;-1:-1:-1;;;;;56356:15:0;;56375;56356;;;:7;:15;;;;;:34;;:15;;56375;56356:34;;56375:15;;56356:34;:::i;:::-;;;;-1:-1:-1;;56420:15:0;;-1:-1:-1;;;;;56401:15:0;;56420;56401;;;:7;:15;;;;;:34;;:15;;56420;56401:34;;56420:15;;56401:34;:::i;54658:711::-;54780:13;54796:48;54822:7;:21;;;54796:7;:21;;;:25;;:48;;;;:::i;:::-;54780:64;;54855:13;54871:48;54897:7;:21;;;54871:7;:21;;;:25;;:48;;;;:::i;:::-;54855:64;;54963:7;:21;;;54930:31;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;55028:21:0;;;;54995:31;:54;;:31;;:54;;55028:21;;54995:54;:::i;:::-;;;;-1:-1:-1;;55101:4:0;55085:22;;;;:7;:22;;;;;;:33;;55112:5;55085:26;:33::i;:::-;55076:4;55060:22;;;;:7;:22;;;;;;;:58;;;;55134:38;;-1:-1:-1;;;;;55134:38:0;;;;;;;55166:5;572:25:1;;560:2;545:18;;426:177;55134:38:0;;;;;;;;55216:4;55186:36;;;;:21;:36;;;;;;;;55183:112;;;55278:4;55262:22;;;;:7;:22;;;;;;:33;;55289:5;55262:26;:33::i;:::-;55253:4;55237:22;;;;:7;:22;;;;;:58;55183:112;55308:51;55320:7;:18;;;55340:7;:18;;;55308:11;:51::i;46279:395::-;46365:7;46373;46381;46404:17;46401:264;;;46452:13;;46466:3;;46445:20;;46452:13;;;;;46445:6;:20;:::i;:::-;:24;;;;:::i;:::-;46477:16;;46494:3;;46470:23;;46477:16;;;;;46470:6;:23;:::i;:::-;:27;;;;:::i;:::-;46505:16;;46522:3;;46498:23;;46505:16;;;;;46498:6;:23;:::i;:::-;:27;;;;:::i;:::-;46438:88;;;;;;;;46401:264;46582:12;;46595:3;;46575:19;;46582:12;;;;;46575:6;:19;:::i;:::-;:23;;;;:::i;:::-;46606:15;;46622:3;;46599:22;;46606:15;;;;;46599:6;:22;:::i;:::-;:26;;;;:::i;:::-;46633:15;;46649:3;;46626:22;;-1:-1:-1;;;46633:15:0;;;;46626:6;:22;:::i;46401:264::-;46279:395;;;;;:::o;43971:144::-;44062:10;44051:7;;:21;;;;;;;:::i;:::-;;;;;;;;44097:10;44083;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;43971:144:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:139:1;-1:-1:-1;;;;;97:31:1;;87:42;;77:70;;143:1;140;133:12;158:263;225:6;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:39;385:5;352:39;:::i;608:597::-;720:4;749:2;778;767:9;760:21;810:6;804:13;853:6;848:2;837:9;833:18;826:34;878:1;888:140;902:6;899:1;896:13;888:140;;;997:14;;;993:23;;987:30;963:17;;;982:2;959:26;952:66;917:10;;888:140;;;1046:6;1043:1;1040:13;1037:91;;;1116:1;1111:2;1102:6;1091:9;1087:22;1083:31;1076:42;1037:91;-1:-1:-1;1189:2:1;1168:15;-1:-1:-1;;1164:29:1;1149:45;;;;1196:2;1145:54;;608:597;-1:-1:-1;;;608:597:1:o;1210:323::-;1278:6;1286;1339:2;1327:9;1318:7;1314:23;1310:32;1307:52;;;1355:1;1352;1345:12;1307:52;1394:9;1381:23;1413:39;1446:5;1413:39;:::i;:::-;1471:5;1523:2;1508:18;;;;1495:32;;-1:-1:-1;;;1210:323:1:o;1919:180::-;1978:6;2031:2;2019:9;2010:7;2006:23;2002:32;1999:52;;;2047:1;2044;2037:12;1999:52;-1:-1:-1;2070:23:1;;1919:180;-1:-1:-1;1919:180:1:o;2599:472::-;2676:6;2684;2692;2745:2;2733:9;2724:7;2720:23;2716:32;2713:52;;;2761:1;2758;2751:12;2713:52;2800:9;2787:23;2819:39;2852:5;2819:39;:::i;:::-;2877:5;-1:-1:-1;2934:2:1;2919:18;;2906:32;2947:41;2906:32;2947:41;:::i;:::-;2599:472;;3007:7;;-1:-1:-1;;;3061:2:1;3046:18;;;;3033:32;;2599:472::o;3076:160::-;3141:20;;3197:13;;3190:21;3180:32;;3170:60;;3226:1;3223;3216:12;3170:60;3076:160;;;:::o;3241:316::-;3312:6;3320;3328;3381:2;3369:9;3360:7;3356:23;3352:32;3349:52;;;3397:1;3394;3387:12;3349:52;3433:9;3420:23;3410:33;;3462:35;3493:2;3482:9;3478:18;3462:35;:::i;:::-;3452:45;;3516:35;3547:2;3536:9;3532:18;3516:35;:::i;:::-;3506:45;;3241:316;;;;;:::o;3770:323::-;3835:6;3843;3896:2;3884:9;3875:7;3871:23;3867:32;3864:52;;;3912:1;3909;3902:12;3864:52;3951:9;3938:23;3970:39;4003:5;3970:39;:::i;:::-;4028:5;-1:-1:-1;4052:35:1;4083:2;4068:18;;4052:35;:::i;:::-;4042:45;;3770:323;;;;;:::o;4322:156::-;4388:20;;4448:4;4437:16;;4427:27;;4417:55;;4468:1;4465;4458:12;4483:322;4554:6;4562;4570;4623:2;4611:9;4602:7;4598:23;4594:32;4591:52;;;4639:1;4636;4629:12;4591:52;4662:27;4679:9;4662:27;:::i;:::-;4652:37;;4708:36;4740:2;4729:9;4725:18;4708:36;:::i;:::-;4698:46;;4763:36;4795:2;4784:9;4780:18;4763:36;:::i;4810:180::-;4866:6;4919:2;4907:9;4898:7;4894:23;4890:32;4887:52;;;4935:1;4932;4925:12;4887:52;4958:26;4974:9;4958:26;:::i;4995:404::-;5063:6;5071;5124:2;5112:9;5103:7;5099:23;5095:32;5092:52;;;5140:1;5137;5130:12;5092:52;5179:9;5166:23;5198:39;5231:5;5198:39;:::i;:::-;5256:5;-1:-1:-1;5313:2:1;5298:18;;5285:32;5326:41;5285:32;5326:41;:::i;:::-;5386:7;5376:17;;;4995:404;;;;;:::o;5404:127::-;5465:10;5460:3;5456:20;5453:1;5446:31;5496:4;5493:1;5486:15;5520:4;5517:1;5510:15;5536:922;5605:6;5658:2;5646:9;5637:7;5633:23;5629:32;5626:52;;;5674:1;5671;5664:12;5626:52;5714:9;5701:23;5743:18;5784:2;5776:6;5773:14;5770:34;;;5800:1;5797;5790:12;5770:34;5838:6;5827:9;5823:22;5813:32;;5883:7;5876:4;5872:2;5868:13;5864:27;5854:55;;5905:1;5902;5895:12;5854:55;5941:2;5928:16;5963:2;5959;5956:10;5953:36;;;5969:18;;:::i;:::-;6044:2;6038:9;6012:2;6098:13;;-1:-1:-1;;6094:22:1;;;6118:2;6090:31;6086:40;6074:53;;;6142:18;;;6162:22;;;6139:46;6136:72;;;6188:18;;:::i;:::-;6228:10;6224:2;6217:22;6263:2;6255:6;6248:18;6303:7;6298:2;6293;6289;6285:11;6281:20;6278:33;6275:53;;;6324:1;6321;6314:12;6275:53;6380:2;6375;6371;6367:11;6362:2;6354:6;6350:15;6337:46;6425:1;6403:15;;;6420:2;6399:24;6392:35;;;;-1:-1:-1;6407:6:1;5536:922;-1:-1:-1;;;;;5536:922:1:o;6878:344::-;7080:2;7062:21;;;7119:2;7099:18;;;7092:30;-1:-1:-1;;;7153:2:1;7138:18;;7131:50;7213:2;7198:18;;6878:344::o;7227:335::-;7429:2;7411:21;;;7468:2;7448:18;;;7441:30;-1:-1:-1;;;7502:2:1;7487:18;;7480:41;7553:2;7538:18;;7227:335::o;7567:380::-;7646:1;7642:12;;;;7689;;;7710:61;;7764:4;7756:6;7752:17;7742:27;;7710:61;7817:2;7809:6;7806:14;7786:18;7783:38;7780:161;;;7863:10;7858:3;7854:20;7851:1;7844:31;7898:4;7895:1;7888:15;7926:4;7923:1;7916:15;7780:161;;7567:380;;;:::o;8369:336::-;8571:2;8553:21;;;8610:2;8590:18;;;8583:30;-1:-1:-1;;;8644:2:1;8629:18;;8622:42;8696:2;8681:18;;8369:336::o;9946:127::-;10007:10;10002:3;9998:20;9995:1;9988:31;10038:4;10035:1;10028:15;10062:4;10059:1;10052:15;10078:127;10139:10;10134:3;10130:20;10127:1;10120:31;10170:4;10167:1;10160:15;10194:4;10191:1;10184:15;10210:125;10250:4;10278:1;10275;10272:8;10269:34;;;10283:18;;:::i;:::-;-1:-1:-1;10320:9:1;;10210:125::o;10340:127::-;10401:10;10396:3;10392:20;10389:1;10382:31;10432:4;10429:1;10422:15;10456:4;10453:1;10446:15;10472:135;10511:3;-1:-1:-1;;10532:17:1;;10529:43;;;10552:18;;:::i;:::-;-1:-1:-1;10599:1:1;10588:13;;10472:135::o;11037:128::-;11077:3;11108:1;11104:6;11101:1;11098:13;11095:39;;;11114:18;;:::i;:::-;-1:-1:-1;11150:9:1;;11037:128::o;11530:356::-;11732:2;11714:21;;;11751:18;;;11744:30;11810:34;11805:2;11790:18;;11783:62;11877:2;11862:18;;11530:356::o;19543:204::-;19581:3;19617:4;19614:1;19610:12;19649:4;19646:1;19642:12;19684:3;19678:4;19674:14;19669:3;19666:23;19663:49;;;19692:18;;:::i;:::-;19728:13;;19543:204;-1:-1:-1;;;19543:204:1:o;22852:168::-;22892:7;22958:1;22954;22950:6;22946:14;22943:1;22940:21;22935:1;22928:9;22921:17;22917:45;22914:71;;;22965:18;;:::i;:::-;-1:-1:-1;23005:9:1;;22852:168::o;24504:217::-;24544:1;24570;24560:132;;24614:10;24609:3;24605:20;24602:1;24595:31;24649:4;24646:1;24639:15;24677:4;24674:1;24667:15;24560:132;-1:-1:-1;24706:9:1;;24504:217::o;30633:259::-;30703:6;30756:2;30744:9;30735:7;30731:23;30727:32;30724:52;;;30772:1;30769;30762:12;30724:52;30804:9;30798:16;30823:39;30856:5;30823:39;:::i;30897:980::-;31159:4;31207:3;31196:9;31192:19;31238:6;31227:9;31220:25;31264:2;31302:6;31297:2;31286:9;31282:18;31275:34;31345:3;31340:2;31329:9;31325:18;31318:31;31369:6;31404;31398:13;31435:6;31427;31420:22;31473:3;31462:9;31458:19;31451:26;;31512:2;31504:6;31500:15;31486:29;;31533:1;31543:195;31557:6;31554:1;31551:13;31543:195;;;31622:13;;-1:-1:-1;;;;;31618:39:1;31606:52;;31713:15;;;;31678:12;;;;31654:1;31572:9;31543:195;;;-1:-1:-1;;;;;;;31794:32:1;;;;31789:2;31774:18;;31767:60;-1:-1:-1;;;31858:3:1;31843:19;31836:35;31755:3;30897:980;-1:-1:-1;;;30897:980:1:o;32494:306::-;32582:6;32590;32598;32651:2;32639:9;32630:7;32626:23;32622:32;32619:52;;;32667:1;32664;32657:12;32619:52;32696:9;32690:16;32680:26;;32746:2;32735:9;32731:18;32725:25;32715:35;;32790:2;32779:9;32775:18;32769:25;32759:35;;32494:306;;;;;:::o
Swarm Source
ipfs://f3ba9b46e64bd1025bc8e81f32ca0bf11d37d9e1f0dabc4095059c6549d41dcc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.