Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Allow Trading | 14857748 | 992 days ago | IN | 0 ETH | 0.00081619 | ||||
Pause Trading | 14854562 | 993 days ago | IN | 0 ETH | 0.00182405 | ||||
Allow Trading | 14854504 | 993 days ago | IN | 0 ETH | 0.00138906 | ||||
Approve | 14818344 | 999 days ago | IN | 0 ETH | 0.00074637 | ||||
Transfer | 14818227 | 999 days ago | IN | 0 ETH | 0.00229653 | ||||
Exclude From Fee | 14818216 | 999 days ago | IN | 0 ETH | 0.00078556 | ||||
Exclude From Fee | 14818210 | 999 days ago | IN | 0 ETH | 0.00090235 | ||||
Pause Trading | 14817451 | 999 days ago | IN | 0 ETH | 0.0005977 | ||||
Allow Trading | 14817443 | 999 days ago | IN | 0 ETH | 0.00065007 | ||||
Exclude From Fee | 14817337 | 999 days ago | IN | 0 ETH | 0.00085696 | ||||
Exclude From Fee | 14817330 | 999 days ago | IN | 0 ETH | 0.00094472 | ||||
Approve | 14808432 | 1000 days ago | IN | 0 ETH | 0.00250362 | ||||
Approve | 14806127 | 1001 days ago | IN | 0 ETH | 0.00113596 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Xeniia
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-19 */ pragma solidity ^0.8.9; // 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); } 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 payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface uniswapV2Pair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } contract Xeniia is Context, IERC20, Ownable { using SafeMath for uint256; 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 _isExcluded; address[] private _excluded; mapping (address => bool) private botWallets; mapping(address => bool) public automatedMarketMakerPairs; uint256 private marketingFeesCollected; uint256 private liquidityFeesCollected; bool public canTrade; address public uniswapPair; uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; address public marketingWallet; string private _name; string private _symbol; uint8 private _decimals; uint256 private _taxFee; uint256 public _taxFeeTransfer; uint256 public _taxFeeBuy; uint256 public _taxFeeSell; uint256 private _previousTaxFee; uint256 private _marketingFee; uint256 public _marketingFeeTransfer; uint256 public _marketingFeeBuy; uint256 public _marketingFeeSell; uint256 public _previousMarketingFee; uint256 private _liquidityFee; uint256 public _liquidityFeeTransfer; uint256 public _liquidityFeeBuy; uint256 public _liquidityFeeSell; uint256 private _previousLiquidityFee; uint256 public _feeDenominator; bool private hasLiquidity; IUniswapV2Router02 public immutable uniswapV2Router; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public minETHValueBeforeSwapping; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _name = "Xeniia"; _symbol = "Xii"; _decimals = 18; uint256 MAX = ~uint256(0); _tTotal = 30e12 * 10 ** _decimals; _rTotal = (MAX - (MAX % _tTotal)); _rOwned[_msgSender()] = _rTotal; _taxFeeBuy = 50; _marketingFeeBuy = 50; _liquidityFeeBuy = 50; _taxFeeSell = 50; _marketingFeeSell = 50; _liquidityFeeSell = 50; _taxFeeTransfer = 50; _marketingFeeTransfer = 50; _liquidityFeeTransfer = 50; _feeDenominator = 1000; minETHValueBeforeSwapping = 5 ** 17; //5 ** 17; // 0.5 ETH marketingWallet = 0x4deE8ac4697690e7C56f4a6967652CaF683094a6; address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapPair = pair; automatedMarketMakerPairs[uniswapPair] = true; uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _limits[owner()].isExcluded = true; _limits[address(this)].isExcluded = true; _limits[router].isExcluded = true; _limits[pair].isExcluded = true; excludeFromReward(address(0)); // Set limits for private sale and globally privateSaleGlobalLimit = 25 * 10 ** 17; // 1 ** 18 = 1 ETH limit privateSaleGlobalLimitPeriod = 24 hours; globalLimit = 20 * 10 ** 18; // 1 ** 18 = 1 ETH limit globalLimitPeriod = 24 hours; _allowances[owner()][router] = MAX; emit Transfer(address(0), _msgSender(), _tTotal); _tokenTransfer(owner(), address(0), _tTotal * 15 / 100, false); // 15% burn } function pauseTrading() external onlyOwner { canTrade = false; } function checkLiquidity() internal { (uint256 r1, uint256 r2, ) = uniswapV2Pair(uniswapPair).getReserves(); hasLiquidity = r1 > 0 && r2 > 0 ? true : false; } function setAMM(address pair, bool value) external onlyOwner { _limits[pair].isExcluded = true; automatedMarketMakerPairs[pair] = value; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external 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) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) external 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) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function airdrop(address recipient, uint256 amount) external onlyOwner() { require(recipient != address(0), "Recipient can't be 0 address"); removeAllFee(); _transfer(_msgSender(), recipient, amount * 10 ** _decimals); restoreAllFee(); } function airdropInternal(address recipient, uint256 amount) internal { removeAllFee(); _transfer(_msgSender(), recipient, amount); restoreAllFee(); } function airdropArray(address[] calldata _addresses, uint256[] calldata amounts) external onlyOwner(){ uint256 iterator = 0; require(_addresses.length == amounts.length, "must be the same length"); require(_addresses.length <= 1000, "Too many wallets"); while(iterator < _addresses.length){ airdropInternal(_addresses[iterator], amounts[iterator] * 10 ** _decimals); iterator += 1; } } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); _registerFees(tLiquidity); if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) external onlyOwner { require(walletAddress != address(0), "walletAddress can't be 0 address"); marketingWallet = walletAddress; } function setBuyFees(uint256 marketingFee_, uint256 taxFee_, uint256 liquidityFee_) external onlyOwner { _marketingFeeBuy = marketingFee_; _taxFeeBuy = taxFee_; _liquidityFeeBuy = liquidityFee_; } function setSellFees(uint256 marketingFee_, uint256 taxFee_, uint256 liquidityFee_) external onlyOwner { _marketingFeeSell = marketingFee_; _taxFeeSell = taxFee_; _liquidityFeeSell = liquidityFee_; } function setTransferFees(uint256 marketingFee_, uint256 taxFee_, uint256 liquidityFee_) external onlyOwner { _marketingFeeTransfer = marketingFee_; _taxFeeTransfer = taxFee_; _liquidityFeeTransfer = liquidityFee_; } function setFeeDenominator(uint256 newValue) external onlyOwner() { require(newValue > 0, "Can't be 0"); _feeDenominator = newValue; } function setSwapThresholdAmount(uint256 newValue) external onlyOwner() { minETHValueBeforeSwapping = newValue; } function claimTokens() external onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletAddress) external onlyOwner() { require(walletAddress != address(0), "walletAddress can't be 0 address"); SafeERC20.safeTransfer(tokenAddress, walletAddress, tokenAddress.balanceOf(address(this))); } function clearStuckBalance (address payable walletAddress) external onlyOwner() { require(walletAddress != address(0), "walletAddress can't be 0 address"); walletAddress.transfer(address(this).balance); } function addBotWallet(address botwallet) external onlyOwner() { botWallets[botwallet] = true; } function removeBotWallet(address botwallet) external onlyOwner() { botWallets[botwallet] = false; } function getBotWalletStatus(address botwallet) external view returns (bool) { return botWallets[botwallet]; } function allowTrading() external onlyOwner() { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityAndMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(_feeDenominator); } function calculateLiquidityAndMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee.add(_marketingFee)).div(_feeDenominator); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _marketingFee = _previousMarketingFee; } function isExcludedFromFee(address account) external view returns(bool) { return _isExcludedFromFee[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 than zero"); require(!botWallets[from] && !botWallets[to] , "Wallet is blacklisted"); checkLiquidity(); uint256 contractTokenBalance = balanceOf(address(this)); if (hasLiquidity && contractTokenBalance > 0){ uint256 ethValue = getETHValue(contractTokenBalance); bool overMinTokenBalance = ethValue >= minETHValueBeforeSwapping; if ( overMinTokenBalance && !inSwapAndLiquify && !automatedMarketMakerPairs[from] && swapAndLiquifyEnabled ) { swapAndLiquify(contractTokenBalance); } } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false; _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 _totalFees = marketingFeesCollected.add(liquidityFeesCollected); if (_totalFees == 0) return; uint256 forMarketing = contractTokenBalance.mul(marketingFeesCollected).div(_totalFees); uint256 forLiquidity = contractTokenBalance.sub(forMarketing); uint256 half = forLiquidity.div(2); uint256 otherHalf = forLiquidity.sub(half); uint256 initialBalance = address(this).balance; uint256 toSwap = half.add(forMarketing); swapTokensForEth(toSwap); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance * forMarketing / toSwap; payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; addLiquidity(otherHalf, newBalance); marketingFeesCollected = forMarketing > marketingFeesCollected ? 0 : marketingFeesCollected - forMarketing; liquidityFeesCollected = forLiquidity > liquidityFeesCollected ? 0 : liquidityFeesCollected - forLiquidity; emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, address(this), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!canTrade) require(sender == owner(), "Trade is not open yet"); setApplicableFees(sender, recipient); if(!takeFee) removeAllFee(); // handle limits on sells/transfers if (hasLiquidity && !inSwapAndLiquify && !automatedMarketMakerPairs[sender]){ _handleLimited(sender, amount.mul(_feeDenominator - _taxFee - _liquidityFee - _marketingFee).div(_feeDenominator)); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function setApplicableFees(address from, address to) private { if (automatedMarketMakerPairs[from]) { _taxFee = _taxFeeBuy; _liquidityFee = _liquidityFeeBuy; _marketingFee = _marketingFeeBuy; } else if (automatedMarketMakerPairs[to]) { _taxFee = _taxFeeSell; _liquidityFee = _liquidityFeeSell; _marketingFee = _marketingFeeSell; } else { _taxFee = _taxFeeTransfer; _liquidityFee = _liquidityFeeTransfer; _marketingFee = _marketingFeeTransfer; } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); _registerFees(tLiquidity); if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function getETHValue(uint256 tokenAmount) public view returns (uint256 ethValue) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); ethValue = uniswapV2Router.getAmountsOut(tokenAmount, path)[1]; } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); _registerFees(tLiquidity); if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); _registerFees(tLiquidity); if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); emit Transfer(sender, recipient, tTransferAmount); } function _registerFees(uint256 tLiquidity) private { uint256 _totalFees = _marketingFee.add(_liquidityFee); if (_totalFees == 0) return; marketingFeesCollected = marketingFeesCollected.add(tLiquidity.mul(_marketingFee).div(_totalFees)); liquidityFeesCollected = liquidityFeesCollected.add(tLiquidity.mul(_liquidityFee).div(_totalFees)); } function airdropLowGas(address[] calldata _addresses, uint256[] calldata amounts) external onlyOwner { require(_addresses.length == amounts.length, "must be the same length"); uint256 r = _getRate(); uint256 rAmount; for (uint256 i = 0;i < _addresses.length; i++){ rAmount = amounts[i] * r * 10 ** _decimals; _rOwned[msg.sender] -= rAmount; _rOwned[_addresses[i]] += rAmount; emit Transfer(msg.sender, _addresses[i], amounts[i] * 10 ** _decimals); } } // private sale limits mapping(address => LimitedWallet) private _limits; uint256 public privateSaleGlobalLimit; // limit over timeframe for private salers uint256 public privateSaleGlobalLimitPeriod; // timeframe for private salers uint256 public globalLimit; // limit over timeframe for all uint256 public globalLimitPeriod; // timeframe for all bool public globalLimitsActive = true; bool public globalLimitsPrivateSaleActive = true; struct LimitedWallet { uint256[] sellAmounts; uint256[] sellTimestamps; uint256 limitPeriod; // ability to set custom values for individual wallets uint256 limitETH; // ability to set custom values for individual wallets bool isPrivateSaler; bool isExcluded; } function setGlobalLimitPrivateSale(uint256 newLimit) external onlyOwner { privateSaleGlobalLimit = newLimit; } function setGlobalLimitPeriodPrivateSale(uint256 newPeriod) external onlyOwner { privateSaleGlobalLimitPeriod = newPeriod; } function setGlobalLimit(uint256 newLimit) external onlyOwner { globalLimit = newLimit; } function setGlobalLimitPeriod(uint256 newPeriod) external onlyOwner { globalLimitPeriod = newPeriod; } function setGlobalLimitsPrivateSaleActiveStatus(bool status) external onlyOwner { globalLimitsPrivateSaleActive = status; } function setGlobalLimitsActiveStatus(bool status) external onlyOwner { globalLimitsActive = status; } function getLimits(address _address) external view returns (LimitedWallet memory){ return _limits[_address]; } // Set custom limits for an address. Defaults to 0, thus will use the "globalLimitPeriod" and "globalLimitETH" if we don't set them function setLimits(address[] calldata addresses, uint256[] calldata limitPeriods, uint256[] calldata limitsETH) external onlyOwner{ require(addresses.length == limitPeriods.length && limitPeriods.length == limitsETH.length, "Array lengths don't match"); require(addresses.length <= 1000, "Array too long"); for(uint256 i=0; i < addresses.length; i++){ _limits[addresses[i]].limitPeriod = limitPeriods[i]; _limits[addresses[i]].limitETH = limitsETH[i]; } } function addPrivateSalers(address[] calldata addresses) external onlyOwner{ require(addresses.length <= 1000, "Array too long"); for(uint256 i=0; i < addresses.length; i++){ _limits[addresses[i]].isPrivateSaler = true; } } function removePrivateSalers(address[] calldata addresses) external onlyOwner{ require(addresses.length <= 1000, "Array too long"); for(uint256 i=0; i < addresses.length; i++){ _limits[addresses[i]].isPrivateSaler = false; } } function addExcludedFromLimits(address[] calldata addresses) external onlyOwner{ require(addresses.length <= 1000, "Array too long"); for(uint256 i=0; i < addresses.length; i++){ _limits[addresses[i]].isExcluded = true; } } function removeExcludedFromLimits(address[] calldata addresses) external onlyOwner{ require(addresses.length <= 1000, "Array too long"); for(uint256 i=0; i < addresses.length; i++){ _limits[addresses[i]].isExcluded = false; } } // Can be used to check how much a wallet sold in their timeframe function getSoldLastPeriod(address _address) public view returns (uint256 sellAmount) { uint256 numberOfSells = _limits[_address].sellAmounts.length; if (numberOfSells == 0) { return sellAmount; } uint256 defaultLimitPeriod = _limits[_address].isPrivateSaler ? privateSaleGlobalLimitPeriod : globalLimitPeriod; uint256 limitPeriod = _limits[_address].limitPeriod == 0 ? defaultLimitPeriod : _limits[_address].limitPeriod; while (true) { if (numberOfSells == 0) { break; } numberOfSells--; uint256 sellTimestamp = _limits[_address].sellTimestamps[numberOfSells]; if (block.timestamp - limitPeriod <= sellTimestamp) { sellAmount += _limits[_address].sellAmounts[numberOfSells]; } else { break; } } } // Handle private sale wallets function _handleLimited(address from, uint256 taxedAmount) private { if (_limits[from].isExcluded || (!globalLimitsActive && !_limits[from].isPrivateSaler) || (!globalLimitsPrivateSaleActive && _limits[from].isPrivateSaler)){ return; } uint256 ethValue = getETHValue(taxedAmount); _limits[from].sellTimestamps.push(block.timestamp); _limits[from].sellAmounts.push(ethValue); uint256 soldAmountLastPeriod = getSoldLastPeriod(from); uint256 defaultLimit = _limits[from].isPrivateSaler ? privateSaleGlobalLimit : globalLimit; uint256 limit = _limits[from].limitETH == 0 ? defaultLimit : _limits[from].limitETH; require(soldAmountLastPeriod <= limit, "Amount over the limit for time period"); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"_feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addPrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropLowGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletAddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletAddress","type":"address"}],"name":"clearStuckBalance","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getETHValue","outputs":[{"internalType":"uint256","name":"ethValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLimits","outputs":[{"components":[{"internalType":"uint256[]","name":"sellAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"sellTimestamps","type":"uint256[]"},{"internalType":"uint256","name":"limitPeriod","type":"uint256"},{"internalType":"uint256","name":"limitETH","type":"uint256"},{"internalType":"bool","name":"isPrivateSaler","type":"bool"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"internalType":"struct Xeniia.LimitedWallet","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getSoldLastPeriod","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitsPrivateSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minETHValueBeforeSwapping","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":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"privateSaleGlobalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleGlobalLimitPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removePrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee_","type":"uint256"},{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setFeeDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setGlobalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setGlobalLimitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setGlobalLimitPeriodPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setGlobalLimitPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalLimitsActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalLimitsPrivateSaleActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"limitPeriods","type":"uint256[]"},{"internalType":"uint256[]","name":"limitsETH","type":"uint256[]"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee_","type":"uint256"},{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee_","type":"uint256"},{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526023805462ff0000191662010000179055602a805461010161ffff199091161790553480156200003357600080fd5b506200003f3362000523565b6040805180820190915260068082526558656e69696160d01b60209092019182526200006e9160109162001a8d565b506040805180820190915260038082526258696960e81b60209092019182526200009b9160119162001a8d565b506012805460ff19168117815560001990620000b990600a62001c46565b620000cb90651b48eb57e00062001c57565b600c819055620000dc908262001c8f565b620000e8908262001ca6565b600d8190553360009081526001602090815260408083209390935560326015819055601a819055601f8190556016819055601b81905580825560148190556019819055601e556103e860225564b1a2bc2ec5602455600f80546001600160a01b031916734dee8ac4697690e7c56f4a6967652caf683094a6179055825163c45a015560e01b81529251737a250d5630b4cf539739df2c5dacb4c659f2488d93849392849263c45a0155926004818101939291829003018186803b158015620001af57600080fd5b505afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea919062001cc0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023357600080fd5b505afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062001cc0565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062001cc0565b600b8054610100600160a81b0319166101006001600160a01b038481168202929092179283905590910481166000908152600860205260408120805460ff19166001908117909155918516608052919250906004906200035a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080549092166001908117909255602590620003b36000546001600160a01b031690565b6001600160a01b039081168252602080830193909352604091820160009081206004908101805461ff001990811661010098151589021790915530835260259095528382208101805486168717905588831682528382208101805486168717905591861681529182200180549092169092179055620004329062000573565b6722b1c8c1227a00006026556201518060278190556801158e460913d0000060285560295583600360006200046f6000546001600160a01b031690565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902055336001600160a01b031660006001600160a01b031660008051602062006c6d833981519152600c54604051620004d191815260200190565b60405180910390a362000519620004f06000546001600160a01b031690565b60006064600c54600f62000505919062001c57565b62000511919062001ceb565b600062000701565b5050505062001f38565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156200063e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005ca565b6001600160a01b038116600090815260016020526040902054156200069b576001600160a01b038116600090815260016020526040902054620006819062000972565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b600b5460ff166200076b576000546001600160a01b038581169116146200076b5760405162461bcd60e51b815260206004820152601560248201527f5472616465206973206e6f74206f70656e2079657400000000000000000000006044820152606401620005ca565b62000777848462000a0a565b8062000787576200078762000a90565b60235460ff168015620007a25750602354610100900460ff16155b8015620007c857506001600160a01b03841660009081526008602052604090205460ff16155b156200083d576200083d846200083760225462000823601854601d54601354602254620007f6919062001ca6565b62000802919062001ca6565b6200080e919062001ca6565b8762000ad860201b620029d21790919060201c565b62000b6860201b62002a511790919060201c565b62000bb2565b6001600160a01b03841660009081526005602052604090205460ff1680156200087f57506001600160a01b03831660009081526005602052604090205460ff16155b1562000898576200089284848462000d97565b6200094e565b6001600160a01b03841660009081526005602052604090205460ff16158015620008da57506001600160a01b03831660009081526005602052604090205460ff165b15620008ed576200089284848462000f2b565b6001600160a01b03841660009081526005602052604090205460ff1680156200092e57506001600160a01b03831660009081526005602052604090205460ff165b1562000941576200089284848462001009565b6200094e848484620010a3565b806200096c576200096c601754601355602154601d55601c54601855565b50505050565b6000600d54821115620009db5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005ca565b6000620009e762001100565b905062000a03818462000b6860201b62002a511790919060201c565b9392505050565b6001600160a01b03821660009081526008602052604090205460ff161562000a4257601554601355601f54601d55601a546018555050565b6001600160a01b03811660009081526008602052604090205460ff161562000a7a57601654601355602054601d55601b546018555050565b601454601355601e54601d556019546018555050565b60135415801562000aa15750601d54155b801562000aae5750601854155b1562000ab657565b60138054601755601d805460215560188054601c556000928390559082905555565b60008262000ae95750600062000b62565b600062000af7838562001c57565b90508262000b06858362001ceb565b1462000b5f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401620005ca565b90505b92915050565b600062000b5f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200113360201b60201c565b6001600160a01b038216600090815260256020526040902060040154610100900460ff168062000c0d5750602a5460ff1615801562000c0d57506001600160a01b03821660009081526025602052604090206004015460ff16155b8062000c485750602a54610100900460ff1615801562000c4857506001600160a01b03821660009081526025602052604090206004015460ff165b1562000c52575050565b600062000c5f826200116f565b6001600160a01b0384166000908152602560209081526040822060018082018054808301825590855283852042910155815490810182559083529082200182905590915062000cae8462001316565b6001600160a01b0385166000908152602560205260408120600401549192509060ff1662000cdf5760285462000ce3565b6026545b6001600160a01b038616600090815260256020526040812060030154919250901562000d2b576001600160a01b03861660009081526025602052604090206003015462000d2d565b815b90508083111562000d8f5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206f76657220746865206c696d697420666f722074696d652070604482015264195c9a5bd960da1b6064820152608401620005ca565b505050505050565b6000808080808062000da9876200148d565b95509550955095509550955062000df487600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054620014de60201b62002a931790919060201c565b6001600160a01b038a16600090815260026020908152604080832093909355600181529190205462000e3191889062002a93620014de821b17901c565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152919091205462000e7191879062002ad562001528821b17901c565b6001600160a01b03891660009081526001602052604090205562000e95816200158b565b62000ea1848362001646565b62000eac816200168b565b801562000ee35760405181815230906001600160a01b038b169060008051602062006c6d8339815191529060200160405180910390a35b876001600160a01b0316896001600160a01b031660008051602062006c6d8339815191528560405162000f1891815260200190565b60405180910390a3505050505050505050565b6000808080808062000f3d876200148d565b95509550955095509550955062000f8886600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054620014de60201b62002a931790919060201c565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260028252919091205462000fcc91859062002ad562001528821b17901c565b6001600160a01b038916600090815260026020908152604080832093909355600181529190205462000e7191879062002ad562001528821b17901c565b600080808080806200101b876200148d565b9550955095509550955095506200106687600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002054620014de60201b62002a931790919060201c565b6001600160a01b038a16600090815260026020908152604080832093909355600181529190205462000f8891889062002a93620014de821b17901c565b60008080808080620010b5876200148d565b95509550955095509550955062000e3186600160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054620014de60201b62002a931790919060201c565b600080806200110e6200173c565b915091506200112c818362000b6860201b62002a511790919060201c565b9250505090565b60008183620011575760405162461bcd60e51b8152600401620005ca919062001d02565b50600062001166848662001ceb565b95945050505050565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110620011ab57620011ab62001d70565b60200260200101906001600160a01b031690816001600160a01b0316815250506080516001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200120757600080fd5b505afa1580156200121c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001242919062001cc0565b8160018151811062001258576200125862001d70565b6001600160a01b03928316602091820292909201015260805160405163d06ca61f60e01b815291169063d06ca61f9062001299908690859060040162001d86565b60006040518083038186803b158015620012b257600080fd5b505afa158015620012c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620012f1919081019062001ddf565b60018151811062001306576200130662001d70565b6020026020010151915050919050565b6001600160a01b038116600090815260256020526040812054806200133b5750919050565b6001600160a01b03831660009081526025602052604081206004015460ff1662001368576029546200136c565b6027545b6001600160a01b0385166000908152602560205260408120600201549192509015620013b4576001600160a01b038516600090815260256020526040902060020154620013b6565b815b90505b82620013c55762001485565b82620013d18162001ea8565b6001600160a01b03871660009081526025602052604081206001018054929650909250908590811062001408576200140862001d70565b9060005260206000200154905080824262001424919062001ca6565b1162001477576001600160a01b038616600090815260256020526040902080548590811062001457576200145762001d70565b9060005260206000200154856200146f919062001ec2565b94506200147e565b5062001485565b50620013b9565b505050919050565b60008080808080808080620014a28a620018fc565b9194509250905060008080620014c48d8686620014be62001100565b62001960565b919f909e50909c50959a5093985091965092945050505050565b600062000b5f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620019f260201b60201c565b60008062001537838562001ec2565b90508381101562000b5f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005ca565b60006200159762001100565b90506000620015b5828462000ad860201b620029d21790919060201c565b30600090815260016020908152604090912054919250620015e29190839062002ad562001528821b17901c565b3060009081526001602090815260408083209390935560059052205460ff16156200164157306000908152600260209081526040909120546200163091859062002ad562001528821b17901c565b306000908152600260205260409020555b505050565b6200166282600d54620014de60201b62002a931790919060201c565b600d819055506200168481600e546200152860201b62002ad51790919060201c565b600e555050565b6000620016ab601d546018546200152860201b62002ad51790919060201c565b905080620016b7575050565b620016f3620016dc82620008236018548662000ad860201b620029d21790919060201c565b6009546200152860201b62002ad51790919060201c565b600981905550620017356200171e8262000823601d548662000ad860201b620029d21790919060201c565b600a546200152860201b62002ad51790919060201c565b600a555050565b600d54600c546000918291825b600654811015620018bc578260016000600684815481106200176f576200176f62001d70565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620017de5750816002600060068481548110620017b757620017b762001d70565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620017f557600d54600c54945094505050509091565b6200184c600160006006848154811062001813576200181362001d70565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162002a93620014de821b17901c565b9250620018a560026000600684815481106200186c576200186c62001d70565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162002a93620014de821b17901c565b915080620018b38162001edd565b91505062001749565b50620018db600c54600d5462000b6860201b62002a511790919060201c565b821015620018f357600d54600c549350935050509091565b90939092509050565b60008080806200190c8562001a28565b905060006200191b8662001a4d565b9050600062001952826200193e858a620014de60201b62002a931790919060201c565b620014de60201b62002a931790919060201c565b979296509094509092505050565b60008060008062001980858962000ad860201b620029d21790919060201c565b905060006200199e868962000ad860201b620029d21790919060201c565b90506000620019bc878962000ad860201b620029d21790919060201c565b90506000620019df826200193e8587620014de60201b62002a931790919060201c565b939b939a50919850919650505050505050565b6000818484111562001a195760405162461bcd60e51b8152600401620005ca919062001d02565b50600062001166848662001ca6565b600062000b62602254620008236013548562000ad860201b620029d21790919060201c565b600062000b626022546200082362001a78601854601d546200152860201b62002ad51790919060201c565b8562000ad860201b620029d21790919060201c565b82805462001a9b9062001efb565b90600052602060002090601f01602090048101928262001abf576000855562001b0a565b82601f1062001ada57805160ff191683800117855562001b0a565b8280016001018555821562001b0a579182015b8281111562001b0a57825182559160200191906001019062001aed565b5062001b1892915062001b1c565b5090565b5b8082111562001b18576000815560010162001b1d565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562001b8a57816000190482111562001b6e5762001b6e62001b33565b8085161562001b7c57918102915b93841c939080029062001b4e565b509250929050565b60008262001ba35750600162000b62565b8162001bb25750600062000b62565b816001811462001bcb576002811462001bd65762001bf6565b600191505062000b62565b60ff84111562001bea5762001bea62001b33565b50506001821b62000b62565b5060208310610133831016604e8410600b841016171562001c1b575081810a62000b62565b62001c27838362001b49565b806000190482111562001c3e5762001c3e62001b33565b029392505050565b600062000b5f60ff84168362001b92565b600081600019048311821515161562001c745762001c7462001b33565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262001ca15762001ca162001c79565b500690565b60008282101562001cbb5762001cbb62001b33565b500390565b60006020828403121562001cd357600080fd5b81516001600160a01b038116811462000b5f57600080fd5b60008262001cfd5762001cfd62001c79565b500490565b600060208083528351808285015260005b8181101562001d315785810183015185820160400152820162001d13565b8181111562001d44576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b8181101562001dd25784516001600160a01b03168352938301939183019160010162001dab565b5090979650505050505050565b6000602080838503121562001df357600080fd5b82516001600160401b038082111562001e0b57600080fd5b818501915085601f83011262001e2057600080fd5b81518181111562001e355762001e3562001d5a565b8060051b604051601f19603f8301168101818110858211171562001e5d5762001e5d62001d5a565b60405291825284820192508381018501918883111562001e7c57600080fd5b938501935b8285101562001e9c5784518452938501939285019262001e81565b98975050505050505050565b60008162001eba5762001eba62001b33565b506000190190565b6000821982111562001ed85762001ed862001b33565b500190565b600060001982141562001ef45762001ef462001b33565b5060010190565b600181811c9082168062001f1057607f821691505b6020821081141562001f3257634e487b7160e01b600052602260045260246000fd5b50919050565b608051614ce862001f85600039600081816105c0015281816125f4015281816126bb015281816138ac01528181613974015281816139b001528181613a2a0152613a860152614ce86000f3fe6080604052600436106104775760003560e01c806361a13b4a1161024a578063a457c2d711610139578063ca450788116100b6578063dd62ed3e1161007a578063dd62ed3e14610db7578063ea2f0b3714610dfd578063f064321f14610e1d578063f2fde38b14610e3d578063f773268914610e5d57600080fd5b8063ca45078814610d35578063d4a3883f14610d4b578063d4c70c8d14610d6b578063d5bda32d14610d81578063d7d31f5f14610da157600080fd5b8063b62496f5116100fd578063b62496f514610c8a578063bf8e572e14610cba578063bfd201f514610cd0578063c49b9a8014610cf0578063c816841b14610d1057600080fd5b8063a457c2d714610bea578063a9059cbb14610c0a578063a9d3cd8a14610c2a578063ae02cd5c14610c4a578063b498412314610c6a57600080fd5b806388f82020116101c75780638da5cb5b1161018b5780638da5cb5b14610b6b57806395d89b4114610b8957806398e2a5e214610b9e5780639d5710d114610bbe5780639e3a940914610bd457600080fd5b806388f8202014610abc5780638a30104a14610af55780638b16549a14610b155780638ba4cc3c14610b355780638d8bf57614610b5557600080fd5b8063715018a61161020e578063715018a614610a3157806375f0a87414610a46578063764d72bf14610a665780637921199f14610a86578063867a1dc214610a9c57600080fd5b806361a13b4a1461098f57806363e8f370146109bc578063706acf1e146109dc57806370a08231146109f257806370bfcf2114610a1257600080fd5b80632f05205c116103665780634a74bb02116102e357806359cf0e67116102a757806359cf0e67146108d65780635ca52d67146108f65780635d098b381461091657806360d48489146109365780636199d05e1461096f57600080fd5b80634a74bb021461083157806350b9dde11461085157806352390c02146108675780635342acb414610887578063565836e7146108c057600080fd5b8063429f1add1161032a578063429f1add146107b0578063437823ec146107c6578063437d9840146107e65780634549b039146107fc57806348c54b9d1461081c57600080fd5b80632f05205c14610714578063313ce5671461072e5780633685d4191461075057806339509351146107705780633ae7dc201461079057600080fd5b806318160ddd116103f457806329e04b4a116103b857806329e04b4a1461067f5780632a3606311461069f5780632b9b4f78146106bf5780632d838119146106df5780632e5b4c43146106ff57600080fd5b806318160ddd146105fa57806321ba50811461060f57806322c98d3414610625578063232898b41461063f57806323b872dd1461065f57600080fd5b80630f683e901161043b5780630f683e90146105405780631031e36e14610560578063122f78841461057557806313114a9d146105995780631694505e146105ae57600080fd5b80630305caff146104835780630609511e146104a557806306fdde03146104c5578063095ea7b3146104f05780630d075d9c1461052057600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b506104a361049e366004614330565b610e73565b005b3480156104b157600080fd5b506104a36104c036600461434d565b610ec7565b3480156104d157600080fd5b506104da610ef6565b6040516104e79190614392565b60405180910390f35b3480156104fc57600080fd5b5061051061050b3660046143c5565b610f88565b60405190151581526020016104e7565b34801561052c57600080fd5b506104a361053b3660046143f1565b610f9f565b34801561054c57600080fd5b506104a361055b3660046143f1565b610fd7565b34801561056c57600080fd5b506104a361100f565b34801561058157600080fd5b5061058b60245481565b6040519081526020016104e7565b3480156105a557600080fd5b50600e5461058b565b3480156105ba57600080fd5b506105e27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016104e7565b34801561060657600080fd5b50600c5461058b565b34801561061b57600080fd5b5061058b60275481565b34801561063157600080fd5b50602a546105109060ff1681565b34801561064b57600080fd5b506104a361065a366004614469565b611045565b34801561066b57600080fd5b5061051061067a3660046144ab565b611112565b34801561068b57600080fd5b506104a361069a36600461434d565b61117c565b3480156106ab57600080fd5b506104a36106ba366004614330565b6111ab565b3480156106cb57600080fd5b506104a36106da3660046144fa565b6111f9565b3480156106eb57600080fd5b5061058b6106fa36600461434d565b611236565b34801561070b57600080fd5b506104a36112b3565b34801561072057600080fd5b50600b546105109060ff1681565b34801561073a57600080fd5b5060125460405160ff90911681526020016104e7565b34801561075c57600080fd5b506104a361076b366004614330565b6112ec565b34801561077c57600080fd5b5061051061078b3660046143c5565b6114a3565b34801561079c57600080fd5b506104a36107ab366004614517565b6114d9565b3480156107bc57600080fd5b5061058b601a5481565b3480156107d257600080fd5b506104a36107e1366004614330565b6115ad565b3480156107f257600080fd5b5061058b60295481565b34801561080857600080fd5b5061058b610817366004614550565b6115fb565b34801561082857600080fd5b506104a3611688565b34801561083d57600080fd5b506023546105109062010000900460ff1681565b34801561085d57600080fd5b5061058b601c5481565b34801561087357600080fd5b506104a3610882366004614330565b6116ee565b34801561089357600080fd5b506105106108a2366004614330565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156108cc57600080fd5b5061058b60205481565b3480156108e257600080fd5b506104a36108f1366004614575565b611841565b34801561090257600080fd5b506104a36109113660046144fa565b611a4e565b34801561092257600080fd5b506104a3610931366004614330565b611a92565b34801561094257600080fd5b50610510610951366004614330565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561097b57600080fd5b506104a361098a36600461434d565b611b04565b34801561099b57600080fd5b506109af6109aa366004614330565b611b33565b6040516104e7919061461c565b3480156109c857600080fd5b506104a36109d7366004614469565b611c75565b3480156109e857600080fd5b5061058b60195481565b3480156109fe57600080fd5b5061058b610a0d366004614330565b611d36565b348015610a1e57600080fd5b50602a5461051090610100900460ff1681565b348015610a3d57600080fd5b506104a3611d95565b348015610a5257600080fd5b50600f546105e2906001600160a01b031681565b348015610a7257600080fd5b506104a3610a81366004614330565b611dcb565b348015610a9257600080fd5b5061058b60165481565b348015610aa857600080fd5b506104a3610ab7366004614469565b611e50565b348015610ac857600080fd5b50610510610ad7366004614330565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b0157600080fd5b506104a3610b1036600461434d565b611f18565b348015610b2157600080fd5b5061058b610b30366004614330565b611f84565b348015610b4157600080fd5b506104a3610b503660046143c5565b6120e4565b348015610b6157600080fd5b5061058b60145481565b348015610b7757600080fd5b506000546001600160a01b03166105e2565b348015610b9557600080fd5b506104da6121a9565b348015610baa57600080fd5b506104a3610bb936600461434d565b6121b8565b348015610bca57600080fd5b5061058b60285481565b348015610be057600080fd5b5061058b601f5481565b348015610bf657600080fd5b50610510610c053660046143c5565b6121e7565b348015610c1657600080fd5b50610510610c253660046143c5565b612236565b348015610c3657600080fd5b506104a3610c4536600461468e565b612243565b348015610c5657600080fd5b506104a3610c65366004614469565b6122b3565b348015610c7657600080fd5b506104a3610c8536600461434d565b612374565b348015610c9657600080fd5b50610510610ca5366004614330565b60086020526000908152604090205460ff1681565b348015610cc657600080fd5b5061058b60225481565b348015610cdc57600080fd5b506104a3610ceb3660046143f1565b6123a3565b348015610cfc57600080fd5b506104a3610d0b3660046144fa565b6123db565b348015610d1c57600080fd5b50600b546105e29061010090046001600160a01b031681565b348015610d4157600080fd5b5061058b60265481565b348015610d5757600080fd5b506104a3610d66366004614575565b61245b565b348015610d7757600080fd5b5061058b60155481565b348015610d8d57600080fd5b5061058b610d9c36600461434d565b612599565b348015610dad57600080fd5b5061058b601b5481565b348015610dc357600080fd5b5061058b610dd2366004614517565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e0957600080fd5b506104a3610e18366004614330565b61276a565b348015610e2957600080fd5b506104a3610e383660046146bc565b6127b5565b348015610e4957600080fd5b506104a3610e58366004614330565b61293a565b348015610e6957600080fd5b5061058b601e5481565b6000546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610e9d90614756565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610ef15760405162461bcd60e51b8152600401610e9d90614756565b602755565b606060108054610f059061478b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f319061478b565b8015610f7e5780601f10610f5357610100808354040283529160200191610f7e565b820191906000526020600020905b815481529060010190602001808311610f6157829003601f168201915b5050505050905090565b6000610f95338484612b34565b5060015b92915050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610e9d90614756565b601a92909255601555601f55565b6000546001600160a01b031633146110015760405162461bcd60e51b8152600401610e9d90614756565b601b92909255601655602055565b6000546001600160a01b031633146110395760405162461bcd60e51b8152600401610e9d90614756565b600b805460ff19169055565b6000546001600160a01b0316331461106f5760405162461bcd60e51b8152600401610e9d90614756565b6103e88111156110915760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d576001602560008585858181106110b4576110b46147ee565b90506020020160208101906110c99190614330565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff0019909216919091179055806111058161481a565b915050611094565b505050565b600061111f848484612c58565b611171843361116c85604051806060016040528060288152602001614c66602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612efe565b612b34565b5060015b9392505050565b6000546001600160a01b031633146111a65760405162461bcd60e51b8152600401610e9d90614756565b602455565b6000546001600160a01b031633146111d55760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146112235760405162461bcd60e51b8152600401610e9d90614756565b602a805460ff1916911515919091179055565b6000600d5482111561129d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e9d565b60006112a7612f38565b90506111758382612a51565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610e9d90614756565b600b805460ff19166001179055565b6000546001600160a01b031633146113165760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03811660009081526005602052604090205460ff1661137e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e9d565b60005b60065481101561149f57816001600160a01b0316600682815481106113a8576113a86147ee565b6000918252602090912001546001600160a01b0316141561148d57600680546113d390600190614835565b815481106113e3576113e36147ee565b600091825260209091200154600680546001600160a01b03909216918390811061140f5761140f6147ee565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806114675761146761484c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806114978161481a565b915050611381565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f9591859061116c9086612ad5565b6000546001600160a01b031633146115035760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0381166115295760405162461bcd60e51b8152600401610e9d90614862565b6040516370a0823160e01b815230600482015261149f90839083906001600160a01b038316906370a082319060240160206040518083038186803b15801561157057600080fd5b505afa158015611584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a89190614897565b612f5b565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c5483111561164f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e9d565b8161166e57600061165f84612fad565b50939550610f99945050505050565b600061167984612fad565b50929550610f99945050505050565b6000546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e9d90614756565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116eb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146117185760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03811660009081526005602052604090205460ff16156117815760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e9d565b6001600160a01b038116600090815260016020526040902054156117db576001600160a01b0381166000908152600160205260409020546117c190611236565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610e9d90614756565b8281146118b45760405162461bcd60e51b81526020600482015260176024820152760daeae6e840c4ca40e8d0ca40e6c2daca40d8cadccee8d604b1b6044820152606401610e9d565b60006118be612f38565b90506000805b85811015611a45576012546118dd9060ff16600a614994565b838686848181106118f0576118f06147ee565b9050602002013561190191906149a3565b61190b91906149a3565b3360009081526001602052604081208054929450849290919061192f908490614835565b909155508290506001600089898581811061194c5761194c6147ee565b90506020020160208101906119619190614330565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461199091906149c2565b9091555087905086828181106119a8576119a86147ee565b90506020020160208101906119bd9190614330565b6012546001600160a01b03919091169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119ff9060ff16600a614994565b888886818110611a1157611a116147ee565b90506020020135611a2291906149a3565b60405190815260200160405180910390a380611a3d8161481a565b9150506118c4565b50505050505050565b6000546001600160a01b03163314611a785760405162461bcd60e51b8152600401610e9d90614756565b602a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b038116611ae25760405162461bcd60e51b8152600401610e9d90614862565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b2e5760405162461bcd60e51b8152600401610e9d90614756565b602855565b611b706040518060c00160405280606081526020016060815260200160008152602001600081526020016000151581526020016000151581525090565b6001600160a01b0382166000908152602560209081526040918290208251815460e09381028201840190945260c081018481529093919284928491840182828015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3257602002820191906000526020600020905b815481526020019060010190808311611c1e575b5050509183525050600282015460208201526003820154604082015260049091015460ff8082161515606084015261010090910416151560809091015292915050565b6000546001600160a01b03163314611c9f5760405162461bcd60e51b8152600401610e9d90614756565b6103e8811115611cc15760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600160256000858585818110611ce457611ce46147ee565b9050602002016020810190611cf99190614330565b6001600160a01b031681526020810191909152604001600020600401805460ff191691151591909117905580611d2e8161481a565b915050611cc4565b6001600160a01b03811660009081526005602052604081205460ff1615611d7357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f9990611236565b6000546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610e9d90614756565b611dc96000612ffc565b565b6000546001600160a01b03163314611df55760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b038116611e1b5760405162461bcd60e51b8152600401610e9d90614862565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561149f573d6000803e3d6000fd5b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610e9d90614756565b6103e8811115611e9c5760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600060256000858585818110611ebf57611ebf6147ee565b9050602002016020810190611ed49190614330565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff001990921691909117905580611f108161481a565b915050611e9f565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610e9d90614756565b60008111611f7f5760405162461bcd60e51b815260206004820152600a602482015269043616e277420626520360b41b6044820152606401610e9d565b602255565b6001600160a01b03811660009081526025602052604081205480611fa85750919050565b6001600160a01b03831660009081526025602052604081206004015460ff16611fd357602954611fd7565b6027545b6001600160a01b038516600090815260256020526040812060020154919250901561201d576001600160a01b03851660009081526025602052604090206002015461201f565b815b90505b8261202c576120dc565b82612036816149da565b6001600160a01b03871660009081526025602052604081206001018054929650909250908590811061206a5761206a6147ee565b906000526020600020015490508082426120849190614835565b116120d0576001600160a01b03861660009081526025602052604090208054859081106120b3576120b36147ee565b9060005260206000200154856120c991906149c2565b94506120d6565b506120dc565b50612022565b505050919050565b6000546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0382166121645760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e742063616e277420626520302061646472657373000000006044820152606401610e9d565b61216c61304c565b6121923360125484906121839060ff16600a614994565b61218d90856149a3565b612c58565b61149f601754601355602154601d55601c54601855565b606060118054610f059061478b565b6000546001600160a01b031633146121e25760405162461bcd60e51b8152600401610e9d90614756565b602655565b6000610f95338461116c85604051806060016040528060258152602001614c8e602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612efe565b6000610f95338484612c58565b6000546001600160a01b0316331461226d5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b039091166000908152602560209081526040808320600401805461ff00191661010017905560089091529020805491151560ff19909216919091179055565b6000546001600160a01b031633146122dd5760405162461bcd60e51b8152600401610e9d90614756565b6103e88111156122ff5760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600060256000858585818110612322576123226147ee565b90506020020160208101906123379190614330565b6001600160a01b031681526020810191909152604001600020600401805460ff19169115159190911790558061236c8161481a565b915050612302565b6000546001600160a01b0316331461239e5760405162461bcd60e51b8152600401610e9d90614756565b602955565b6000546001600160a01b031633146123cd5760405162461bcd60e51b8152600401610e9d90614756565b601992909255601455601e55565b6000546001600160a01b031633146124055760405162461bcd60e51b8152600401610e9d90614756565b60238054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061245090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610e9d90614756565b60008382146124d05760405162461bcd60e51b81526020600482015260176024820152760daeae6e840c4ca40e8d0ca40e6c2daca40d8cadccee8d604b1b6044820152606401610e9d565b6103e88411156125155760405162461bcd60e51b815260206004820152601060248201526f546f6f206d616e792077616c6c65747360801b6044820152606401610e9d565b8381101561259257612580858583818110612532576125326147ee565b90506020020160208101906125479190614330565b6012546125589060ff16600a614994565b85858581811061256a5761256a6147ee565b9050602002013561257b91906149a3565b613091565b61258b6001826149c2565b9050612515565b5050505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106125d2576125d26147ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190614a07565b81600181518110612696576126966147ee565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063d06ca61f906126f49086908590600401614a5d565b60006040518083038186803b15801561270c57600080fd5b505afa158015612720573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127489190810190614a76565b60018151811061275a5761275a6147ee565b6020026020010151915050919050565b6000546001600160a01b031633146127945760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146127df5760405162461bcd60e51b8152600401610e9d90614756565b84831480156127ed57508281145b6128395760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610e9d565b6103e885111561285b5760405162461bcd60e51b8152600401610e9d906147c6565b60005b85811015611a4557848482818110612878576128786147ee565b9050602002013560256000898985818110612895576128956147ee565b90506020020160208101906128aa9190614330565b6001600160a01b031681526020810191909152604001600020600201558282828181106128d9576128d96147ee565b90506020020135602560008989858181106128f6576128f66147ee565b905060200201602081019061290b9190614330565b6001600160a01b03168152602081019190915260400160002060030155806129328161481a565b91505061285e565b6000546001600160a01b031633146129645760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0381166129c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9d565b6116eb81612ffc565b6000826129e157506000610f99565b60006129ed83856149a3565b9050826129fa8583614b34565b146111755760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e9d565b600061117583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130a4565b600061117583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612efe565b600080612ae283856149c2565b9050838110156111755760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e9d565b6001600160a01b038316612b965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e9d565b6001600160a01b038216612bf75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e9d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612cbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e9d565b6001600160a01b038216612d1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e9d565b60008111612d805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e9d565b6001600160a01b03831660009081526007602052604090205460ff16158015612dc257506001600160a01b03821660009081526007602052604090205460ff16155b612e065760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d081a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610e9d565b612e0e6130d2565b6000612e1930611d36565b60235490915060ff168015612e2e5750600081115b15612ea7576000612e3e82612599565b60245490915081108015908190612e5d5750602354610100900460ff16155b8015612e8257506001600160a01b03861660009081526008602052604090205460ff16155b8015612e96575060235462010000900460ff165b15612ea457612ea4836131a5565b50505b6001600160a01b03841660009081526004602052604090205460019060ff1680612ee957506001600160a01b03841660009081526004602052604090205460ff165b15612ef2575060005b6125928585858461334e565b60008184841115612f225760405162461bcd60e51b8152600401610e9d9190614392565b506000612f2f8486614835565b95945050505050565b6000806000612f4561356f565b9092509050612f548282612a51565b9250505090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261110d9084906136f1565b6000806000806000806000806000612fc48a6137c3565b9250925092506000806000612fe28d8686612fdd612f38565b613805565b919f909e50909c50959a5093985091965092945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60135415801561305c5750601d54155b80156130685750601854155b1561306f57565b60138054601755601d805460215560188054601c556000928390559082905555565b61309961304c565b612192338383612c58565b600081836130c55760405162461bcd60e51b8152600401610e9d9190614392565b506000612f2f8486614b34565b600080600b60019054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561312357600080fd5b505afa158015613137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315b9190614b72565b506001600160701b031691506001600160701b031691506000821180156131825750600081115b61318d576000613190565b60015b6023805460ff19169115159190911790555050565b6023805461ff001916610100179055600a546009546000916131c79190612ad5565b9050806131d45750613340565b60006131f5826131ef600954866129d290919063ffffffff16565b90612a51565b905060006132038483612a93565b90506000613212826002612a51565b905060006132208383612a93565b905047600061322f8487612ad5565b905061323a81613855565b60006132464784612a93565b905060008261325589846149a3565b61325f9190614b34565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561329a573d6000803e3d6000fd5b506132a58183614835565b91506132b18583613a24565b60095488116132cd57876009546132c89190614835565b6132d0565b60005b600955600a5487116132ef5786600a546132ea9190614835565b6132f2565b60005b600a5560408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050505050505b506023805461ff0019169055565b600b5460ff166133ad576000546001600160a01b038581169116146133ad5760405162461bcd60e51b8152602060048201526015602482015274151c985919481a5cc81b9bdd081bdc195b881e595d605a1b6044820152606401610e9d565b6133b78484613b0c565b806133c4576133c461304c565b60235460ff1680156133de5750602354610100900460ff16155b801561340357506001600160a01b03841660009081526008602052604090205460ff16155b1561344b5761344b846134466022546131ef601854601d5460135460225461342b9190614835565b6134359190614835565b61343f9190614835565b87906129d2565b613b90565b6001600160a01b03841660009081526005602052604090205460ff16801561348c57506001600160a01b03831660009081526005602052604090205460ff16155b156134a15761349c848484613d5e565b61354d565b6001600160a01b03841660009081526005602052604090205460ff161580156134e257506001600160a01b03831660009081526005602052604090205460ff165b156134f25761349c848484613ed4565b6001600160a01b03841660009081526005602052604090205460ff16801561353257506001600160a01b03831660009081526005602052604090205460ff165b156135425761349c848484613f7d565b61354d848484613ff0565b8061356957613569601754601355602154601d55601c54601855565b50505050565b600d54600c546000918291825b6006548110156136c15782600160006006848154811061359e5761359e6147ee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061360957508160026000600684815481106135e2576135e26147ee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361f57600d54600c54945094505050509091565b6136656001600060068481548110613639576136396147ee565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612a93565b92506136ad6002600060068481548110613681576136816147ee565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612a93565b9150806136b98161481a565b91505061357c565b50600c54600d546136d191612a51565b8210156136e857600d54600c549350935050509091565b90939092509050565b6000613746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140349092919063ffffffff16565b80519091501561110d57808060200190518101906137649190614bc2565b61110d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9d565b6000806000806137d28561404b565b905060006137df86614068565b905060006137f7826137f18986612a93565b90612a93565b979296509094509092505050565b600080808061381488866129d2565b9050600061382288876129d2565b9050600061383088886129d2565b90506000613842826137f18686612a93565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061388a5761388a6147ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561390357600080fd5b505afa158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393b9190614a07565b8160018151811061394e5761394e6147ee565b60200260200101906001600160a01b031690816001600160a01b031681525050613999307f000000000000000000000000000000000000000000000000000000000000000084612b34565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906139ee908590600090869030904290600401614bdf565b600060405180830381600087803b158015613a0857600080fd5b505af1158015613a1c573d6000803e3d6000fd5b505050505050565b613a4f307f000000000000000000000000000000000000000000000000000000000000000084612b34565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015613ad357600080fd5b505af1158015613ae7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125929190614c1b565b6001600160a01b03821660009081526008602052604090205460ff1615613b4357601554601355601f54601d55601a546018555050565b6001600160a01b03811660009081526008602052604090205460ff1615613b7a57601654601355602054601d55601b546018555050565b601454601355601e54601d556019546018555050565b6001600160a01b038216600090815260256020526040902060040154610100900460ff1680613be95750602a5460ff16158015613be957506001600160a01b03821660009081526025602052604090206004015460ff16155b80613c225750602a54610100900460ff16158015613c2257506001600160a01b03821660009081526025602052604090206004015460ff165b15613c2b575050565b6000613c3682612599565b6001600160a01b03841660009081526025602090815260408220600180820180548083018255908552838520429101558154908101825590835290822001829055909150613c8384611f84565b6001600160a01b0385166000908152602560205260408120600401549192509060ff16613cb257602854613cb6565b6026545b6001600160a01b0386166000908152602560205260408120600301549192509015613cfc576001600160a01b038616600090815260256020526040902060030154613cfe565b815b905080831115613a1c5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206f76657220746865206c696d697420666f722074696d652070604482015264195c9a5bd960da1b6064820152608401610e9d565b600080600080600080613d7087612fad565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613da29088612a93565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613dd19087612a93565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054613e009086612ad5565b6001600160a01b038916600090815260016020526040902055613e2281614091565b613e2c8483614119565b613e358161413d565b8015613e7c5760405181815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ec191815260200190565b60405180910390a3505050505050505050565b600080600080600080613ee687612fad565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613f189087612a93565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613f4e9084612ad5565b6001600160a01b038916600090815260026020908152604080832093909355600190522054613e009086612ad5565b600080600080600080613f8f87612fad565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613fc19088612a93565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613f189087612a93565b60008060008060008061400287612fad565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613dd19087612a93565b606061404384846000856141b1565b949350505050565b6000610f996022546131ef601354856129d290919063ffffffff16565b6000610f996022546131ef61408a601854601d54612ad590919063ffffffff16565b85906129d2565b600061409b612f38565b905060006140a983836129d2565b306000908152600160205260409020549091506140c69082612ad5565b3060009081526001602090815260408083209390935560059052205460ff161561110d57306000908152600260205260409020546141049084612ad5565b30600090815260026020526040902055505050565b600d546141269083612a93565b600d55600e546141369082612ad5565b600e555050565b6000614156601d54601854612ad590919063ffffffff16565b905080614161575050565b61418661417d826131ef601854866129d290919063ffffffff16565b60095490612ad5565b600955601d546141aa906141a19083906131ef9086906129d2565b600a5490612ad5565b600a555050565b6060824710156142125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9d565b6001600160a01b0385163b6142695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9d565b600080866001600160a01b031685876040516142859190614c49565b60006040518083038185875af1925050503d80600081146142c2576040519150601f19603f3d011682016040523d82523d6000602084013e6142c7565b606091505b50915091506142d78282866142e2565b979650505050505050565b606083156142f1575081611175565b8251156143015782518084602001fd5b8160405162461bcd60e51b8152600401610e9d9190614392565b6001600160a01b03811681146116eb57600080fd5b60006020828403121561434257600080fd5b81356111758161431b565b60006020828403121561435f57600080fd5b5035919050565b60005b83811015614381578181015183820152602001614369565b838111156135695750506000910152565b60208152600082518060208401526143b1816040850160208701614366565b601f01601f19169190910160400192915050565b600080604083850312156143d857600080fd5b82356143e38161431b565b946020939093013593505050565b60008060006060848603121561440657600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261442f57600080fd5b50813567ffffffffffffffff81111561444757600080fd5b6020830191508360208260051b850101111561446257600080fd5b9250929050565b6000806020838503121561447c57600080fd5b823567ffffffffffffffff81111561449357600080fd5b61449f8582860161441d565b90969095509350505050565b6000806000606084860312156144c057600080fd5b83356144cb8161431b565b925060208401356144db8161431b565b929592945050506040919091013590565b80151581146116eb57600080fd5b60006020828403121561450c57600080fd5b8135611175816144ec565b6000806040838503121561452a57600080fd5b82356145358161431b565b915060208301356145458161431b565b809150509250929050565b6000806040838503121561456357600080fd5b823591506020830135614545816144ec565b6000806000806040858703121561458b57600080fd5b843567ffffffffffffffff808211156145a357600080fd5b6145af8883890161441d565b909650945060208701359150808211156145c857600080fd5b506145d58782880161441d565b95989497509550505050565b600081518084526020808501945080840160005b83811015614611578151875295820195908201906001016145f5565b509495945050505050565b602081526000825160c0602084015261463860e08401826145e1565b90506020840151601f1984830301604085015261465582826145e1565b91505060408401516060840152606084015160808401526080840151151560a084015260a0840151151560c08401528091505092915050565b600080604083850312156146a157600080fd5b82356146ac8161431b565b91506020830135614545816144ec565b600080600080600080606087890312156146d557600080fd5b863567ffffffffffffffff808211156146ed57600080fd5b6146f98a838b0161441d565b9098509650602089013591508082111561471257600080fd5b61471e8a838b0161441d565b9096509450604089013591508082111561473757600080fd5b5061474489828a0161441d565b979a9699509497509295939492505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061479f57607f821691505b602082108114156147c057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600e908201526d417272617920746f6f206c6f6e6760901b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561482e5761482e614804565b5060010190565b60008282101561484757614847614804565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252818101527f77616c6c6574416464726573732063616e277420626520302061646472657373604082015260600190565b6000602082840312156148a957600080fd5b5051919050565b600181815b808511156148eb5781600019048211156148d1576148d1614804565b808516156148de57918102915b93841c93908002906148b5565b509250929050565b60008261490257506001610f99565b8161490f57506000610f99565b8160018114614925576002811461492f5761494b565b6001915050610f99565b60ff84111561494057614940614804565b50506001821b610f99565b5060208310610133831016604e8410600b841016171561496e575081810a610f99565b61497883836148b0565b806000190482111561498c5761498c614804565b029392505050565b600061117560ff8416836148f3565b60008160001904831182151516156149bd576149bd614804565b500290565b600082198211156149d5576149d5614804565b500190565b6000816149e9576149e9614804565b506000190190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614a1957600080fd5b81516111758161431b565b600081518084526020808501945080840160005b838110156146115781516001600160a01b031687529582019590820190600101614a38565b8281526040602082015260006140436040830184614a24565b60006020808385031215614a8957600080fd5b825167ffffffffffffffff80821115614aa157600080fd5b818501915085601f830112614ab557600080fd5b815181811115614ac757614ac76149f1565b8060051b604051601f19603f83011681018181108582111715614aec57614aec6149f1565b604052918252848201925083810185019188831115614b0a57600080fd5b938501935b82851015614b2857845184529385019392850192614b0f565b98975050505050505050565b600082614b5157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b0381168114614b6d57600080fd5b919050565b600080600060608486031215614b8757600080fd5b614b9084614b56565b9250614b9e60208501614b56565b9150604084015163ffffffff81168114614bb757600080fd5b809150509250925092565b600060208284031215614bd457600080fd5b8151611175816144ec565b85815284602082015260a060408201526000614bfe60a0830186614a24565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614c3057600080fd5b8351925060208401519150604084015190509250925092565b60008251614c5b818460208701614366565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201140e2aa4b7d77556c803000404c078e9f1d6e6d87a4479e92f31bdde2910e9b64736f6c63430008090033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106104775760003560e01c806361a13b4a1161024a578063a457c2d711610139578063ca450788116100b6578063dd62ed3e1161007a578063dd62ed3e14610db7578063ea2f0b3714610dfd578063f064321f14610e1d578063f2fde38b14610e3d578063f773268914610e5d57600080fd5b8063ca45078814610d35578063d4a3883f14610d4b578063d4c70c8d14610d6b578063d5bda32d14610d81578063d7d31f5f14610da157600080fd5b8063b62496f5116100fd578063b62496f514610c8a578063bf8e572e14610cba578063bfd201f514610cd0578063c49b9a8014610cf0578063c816841b14610d1057600080fd5b8063a457c2d714610bea578063a9059cbb14610c0a578063a9d3cd8a14610c2a578063ae02cd5c14610c4a578063b498412314610c6a57600080fd5b806388f82020116101c75780638da5cb5b1161018b5780638da5cb5b14610b6b57806395d89b4114610b8957806398e2a5e214610b9e5780639d5710d114610bbe5780639e3a940914610bd457600080fd5b806388f8202014610abc5780638a30104a14610af55780638b16549a14610b155780638ba4cc3c14610b355780638d8bf57614610b5557600080fd5b8063715018a61161020e578063715018a614610a3157806375f0a87414610a46578063764d72bf14610a665780637921199f14610a86578063867a1dc214610a9c57600080fd5b806361a13b4a1461098f57806363e8f370146109bc578063706acf1e146109dc57806370a08231146109f257806370bfcf2114610a1257600080fd5b80632f05205c116103665780634a74bb02116102e357806359cf0e67116102a757806359cf0e67146108d65780635ca52d67146108f65780635d098b381461091657806360d48489146109365780636199d05e1461096f57600080fd5b80634a74bb021461083157806350b9dde11461085157806352390c02146108675780635342acb414610887578063565836e7146108c057600080fd5b8063429f1add1161032a578063429f1add146107b0578063437823ec146107c6578063437d9840146107e65780634549b039146107fc57806348c54b9d1461081c57600080fd5b80632f05205c14610714578063313ce5671461072e5780633685d4191461075057806339509351146107705780633ae7dc201461079057600080fd5b806318160ddd116103f457806329e04b4a116103b857806329e04b4a1461067f5780632a3606311461069f5780632b9b4f78146106bf5780632d838119146106df5780632e5b4c43146106ff57600080fd5b806318160ddd146105fa57806321ba50811461060f57806322c98d3414610625578063232898b41461063f57806323b872dd1461065f57600080fd5b80630f683e901161043b5780630f683e90146105405780631031e36e14610560578063122f78841461057557806313114a9d146105995780631694505e146105ae57600080fd5b80630305caff146104835780630609511e146104a557806306fdde03146104c5578063095ea7b3146104f05780630d075d9c1461052057600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b506104a361049e366004614330565b610e73565b005b3480156104b157600080fd5b506104a36104c036600461434d565b610ec7565b3480156104d157600080fd5b506104da610ef6565b6040516104e79190614392565b60405180910390f35b3480156104fc57600080fd5b5061051061050b3660046143c5565b610f88565b60405190151581526020016104e7565b34801561052c57600080fd5b506104a361053b3660046143f1565b610f9f565b34801561054c57600080fd5b506104a361055b3660046143f1565b610fd7565b34801561056c57600080fd5b506104a361100f565b34801561058157600080fd5b5061058b60245481565b6040519081526020016104e7565b3480156105a557600080fd5b50600e5461058b565b3480156105ba57600080fd5b506105e27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016104e7565b34801561060657600080fd5b50600c5461058b565b34801561061b57600080fd5b5061058b60275481565b34801561063157600080fd5b50602a546105109060ff1681565b34801561064b57600080fd5b506104a361065a366004614469565b611045565b34801561066b57600080fd5b5061051061067a3660046144ab565b611112565b34801561068b57600080fd5b506104a361069a36600461434d565b61117c565b3480156106ab57600080fd5b506104a36106ba366004614330565b6111ab565b3480156106cb57600080fd5b506104a36106da3660046144fa565b6111f9565b3480156106eb57600080fd5b5061058b6106fa36600461434d565b611236565b34801561070b57600080fd5b506104a36112b3565b34801561072057600080fd5b50600b546105109060ff1681565b34801561073a57600080fd5b5060125460405160ff90911681526020016104e7565b34801561075c57600080fd5b506104a361076b366004614330565b6112ec565b34801561077c57600080fd5b5061051061078b3660046143c5565b6114a3565b34801561079c57600080fd5b506104a36107ab366004614517565b6114d9565b3480156107bc57600080fd5b5061058b601a5481565b3480156107d257600080fd5b506104a36107e1366004614330565b6115ad565b3480156107f257600080fd5b5061058b60295481565b34801561080857600080fd5b5061058b610817366004614550565b6115fb565b34801561082857600080fd5b506104a3611688565b34801561083d57600080fd5b506023546105109062010000900460ff1681565b34801561085d57600080fd5b5061058b601c5481565b34801561087357600080fd5b506104a3610882366004614330565b6116ee565b34801561089357600080fd5b506105106108a2366004614330565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156108cc57600080fd5b5061058b60205481565b3480156108e257600080fd5b506104a36108f1366004614575565b611841565b34801561090257600080fd5b506104a36109113660046144fa565b611a4e565b34801561092257600080fd5b506104a3610931366004614330565b611a92565b34801561094257600080fd5b50610510610951366004614330565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561097b57600080fd5b506104a361098a36600461434d565b611b04565b34801561099b57600080fd5b506109af6109aa366004614330565b611b33565b6040516104e7919061461c565b3480156109c857600080fd5b506104a36109d7366004614469565b611c75565b3480156109e857600080fd5b5061058b60195481565b3480156109fe57600080fd5b5061058b610a0d366004614330565b611d36565b348015610a1e57600080fd5b50602a5461051090610100900460ff1681565b348015610a3d57600080fd5b506104a3611d95565b348015610a5257600080fd5b50600f546105e2906001600160a01b031681565b348015610a7257600080fd5b506104a3610a81366004614330565b611dcb565b348015610a9257600080fd5b5061058b60165481565b348015610aa857600080fd5b506104a3610ab7366004614469565b611e50565b348015610ac857600080fd5b50610510610ad7366004614330565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b0157600080fd5b506104a3610b1036600461434d565b611f18565b348015610b2157600080fd5b5061058b610b30366004614330565b611f84565b348015610b4157600080fd5b506104a3610b503660046143c5565b6120e4565b348015610b6157600080fd5b5061058b60145481565b348015610b7757600080fd5b506000546001600160a01b03166105e2565b348015610b9557600080fd5b506104da6121a9565b348015610baa57600080fd5b506104a3610bb936600461434d565b6121b8565b348015610bca57600080fd5b5061058b60285481565b348015610be057600080fd5b5061058b601f5481565b348015610bf657600080fd5b50610510610c053660046143c5565b6121e7565b348015610c1657600080fd5b50610510610c253660046143c5565b612236565b348015610c3657600080fd5b506104a3610c4536600461468e565b612243565b348015610c5657600080fd5b506104a3610c65366004614469565b6122b3565b348015610c7657600080fd5b506104a3610c8536600461434d565b612374565b348015610c9657600080fd5b50610510610ca5366004614330565b60086020526000908152604090205460ff1681565b348015610cc657600080fd5b5061058b60225481565b348015610cdc57600080fd5b506104a3610ceb3660046143f1565b6123a3565b348015610cfc57600080fd5b506104a3610d0b3660046144fa565b6123db565b348015610d1c57600080fd5b50600b546105e29061010090046001600160a01b031681565b348015610d4157600080fd5b5061058b60265481565b348015610d5757600080fd5b506104a3610d66366004614575565b61245b565b348015610d7757600080fd5b5061058b60155481565b348015610d8d57600080fd5b5061058b610d9c36600461434d565b612599565b348015610dad57600080fd5b5061058b601b5481565b348015610dc357600080fd5b5061058b610dd2366004614517565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e0957600080fd5b506104a3610e18366004614330565b61276a565b348015610e2957600080fd5b506104a3610e383660046146bc565b6127b5565b348015610e4957600080fd5b506104a3610e58366004614330565b61293a565b348015610e6957600080fd5b5061058b601e5481565b6000546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610e9d90614756565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610ef15760405162461bcd60e51b8152600401610e9d90614756565b602755565b606060108054610f059061478b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f319061478b565b8015610f7e5780601f10610f5357610100808354040283529160200191610f7e565b820191906000526020600020905b815481529060010190602001808311610f6157829003601f168201915b5050505050905090565b6000610f95338484612b34565b5060015b92915050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610e9d90614756565b601a92909255601555601f55565b6000546001600160a01b031633146110015760405162461bcd60e51b8152600401610e9d90614756565b601b92909255601655602055565b6000546001600160a01b031633146110395760405162461bcd60e51b8152600401610e9d90614756565b600b805460ff19169055565b6000546001600160a01b0316331461106f5760405162461bcd60e51b8152600401610e9d90614756565b6103e88111156110915760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d576001602560008585858181106110b4576110b46147ee565b90506020020160208101906110c99190614330565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff0019909216919091179055806111058161481a565b915050611094565b505050565b600061111f848484612c58565b611171843361116c85604051806060016040528060288152602001614c66602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612efe565b612b34565b5060015b9392505050565b6000546001600160a01b031633146111a65760405162461bcd60e51b8152600401610e9d90614756565b602455565b6000546001600160a01b031633146111d55760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146112235760405162461bcd60e51b8152600401610e9d90614756565b602a805460ff1916911515919091179055565b6000600d5482111561129d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e9d565b60006112a7612f38565b90506111758382612a51565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610e9d90614756565b600b805460ff19166001179055565b6000546001600160a01b031633146113165760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03811660009081526005602052604090205460ff1661137e5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e9d565b60005b60065481101561149f57816001600160a01b0316600682815481106113a8576113a86147ee565b6000918252602090912001546001600160a01b0316141561148d57600680546113d390600190614835565b815481106113e3576113e36147ee565b600091825260209091200154600680546001600160a01b03909216918390811061140f5761140f6147ee565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806114675761146761484c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806114978161481a565b915050611381565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f9591859061116c9086612ad5565b6000546001600160a01b031633146115035760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0381166115295760405162461bcd60e51b8152600401610e9d90614862565b6040516370a0823160e01b815230600482015261149f90839083906001600160a01b038316906370a082319060240160206040518083038186803b15801561157057600080fd5b505afa158015611584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a89190614897565b612f5b565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c5483111561164f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610e9d565b8161166e57600061165f84612fad565b50939550610f99945050505050565b600061167984612fad565b50929550610f99945050505050565b6000546001600160a01b031633146116b25760405162461bcd60e51b8152600401610e9d90614756565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156116eb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146117185760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03811660009081526005602052604090205460ff16156117815760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e9d565b6001600160a01b038116600090815260016020526040902054156117db576001600160a01b0381166000908152600160205260409020546117c190611236565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610e9d90614756565b8281146118b45760405162461bcd60e51b81526020600482015260176024820152760daeae6e840c4ca40e8d0ca40e6c2daca40d8cadccee8d604b1b6044820152606401610e9d565b60006118be612f38565b90506000805b85811015611a45576012546118dd9060ff16600a614994565b838686848181106118f0576118f06147ee565b9050602002013561190191906149a3565b61190b91906149a3565b3360009081526001602052604081208054929450849290919061192f908490614835565b909155508290506001600089898581811061194c5761194c6147ee565b90506020020160208101906119619190614330565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461199091906149c2565b9091555087905086828181106119a8576119a86147ee565b90506020020160208101906119bd9190614330565b6012546001600160a01b03919091169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119ff9060ff16600a614994565b888886818110611a1157611a116147ee565b90506020020135611a2291906149a3565b60405190815260200160405180910390a380611a3d8161481a565b9150506118c4565b50505050505050565b6000546001600160a01b03163314611a785760405162461bcd60e51b8152600401610e9d90614756565b602a80549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b038116611ae25760405162461bcd60e51b8152600401610e9d90614862565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b2e5760405162461bcd60e51b8152600401610e9d90614756565b602855565b611b706040518060c00160405280606081526020016060815260200160008152602001600081526020016000151581526020016000151581525090565b6001600160a01b0382166000908152602560209081526040918290208251815460e09381028201840190945260c081018481529093919284928491840182828015611bda57602002820191906000526020600020905b815481526020019060010190808311611bc6575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c3257602002820191906000526020600020905b815481526020019060010190808311611c1e575b5050509183525050600282015460208201526003820154604082015260049091015460ff8082161515606084015261010090910416151560809091015292915050565b6000546001600160a01b03163314611c9f5760405162461bcd60e51b8152600401610e9d90614756565b6103e8811115611cc15760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600160256000858585818110611ce457611ce46147ee565b9050602002016020810190611cf99190614330565b6001600160a01b031681526020810191909152604001600020600401805460ff191691151591909117905580611d2e8161481a565b915050611cc4565b6001600160a01b03811660009081526005602052604081205460ff1615611d7357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f9990611236565b6000546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610e9d90614756565b611dc96000612ffc565b565b6000546001600160a01b03163314611df55760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b038116611e1b5760405162461bcd60e51b8152600401610e9d90614862565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561149f573d6000803e3d6000fd5b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610e9d90614756565b6103e8811115611e9c5760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600060256000858585818110611ebf57611ebf6147ee565b9050602002016020810190611ed49190614330565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff001990921691909117905580611f108161481a565b915050611e9f565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610e9d90614756565b60008111611f7f5760405162461bcd60e51b815260206004820152600a602482015269043616e277420626520360b41b6044820152606401610e9d565b602255565b6001600160a01b03811660009081526025602052604081205480611fa85750919050565b6001600160a01b03831660009081526025602052604081206004015460ff16611fd357602954611fd7565b6027545b6001600160a01b038516600090815260256020526040812060020154919250901561201d576001600160a01b03851660009081526025602052604090206002015461201f565b815b90505b8261202c576120dc565b82612036816149da565b6001600160a01b03871660009081526025602052604081206001018054929650909250908590811061206a5761206a6147ee565b906000526020600020015490508082426120849190614835565b116120d0576001600160a01b03861660009081526025602052604090208054859081106120b3576120b36147ee565b9060005260206000200154856120c991906149c2565b94506120d6565b506120dc565b50612022565b505050919050565b6000546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0382166121645760405162461bcd60e51b815260206004820152601c60248201527f526563697069656e742063616e277420626520302061646472657373000000006044820152606401610e9d565b61216c61304c565b6121923360125484906121839060ff16600a614994565b61218d90856149a3565b612c58565b61149f601754601355602154601d55601c54601855565b606060118054610f059061478b565b6000546001600160a01b031633146121e25760405162461bcd60e51b8152600401610e9d90614756565b602655565b6000610f95338461116c85604051806060016040528060258152602001614c8e602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612efe565b6000610f95338484612c58565b6000546001600160a01b0316331461226d5760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b039091166000908152602560209081526040808320600401805461ff00191661010017905560089091529020805491151560ff19909216919091179055565b6000546001600160a01b031633146122dd5760405162461bcd60e51b8152600401610e9d90614756565b6103e88111156122ff5760405162461bcd60e51b8152600401610e9d906147c6565b60005b8181101561110d57600060256000858585818110612322576123226147ee565b90506020020160208101906123379190614330565b6001600160a01b031681526020810191909152604001600020600401805460ff19169115159190911790558061236c8161481a565b915050612302565b6000546001600160a01b0316331461239e5760405162461bcd60e51b8152600401610e9d90614756565b602955565b6000546001600160a01b031633146123cd5760405162461bcd60e51b8152600401610e9d90614756565b601992909255601455601e55565b6000546001600160a01b031633146124055760405162461bcd60e51b8152600401610e9d90614756565b60238054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061245090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146124855760405162461bcd60e51b8152600401610e9d90614756565b60008382146124d05760405162461bcd60e51b81526020600482015260176024820152760daeae6e840c4ca40e8d0ca40e6c2daca40d8cadccee8d604b1b6044820152606401610e9d565b6103e88411156125155760405162461bcd60e51b815260206004820152601060248201526f546f6f206d616e792077616c6c65747360801b6044820152606401610e9d565b8381101561259257612580858583818110612532576125326147ee565b90506020020160208101906125479190614330565b6012546125589060ff16600a614994565b85858581811061256a5761256a6147ee565b9050602002013561257b91906149a3565b613091565b61258b6001826149c2565b9050612515565b5050505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106125d2576125d26147ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190614a07565b81600181518110612696576126966147ee565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063d06ca61f906126f49086908590600401614a5d565b60006040518083038186803b15801561270c57600080fd5b505afa158015612720573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127489190810190614a76565b60018151811061275a5761275a6147ee565b6020026020010151915050919050565b6000546001600160a01b031633146127945760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146127df5760405162461bcd60e51b8152600401610e9d90614756565b84831480156127ed57508281145b6128395760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610e9d565b6103e885111561285b5760405162461bcd60e51b8152600401610e9d906147c6565b60005b85811015611a4557848482818110612878576128786147ee565b9050602002013560256000898985818110612895576128956147ee565b90506020020160208101906128aa9190614330565b6001600160a01b031681526020810191909152604001600020600201558282828181106128d9576128d96147ee565b90506020020135602560008989858181106128f6576128f66147ee565b905060200201602081019061290b9190614330565b6001600160a01b03168152602081019190915260400160002060030155806129328161481a565b91505061285e565b6000546001600160a01b031633146129645760405162461bcd60e51b8152600401610e9d90614756565b6001600160a01b0381166129c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9d565b6116eb81612ffc565b6000826129e157506000610f99565b60006129ed83856149a3565b9050826129fa8583614b34565b146111755760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e9d565b600061117583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130a4565b600061117583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612efe565b600080612ae283856149c2565b9050838110156111755760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e9d565b6001600160a01b038316612b965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e9d565b6001600160a01b038216612bf75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e9d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612cbc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e9d565b6001600160a01b038216612d1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e9d565b60008111612d805760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e9d565b6001600160a01b03831660009081526007602052604090205460ff16158015612dc257506001600160a01b03821660009081526007602052604090205460ff16155b612e065760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d081a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610e9d565b612e0e6130d2565b6000612e1930611d36565b60235490915060ff168015612e2e5750600081115b15612ea7576000612e3e82612599565b60245490915081108015908190612e5d5750602354610100900460ff16155b8015612e8257506001600160a01b03861660009081526008602052604090205460ff16155b8015612e96575060235462010000900460ff165b15612ea457612ea4836131a5565b50505b6001600160a01b03841660009081526004602052604090205460019060ff1680612ee957506001600160a01b03841660009081526004602052604090205460ff165b15612ef2575060005b6125928585858461334e565b60008184841115612f225760405162461bcd60e51b8152600401610e9d9190614392565b506000612f2f8486614835565b95945050505050565b6000806000612f4561356f565b9092509050612f548282612a51565b9250505090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261110d9084906136f1565b6000806000806000806000806000612fc48a6137c3565b9250925092506000806000612fe28d8686612fdd612f38565b613805565b919f909e50909c50959a5093985091965092945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60135415801561305c5750601d54155b80156130685750601854155b1561306f57565b60138054601755601d805460215560188054601c556000928390559082905555565b61309961304c565b612192338383612c58565b600081836130c55760405162461bcd60e51b8152600401610e9d9190614392565b506000612f2f8486614b34565b600080600b60019054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561312357600080fd5b505afa158015613137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315b9190614b72565b506001600160701b031691506001600160701b031691506000821180156131825750600081115b61318d576000613190565b60015b6023805460ff19169115159190911790555050565b6023805461ff001916610100179055600a546009546000916131c79190612ad5565b9050806131d45750613340565b60006131f5826131ef600954866129d290919063ffffffff16565b90612a51565b905060006132038483612a93565b90506000613212826002612a51565b905060006132208383612a93565b905047600061322f8487612ad5565b905061323a81613855565b60006132464784612a93565b905060008261325589846149a3565b61325f9190614b34565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561329a573d6000803e3d6000fd5b506132a58183614835565b91506132b18583613a24565b60095488116132cd57876009546132c89190614835565b6132d0565b60005b600955600a5487116132ef5786600a546132ea9190614835565b6132f2565b60005b600a5560408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050505050505b506023805461ff0019169055565b600b5460ff166133ad576000546001600160a01b038581169116146133ad5760405162461bcd60e51b8152602060048201526015602482015274151c985919481a5cc81b9bdd081bdc195b881e595d605a1b6044820152606401610e9d565b6133b78484613b0c565b806133c4576133c461304c565b60235460ff1680156133de5750602354610100900460ff16155b801561340357506001600160a01b03841660009081526008602052604090205460ff16155b1561344b5761344b846134466022546131ef601854601d5460135460225461342b9190614835565b6134359190614835565b61343f9190614835565b87906129d2565b613b90565b6001600160a01b03841660009081526005602052604090205460ff16801561348c57506001600160a01b03831660009081526005602052604090205460ff16155b156134a15761349c848484613d5e565b61354d565b6001600160a01b03841660009081526005602052604090205460ff161580156134e257506001600160a01b03831660009081526005602052604090205460ff165b156134f25761349c848484613ed4565b6001600160a01b03841660009081526005602052604090205460ff16801561353257506001600160a01b03831660009081526005602052604090205460ff165b156135425761349c848484613f7d565b61354d848484613ff0565b8061356957613569601754601355602154601d55601c54601855565b50505050565b600d54600c546000918291825b6006548110156136c15782600160006006848154811061359e5761359e6147ee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061360957508160026000600684815481106135e2576135e26147ee565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561361f57600d54600c54945094505050509091565b6136656001600060068481548110613639576136396147ee565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612a93565b92506136ad6002600060068481548110613681576136816147ee565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612a93565b9150806136b98161481a565b91505061357c565b50600c54600d546136d191612a51565b8210156136e857600d54600c549350935050509091565b90939092509050565b6000613746826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140349092919063ffffffff16565b80519091501561110d57808060200190518101906137649190614bc2565b61110d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9d565b6000806000806137d28561404b565b905060006137df86614068565b905060006137f7826137f18986612a93565b90612a93565b979296509094509092505050565b600080808061381488866129d2565b9050600061382288876129d2565b9050600061383088886129d2565b90506000613842826137f18686612a93565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061388a5761388a6147ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561390357600080fd5b505afa158015613917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393b9190614a07565b8160018151811061394e5761394e6147ee565b60200260200101906001600160a01b031690816001600160a01b031681525050613999307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612b34565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906139ee908590600090869030904290600401614bdf565b600060405180830381600087803b158015613a0857600080fd5b505af1158015613a1c573d6000803e3d6000fd5b505050505050565b613a4f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612b34565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015613ad357600080fd5b505af1158015613ae7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125929190614c1b565b6001600160a01b03821660009081526008602052604090205460ff1615613b4357601554601355601f54601d55601a546018555050565b6001600160a01b03811660009081526008602052604090205460ff1615613b7a57601654601355602054601d55601b546018555050565b601454601355601e54601d556019546018555050565b6001600160a01b038216600090815260256020526040902060040154610100900460ff1680613be95750602a5460ff16158015613be957506001600160a01b03821660009081526025602052604090206004015460ff16155b80613c225750602a54610100900460ff16158015613c2257506001600160a01b03821660009081526025602052604090206004015460ff165b15613c2b575050565b6000613c3682612599565b6001600160a01b03841660009081526025602090815260408220600180820180548083018255908552838520429101558154908101825590835290822001829055909150613c8384611f84565b6001600160a01b0385166000908152602560205260408120600401549192509060ff16613cb257602854613cb6565b6026545b6001600160a01b0386166000908152602560205260408120600301549192509015613cfc576001600160a01b038616600090815260256020526040902060030154613cfe565b815b905080831115613a1c5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206f76657220746865206c696d697420666f722074696d652070604482015264195c9a5bd960da1b6064820152608401610e9d565b600080600080600080613d7087612fad565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613da29088612a93565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613dd19087612a93565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054613e009086612ad5565b6001600160a01b038916600090815260016020526040902055613e2281614091565b613e2c8483614119565b613e358161413d565b8015613e7c5760405181815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ec191815260200190565b60405180910390a3505050505050505050565b600080600080600080613ee687612fad565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613f189087612a93565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613f4e9084612ad5565b6001600160a01b038916600090815260026020908152604080832093909355600190522054613e009086612ad5565b600080600080600080613f8f87612fad565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613fc19088612a93565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613f189087612a93565b60008060008060008061400287612fad565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613dd19087612a93565b606061404384846000856141b1565b949350505050565b6000610f996022546131ef601354856129d290919063ffffffff16565b6000610f996022546131ef61408a601854601d54612ad590919063ffffffff16565b85906129d2565b600061409b612f38565b905060006140a983836129d2565b306000908152600160205260409020549091506140c69082612ad5565b3060009081526001602090815260408083209390935560059052205460ff161561110d57306000908152600260205260409020546141049084612ad5565b30600090815260026020526040902055505050565b600d546141269083612a93565b600d55600e546141369082612ad5565b600e555050565b6000614156601d54601854612ad590919063ffffffff16565b905080614161575050565b61418661417d826131ef601854866129d290919063ffffffff16565b60095490612ad5565b600955601d546141aa906141a19083906131ef9086906129d2565b600a5490612ad5565b600a555050565b6060824710156142125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9d565b6001600160a01b0385163b6142695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9d565b600080866001600160a01b031685876040516142859190614c49565b60006040518083038185875af1925050503d80600081146142c2576040519150601f19603f3d011682016040523d82523d6000602084013e6142c7565b606091505b50915091506142d78282866142e2565b979650505050505050565b606083156142f1575081611175565b8251156143015782518084602001fd5b8160405162461bcd60e51b8152600401610e9d9190614392565b6001600160a01b03811681146116eb57600080fd5b60006020828403121561434257600080fd5b81356111758161431b565b60006020828403121561435f57600080fd5b5035919050565b60005b83811015614381578181015183820152602001614369565b838111156135695750506000910152565b60208152600082518060208401526143b1816040850160208701614366565b601f01601f19169190910160400192915050565b600080604083850312156143d857600080fd5b82356143e38161431b565b946020939093013593505050565b60008060006060848603121561440657600080fd5b505081359360208301359350604090920135919050565b60008083601f84011261442f57600080fd5b50813567ffffffffffffffff81111561444757600080fd5b6020830191508360208260051b850101111561446257600080fd5b9250929050565b6000806020838503121561447c57600080fd5b823567ffffffffffffffff81111561449357600080fd5b61449f8582860161441d565b90969095509350505050565b6000806000606084860312156144c057600080fd5b83356144cb8161431b565b925060208401356144db8161431b565b929592945050506040919091013590565b80151581146116eb57600080fd5b60006020828403121561450c57600080fd5b8135611175816144ec565b6000806040838503121561452a57600080fd5b82356145358161431b565b915060208301356145458161431b565b809150509250929050565b6000806040838503121561456357600080fd5b823591506020830135614545816144ec565b6000806000806040858703121561458b57600080fd5b843567ffffffffffffffff808211156145a357600080fd5b6145af8883890161441d565b909650945060208701359150808211156145c857600080fd5b506145d58782880161441d565b95989497509550505050565b600081518084526020808501945080840160005b83811015614611578151875295820195908201906001016145f5565b509495945050505050565b602081526000825160c0602084015261463860e08401826145e1565b90506020840151601f1984830301604085015261465582826145e1565b91505060408401516060840152606084015160808401526080840151151560a084015260a0840151151560c08401528091505092915050565b600080604083850312156146a157600080fd5b82356146ac8161431b565b91506020830135614545816144ec565b600080600080600080606087890312156146d557600080fd5b863567ffffffffffffffff808211156146ed57600080fd5b6146f98a838b0161441d565b9098509650602089013591508082111561471257600080fd5b61471e8a838b0161441d565b9096509450604089013591508082111561473757600080fd5b5061474489828a0161441d565b979a9699509497509295939492505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061479f57607f821691505b602082108114156147c057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600e908201526d417272617920746f6f206c6f6e6760901b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561482e5761482e614804565b5060010190565b60008282101561484757614847614804565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252818101527f77616c6c6574416464726573732063616e277420626520302061646472657373604082015260600190565b6000602082840312156148a957600080fd5b5051919050565b600181815b808511156148eb5781600019048211156148d1576148d1614804565b808516156148de57918102915b93841c93908002906148b5565b509250929050565b60008261490257506001610f99565b8161490f57506000610f99565b8160018114614925576002811461492f5761494b565b6001915050610f99565b60ff84111561494057614940614804565b50506001821b610f99565b5060208310610133831016604e8410600b841016171561496e575081810a610f99565b61497883836148b0565b806000190482111561498c5761498c614804565b029392505050565b600061117560ff8416836148f3565b60008160001904831182151516156149bd576149bd614804565b500290565b600082198211156149d5576149d5614804565b500190565b6000816149e9576149e9614804565b506000190190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614a1957600080fd5b81516111758161431b565b600081518084526020808501945080840160005b838110156146115781516001600160a01b031687529582019590820190600101614a38565b8281526040602082015260006140436040830184614a24565b60006020808385031215614a8957600080fd5b825167ffffffffffffffff80821115614aa157600080fd5b818501915085601f830112614ab557600080fd5b815181811115614ac757614ac76149f1565b8060051b604051601f19603f83011681018181108582111715614aec57614aec6149f1565b604052918252848201925083810185019188831115614b0a57600080fd5b938501935b82851015614b2857845184529385019392850192614b0f565b98975050505050505050565b600082614b5157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b0381168114614b6d57600080fd5b919050565b600080600060608486031215614b8757600080fd5b614b9084614b56565b9250614b9e60208501614b56565b9150604084015163ffffffff81168114614bb757600080fd5b809150509250925092565b600060208284031215614bd457600080fd5b8151611175816144ec565b85815284602082015260a060408201526000614bfe60a0830186614a24565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614c3057600080fd5b8351925060208401519150604084015190509250925092565b60008251614c5b818460208701614366565b919091019291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201140e2aa4b7d77556c803000404c078e9f1d6e6d87a4479e92f31bdde2910e9b64736f6c63430008090033
Deployed Bytecode Sourcemap
22505:30136:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34687:113;;;;;;;;;;-1:-1:-1;34687:113:0;;;;;:::i;:::-;;:::i;:::-;;48254:138;;;;;;;;;;-1:-1:-1;48254:138:0;;;;;:::i;:::-;;:::i;27013:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27927:163;;;;;;;;;;-1:-1:-1;27927:163:0;;;;;:::i;:::-;;:::i;:::-;;;1723:14:1;;1716:22;1698:41;;1686:2;1671:18;27927:163:0;1558:187:1;32864:227:0;;;;;;;;;;-1:-1:-1;32864:227:0;;;;;:::i;:::-;;:::i;33099:231::-;;;;;;;;;;-1:-1:-1;33099:231:0;;;;;:::i;:::-;;:::i;26570:78::-;;;;;;;;;;;;;:::i;24225:40::-;;;;;;;;;;;;;;;;;;;2217:25:1;;;2205:2;2190:18;24225:40:0;2071:177:1;29056:87:0;;;;;;;;;;-1:-1:-1;29125:10:0;;29056:87;;24080:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2443:32:1;;;2425:51;;2413:2;2398:18;24080:51:0;2253:229:1;27290:95:0;;;;;;;;;;-1:-1:-1;27370:7:0;;27290:95;;47482:43;;;;;;;;;;;;;;;;47693:37;;;;;;;;;;-1:-1:-1;47693:37:0;;;;;;;;50256:268;;;;;;;;;;-1:-1:-1;50256:268:0;;;;;:::i;:::-;;:::i;28098:315::-;;;;;;;;;;-1:-1:-1;28098:315:0;;;;;:::i;:::-;;:::i;33765:126::-;;;;;;;;;;-1:-1:-1;33765:126:0;;;;;:::i;:::-;;:::i;34566:109::-;;;;;;;;;;-1:-1:-1;34566:109:0;;;;;:::i;:::-;;:::i;48780:115::-;;;;;;;;;;-1:-1:-1;48780:115:0;;;;;:::i;:::-;;:::i;30551:252::-;;;;;;;;;;-1:-1:-1;30551:252:0;;;;;:::i;:::-;;:::i;34947:79::-;;;;;;;;;;;;;:::i;23139:20::-;;;;;;;;;;-1:-1:-1;23139:20:0;;;;;;;;27199:83;;;;;;;;;;-1:-1:-1;27265:9:0;;27199:83;;27265:9;;;;4273:36:1;;4261:2;4246:18;27199:83:0;4131:184:1;31152:475:0;;;;;;;;;;-1:-1:-1;31152:475:0;;;;;:::i;:::-;;:::i;28421:220::-;;;;;;;;;;-1:-1:-1;28421:220:0;;;;;:::i;:::-;;:::i;34032:283::-;;;;;;;;;;-1:-1:-1;34032:283:0;;;;;:::i;:::-;;:::i;23681:31::-;;;;;;;;;;;;;;;;32404:113;;;;;;;;;;-1:-1:-1;32404:113:0;;;;;:::i;:::-;;:::i;47631:32::-;;;;;;;;;;;;;;;;30107:436;;;;;;;;;;-1:-1:-1;30107:436:0;;;;;:::i;:::-;;:::i;33903:117::-;;;;;;;;;;;;;:::i;24172:40::-;;;;;;;;;;-1:-1:-1;24172:40:0;;;;;;;;;;;23758:36;;;;;;;;;;;;;;;;30811:333;;;;;;;;;;-1:-1:-1;30811:333:0;;;;;:::i;:::-;;:::i;38612:125::-;;;;;;;;;;-1:-1:-1;38612:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;38702:27:0;38678:4;38702:27;;;:18;:27;;;;;;;;;38612:125;23924:32;;;;;;;;;;;;;;;;46748:553;;;;;;;;;;-1:-1:-1;46748:553:0;;;;;:::i;:::-;;:::i;48635:137::-;;;;;;;;;;-1:-1:-1;48635:137:0;;;;;:::i;:::-;;:::i;32649:203::-;;;;;;;;;;-1:-1:-1;32649:203:0;;;;;:::i;:::-;;:::i;34812:123::-;;;;;;;;;;-1:-1:-1;34812:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;34906:21:0;34882:4;34906:21;;;:10;:21;;;;;;;;;34812:123;48400:102;;;;;;;;;;-1:-1:-1;48400:102:0;;;;;:::i;:::-;;:::i;48903:124::-;;;;;;;;;;-1:-1:-1;48903:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49702:267::-;;;;;;;;;;-1:-1:-1;49702:267:0;;;;;:::i;:::-;;:::i;23638:36::-;;;;;;;;;;;;;;;;27393:198;;;;;;;;;;-1:-1:-1;27393:198:0;;;;;:::i;:::-;;:::i;47737:48::-;;;;;;;;;;-1:-1:-1;47737:48:0;;;;;;;;;;;20511:103;;;;;;;;;;;;;:::i;23299:30::-;;;;;;;;;;-1:-1:-1;23299:30:0;;;;-1:-1:-1;;;;;23299:30:0;;;34327:227;;;;;;;;;;-1:-1:-1;34327:227:0;;;;;:::i;:::-;;:::i;23529:26::-;;;;;;;;;;;;;;;;50532:272;;;;;;;;;;-1:-1:-1;50532:272:0;;;;;:::i;:::-;;:::i;28928:120::-;;;;;;;;;;-1:-1:-1;28928:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29020:20:0;28996:4;29020:20;;;:11;:20;;;;;;;;;28928:120;33596:157;;;;;;;;;;-1:-1:-1;33596:157:0;;;;;:::i;:::-;;:::i;50883:922::-;;;;;;;;;;-1:-1:-1;50883:922:0;;;;;:::i;:::-;;:::i;29155:278::-;;;;;;;;;;-1:-1:-1;29155:278:0;;;;;:::i;:::-;;:::i;23460:30::-;;;;;;;;;;;;;;;;19860:87;;;;;;;;;;-1:-1:-1;19906:7:0;19933:6;-1:-1:-1;;;;;19933:6:0;19860:87;;27104;;;;;;;;;;;;;:::i;48121:124::-;;;;;;;;;;-1:-1:-1;48121:124:0;;;;;:::i;:::-;;:::i;47566:26::-;;;;;;;;;;;;;;;;23886:31;;;;;;;;;;;;;;;;28649:271;;;;;;;;;;-1:-1:-1;28649:271:0;;;;;:::i;:::-;;:::i;27599:169::-;;;;;;;;;;-1:-1:-1;27599:169:0;;;;;:::i;:::-;;:::i;26844:161::-;;;;;;;;;;-1:-1:-1;26844:161:0;;;;;:::i;:::-;;:::i;49977:271::-;;;;;;;;;;-1:-1:-1;49977:271:0;;;;;:::i;:::-;;:::i;48511:116::-;;;;;;;;;;-1:-1:-1;48511:116:0;;;;;:::i;:::-;;:::i;22981:57::-;;;;;;;;;;-1:-1:-1;22981:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24007:30;;;;;;;;;;;;;;;;33341:247;;;;;;;;;;-1:-1:-1;33341:247:0;;;;;:::i;:::-;;:::i;35034:173::-;;;;;;;;;;-1:-1:-1;35034:173:0;;;;;:::i;:::-;;:::i;23171:26::-;;;;;;;;;;-1:-1:-1;23171:26:0;;;;;;;-1:-1:-1;;;;;23171:26:0;;;47395:37;;;;;;;;;;;;;;;;29638:461;;;;;;;;;;-1:-1:-1;29638:461:0;;;;;:::i;:::-;;:::i;23497:25::-;;;;;;;;;;;;;;;;44665:290;;;;;;;;;;-1:-1:-1;44665:290:0;;;;;:::i;:::-;;:::i;23719:32::-;;;;;;;;;;;;;;;;27776:143;;;;;;;;;;-1:-1:-1;27776:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;27884:18:0;;;27857:7;27884:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27776:143;32529:112;;;;;;;;;;-1:-1:-1;32529:112:0;;;;;:::i;:::-;;:::i;49172:522::-;;;;;;;;;;-1:-1:-1;49172:522:0;;;;;:::i;:::-;;:::i;20769:201::-;;;;;;;;;;-1:-1:-1;20769:201:0;;;;;:::i;:::-;;:::i;23843:36::-;;;;;;;;;;;;;;;;34687:113;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;34763:21:0::1;34787:5;34763:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;34763:29:0::1;::::0;;34687:113::o;48254:138::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48344:28:::1;:40:::0;48254:138::o;27013:83::-;27050:13;27083:5;27076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27013:83;:::o;27927:163::-;28004:4;28021:39;7547:10;28044:7;28053:6;28021:8;:39::i;:::-;-1:-1:-1;28078:4:0;27927:163;;;;;:::o;32864:227::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;32977:16:::1;:32:::0;;;;33020:10:::1;:20:::0;33051:16:::1;:32:::0;32864:227::o;33099:231::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;33213:17:::1;:33:::0;;;;33257:11:::1;:21:::0;33289:17:::1;:33:::0;33099:231::o;26570:78::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;26624:8:::1;:16:::0;;-1:-1:-1;;26624:16:0::1;::::0;;26570:78::o;50256:268::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;50374:4:::1;50354:24:::0;::::1;;50346:51;;;;-1:-1:-1::0;;;50346:51:0::1;;;;;;;:::i;:::-;50412:9;50408:109;50425:20:::0;;::::1;50408:109;;;50501:4;50466:7;:21;50474:9;;50484:1;50474:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50466:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;50466:21:0;:32:::1;;:39:::0;;;::::1;;;;-1:-1:-1::0;;50466:39:0;;::::1;::::0;;;::::1;::::0;;50447:3;::::1;::::0;::::1;:::i;:::-;;;;50408:109;;;;50256:268:::0;;:::o;28098:315::-;28198:4;28215:36;28225:6;28233:9;28244:6;28215:9;:36::i;:::-;28262:121;28271:6;7547:10;28293:89;28331:6;28293:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28293:19:0;;;;;;:11;:19;;;;;;;;7547:10;28293:33;;;;;;;;;;:37;:89::i;:::-;28262:8;:121::i;:::-;-1:-1:-1;28401:4:0;28098:315;;;;;;:::o;33765:126::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;33847:25:::1;:36:::0;33765:126::o;34566:109::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34639:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;34639:28:0::1;34663:4;34639:28;::::0;;34566:109::o;48780:115::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48860:18:::1;:27:::0;;-1:-1:-1;;48860:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48780:115::o;30551:252::-;30617:7;30656;;30645;:18;;30637:73;;;;-1:-1:-1;;;30637:73:0;;11166:2:1;30637:73:0;;;11148:21:1;11205:2;11185:18;;;11178:30;11244:34;11224:18;;;11217:62;-1:-1:-1;;;11295:18:1;;;11288:40;11345:19;;30637:73:0;10964:406:1;30637:73:0;30721:19;30743:10;:8;:10::i;:::-;30721:32;-1:-1:-1;30771:24:0;:7;30721:32;30771:11;:24::i;34947:79::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;35003:8:::1;:15:::0;;-1:-1:-1;;35003:15:0::1;35014:4;35003:15;::::0;;34947:79::o;31152:475::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31234:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31226:56;;;::::0;-1:-1:-1;;;31226:56:0;;11577:2:1;31226:56:0::1;::::0;::::1;11559:21:1::0;11616:2;11596:18;;;11589:30;11655:25;11635:18;;;11628:53;11698:18;;31226:56:0::1;11375:347:1::0;31226:56:0::1;31298:9;31293:327;31317:9;:16:::0;31313:20;::::1;31293:327;;;31375:7;-1:-1:-1::0;;;;;31359:23:0::1;:9;31369:1;31359:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31359:12:0::1;:23;31355:254;;;31418:9;31428:16:::0;;:20:::1;::::0;31447:1:::1;::::0;31428:20:::1;:::i;:::-;31418:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31403:9:::1;:12:::0;;-1:-1:-1;;;;;31418:31:0;;::::1;::::0;31413:1;;31403:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31403:46:0::1;-1:-1:-1::0;;;;;31403:46:0;;::::1;;::::0;;31468:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31507:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31507:28:0::1;::::0;;31554:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31554:15:0;;;;;-1:-1:-1;;;;;;31554:15:0::1;::::0;;;;;31293:327:::1;31152:475:::0;:::o;31355:254::-:1;31335:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31293:327;;;;31152:475:::0;:::o;28421:220::-;7547:10;28511:4;28560:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28560:34:0;;;;;;;;;;28511:4;;28528:83;;28551:7;;28560:50;;28599:10;28560:38;:50::i;34032:283::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34142:27:0;::::1;34134:72;;;;-1:-1:-1::0;;;34134:72:0::1;;;;;;;:::i;:::-;34269:37;::::0;-1:-1:-1;;;34269:37:0;;34300:4:::1;34269:37;::::0;::::1;2425:51:1::0;34217:90:0::1;::::0;34240:12;;34254:13;;-1:-1:-1;;;;;34269:22:0;::::1;::::0;::::1;::::0;2398:18:1;;34269:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34217:22;:90::i;32404:113::-:0;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32475:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32475:34:0::1;32505:4;32475:34;::::0;;32404:113::o;30107:436::-;30197:7;30236;;30225;:18;;30217:62;;;;-1:-1:-1;;;30217:62:0;;12741:2:1;30217:62:0;;;12723:21:1;12780:2;12760:18;;;12753:30;12819:33;12799:18;;;12792:61;12870:18;;30217:62:0;12539:355:1;30217:62:0;30295:17;30290:246;;30330:15;30354:19;30365:7;30354:10;:19::i;:::-;-1:-1:-1;30329:44:0;;-1:-1:-1;30388:14:0;;-1:-1:-1;;;;;30388:14:0;30290:246;30437:23;30468:19;30479:7;30468:10;:19::i;:::-;-1:-1:-1;30435:52:0;;-1:-1:-1;30502:22:0;;-1:-1:-1;;;;;30502:22:0;33903:117;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;33964:15:::1;::::0;33956:56:::1;::::0;-1:-1:-1;;;;;33964:15:0;;::::1;::::0;33990:21:::1;33956:56:::0;::::1;;;::::0;33964:15:::1;33956:56:::0;33964:15;33956:56;33990:21;33964:15;33956:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33903:117::o:0;30811:333::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30894:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30893:21;30885:61;;;::::0;-1:-1:-1;;;30885:61:0;;13101:2:1;30885:61:0::1;::::0;::::1;13083:21:1::0;13140:2;13120:18;;;13113:30;13179:29;13159:18;;;13152:57;13226:18;;30885:61:0::1;12899:351:1::0;30885:61:0::1;-1:-1:-1::0;;;;;30960:16:0;::::1;30979:1;30960:16:::0;;;:7:::1;:16;::::0;;;;;:20;30957:108:::1;;-1:-1:-1::0;;;;;31036:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31016:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30997:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30957:108:::1;-1:-1:-1::0;;;;;31075:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31075:27:0::1;31098:4;31075:27:::0;;::::1;::::0;;;31113:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31113:23:0::1;::::0;;::::1;::::0;;30811:333::o;46748:553::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;46868:35;;::::1;46860:71;;;::::0;-1:-1:-1;;;46860:71:0;;13457:2:1;46860:71:0::1;::::0;::::1;13439:21:1::0;13496:2;13476:18;;;13469:30;-1:-1:-1;;;13515:18:1;;;13508:53;13578:18;;46860:71:0::1;13255:347:1::0;46860:71:0::1;46942:9;46954:10;:8;:10::i;:::-;46942:22:::0;-1:-1:-1;46975:15:0::1;::::0;47001:293:::1;47020:21:::0;;::::1;47001:293;;;47095:9;::::0;47089:15:::1;::::0;47095:9:::1;;47089:2;:15;:::i;:::-;47085:1;47072:7;;47080:1;47072:10;;;;;;;:::i;:::-;;;;;;;:14;;;;:::i;:::-;:32;;;;:::i;:::-;47127:10;47119:19;::::0;;;:7:::1;:19;::::0;;;;:30;;47062:42;;-1:-1:-1;47062:42:0;;47119:19;;;:30:::1;::::0;47062:42;;47119:30:::1;:::i;:::-;::::0;;;-1:-1:-1;47190:7:0;;-1:-1:-1;47164:7:0::1;:22;47172:10:::0;;47183:1;47172:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47164:22:0::1;-1:-1:-1::0;;;;;47164:22:0::1;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;47238:10:0;;-1:-1:-1;47238:10:0;47249:1;47238:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;47272:9;::::0;-1:-1:-1;;;;;47217:65:0;;;::::1;::::0;47226:10:::1;::::0;47217:65:::1;::::0;47266:15:::1;::::0;47272:9:::1;;47266:2;:15;:::i;:::-;47253:7;;47261:1;47253:10;;;;;;;:::i;:::-;;;;;;;:28;;;;:::i;:::-;47217:65;::::0;2217:25:1;;;2205:2;2190:18;47217:65:0::1;;;;;;;47043:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47001:293;;;;46849:452;;46748:553:::0;;;;:::o;48635:137::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48726:29:::1;:38:::0;;;::::1;;;;-1:-1:-1::0;;48726:38:0;;::::1;::::0;;;::::1;::::0;;48635:137::o;32649:203::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32738:27:0;::::1;32730:72;;;;-1:-1:-1::0;;;32730:72:0::1;;;;;;;:::i;:::-;32813:15;:31:::0;;-1:-1:-1;;;;;;32813:31:0::1;-1:-1:-1::0;;;;;32813:31:0;;;::::1;::::0;;;::::1;::::0;;32649:203::o;48400:102::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48472:11:::1;:22:::0;48400:102::o;48903:124::-;48963:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48963:20:0;-1:-1:-1;;;;;49002:17:0;;;;;;:7;:17;;;;;;;;;48995:24;;;;;;;;;;;;;;;;;;;;;;;49002:17;;48995:24;;49002:17;;48995:24;;49002:17;48995:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48995:24:0;;;-1:-1:-1;;48995:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48903:124;-1:-1:-1;;48903:124:0:o;49702:267::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;49815:4:::1;49795:24:::0;::::1;;49787:51;;;;-1:-1:-1::0;;;49787:51:0::1;;;;;;;:::i;:::-;49853:9;49849:113;49866:20:::0;;::::1;49849:113;;;49946:4;49907:7;:21;49915:9;;49925:1;49915:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49907:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;49907:21:0;:36:::1;;:43:::0;;-1:-1:-1;;49907:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49888:3;::::1;::::0;::::1;:::i;:::-;;;;49849:113;;27393:198:::0;-1:-1:-1;;;;;27483:20:0;;27459:7;27483:20;;;:11;:20;;;;;;;;27479:49;;;-1:-1:-1;;;;;;27512:16:0;;;;;:7;:16;;;;;;;27393:198::o;27479:49::-;-1:-1:-1;;;;;27566:16:0;;;;;;:7;:16;;;;;;27546:37;;:19;:37::i;20511:103::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;20576:30:::1;20603:1;20576:18;:30::i;:::-;20511:103::o:0;34327:227::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34426:27:0;::::1;34418:72;;;;-1:-1:-1::0;;;34418:72:0::1;;;;;;;:::i;:::-;34501:45;::::0;-1:-1:-1;;;;;34501:22:0;::::1;::::0;34524:21:::1;34501:45:::0;::::1;;;::::0;::::1;::::0;;;34524:21;34501:22;:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;50532:272:::0;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;50653:4:::1;50633:24:::0;::::1;;50625:51;;;;-1:-1:-1::0;;;50625:51:0::1;;;;;;;:::i;:::-;50691:9;50687:110;50704:20:::0;;::::1;50687:110;;;50780:5;50745:7;:21;50753:9;;50763:1;50753:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50745:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;50745:21:0;:32:::1;;:40:::0;;;::::1;;;;-1:-1:-1::0;;50745:40:0;;::::1;::::0;;;::::1;::::0;;50726:3;::::1;::::0;::::1;:::i;:::-;;;;50687:110;;33596:157:::0;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;33692:1:::1;33681:8;:12;33673:35;;;::::0;-1:-1:-1;;;33673:35:0;;15498:2:1;33673:35:0::1;::::0;::::1;15480:21:1::0;15537:2;15517:18;;;15510:30;-1:-1:-1;;;15556:18:1;;;15549:40;15606:18;;33673:35:0::1;15296:334:1::0;33673:35:0::1;33719:15;:26:::0;33596:157::o;50883:922::-;-1:-1:-1;;;;;51004:17:0;;50949:18;51004:17;;;:7;:17;;;;;:36;51057:18;51053:68;;51092:17;50883:922;;;:::o;51053:68::-;-1:-1:-1;;;;;51160:17:0;;51131:26;51160:17;;;:7;:17;;;;;:32;;;;;:83;;51226:17;;51160:83;;;51195:28;;51160:83;-1:-1:-1;;;;;51276:17:0;;51254:19;51276:17;;;:7;:17;;;;;:29;;;51131:112;;-1:-1:-1;51254:19:0;51276:34;:87;;-1:-1:-1;;;;;51334:17:0;;;;;;:7;:17;;;;;:29;;;51276:87;;;51313:18;51276:87;51254:109;;51374:424;51406:18;51402:64;;51445:5;;51402:64;51480:15;;;;:::i;:::-;-1:-1:-1;;;;;51534:17:0;;51510:21;51534:17;;;:7;:17;;;;;:32;;:47;;51480:15;;-1:-1:-1;51510:21:0;;-1:-1:-1;51534:32:0;51480:15;;51534:47;;;;;;:::i;:::-;;;;;;;;;51510:71;;51633:13;51618:11;51600:15;:29;;;;:::i;:::-;:46;51596:191;;-1:-1:-1;;;;;51681:17:0;;;;;;:7;:17;;;;;:44;;51711:13;;51681:44;;;;;;:::i;:::-;;;;;;;;;51667:58;;;;;:::i;:::-;;;51596:191;;;51766:5;;;51596:191;51387:411;51374:424;;;50969:836;;;50883:922;;;:::o;29155:278::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29247:23:0;::::1;29239:64;;;::::0;-1:-1:-1;;;29239:64:0;;15978:2:1;29239:64:0::1;::::0;::::1;15960:21:1::0;16017:2;15997:18;;;15990:30;16056;16036:18;;;16029:58;16104:18;;29239:64:0::1;15776:352:1::0;29239:64:0::1;29314:14;:12;:14::i;:::-;29339:60;7547:10:::0;29389:9:::1;::::0;29363;;29383:15:::1;::::0;29389:9:::1;;29383:2;:15;:::i;:::-;29374:24;::::0;:6;:24:::1;:::i;:::-;29339:9;:60::i;:::-;29410:15;38481::::0;;38471:7;:25;38523:21;;38507:13;:37;38571:21;;38555:13;:37;38427:173;27104:87;27143:13;27176:7;27169:14;;;;;:::i;48121:124::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48204:22:::1;:33:::0;48121:124::o;28649:271::-;28744:4;28761:129;7547:10;28784:7;28793:96;28832:15;28793:96;;;;;;;;;;;;;;;;;7547:10;28793:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28793:34:0;;;;;;;;;;;;:38;:96::i;27599:169::-;27679:4;27696:42;7547:10;27720:9;27731:6;27696:9;:42::i;26844:161::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26916:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;:24:::1;;:31:::0;;-1:-1:-1;;26916:31:0::1;;;::::0;;26958:25:::1;:31:::0;;;;;:39;;;::::1;;-1:-1:-1::0;;26958:39:0;;::::1;::::0;;;::::1;::::0;;26844:161::o;49977:271::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;50093:4:::1;50073:24:::0;::::1;;50065:51;;;;-1:-1:-1::0;;;50065:51:0::1;;;;;;;:::i;:::-;50131:9;50127:114;50144:20:::0;;::::1;50127:114;;;50224:5;50185:7;:21;50193:9;;50203:1;50193:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50185:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;50185:21:0;:36:::1;;:44:::0;;-1:-1:-1;;50185:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50166:3;::::1;::::0;::::1;:::i;:::-;;;;50127:114;;48511:116:::0;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;48590:17:::1;:29:::0;48511:116::o;33341:247::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;33459:21:::1;:37:::0;;;;33507:15:::1;:25:::0;33543:21:::1;:37:::0;33341:247::o;35034:173::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;35113:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35113:32:0;;::::1;;::::0;;35161:38:::1;::::0;::::1;::::0;::::1;::::0;35137:8;1723:14:1;1716:22;1698:41;;1686:2;1671:18;;1558:187;35161:38:0::1;;;;;;;;35034:173:::0;:::o;29638:461::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;29750:16:::1;29789:35:::0;;::::1;29781:71;;;::::0;-1:-1:-1;;;29781:71:0;;13457:2:1;29781:71:0::1;::::0;::::1;13439:21:1::0;13496:2;13476:18;;;13469:30;-1:-1:-1;;;13515:18:1;;;13508:53;13578:18;;29781:71:0::1;13255:347:1::0;29781:71:0::1;29892:4;29871:25:::0;::::1;;29863:54;;;::::0;-1:-1:-1;;;29863:54:0;;16335:2:1;29863:54:0::1;::::0;::::1;16317:21:1::0;16374:2;16354:18;;;16347:30;-1:-1:-1;;;16393:18:1;;;16386:46;16449:18;;29863:54:0::1;16133:340:1::0;29863:54:0::1;29934:28:::0;;::::1;29928:164;;;29978:74;29994:10;;30005:8;29994:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30042:9;::::0;30036:15:::1;::::0;30042:9:::1;;30036:2;:15;:::i;:::-;30016:7;;30024:8;30016:17;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;29978:15;:74::i;:::-;30067:13;30079:1;30067:13:::0;::::1;:::i;:::-;;;29928:164;;;29739:360;29638:461:::0;;;;:::o;44665:290::-;44781:16;;;44795:1;44781:16;;;;;;;;44728;;;;44781;44795:1;44781:16;;;;;;;;;;-1:-1:-1;44781:16:0;44757:40;;44826:4;44808;44813:1;44808:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44808:23:0;;;-1:-1:-1;;;;;44808:23:0;;;;;44852:15;-1:-1:-1;;;;;44852:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44842:4;44847:1;44842:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44842:32:0;;;:7;;;;;;;;;:32;44896:48;;-1:-1:-1;;;44896:48:0;;:15;:29;;;;;;:48;;44926:11;;44939:4;;44896:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44896:48:0;;;;;;;;;;;;:::i;:::-;44945:1;44896:51;;;;;;;;:::i;:::-;;;;;;;44885:62;;44746:209;44665:290;;;:::o;32529:112::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32598:27:0::1;32628:5;32598:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32598:35:0::1;::::0;;32529:112::o;49172:522::-;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;49321:39;;::::1;:82:::0;::::1;;;-1:-1:-1::0;49364:39:0;;::::1;49321:82;49313:120;;;::::0;-1:-1:-1;;;49313:120:0;;18981:2:1;49313:120:0::1;::::0;::::1;18963:21:1::0;19020:2;19000:18;;;18993:30;19059:27;19039:18;;;19032:55;19104:18;;49313:120:0::1;18779:349:1::0;49313:120:0::1;49472:4;49452:24:::0;::::1;;49444:51;;;;-1:-1:-1::0;;;49444:51:0::1;;;;;;;:::i;:::-;49510:9;49506:181;49523:20:::0;;::::1;49506:181;;;49600:12;;49613:1;49600:15;;;;;;;:::i;:::-;;;;;;;49564:7;:21;49572:9;;49582:1;49572:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49564:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;49564:21:0;:33:::1;;:51:::0;49663:9;;49673:1;49663:12;;::::1;;;;;:::i;:::-;;;;;;;49630:7;:21;49638:9;;49648:1;49638:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49630:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;49630:21:0;:30:::1;;:45:::0;49545:3;::::1;::::0;::::1;:::i;:::-;;;;49506:181;;20769:201:::0;19906:7;19933:6;-1:-1:-1;;;;;19933:6:0;7547:10;20080:23;20072:68;;;;-1:-1:-1;;;20072:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20858:22:0;::::1;20850:73;;;::::0;-1:-1:-1;;;20850:73:0;;19335:2:1;20850:73:0::1;::::0;::::1;19317:21:1::0;19374:2;19354:18;;;19347:30;19413:34;19393:18;;;19386:62;-1:-1:-1;;;19464:18:1;;;19457:36;19510:19;;20850:73:0::1;19133:402:1::0;20850:73:0::1;20934:28;20953:8;20934:18;:28::i;4249:471::-:0;4307:7;4552:6;4548:47;;-1:-1:-1;4582:1:0;4575:8;;4548:47;4607:9;4619:5;4623:1;4619;:5;:::i;:::-;4607:17;-1:-1:-1;4652:1:0;4643:5;4647:1;4607:17;4643:5;:::i;:::-;:10;4635:56;;;;-1:-1:-1;;;4635:56:0;;19964:2:1;4635:56:0;;;19946:21:1;20003:2;19983:18;;;19976:30;20042:34;20022:18;;;20015:62;-1:-1:-1;;;20093:18:1;;;20086:31;20134:19;;4635:56:0;19762:397:1;5196:132:0;5254:7;5281:39;5285:1;5288;5281:39;;;;;;;;;;;;;;;;;:3;:39::i;3359:136::-;3417:7;3444:43;3448:1;3451;3444:43;;;;;;;;;;;;;;;;;:3;:43::i;2895:181::-;2953:7;;2985:5;2989:1;2985;:5;:::i;:::-;2973:17;;3014:1;3009;:6;;3001:46;;;;-1:-1:-1;;;3001:46:0;;20366:2:1;3001:46:0;;;20348:21:1;20405:2;20385:18;;;20378:30;20444:29;20424:18;;;20417:57;20491:18;;3001:46:0;20164:351:1;38745:337:0;-1:-1:-1;;;;;38838:19:0;;38830:68;;;;-1:-1:-1;;;38830:68:0;;20722:2:1;38830:68:0;;;20704:21:1;20761:2;20741:18;;;20734:30;20800:34;20780:18;;;20773:62;-1:-1:-1;;;20851:18:1;;;20844:34;20895:19;;38830:68:0;20520:400:1;38830:68:0;-1:-1:-1;;;;;38917:21:0;;38909:68;;;;-1:-1:-1;;;38909:68:0;;21127:2:1;38909:68:0;;;21109:21:1;21166:2;21146:18;;;21139:30;21205:34;21185:18;;;21178:62;-1:-1:-1;;;21256:18:1;;;21249:32;21298:19;;38909:68:0;20925:398:1;38909:68:0;-1:-1:-1;;;;;38990:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39042:32;;2217:25:1;;;39042:32:0;;2190:18:1;39042:32:0;;;;;;;38745:337;;;:::o;39090:1185::-;-1:-1:-1;;;;;39212:18:0;;39204:68;;;;-1:-1:-1;;;39204:68:0;;21530:2:1;39204:68:0;;;21512:21:1;21569:2;21549:18;;;21542:30;21608:34;21588:18;;;21581:62;-1:-1:-1;;;21659:18:1;;;21652:35;21704:19;;39204:68:0;21328:401:1;39204:68:0;-1:-1:-1;;;;;39291:16:0;;39283:64;;;;-1:-1:-1;;;39283:64:0;;21936:2:1;39283:64:0;;;21918:21:1;21975:2;21955:18;;;21948:30;22014:34;21994:18;;;21987:62;-1:-1:-1;;;22065:18:1;;;22058:33;22108:19;;39283:64:0;21734:399:1;39283:64:0;39375:1;39366:6;:10;39358:64;;;;-1:-1:-1;;;39358:64:0;;22340:2:1;39358:64:0;;;22322:21:1;22379:2;22359:18;;;22352:30;22418:34;22398:18;;;22391:62;-1:-1:-1;;;22469:18:1;;;22462:39;22518:19;;39358:64:0;22138:405:1;39358:64:0;-1:-1:-1;;;;;39442:16:0;;;;;;:10;:16;;;;;;;;39441:17;:36;;;;-1:-1:-1;;;;;;39463:14:0;;;;;;:10;:14;;;;;;;;39462:15;39441:36;39433:71;;;;-1:-1:-1;;;39433:71:0;;22750:2:1;39433:71:0;;;22732:21:1;22789:2;22769:18;;;22762:30;-1:-1:-1;;;22808:18:1;;;22801:51;22869:18;;39433:71:0;22548:345:1;39433:71:0;39517:16;:14;:16::i;:::-;39546:28;39577:24;39595:4;39577:9;:24::i;:::-;39616:12;;39546:55;;-1:-1:-1;39616:12:0;;:40;;;;;39655:1;39632:20;:24;39616:40;39612:492;;;39686:16;39705:33;39717:20;39705:11;:33::i;:::-;39792:25;;39686:52;;-1:-1:-1;39780:37:0;;;;;;;39854:57;;-1:-1:-1;39895:16:0;;;;;;;39894:17;39854:57;:110;;;;-1:-1:-1;;;;;;39933:31:0;;;;;;:25;:31;;;;;;;;39932:32;39854:110;:152;;;;-1:-1:-1;39985:21:0;;;;;;;39854:152;39832:261;;;40041:36;40056:20;40041:14;:36::i;:::-;39657:447;;39612:492;-1:-1:-1;;;;;40151:24:0;;40116:12;40151:24;;;:18;:24;;;;;;40131:4;;40151:24;;;:50;;-1:-1:-1;;;;;;40179:22:0;;;;;;:18;:22;;;;;;;;40151:50;40148:70;;;-1:-1:-1;40213:5:0;40148:70;40229:38;40244:4;40249:2;40252:6;40259:7;40229:14;:38::i;3798:192::-;3884:7;3920:12;3912:6;;;;3904:29;;;;-1:-1:-1;;;3904:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3944:9:0;3956:5;3960:1;3956;:5;:::i;:::-;3944:17;3798:192;-1:-1:-1;;;;;3798:192:0:o;36625:163::-;36666:7;36687:15;36704;36723:19;:17;:19::i;:::-;36686:56;;-1:-1:-1;36686:56:0;-1:-1:-1;36760:20:0;36686:56;;36760:11;:20::i;:::-;36753:27;;;;36625:163;:::o;16152:211::-;16296:58;;;-1:-1:-1;;;;;23090:32:1;;16296:58:0;;;23072:51:1;23139:18;;;;23132:34;;;16296:58:0;;;;;;;;;;23045:18:1;;;;16296:58:0;;;;;;;;-1:-1:-1;;;;;16296:58:0;-1:-1:-1;;;16296:58:0;;;16269:86;;16289:5;;16269:19;:86::i;35411:419::-;35470:7;35479;35488;35497;35506;35515;35536:23;35561:12;35575:18;35597:20;35609:7;35597:11;:20::i;:::-;35535:82;;;;;;35629:15;35646:23;35671:12;35687:50;35699:7;35708:4;35714:10;35726;:8;:10::i;:::-;35687:11;:50::i;:::-;35628:109;;;;-1:-1:-1;35628:109:0;;-1:-1:-1;35788:15:0;;-1:-1:-1;35805:4:0;;-1:-1:-1;35811:10:0;;-1:-1:-1;35411:419:0;;-1:-1:-1;;;;;35411:419:0:o;21130:191::-;21204:16;21223:6;;-1:-1:-1;;;;;21240:17:0;;;-1:-1:-1;;;;;;21240:17:0;;;;;;21273:40;;21223:6;;;;;;;21273:40;;21204:16;21273:40;21193:128;21130:191;:::o;38075:340::-;38121:7;;:12;:34;;;;-1:-1:-1;38137:13:0;;:18;38121:34;:56;;;;-1:-1:-1;38159:13:0;;:18;38121:56;38118:68;;;38075:340::o;38118:68::-;38224:7;;;38206:15;:25;38266:13;;;38242:21;:37;38314:13;;;38290:21;:37;-1:-1:-1;38340:11:0;;;;38362:17;;;;38390;38075:340::o;29445:181::-;29525:14;:12;:14::i;:::-;29550:42;7547:10;29574:9;29585:6;29550:9;:42::i;5824:278::-;5910:7;5945:12;5938:5;5930:28;;;;-1:-1:-1;;;5930:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5969:9:0;5981:5;5985:1;5981;:5;:::i;26656:180::-;26703:10;26715;26745:11;;;;;;;;;-1:-1:-1;;;;;26745:11:0;-1:-1:-1;;;;;26731:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26702:69;-1:-1:-1;;;;;26702:69:0;;;-1:-1:-1;;;;;26702:69:0;;;26802:1;26797:2;:6;:16;;;;;26812:1;26807:2;:6;26797:16;:31;;26823:5;26797:31;;;26816:4;26797:31;26782:12;:46;;-1:-1:-1;;26782:46:0;;;;;;;;;;-1:-1:-1;;26656:180:0:o;40283:1209::-;24504:16;:23;;-1:-1:-1;;24504:23:0;;;;;40416:22:::1;::::0;40389::::1;::::0;24504:23;;40389:50:::1;::::0;:22;:26:::1;:50::i;:::-;40368:71:::0;-1:-1:-1;40454:15:0;40450:28:::1;;40471:7;;;40450:28;40488:20;40511:64;40564:10;40511:48;40536:22;;40511:20;:24;;:48;;;;:::i;:::-;:52:::0;::::1;:64::i;:::-;40488:87:::0;-1:-1:-1;40586:20:0::1;40609:38;:20:::0;40488:87;40609:24:::1;:38::i;:::-;40586:61:::0;-1:-1:-1;40658:12:0::1;40673:19;40586:61:::0;40690:1:::1;40673:16;:19::i;:::-;40658:34:::0;-1:-1:-1;40703:17:0::1;40723:22;:12:::0;40658:34;40723:16:::1;:22::i;:::-;40703:42:::0;-1:-1:-1;40783:21:0::1;40758:22;40832;:4:::0;40841:12;40832:8:::1;:22::i;:::-;40815:39;;40865:24;40882:6;40865:16;:24::i;:::-;40902:18;40923:41;:21;40949:14:::0;40923:25:::1;:41::i;:::-;40902:62:::0;-1:-1:-1;40975:22:0::1;41028:6:::0;41000:25:::1;41013:12:::0;40902:62;41000:25:::1;:::i;:::-;:34;;;;:::i;:::-;41053:15;::::0;41045:49:::1;::::0;40975:59;;-1:-1:-1;;;;;;41053:15:0::1;::::0;41045:49;::::1;;;::::0;40975:59;;41053:15:::1;41045:49:::0;41053:15;41045:49;40975:59;41053:15;41045:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;41105:28:0::1;41119:14:::0;41105:28;::::1;:::i;:::-;;;41146:35;41159:9;41170:10;41146:12;:35::i;:::-;41242:22;;41227:12;:37;:81;;41296:12;41271:22;;:37;;;;:::i;:::-;41227:81;;;41267:1;41227:81;41202:22;:106:::0;41359:22:::1;::::0;41344:37;::::1;:81;;41413:12;41388:22;;:37;;;;:::i;:::-;41344:81;;;41384:1;41344:81;41319:22;:106:::0;41441:43:::1;::::0;;24027:25:1;;;24083:2;24068:18;;24061:34;;;24111:18;;;24104:34;;;41441:43:0::1;::::0;24015:2:1;24000:18;41441:43:0::1;;;;;;;40357:1135;;;;;;;;;24538:1;-1:-1:-1::0;24550:16:0;:24;;-1:-1:-1;;24550:24:0;;;40283:1209::o;42357:1063::-;42468:8;;;;42464:65;;19906:7;19933:6;-1:-1:-1;;;;;42486:17:0;;;19933:6;;42486:17;42478:51;;;;-1:-1:-1;;;42478:51:0;;24351:2:1;42478:51:0;;;24333:21:1;24390:2;24370:18;;;24363:30;-1:-1:-1;;;24409:18:1;;;24402:51;24470:18;;42478:51:0;24149:345:1;42478:51:0;42540:36;42558:6;42566:9;42540:17;:36::i;:::-;42591:7;42587:27;;42600:14;:12;:14::i;:::-;42674:12;;;;:33;;;;-1:-1:-1;42691:16:0;;;;;;;42690:17;42674:33;:71;;;;-1:-1:-1;;;;;;42712:33:0;;;;;;:25;:33;;;;;;;;42711:34;42674:71;42670:217;;;42761:114;42776:6;42784:90;42858:15;;42784:69;42839:13;;42823;;42813:7;;42795:15;;:25;;;;:::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;:::-;42784:6;;:10;:69::i;:90::-;42761:14;:114::i;:::-;-1:-1:-1;;;;;42901:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42925:22:0;;;;;;:11;:22;;;;;;;;42924:23;42901:46;42897:467;;;42964:48;42986:6;42994:9;43005:6;42964:21;:48::i;:::-;42897:467;;;-1:-1:-1;;;;;43035:19:0;;;;;;:11;:19;;;;;;;;43034:20;:46;;;;-1:-1:-1;;;;;;43058:22:0;;;;;;:11;:22;;;;;;;;43034:46;43030:334;;;43097:46;43117:6;43125:9;43136:6;43097:19;:46::i;43030:334::-;-1:-1:-1;;;;;43165:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43188:22:0;;;;;;:11;:22;;;;;;;;43165:45;43161:203;;;43227:48;43249:6;43257:9;43268:6;43227:21;:48::i;43161:203::-;43308:44;43326:6;43334:9;43345:6;43308:17;:44::i;:::-;43388:7;43384:28;;43397:15;38481;;38471:7;:25;38523:21;;38507:13;:37;38571:21;;38555:13;:37;38427:173;43397:15;42357:1063;;;;:::o;36796:561::-;36893:7;;36929;;36846;;;;;36953:289;36977:9;:16;36973:20;;36953:289;;;37043:7;37019;:21;37027:9;37037:1;37027:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37027:12:0;37019:21;;;;;;;;;;;;;:31;;:66;;;37078:7;37054;:21;37062:9;37072:1;37062:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37062:12:0;37054:21;;;;;;;;;;;;;:31;37019:66;37015:97;;;37095:7;;37104;;37087:25;;;;;;;36796:561;;:::o;37015:97::-;37137:34;37149:7;:21;37157:9;37167:1;37157:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37157:12:0;37149:21;;;;;;;;;;;;;37137:7;;:11;:34::i;:::-;37127:44;;37196:34;37208:7;:21;37216:9;37226:1;37216:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37216:12:0;37208:21;;;;;;;;;;;;;37196:7;;:11;:34::i;:::-;37186:44;-1:-1:-1;36995:3:0;;;;:::i;:::-;;;;36953:289;;;-1:-1:-1;37278:7:0;;37266;;:20;;:11;:20::i;:::-;37256:7;:30;37252:61;;;37296:7;;37305;;37288:25;;;;;;36796:561;;:::o;37252:61::-;37332:7;;37341;;-1:-1:-1;36796:561:0;-1:-1:-1;36796:561:0:o;18725:716::-;19149:23;19175:69;19203:4;19175:69;;;;;;;;;;;;;;;;;19183:5;-1:-1:-1;;;;;19175:27:0;;;:69;;;;;:::i;:::-;19259:17;;19149:95;;-1:-1:-1;19259:21:0;19255:179;;19356:10;19345:30;;;;;;;;;;;;:::i;:::-;19337:85;;;;-1:-1:-1;;;19337:85:0;;24951:2:1;19337:85:0;;;24933:21:1;24990:2;24970:18;;;24963:30;25029:34;25009:18;;;25002:62;-1:-1:-1;;;25080:18:1;;;25073:40;25130:19;;19337:85:0;24749:406:1;35838:342:0;35898:7;35907;35916;35936:12;35951:24;35967:7;35951:15;:24::i;:::-;35936:39;;35986:18;36007:42;36041:7;36007:33;:42::i;:::-;35986:63;-1:-1:-1;36060:23:0;36086:33;35986:63;36086:17;:7;36098:4;36086:11;:17::i;:::-;:21;;:33::i;:::-;36060:59;36155:4;;-1:-1:-1;36161:10:0;;-1:-1:-1;35838:342:0;;-1:-1:-1;;;35838:342:0:o;36188:429::-;36303:7;;;;36359:24;:7;36371:11;36359;:24::i;:::-;36341:42;-1:-1:-1;36394:12:0;36409:21;:4;36418:11;36409:8;:21::i;:::-;36394:36;-1:-1:-1;36441:18:0;36462:27;:10;36477:11;36462:14;:27::i;:::-;36441:48;-1:-1:-1;36500:23:0;36526:33;36441:48;36526:17;:7;36538:4;36526:11;:17::i;:33::-;36578:7;;;;-1:-1:-1;36604:4:0;;-1:-1:-1;36188:429:0;;-1:-1:-1;;;;;;;36188:429:0:o;41500:475::-;41590:16;;;41604:1;41590:16;;;;;;;;41566:21;;41590:16;;;;;;;;;;-1:-1:-1;41590:16:0;41566:40;;41635:4;41617;41622:1;41617:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41617:23:0;;;-1:-1:-1;;;;;41617:23:0;;;;;41661:15;-1:-1:-1;;;;;41661:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41651:4;41656:1;41651:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;41651:32:0;;;-1:-1:-1;;;;;41651:32:0;;;;;41696:62;41713:4;41728:15;41746:11;41696:8;:62::i;:::-;41771:196;;-1:-1:-1;;;41771:196:0;;-1:-1:-1;;;;;41771:15:0;:66;;;;:196;;41852:11;;41878:1;;41894:4;;41921;;41941:15;;41771:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41555:420;41500:475;:::o;41983:366::-;42064:62;42081:4;42096:15;42114:11;42064:8;:62::i;:::-;42137:204;;-1:-1:-1;;;42137:204:0;;42209:4;42137:204;;;26088:34:1;;;26138:18;;;26131:34;;;42255:1:0;26181:18:1;;;26174:34;;;26224:18;;;26217:34;26267:19;;;26260:44;42315:15:0;26320:19:1;;;26313:35;42137:15:0;-1:-1:-1;;;;;42137:31:0;;;;42176:9;;26022:19:1;;42137:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43428:604::-;-1:-1:-1;;;;;43504:31:0;;;;;;:25;:31;;;;;;;;43500:525;;;43562:10;;43552:7;:20;43603:16;;43587:13;:32;43650:16;;43634:13;:32;31293:327:::1;31152:475:::0;:::o;43500:525::-;-1:-1:-1;;;;;43688:29:0;;;;;;:25;:29;;;;;;;;43684:341;;;43744:11;;43734:7;:21;43786:17;;43770:13;:33;43834:17;;43818:13;:33;31293:327:::1;31152:475:::0;:::o;43684:341::-;43894:15;;43884:7;:25;43940:21;;43924:13;:37;43992:21;;43976:13;:37;43428:604;;:::o;51847:791::-;-1:-1:-1;;;;;51929:13:0;;;;;;:7;:13;;;;;:24;;;;;;;;;:82;;-1:-1:-1;51959:18:0;;;;51958:19;:52;;;;-1:-1:-1;;;;;;51982:13:0;;;;;;:7;:13;;;;;:28;;;;;51981:29;51958:52;51929:150;;;-1:-1:-1;52017:29:0;;;;;;;52016:30;:62;;;;-1:-1:-1;;;;;;52050:13:0;;;;;;:7;:13;;;;;:28;;;;;52016:62;51925:188;;;51847:791;;:::o;51925:188::-;52123:16;52142:24;52154:11;52142;:24::i;:::-;-1:-1:-1;;;;;52177:13:0;;;;;;:7;:13;;;;;;;:28;;;;:50;;;;;;;;;;;;;52211:15;52177:50;;;52238:40;;;;;;;;;;;;;;;;;52123:43;;-1:-1:-1;52320:23:0;52185:4;52320:17;:23::i;:::-;-1:-1:-1;;;;;52379:13:0;;52356:20;52379:13;;;:7;:13;;;;;:28;;;52289:54;;-1:-1:-1;52356:20:0;52379:28;;:67;;52435:11;;52379:67;;;52410:22;;52379:67;-1:-1:-1;;;;;52473:13:0;;52457;52473;;;:7;:13;;;;;:22;;;52356:90;;-1:-1:-1;52457:13:0;52473:27;:67;;-1:-1:-1;;;;;52518:13:0;;;;;;:7;:13;;;;;:22;;;52473:67;;;52503:12;52473:67;52457:83;;52583:5;52559:20;:29;;52551:79;;;;-1:-1:-1;;;52551:79:0;;26872:2:1;52551:79:0;;;26854:21:1;26911:2;26891:18;;;26884:30;26950:34;26930:18;;;26923:62;-1:-1:-1;;;27001:18:1;;;26994:35;27046:19;;52551:79:0;26670:401:1;45672:681:0;45775:15;45792:23;45817:12;45831:23;45856:12;45870:18;45892:19;45903:7;45892:10;:19::i;:::-;-1:-1:-1;;;;;45940:15:0;;;;;;:7;:15;;;;;;45774:137;;-1:-1:-1;45774:137:0;;-1:-1:-1;45774:137:0;;-1:-1:-1;45774:137:0;-1:-1:-1;45774:137:0;-1:-1:-1;45774:137:0;-1:-1:-1;45940:28:0;;45960:7;45940:19;:28::i;:::-;-1:-1:-1;;;;;45922:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45997:7;:15;;;;:28;;46017:7;45997:19;:28::i;:::-;-1:-1:-1;;;;;45979:15:0;;;;;;;:7;:15;;;;;;:46;;;;46057:18;;;;;;;:39;;46080:15;46057:22;:39::i;:::-;-1:-1:-1;;;;;46036:18:0;;;;;;:7;:18;;;;;:60;46110:26;46125:10;46110:14;:26::i;:::-;46147:23;46159:4;46165;46147:11;:23::i;:::-;46181:25;46195:10;46181:13;:25::i;:::-;46221:14;;46217:68;;46242:43;;2217:25:1;;;46267:4:0;;-1:-1:-1;;;;;46242:43:0;;;;;2205:2:1;2190:18;46242:43:0;;;;;;;46217:68;46318:9;-1:-1:-1;;;;;46301:44:0;46310:6;-1:-1:-1;;;;;46301:44:0;;46329:15;46301:44;;;;2217:25:1;;2205:2;2190:18;;2071:177;46301:44:0;;;;;;;;45763:590;;;;;;45672:681;;;:::o;44963:701::-;45064:15;45081:23;45106:12;45120:23;45145:12;45159:18;45181:19;45192:7;45181:10;:19::i;:::-;-1:-1:-1;;;;;45229:15:0;;;;;;:7;:15;;;;;;45063:137;;-1:-1:-1;45063:137:0;;-1:-1:-1;45063:137:0;;-1:-1:-1;45063:137:0;-1:-1:-1;45063:137:0;-1:-1:-1;45063:137:0;-1:-1:-1;45229:28:0;;45063:137;45229:19;:28::i;:::-;-1:-1:-1;;;;;45211:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45289:18;;;;;:7;:18;;;;;:39;;45312:15;45289:22;:39::i;:::-;-1:-1:-1;;;;;45268:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45360:7;:18;;;;:39;;45383:15;45360:22;:39::i;31635:757::-;31738:15;31755:23;31780:12;31794:23;31819:12;31833:18;31855:19;31866:7;31855:10;:19::i;:::-;-1:-1:-1;;;;;31903:15:0;;;;;;:7;:15;;;;;;31737:137;;-1:-1:-1;31737:137:0;;-1:-1:-1;31737:137:0;;-1:-1:-1;31737:137:0;-1:-1:-1;31737:137:0;-1:-1:-1;31737:137:0;-1:-1:-1;31903:28:0;;31923:7;31903:19;:28::i;:::-;-1:-1:-1;;;;;31885:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31960:7;:15;;;;:28;;31980:7;31960:19;:28::i;44040:617::-;44139:15;44156:23;44181:12;44195:23;44220:12;44234:18;44256:19;44267:7;44256:10;:19::i;:::-;-1:-1:-1;;;;;44304:15:0;;;;;;:7;:15;;;;;;44138:137;;-1:-1:-1;44138:137:0;;-1:-1:-1;44138:137:0;;-1:-1:-1;44138:137:0;-1:-1:-1;44138:137:0;-1:-1:-1;44138:137:0;-1:-1:-1;44304:28:0;;44138:137;44304:19;:28::i;11566:229::-;11703:12;11735:52;11757:6;11765:4;11771:1;11774:12;11735:21;:52::i;:::-;11728:59;11566:229;-1:-1:-1;;;;11566:229:0:o;37736:140::-;37800:7;37827:41;37852:15;;37827:20;37839:7;;37827;:11;;:20;;;;:::i;37884:183::-;37966:7;37993:66;38043:15;;37993:45;38005:32;38023:13;;38005;;:17;;:32;;;;:::i;:::-;37993:7;;:11;:45::i;37369:355::-;37432:19;37455:10;:8;:10::i;:::-;37432:33;-1:-1:-1;37476:18:0;37497:27;:10;37432:33;37497:14;:27::i;:::-;37576:4;37560:22;;;;:7;:22;;;;;;37476:48;;-1:-1:-1;37560:38:0;;37476:48;37560:26;:38::i;:::-;37551:4;37535:22;;;;:7;:22;;;;;;;;:63;;;;37612:11;:26;;;;;;37609:107;;;37694:4;37678:22;;;;:7;:22;;;;;;:38;;37705:10;37678:26;:38::i;:::-;37669:4;37653:22;;;;:7;:22;;;;;:63;37421:303;;37369:355;:::o;35256:147::-;35334:7;;:17;;35346:4;35334:11;:17::i;:::-;35324:7;:27;35375:10;;:20;;35390:4;35375:14;:20::i;:::-;35362:10;:33;-1:-1:-1;;35256:147:0:o;46361:379::-;46423:18;46444:32;46462:13;;46444;;:17;;:32;;;;:::i;:::-;46423:53;-1:-1:-1;46491:15:0;46487:28;;46508:7;46361:379;:::o;46487:28::-;46550:73;46577:45;46611:10;46577:29;46592:13;;46577:10;:14;;:29;;;;:::i;:45::-;46550:22;;;:26;:73::i;:::-;46525:22;:98;46701:13;;46659:73;;46686:45;;46720:10;;46686:29;;:10;;:14;:29::i;:45::-;46659:22;;;:26;:73::i;:::-;46634:22;:98;-1:-1:-1;;46361:379:0:o;12686:510::-;12856:12;12914:5;12889:21;:30;;12881:81;;;;-1:-1:-1;;;12881:81:0;;27278:2:1;12881:81:0;;;27260:21:1;27317:2;27297:18;;;27290:30;27356:34;27336:18;;;27329:62;-1:-1:-1;;;27407:18:1;;;27400:36;27453:19;;12881:81:0;27076:402:1;12881:81:0;-1:-1:-1;;;;;9116:19:0;;;12973:60;;;;-1:-1:-1;;;12973:60:0;;27685:2:1;12973:60:0;;;27667:21:1;27724:2;27704:18;;;27697:30;27763:31;27743:18;;;27736:59;27812:18;;12973:60:0;27483:353:1;12973:60:0;13047:12;13061:23;13088:6;-1:-1:-1;;;;;13088:11:0;13107:5;13114:4;13088:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13046:73;;;;13137:51;13154:7;13163:10;13175:12;13137:16;:51::i;:::-;13130:58;12686:510;-1:-1:-1;;;;;;;12686:510:0:o;15372:712::-;15522:12;15551:7;15547:530;;;-1:-1:-1;15582:10:0;15575:17;;15547:530;15696:17;;:21;15692:374;;15894:10;15888:17;15955:15;15942:10;15938:2;15934:19;15927:44;15692:374;16037:12;16030:20;;-1:-1:-1;;;16030:20:0;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:180::-;461:6;514:2;502:9;493:7;489:23;485:32;482:52;;;530:1;527;520:12;482:52;-1:-1:-1;553:23:1;;402:180;-1:-1:-1;402:180:1:o;587:258::-;659:1;669:113;683:6;680:1;677:13;669:113;;;759:11;;;753:18;740:11;;;733:39;705:2;698:10;669:113;;;800:6;797:1;794:13;791:48;;;-1:-1:-1;;835:1:1;817:16;;810:27;587:258::o;850:383::-;999:2;988:9;981:21;962:4;1031:6;1025:13;1074:6;1069:2;1058:9;1054:18;1047:34;1090:66;1149:6;1144:2;1133:9;1129:18;1124:2;1116:6;1112:15;1090:66;:::i;:::-;1217:2;1196:15;-1:-1:-1;;1192:29:1;1177:45;;;;1224:2;1173:54;;850:383;-1:-1:-1;;850:383:1:o;1238:315::-;1306:6;1314;1367:2;1355:9;1346:7;1342:23;1338:32;1335:52;;;1383:1;1380;1373:12;1335:52;1422:9;1409:23;1441:31;1466:5;1441:31;:::i;:::-;1491:5;1543:2;1528:18;;;;1515:32;;-1:-1:-1;;;1238:315:1:o;1750:316::-;1827:6;1835;1843;1896:2;1884:9;1875:7;1871:23;1867:32;1864:52;;;1912:1;1909;1902:12;1864:52;-1:-1:-1;;1935:23:1;;;2005:2;1990:18;;1977:32;;-1:-1:-1;2056:2:1;2041:18;;;2028:32;;1750:316;-1:-1:-1;1750:316:1:o;2487:367::-;2550:8;2560:6;2614:3;2607:4;2599:6;2595:17;2591:27;2581:55;;2632:1;2629;2622:12;2581:55;-1:-1:-1;2655:20:1;;2698:18;2687:30;;2684:50;;;2730:1;2727;2720:12;2684:50;2767:4;2759:6;2755:17;2743:29;;2827:3;2820:4;2810:6;2807:1;2803:14;2795:6;2791:27;2787:38;2784:47;2781:67;;;2844:1;2841;2834:12;2781:67;2487:367;;;;;:::o;2859:437::-;2945:6;2953;3006:2;2994:9;2985:7;2981:23;2977:32;2974:52;;;3022:1;3019;3012:12;2974:52;3062:9;3049:23;3095:18;3087:6;3084:30;3081:50;;;3127:1;3124;3117:12;3081:50;3166:70;3228:7;3219:6;3208:9;3204:22;3166:70;:::i;:::-;3255:8;;3140:96;;-1:-1:-1;2859:437:1;-1:-1:-1;;;;2859:437:1:o;3301:456::-;3378:6;3386;3394;3447:2;3435:9;3426:7;3422:23;3418:32;3415:52;;;3463:1;3460;3453:12;3415:52;3502:9;3489:23;3521:31;3546:5;3521:31;:::i;:::-;3571:5;-1:-1:-1;3628:2:1;3613:18;;3600:32;3641:33;3600:32;3641:33;:::i;:::-;3301:456;;3693:7;;-1:-1:-1;;;3747:2:1;3732:18;;;;3719:32;;3301:456::o;3762:118::-;3848:5;3841:13;3834:21;3827:5;3824:32;3814:60;;3870:1;3867;3860:12;3885:241;3941:6;3994:2;3982:9;3973:7;3969:23;3965:32;3962:52;;;4010:1;4007;4000:12;3962:52;4049:9;4036:23;4068:28;4090:5;4068:28;:::i;4320:401::-;4401:6;4409;4462:2;4450:9;4441:7;4437:23;4433:32;4430:52;;;4478:1;4475;4468:12;4430:52;4517:9;4504:23;4536:31;4561:5;4536:31;:::i;:::-;4586:5;-1:-1:-1;4643:2:1;4628:18;;4615:32;4656:33;4615:32;4656:33;:::i;:::-;4708:7;4698:17;;;4320:401;;;;;:::o;4726:309::-;4791:6;4799;4852:2;4840:9;4831:7;4827:23;4823:32;4820:52;;;4868:1;4865;4858:12;4820:52;4904:9;4891:23;4881:33;;4964:2;4953:9;4949:18;4936:32;4977:28;4999:5;4977:28;:::i;5040:773::-;5162:6;5170;5178;5186;5239:2;5227:9;5218:7;5214:23;5210:32;5207:52;;;5255:1;5252;5245:12;5207:52;5295:9;5282:23;5324:18;5365:2;5357:6;5354:14;5351:34;;;5381:1;5378;5371:12;5351:34;5420:70;5482:7;5473:6;5462:9;5458:22;5420:70;:::i;:::-;5509:8;;-1:-1:-1;5394:96:1;-1:-1:-1;5597:2:1;5582:18;;5569:32;;-1:-1:-1;5613:16:1;;;5610:36;;;5642:1;5639;5632:12;5610:36;;5681:72;5745:7;5734:8;5723:9;5719:24;5681:72;:::i;:::-;5040:773;;;;-1:-1:-1;5772:8:1;-1:-1:-1;;;;5040:773:1:o;5818:435::-;5871:3;5909:5;5903:12;5936:6;5931:3;5924:19;5962:4;5991:2;5986:3;5982:12;5975:19;;6028:2;6021:5;6017:14;6049:1;6059:169;6073:6;6070:1;6067:13;6059:169;;;6134:13;;6122:26;;6168:12;;;;6203:15;;;;6095:1;6088:9;6059:169;;;-1:-1:-1;6244:3:1;;5818:435;-1:-1:-1;;;;;5818:435:1:o;6258:867::-;6449:2;6438:9;6431:21;6412:4;6487:6;6481:13;6530:4;6525:2;6514:9;6510:18;6503:32;6558:63;6616:3;6605:9;6601:19;6587:12;6558:63;:::i;:::-;6544:77;;6670:2;6662:6;6658:15;6652:22;6742:2;6738:7;6726:9;6718:6;6714:22;6710:36;6705:2;6694:9;6690:18;6683:64;6770:52;6815:6;6799:14;6770:52;:::i;:::-;6756:66;;;6876:2;6868:6;6864:15;6858:22;6853:2;6842:9;6838:18;6831:50;6936:2;6928:6;6924:15;6918:22;6912:3;6901:9;6897:19;6890:51;7010:3;7002:6;6998:16;6992:23;6985:31;6978:39;6972:3;6961:9;6957:19;6950:68;7088:3;7080:6;7076:16;7070:23;7063:31;7056:39;7049:4;7038:9;7034:20;7027:69;7113:6;7105:14;;;6258:867;;;;:::o;7598:382::-;7663:6;7671;7724:2;7712:9;7703:7;7699:23;7695:32;7692:52;;;7740:1;7737;7730:12;7692:52;7779:9;7766:23;7798:31;7823:5;7798:31;:::i;:::-;7848:5;-1:-1:-1;7905:2:1;7890:18;;7877:32;7918:30;7877:32;7918:30;:::i;8378:1088::-;8536:6;8544;8552;8560;8568;8576;8629:2;8617:9;8608:7;8604:23;8600:32;8597:52;;;8645:1;8642;8635:12;8597:52;8685:9;8672:23;8714:18;8755:2;8747:6;8744:14;8741:34;;;8771:1;8768;8761:12;8741:34;8810:70;8872:7;8863:6;8852:9;8848:22;8810:70;:::i;:::-;8899:8;;-1:-1:-1;8784:96:1;-1:-1:-1;8987:2:1;8972:18;;8959:32;;-1:-1:-1;9003:16:1;;;9000:36;;;9032:1;9029;9022:12;9000:36;9071:72;9135:7;9124:8;9113:9;9109:24;9071:72;:::i;:::-;9162:8;;-1:-1:-1;9045:98:1;-1:-1:-1;9250:2:1;9235:18;;9222:32;;-1:-1:-1;9266:16:1;;;9263:36;;;9295:1;9292;9285:12;9263:36;;9334:72;9398:7;9387:8;9376:9;9372:24;9334:72;:::i;:::-;8378:1088;;;;-1:-1:-1;8378:1088:1;;-1:-1:-1;8378:1088:1;;9425:8;;8378:1088;-1:-1:-1;;;8378:1088:1:o;9471:356::-;9673:2;9655:21;;;9692:18;;;9685:30;9751:34;9746:2;9731:18;;9724:62;9818:2;9803:18;;9471:356::o;9832:380::-;9911:1;9907:12;;;;9954;;;9975:61;;10029:4;10021:6;10017:17;10007:27;;9975:61;10082:2;10074:6;10071:14;10051:18;10048:38;10045:161;;;10128:10;10123:3;10119:20;10116:1;10109:31;10163:4;10160:1;10153:15;10191:4;10188:1;10181:15;10045:161;;9832:380;;;:::o;10217:338::-;10419:2;10401:21;;;10458:2;10438:18;;;10431:30;-1:-1:-1;;;10492:2:1;10477:18;;10470:44;10546:2;10531:18;;10217:338::o;10560:127::-;10621:10;10616:3;10612:20;10609:1;10602:31;10652:4;10649:1;10642:15;10676:4;10673:1;10666:15;10692:127;10753:10;10748:3;10744:20;10741:1;10734:31;10784:4;10781:1;10774:15;10808:4;10805:1;10798:15;10824:135;10863:3;-1:-1:-1;;10884:17:1;;10881:43;;;10904:18;;:::i;:::-;-1:-1:-1;10951:1:1;10940:13;;10824:135::o;11727:125::-;11767:4;11795:1;11792;11789:8;11786:34;;;11800:18;;:::i;:::-;-1:-1:-1;11837:9:1;;11727:125::o;11857:127::-;11918:10;11913:3;11909:20;11906:1;11899:31;11949:4;11946:1;11939:15;11973:4;11970:1;11963:15;11989:356;12191:2;12173:21;;;12210:18;;;12203:30;12269:34;12264:2;12249:18;;12242:62;12336:2;12321:18;;11989:356::o;12350:184::-;12420:6;12473:2;12461:9;12452:7;12448:23;12444:32;12441:52;;;12489:1;12486;12479:12;12441:52;-1:-1:-1;12512:16:1;;12350:184;-1:-1:-1;12350:184:1:o;13607:422::-;13696:1;13739:5;13696:1;13753:270;13774:7;13764:8;13761:21;13753:270;;;13833:4;13829:1;13825:6;13821:17;13815:4;13812:27;13809:53;;;13842:18;;:::i;:::-;13892:7;13882:8;13878:22;13875:55;;;13912:16;;;;13875:55;13991:22;;;;13951:15;;;;13753:270;;;13757:3;13607:422;;;;;:::o;14034:806::-;14083:5;14113:8;14103:80;;-1:-1:-1;14154:1:1;14168:5;;14103:80;14202:4;14192:76;;-1:-1:-1;14239:1:1;14253:5;;14192:76;14284:4;14302:1;14297:59;;;;14370:1;14365:130;;;;14277:218;;14297:59;14327:1;14318:10;;14341:5;;;14365:130;14402:3;14392:8;14389:17;14386:43;;;14409:18;;:::i;:::-;-1:-1:-1;;14465:1:1;14451:16;;14480:5;;14277:218;;14579:2;14569:8;14566:16;14560:3;14554:4;14551:13;14547:36;14541:2;14531:8;14528:16;14523:2;14517:4;14514:12;14510:35;14507:77;14504:159;;;-1:-1:-1;14616:19:1;;;14648:5;;14504:159;14695:34;14720:8;14714:4;14695:34;:::i;:::-;14765:6;14761:1;14757:6;14753:19;14744:7;14741:32;14738:58;;;14776:18;;:::i;:::-;14814:20;;14034:806;-1:-1:-1;;;14034:806:1:o;14845:140::-;14903:5;14932:47;14973:4;14963:8;14959:19;14953:4;14932:47;:::i;14990:168::-;15030:7;15096:1;15092;15088:6;15084:14;15081:1;15078:21;15073:1;15066:9;15059:17;15055:45;15052:71;;;15103:18;;:::i;:::-;-1:-1:-1;15143:9:1;;14990:168::o;15163:128::-;15203:3;15234:1;15230:6;15227:1;15224:13;15221:39;;;15240:18;;:::i;:::-;-1:-1:-1;15276:9:1;;15163:128::o;15635:136::-;15674:3;15702:5;15692:39;;15711:18;;:::i;:::-;-1:-1:-1;;;15747:18:1;;15635:136::o;16478:127::-;16539:10;16534:3;16530:20;16527:1;16520:31;16570:4;16567:1;16560:15;16594:4;16591:1;16584:15;16610:251;16680:6;16733:2;16721:9;16712:7;16708:23;16704:32;16701:52;;;16749:1;16746;16739:12;16701:52;16781:9;16775:16;16800:31;16825:5;16800:31;:::i;16866:461::-;16919:3;16957:5;16951:12;16984:6;16979:3;16972:19;17010:4;17039:2;17034:3;17030:12;17023:19;;17076:2;17069:5;17065:14;17097:1;17107:195;17121:6;17118:1;17115:13;17107:195;;;17186:13;;-1:-1:-1;;;;;17182:39:1;17170:52;;17242:12;;;;17277:15;;;;17218:1;17136:9;17107:195;;17332:332;17539:6;17528:9;17521:25;17582:2;17577;17566:9;17562:18;17555:30;17502:4;17602:56;17654:2;17643:9;17639:18;17631:6;17602:56;:::i;17669:1105::-;17764:6;17795:2;17838;17826:9;17817:7;17813:23;17809:32;17806:52;;;17854:1;17851;17844:12;17806:52;17887:9;17881:16;17916:18;17957:2;17949:6;17946:14;17943:34;;;17973:1;17970;17963:12;17943:34;18011:6;18000:9;17996:22;17986:32;;18056:7;18049:4;18045:2;18041:13;18037:27;18027:55;;18078:1;18075;18068:12;18027:55;18107:2;18101:9;18129:2;18125;18122:10;18119:36;;;18135:18;;:::i;:::-;18181:2;18178:1;18174:10;18213:2;18207:9;18276:2;18272:7;18267:2;18263;18259:11;18255:25;18247:6;18243:38;18331:6;18319:10;18316:22;18311:2;18299:10;18296:18;18293:46;18290:72;;;18342:18;;:::i;:::-;18378:2;18371:22;18428:18;;;18462:15;;;;-1:-1:-1;18504:11:1;;;18500:20;;;18532:19;;;18529:39;;;18564:1;18561;18554:12;18529:39;18588:11;;;;18608:135;18624:6;18619:3;18616:15;18608:135;;;18690:10;;18678:23;;18641:12;;;;18721;;;;18608:135;;;18762:6;17669:1105;-1:-1:-1;;;;;;;;17669:1105:1:o;19540:217::-;19580:1;19606;19596:132;;19650:10;19645:3;19641:20;19638:1;19631:31;19685:4;19682:1;19675:15;19713:4;19710:1;19703:15;19596:132;-1:-1:-1;19742:9:1;;19540:217::o;23177:188::-;23256:13;;-1:-1:-1;;;;;23298:42:1;;23288:53;;23278:81;;23355:1;23352;23345:12;23278:81;23177:188;;;:::o;23370:450::-;23457:6;23465;23473;23526:2;23514:9;23505:7;23501:23;23497:32;23494:52;;;23542:1;23539;23532:12;23494:52;23565:40;23595:9;23565:40;:::i;:::-;23555:50;;23624:49;23669:2;23658:9;23654:18;23624:49;:::i;:::-;23614:59;;23716:2;23705:9;23701:18;23695:25;23760:10;23753:5;23749:22;23742:5;23739:33;23729:61;;23786:1;23783;23776:12;23729:61;23809:5;23799:15;;;23370:450;;;;;:::o;24499:245::-;24566:6;24619:2;24607:9;24598:7;24594:23;24590:32;24587:52;;;24635:1;24632;24625:12;24587:52;24667:9;24661:16;24686:28;24708:5;24686:28;:::i;25160:582::-;25459:6;25448:9;25441:25;25502:6;25497:2;25486:9;25482:18;25475:34;25545:3;25540:2;25529:9;25525:18;25518:31;25422:4;25566:57;25618:3;25607:9;25603:19;25595:6;25566:57;:::i;:::-;-1:-1:-1;;;;;25659:32:1;;;;25654:2;25639:18;;25632:60;-1:-1:-1;25723:3:1;25708:19;25701:35;25558:65;25160:582;-1:-1:-1;;;25160:582:1:o;26359:306::-;26447:6;26455;26463;26516:2;26504:9;26495:7;26491:23;26487:32;26484:52;;;26532:1;26529;26522:12;26484:52;26561:9;26555:16;26545:26;;26611:2;26600:9;26596:18;26590:25;26580:35;;26655:2;26644:9;26640:18;26634:25;26624:35;;26359:306;;;;;:::o;27841:274::-;27970:3;28008:6;28002:13;28024:53;28070:6;28065:3;28058:4;28050:6;28046:17;28024:53;:::i;:::-;28093:16;;;;;27841:274;-1:-1:-1;;27841:274:1:o
Swarm Source
ipfs://1140e2aa4b7d77556c803000404c078e9f1d6e6d87a4479e92f31bdde2910e9b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.