ERC-20
Overview
Max Total Supply
1,000,000,000 Candy
Holders
2,070
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
16,341 CandyValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CandyToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-19 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, 'Address: low-level call with value failed'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, 'Address: insufficient balance for call'); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract ERC20 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the bep token owner. */ function getOwner() external override view returns (address) { return owner(); } /** * @dev Returns the token name. */ function name() public override view returns (string memory) { return _name; } /** * @dev Returns the token decimals. */ function decimals() public override view returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() public override view returns (string memory) { return _symbol; } /** * @dev See {ERC20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {ERC20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[account]; } /** * @dev See {ERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {ERC20-allowance}. */ function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {ERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {ERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance') ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {ERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {ERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, 'ERC20: decreased allowance below zero') ); return true; } /** * @dev Destroys `amount` tokens from `msg.sender`, decreasing the total supply. * */ function burn(uint256 amount) public returns (bool) { _burn(_msgSender(), amount); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), 'ERC20: transfer from the zero address'); require(recipient != address(0), 'ERC20: transfer to the zero address'); _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount exceeds balance'); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), 'ERC20: mint to the zero address'); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), 'ERC20: burn from the zero address'); _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount exceeds balance'); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal { 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); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve( account, _msgSender(), _allowances[account][_msgSender()].sub(amount, 'ERC20: burn amount exceeds allowance') ); } } library SafeERC20 { using SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeERC20: decreased allowance below zero' ); _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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint tokenId, bytes calldata data ) external returns (bytes4); } interface INonfungiblePositionManager { struct MintParams { address token0; address token1; uint24 fee; int24 tickLower; int24 tickUpper; uint amount0Desired; uint amount1Desired; uint amount0Min; uint amount1Min; address recipient; uint deadline; } function mint( MintParams calldata params ) external payable returns (uint tokenId, uint128 liquidity, uint amount0, uint amount1); struct IncreaseLiquidityParams { uint tokenId; uint amount0Desired; uint amount1Desired; uint amount0Min; uint amount1Min; uint deadline; } function increaseLiquidity( IncreaseLiquidityParams calldata params ) external payable returns (uint128 liquidity, uint amount0, uint amount1); struct DecreaseLiquidityParams { uint tokenId; uint128 liquidity; uint amount0Min; uint amount1Min; uint deadline; } function decreaseLiquidity( DecreaseLiquidityParams calldata params ) external payable returns (uint amount0, uint amount1); struct CollectParams { uint tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } function collect( CollectParams calldata params ) external payable returns (uint amount0, uint amount1); } interface ISwapRouter { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint deadline; uint amountIn; uint amountOutMinimum; uint160 sqrtPriceLimitX96; } /// @notice Swaps amountIn of one token for as much as possible of another token /// @param params The parameters necessary for the swap, encoded as ExactInputSingleParams in calldata /// @return amountOut The amount of the received token function exactInputSingle( ExactInputSingleParams calldata params ) external payable returns (uint amountOut); struct ExactInputParams { bytes path; address recipient; uint deadline; uint amountIn; uint amountOutMinimum; } /// @notice Swaps amountIn of one token for as much as possible of another along the specified path /// @param params The parameters necessary for the multi-hop swap, encoded as ExactInputParams in calldata /// @return amountOut The amount of the received token function exactInput( ExactInputParams calldata params ) external payable returns (uint amountOut); } interface IUniRouterV2 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IWETH is IERC20 { function deposit() external payable; function withdraw(uint amount) external; } contract CandyToken is ERC20, IERC721Receiver { using SafeMath for uint256; using SafeERC20 for IERC20; address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IWETH weth = IWETH(WETH); int24 private constant MIN_TICK = -887272; int24 private constant MAX_TICK = -MIN_TICK; int24 private constant TICK_SPACING = 60; INonfungiblePositionManager public candySwapPositionManager; ISwapRouter public candySwapRouter; IUniRouterV2 public swapRouterV2; bool public v2Active = false; address public candySwapPool; bool private swapping; address payable public devmarketingWallet = payable(0x399Db7F59a79563a1dd4a687a0dEa41BbEaA2254); address payable public liquidityWallet = payable(0x92D41D83e9EAc685863645A4F05e8FdDE684c74f); uint256 public contractAmountToSwap = 100 ether; uint256 public devmarketingFeeOnBuy = 4; uint256 public liquidityFeeOnBuy = 1; uint256 public totalFeesOnBuy = 5; uint256 public devmarketingFeeOnSell = 4; uint256 public liquidityFeeOnSell = 1; uint256 public totalFeesOnSell = 5; uint256 public burnTaxOnSell = 0; uint256 public burnTaxOnBuy = 0; uint256 public devmarketingShare = 6; uint256 public liquidityShare = 4; uint256 public totalShare = devmarketingShare.add(liquidityShare); bool public SwapAndLiquifyEnabled = false; uint256 public maxTxAmount = 1000000000 * (10**18); // Initial Max Tx Amount uint256 public maxWalletAmount = 1000000000 * (10**18); // Initial Max Wallet Amount // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxAmounts; // getting fee addresses mapping(address => bool) public _isGetFees; // store addresses that are automated market maker pools. Any transfer to these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPools; uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } // Contract Events event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromMaxAmounts(address indexed account, bool isExcluded); event GetFee(address indexed account, bool isGetFee); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPool(address indexed pool, bool indexed value); event DevMarketingWalletUpdated( address indexed newDevMarketingWallet, address indexed oldDevMarketingWallet ); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event UpdateCandySwapRouter( address indexed newAddress, address indexed oldAddress ); event SwapAndLiquify( uint256 tokensSwapped, uint256 nativeReceived, uint256 tokensIntoLiqudity ); event UpdateSwapAndLiquify(bool value); event SetDevMarketingFee(uint256 onBuy, uint256 onSell); event SetLiquidityFee(uint256 onBuy, uint256 onSell); event SetContractAmountToSwap(uint256 contractAmountToSwap); event UpdateMaxTxAmount(uint256 txAmount); event UpdateMaxWalletAmount(uint256 walletAmount); constructor() public ERC20("Candy Swap", "Candy", 18) { _mint(owner(), 1000000000 * (10**18)); excludeFromFees(devmarketingWallet, true); excludeFromFees(address(this), true); excludeFromFees(owner(), true); excludeFromMaxAmounts(devmarketingWallet, true); excludeFromMaxAmounts(address(this), true); excludeFromMaxAmounts(owner(), true); _status = _NOT_ENTERED; } receive() external payable {} function updatePositionManager(address _manager) external onlyOwner { candySwapPositionManager = INonfungiblePositionManager(_manager); } function updateSwapRouter(address _router) external onlyOwner { candySwapRouter = ISwapRouter(_router); } function updateSwapRouterV2(address _routerV2) external onlyOwner { swapRouterV2 = IUniRouterV2(_routerV2); } function updateV2Active(bool _active) external onlyOwner { v2Active = _active; } function onERC721Received( address operator, address from, uint tokenId, bytes calldata ) external override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } function updateSwapAndLiquifiy(bool value) public onlyOwner { SwapAndLiquifyEnabled = value; emit UpdateSwapAndLiquify(value); } function setDevMarketingFee(uint256 _onBuy, uint256 _onSell) external onlyOwner { devmarketingFeeOnBuy = _onBuy; devmarketingFeeOnSell = _onSell; totalFeesOnBuy = devmarketingFeeOnBuy.add(liquidityFeeOnBuy); totalFeesOnSell = devmarketingFeeOnSell.add(liquidityFeeOnSell); uint256 maxFeeSell = 10 - burnTaxOnSell; uint256 maxFeeBuy = 10 - burnTaxOnBuy; require(totalFeesOnBuy <= maxFeeBuy, "Over-max-Fee"); require(totalFeesOnSell <= maxFeeSell, "Over-max-Fee"); emit SetDevMarketingFee(_onBuy, _onSell); } function setLiquidityFee(uint256 _onBuy, uint256 _onSell) external onlyOwner { liquidityFeeOnBuy = _onBuy; liquidityFeeOnSell = _onSell; totalFeesOnBuy = devmarketingFeeOnBuy.add(liquidityFeeOnBuy); totalFeesOnSell = devmarketingFeeOnSell.add(liquidityFeeOnSell); uint256 maxFeeSell = 10 - burnTaxOnSell; uint256 maxFeeBuy = 10 - burnTaxOnBuy; require(totalFeesOnBuy <= maxFeeBuy, "Over-max-Fee"); require(totalFeesOnSell <= maxFeeSell, "Over-max-Fee"); emit SetLiquidityFee(_onBuy, _onSell); } function setBurnTax(uint256 _onBuy, uint256 _onSell) external onlyOwner { burnTaxOnBuy = _onBuy; burnTaxOnSell = _onSell; uint256 maxFeeSell = 10 - burnTaxOnSell; uint256 maxFeeBuy = 10 - burnTaxOnBuy; require(totalFeesOnBuy <= maxFeeBuy, "Over-max-Fee"); require(totalFeesOnSell <= maxFeeSell, "Over-max-Fee"); } function updateShares(uint256 _devmarketing, uint256 _liquidity) external onlyOwner { devmarketingShare = _devmarketing; liquidityShare = _liquidity; totalShare = devmarketingShare.add(liquidityShare); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeFromMaxAmounts(address account, bool excluded) public onlyOwner { _isExcludedFromMaxAmounts[account] = excluded; emit ExcludeFromMaxAmounts(account, excluded); } function setFeeAccount(address account, bool isGetFee) public onlyOwner { _isGetFees[account] = isGetFee; emit GetFee(account, isGetFee); } function excludeMultipleAccountsFromFees( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPool(address pool, bool value) public onlyOwner { _setAutomatedMarketMakerPool(pool, value); } function _setAutomatedMarketMakerPool(address pool, bool value) private { automatedMarketMakerPools[pool] = value; emit SetAutomatedMarketMakerPool(pool, value); } function setContractAmountToSwap(uint256 _amount) public onlyOwner { contractAmountToSwap = _amount; emit SetContractAmountToSwap(contractAmountToSwap); } function updateDevMarketingWallet(address newDevMarketingWallet) public onlyOwner { excludeFromFees(newDevMarketingWallet, true); excludeFromFees(devmarketingWallet, false); emit DevMarketingWalletUpdated( newDevMarketingWallet, devmarketingWallet ); devmarketingWallet = payable(newDevMarketingWallet); } function updateLiquidityWallet(address newLiquidityWallet) public onlyOwner { excludeFromFees(newLiquidityWallet, true); excludeFromFees(liquidityWallet, false); emit LiquidityWalletUpdated( newLiquidityWallet, liquidityWallet ); liquidityWallet = payable(newLiquidityWallet); } function updateMaxTxAmount(uint256 _amount) public onlyOwner { maxTxAmount = _amount; emit UpdateMaxTxAmount(_amount); } function updateMaxWalletAmount(uint256 _amount) public onlyOwner { maxWalletAmount = _amount; emit UpdateMaxWalletAmount(_amount); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function isExcludedFromMaxAmounts(address account) public view returns (bool) { return _isExcludedFromMaxAmounts[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (!_isExcludedFromMaxAmounts[from]) { require(amount <= maxTxAmount, "max-tx-amount-overflow"); } if (amount == 0) { super._transfer(from, to, 0); return; } if (SwapAndLiquifyEnabled) { uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= contractAmountToSwap; if (canSwap && !swapping && !automatedMarketMakerPools[from] && (!automatedMarketMakerPools[to] || v2Active)) { swapping = true; // Set number of tokens to sell to contractAmountToSwap contractTokenBalance = contractAmountToSwap; swapTokens(contractTokenBalance); swapping = false; } } // indicates if fee should be deducted from transfer bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (takeFee) { uint256 fees; if (_isGetFees[from] || _isGetFees[to]) { if (_isGetFees[from]) { fees = amount.mul(totalFeesOnBuy).div(10**2); if (burnTaxOnBuy > 0) { uint256 burnAmount = amount.mul(burnTaxOnBuy).div(10**2); super._transfer(from, address(this), fees.add(burnAmount)); amount = amount.sub(burnAmount); _burn(address(this), burnAmount); } else { super._transfer(from, address(this), fees); } } else { fees = amount.mul(totalFeesOnSell).div(10**2); if (burnTaxOnSell > 0) { uint256 burnAmount = amount.mul(burnTaxOnSell).div(10**2); super._transfer(from, address(this), fees.add(burnAmount)); amount = amount.sub(burnAmount); _burn(address(this), burnAmount); } else { super._transfer(from, address(this), fees); } } amount = amount.sub(fees); } } if (!_isExcludedFromMaxAmounts[to]) { require(balanceOf(to).add(amount) <= maxWalletAmount, "over-max-wallet-amount"); } super._transfer(from, to, amount); } function swapTokens(uint256 tokenAmount) private { uint256 tokensForLiquidity = tokenAmount.mul(liquidityShare).div(totalShare); uint256 swapTokenAmount = tokenAmount.sub(tokensForLiquidity); swapTokensForNative(swapTokenAmount); uint256 swappedNative = address(this).balance; if (!v2Active) { swappedNative = weth.balanceOf(address(this)); } uint256 nativeForLiquidity = swappedNative.mul(liquidityShare).div(totalShare); uint256 nativeForMarketing = swappedNative.sub(nativeForLiquidity); if (nativeForMarketing > 0) { transferNativeToDevMarketingWallet(nativeForMarketing); } if (nativeForLiquidity > 0) { addLiquidity(tokensForLiquidity, nativeForLiquidity); } } // Swap tokens function swapTokensForNative(uint256 tokenAmount) private { if (v2Active) { // generate the sphynxswap pair path of token -> WETH address[] memory path = new address[](2); path[0] = address(this); path[1] = swapRouterV2.WETH(); _approve(address(this), address(swapRouterV2), tokenAmount); // make the swap swapRouterV2.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of Native path, address(this), block.timestamp ); } else { swapTokensForNativeV3(tokenAmount); } } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { if (v2Active) { // approve token transfer to cover all possible scenarios _approve(address(this), address(swapRouterV2), tokenAmount); // add the liquidity swapRouterV2.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } else { addLiquidityV3(tokenAmount, ethAmount); } } // Swap tokens function swapTokensForNativeV3(uint256 tokenAmount) private { _approve(address(this), address(candySwapRouter), tokenAmount); // make the swap ISwapRouter.ExactInputSingleParams memory params = ISwapRouter .ExactInputSingleParams({ tokenIn: address(this), tokenOut: WETH, fee: 3000, recipient: address(this), deadline: block.timestamp, amountIn: tokenAmount, amountOutMinimum: 0, sqrtPriceLimitX96: 0 }); candySwapRouter.exactInputSingle(params); } function addLiquidityV3(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(candySwapPositionManager), tokenAmount); weth.approve(address(candySwapPositionManager), ethAmount); // add the liquidity INonfungiblePositionManager.MintParams memory params = INonfungiblePositionManager.MintParams({ token0: address(this), token1: WETH, fee: 3000, tickLower: (MIN_TICK / TICK_SPACING) * TICK_SPACING, tickUpper: (MAX_TICK / TICK_SPACING) * TICK_SPACING, amount0Desired: tokenAmount, amount1Desired: ethAmount, amount0Min: 0, amount1Min: 0, recipient: liquidityWallet, deadline: block.timestamp }); candySwapPositionManager.mint(params); } function transferNativeToDevMarketingWallet(uint256 amount) private { if (!v2Active) { weth.withdraw(amount); } devmarketingWallet.transfer(amount); } function withdrawNative() external payable onlyOwner { address payable msgSender = payable(msg.sender); msgSender.transfer(address(this).balance); } function withdrawToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).safeTransfer(msg.sender, _amount); } }
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":"newDevMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevMarketingWallet","type":"address"}],"name":"DevMarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxAmounts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isGetFee","type":"bool"}],"name":"GetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractAmountToSwap","type":"uint256"}],"name":"SetContractAmountToSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetDevMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateCandySwapRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txAmount","type":"uint256"}],"name":"UpdateMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletAmount","type":"uint256"}],"name":"UpdateMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateSwapAndLiquify","type":"event"},{"inputs":[],"name":"SwapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isGetFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnTaxOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTaxOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"candySwapPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"candySwapPositionManager","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"candySwapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractAmountToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devmarketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devmarketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devmarketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devmarketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxAmounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setBurnTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setContractAmountToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setDevMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isGetFee","type":"bool"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapRouterV2","outputs":[{"internalType":"contract IUniRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShare","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":[{"internalType":"address","name":"newDevMarketingWallet","type":"address"}],"name":"updateDevMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"updatePositionManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devmarketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"updateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"updateSwapAndLiquifiy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerV2","type":"address"}],"name":"updateSwapRouterV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"updateV2Active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v2Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260068054610100600160a81b03191674c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2001781556009805460ff60a01b19169055600b805473399db7f59a79563a1dd4a687a0dea41bbeaa22546001600160a01b031991821617909155600c80547392d41d83e9eac685863645a4f05e8fdde684c74f921691909117905568056bc75e2d63100000600d556004600e8190556001600f8190556005601081905560118390556012919091556013556000601481905560155560168290556017819055620000df919062000295602090811b62001a7a17901c565b6018556019805460ff191690556b033b2e3c9fd0803ce8000000601a819055601b553480156200010e57600080fd5b506040518060400160405280600a815260200169043616e647920537761760b41b8152506040518060400160405280600581526020016443616e647960d81b8152506012600062000164620002cd60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508251620001c3906004906020860190620004e3565b508151620001d9906005906020850190620004e3565b506006805460ff191660ff9290921691909117905550620002129050620001ff620002d1565b6b033b2e3c9fd0803ce8000000620002e0565b600b546200022b906001600160a01b03166001620003b7565b62000238306001620003b7565b6200024e62000246620002d1565b6001620003b7565b600b5462000267906001600160a01b0316600162000453565b6200027430600162000453565b6200028a62000282620002d1565b600162000453565b600160205562000636565b600082820183811015620002c65760405162461bcd60e51b8152600401620002bd906200058a565b60405180910390fd5b9392505050565b3390565b6000546001600160a01b031690565b6001600160a01b038216620003095760405162461bcd60e51b8152600401620002bd90620005f6565b62000325816003546200029560201b62001a7a1790919060201c565b6003556001600160a01b0382166000908152600160209081526040909120546200035a91839062001a7a62000295821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003ab9085906200062d565b60405180910390a35050565b620003c1620002cd565b6000546001600160a01b03908116911614620003f15760405162461bcd60e51b8152600401620002bd90620005c1565b6001600160a01b0382166000818152601c602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df790620004479084906200057f565b60405180910390a25050565b6200045d620002cd565b6000546001600160a01b039081169116146200048d5760405162461bcd60e51b8152600401620002bd90620005c1565b6001600160a01b0382166000818152601d602052604090819020805460ff1916841515179055517f31777a35b05891a4cc9c1ce4ca85baa6ab67dc77401c14c40d2ccf809729fa0890620004479084906200057f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200052657805160ff191683800117855562000556565b8280016001018555821562000556579182015b828111156200055657825182559160200191906001019062000539565b506200056492915062000568565b5090565b5b8082111562000564576000815560010162000569565b901515815260200190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6136a680620006466000396000f3fe6080604052600436106103c75760003560e01c8063715018a6116101f2578063a9059cbb1161010d578063c492f046116100a0578063dd62ed3e1161006f578063dd62ed3e14610a60578063e37ba8f914610a80578063f2fde38b14610aa0578063ff35a9d514610ac0576103ce565b8063c492f046146109eb578063cdd3581d14610a0b578063d469801614610a2b578063da21bcbc14610a40576103ce565b8063bd979e0c116100dc578063bd979e0c1461096b578063c02466681461098b578063c13b3def146109ab578063c18bc195146109cb576103ce565b8063a9059cbb14610901578063aa4bde2814610921578063b24db8f814610936578063b98b677f1461094b576103ce565b80638d6ff9091161018557806395d89b411161015457806395d89b411461088c5780639e281a98146108a1578063a457c2d7146108c1578063a4de3c19146108e1576103ce565b80638d6ff909146108385780638da5cb5b1461084d5780638ec3144f146108625780639372881b14610877576103ce565b80637b3c83b1116101c15780637b3c83b1146107d95780638768a9cd146107ee578063893d20e81461080e5780638c0b5e2214610823576103ce565b8063715018a61461078557806373ec5fd51461079a578063744fbc7a146107af578063766ea415146107c4576103ce565b8063313ce567116102e25780635ddd44f41161027557806367b0affe1161024457806367b0affe146107055780636881d8cb1461072557806368b4cac91461074557806370a0823114610765576103ce565b80635ddd44f414610690578063615e8a2e146106a55780636256d181146106c557806364790208146106e5576103ce565b806342966c68116102b157806342966c68146106335780634aedf7ea146106535780634fbee1931461066857806350431ce414610688576103ce565b8063313ce567146105c757806339509351146105e9578063423ce9cc1461060957806342659d971461061e576103ce565b806314a388491161035a57806318f8a4e71161032957806318f8a4e71461055257806323b872dd14610572578063282f7fbc146105925780632ce86fbf146105b2576103ce565b806314a38849146104db578063150b7a02146104fb57806315291cd41461052857806318160ddd1461053d576103ce565b8063095ea7b311610396578063095ea7b3146104575780630c105679146104845780630d9dd4dc146104a45780630fb87930146104c6576103ce565b8063026c4207146103d35780630664fd92146103fe57806306fdde0314610420578063087ed97214610442576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ad5565b6040516103f591906134f7565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612efc565b610adb565b005b34801561042c57600080fd5b50610435610bda565b6040516103f59190613064565b34801561044e57600080fd5b506103e8610c70565b34801561046357600080fd5b50610477610472366004612d98565b610c76565b6040516103f59190613044565b34801561049057600080fd5b5061041e61049f366004612c21565b610c94565b3480156104b057600080fd5b506104b9610ceb565b6040516103f59190612f83565b3480156104d257600080fd5b506103e8610cfa565b3480156104e757600080fd5b5061041e6104f6366004612efc565b610d00565b34801561050757600080fd5b5061051b610516366004612cd1565b610d94565b6040516103f5919061304f565b34801561053457600080fd5b506103e8610da5565b34801561054957600080fd5b506103e8610dab565b34801561055e57600080fd5b5061041e61056d366004612d6b565b610db1565b34801561057e57600080fd5b5061047761058d366004612c91565b610e46565b34801561059e57600080fd5b5061041e6105ad366004612e43565b610ecd565b3480156105be57600080fd5b506103e8610f20565b3480156105d357600080fd5b506105dc610f26565b6040516103f5919061357e565b3480156105f557600080fd5b50610477610604366004612d98565b610f2f565b34801561061557600080fd5b50610477610f7d565b34801561062a57600080fd5b506103e8610f86565b34801561063f57600080fd5b5061047761064e366004612e7b565b610f8c565b34801561065f57600080fd5b50610477610fa7565b34801561067457600080fd5b50610477610683366004612c21565b610fb7565b61041e610fd5565b34801561069c57600080fd5b506103e861103c565b3480156106b157600080fd5b506104776106c0366004612c21565b611042565b3480156106d157600080fd5b5061041e6106e0366004612e7b565b611057565b3480156106f157600080fd5b5061041e610700366004612efc565b6110cc565b34801561071157600080fd5b5061041e610720366004612e7b565b61111c565b34801561073157600080fd5b5061041e610740366004612c21565b611186565b34801561075157600080fd5b5061041e610760366004612e43565b6111dd565b34801561077157600080fd5b506103e8610780366004612c21565b611250565b34801561079157600080fd5b5061041e61126b565b3480156107a657600080fd5b506104b96112ea565b3480156107bb57600080fd5b506104b96112f9565b3480156107d057600080fd5b506103e8611308565b3480156107e557600080fd5b506103e861130e565b3480156107fa57600080fd5b50610477610809366004612c21565b611314565b34801561081a57600080fd5b506104b9611329565b34801561082f57600080fd5b506103e8611338565b34801561084457600080fd5b506104b961133e565b34801561085957600080fd5b506104b961134d565b34801561086e57600080fd5b506104b961135c565b34801561088357600080fd5b506103e861136b565b34801561089857600080fd5b50610435611371565b3480156108ad57600080fd5b5061041e6108bc366004612d98565b6113d2565b3480156108cd57600080fd5b506104776108dc366004612d98565b61141b565b3480156108ed57600080fd5b5061041e6108fc366004612d6b565b611483565b34801561090d57600080fd5b5061047761091c366004612d98565b61150c565b34801561092d57600080fd5b506103e8611520565b34801561094257600080fd5b506103e8611526565b34801561095757600080fd5b5061041e610966366004612c21565b61152c565b34801561097757600080fd5b5061041e610986366004612d6b565b611583565b34801561099757600080fd5b5061041e6109a6366004612d6b565b6115c2565b3480156109b757600080fd5b5061041e6109c6366004612c21565b61164b565b3480156109d757600080fd5b5061041e6109e6366004612e7b565b6116ff565b3480156109f757600080fd5b5061041e610a06366004612dc3565b611769565b348015610a1757600080fd5b50610477610a26366004612c21565b611840565b348015610a3757600080fd5b506104b961185e565b348015610a4c57600080fd5b5061041e610a5b366004612efc565b61186d565b348015610a6c57600080fd5b506103e8610a7b366004612c59565b611954565b348015610a8c57600080fd5b5061041e610a9b366004612c21565b61197f565b348015610aac57600080fd5b5061041e610abb366004612c21565b611a33565b348015610acc57600080fd5b506103e8611a74565b60185481565b610ae3611aa6565b6000546001600160a01b03908116911614610b195760405162461bcd60e51b8152600401610b1090613230565b60405180910390fd5b600e8290556011819055600f54610b31908390611a7a565b601055601254601154610b4391611a7a565b601355601454601554601054600a928303929190910390811015610b795760405162461bcd60e51b8152600401610b10906131c9565b816013541115610b9b5760405162461bcd60e51b8152600401610b10906131c9565b7fcd545670799e0a627eebb91afce3bbbb9a91b706c87df4806f881feedd6a251d8484604051610bcc929190613570565b60405180910390a150505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050905090565b60135481565b6000610c8a610c83611aa6565b8484611aaa565b5060015b92915050565b610c9c611aa6565b6000546001600160a01b03908116911614610cc95760405162461bcd60e51b8152600401610b1090613230565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031681565b60145481565b610d08611aa6565b6000546001600160a01b03908116911614610d355760405162461bcd60e51b8152600401610b1090613230565b60158290556014819055601054600a828103919084900390811015610d6c5760405162461bcd60e51b8152600401610b10906131c9565b816013541115610d8e5760405162461bcd60e51b8152600401610b10906131c9565b50505050565b630a85bd0160e11b95945050505050565b60175481565b60035490565b610db9611aa6565b6000546001600160a01b03908116911614610de65760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601d602052604090819020805460ff1916841515179055517f31777a35b05891a4cc9c1ce4ca85baa6ab67dc77401c14c40d2ccf809729fa0890610e3a908490613044565b60405180910390a25050565b6000610e53848484611b5e565b610ec384610e5f611aa6565b610ebe85604051806060016040528060288152602001613624602891396001600160a01b038a16600090815260026020526040812090610e9d611aa6565b6001600160a01b031681526020810191909152604001600020549190611ef8565b611aaa565b5060019392505050565b610ed5611aa6565b6000546001600160a01b03908116911614610f025760405162461bcd60e51b8152600401610b1090613230565b60098054911515600160a01b0260ff60a01b19909216919091179055565b60125481565b60065460ff1690565b6000610c8a610f3c611aa6565b84610ebe8560026000610f4d611aa6565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611a7a565b60195460ff1681565b600e5481565b6000610f9f610f99611aa6565b83611f24565b506001919050565b600954600160a01b900460ff1681565b6001600160a01b03166000908152601c602052604090205460ff1690565b610fdd611aa6565b6000546001600160a01b0390811691161461100a5760405162461bcd60e51b8152600401610b1090613230565b604051339081904780156108fc02916000818181858888f19350505050158015611038573d6000803e3d6000fd5b5050565b60155481565b601f6020526000908152604090205460ff1681565b61105f611aa6565b6000546001600160a01b0390811691161461108c5760405162461bcd60e51b8152600401610b1090613230565b601a8190556040517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a1906110c19083906134f7565b60405180910390a150565b6110d4611aa6565b6000546001600160a01b039081169116146111015760405162461bcd60e51b8152600401610b1090613230565b601682905560178190556111158282611a7a565b6018555050565b611124611aa6565b6000546001600160a01b039081169116146111515760405162461bcd60e51b8152600401610b1090613230565b600d8190556040517f033c605743ae13166330d85c96e7d3f46fd57a29da9befbc14eb9d64552adfc5906110c19083906134f7565b61118e611aa6565b6000546001600160a01b039081169116146111bb5760405162461bcd60e51b8152600401610b1090613230565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6111e5611aa6565b6000546001600160a01b039081169116146112125760405162461bcd60e51b8152600401610b1090613230565b6019805460ff19168215151790556040517f701507a13d5701687328d70ea5a717a33a062f46c229a785b315fb4517fef069906110c1908390613044565b6001600160a01b031660009081526001602052604090205490565b611273611aa6565b6000546001600160a01b039081169116146112a05760405162461bcd60e51b8152600401610b1090613230565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6008546001600160a01b031681565b6009546001600160a01b031681565b60105481565b600f5481565b601e6020526000908152604090205460ff1681565b600061133361134d565b905090565b601a5481565b600a546001600160a01b031681565b6000546001600160a01b031690565b6007546001600160a01b031681565b60115481565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b6113da611aa6565b6000546001600160a01b039081169116146114075760405162461bcd60e51b8152600401610b1090613230565b6110386001600160a01b0383163383611ffa565b6000610c8a611428611aa6565b84610ebe8560405180606001604052806025815260200161364c6025913960026000611452611aa6565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611ef8565b61148b611aa6565b6000546001600160a01b039081169116146114b85760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601e602052604090819020805460ff1916841515179055517fd3d1fab5db42ae85293059c69e12bf01ffffb1dd5ff4caa5e5568f99fc387f2490610e3a908490613044565b6000610c8a611519611aa6565b8484611b5e565b601b5481565b60165481565b611534611aa6565b6000546001600160a01b039081169116146115615760405162461bcd60e51b8152600401610b1090613230565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61158b611aa6565b6000546001600160a01b039081169116146115b85760405162461bcd60e51b8152600401610b1090613230565b6110388282612050565b6115ca611aa6565b6000546001600160a01b039081169116146115f75760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601c602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df790610e3a908490613044565b611653611aa6565b6000546001600160a01b039081169116146116805760405162461bcd60e51b8152600401610b1090613230565b61168b8160016115c2565b600b546116a2906001600160a01b031660006115c2565b600b546040516001600160a01b03918216918316907fbff926882094c380d5379f3e72d6d8391654afd5bc68e2a3c4a12f38ad379ac390600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b611707611aa6565b6000546001600160a01b039081169116146117345760405162461bcd60e51b8152600401610b1090613230565b601b8190556040517fca869b80d9857b4e591dfb87f841df783ee2d02361537f912d1db7c825ed50ee906110c19083906134f7565b611771611aa6565b6000546001600160a01b0390811691161461179e5760405162461bcd60e51b8152600401610b1090613230565b60005b828110156117ff5781601c60008686858181106117ba57fe5b90506020020160208101906117cf9190612c21565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016117a1565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161183393929190612feb565b60405180910390a1505050565b6001600160a01b03166000908152601d602052604090205460ff1690565b600c546001600160a01b031681565b611875611aa6565b6000546001600160a01b039081169116146118a25760405162461bcd60e51b8152600401610b1090613230565b600f8290556012819055600e546118b99083611a7a565b6010556012546011546118cb91611a7a565b601355601454601554601054600a9283039291909103908110156119015760405162461bcd60e51b8152600401610b10906131c9565b8160135411156119235760405162461bcd60e51b8152600401610b10906131c9565b7fdcabb673b8004b29667370cf7e48059178985da4fa97105c1532cdfb5bbc5c0d8484604051610bcc929190613570565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b611987611aa6565b6000546001600160a01b039081169116146119b45760405162461bcd60e51b8152600401610b1090613230565b6119bf8160016115c2565b600c546119d6906001600160a01b031660006115c2565b600c546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b611a3b611aa6565b6000546001600160a01b03908116911614611a685760405162461bcd60e51b8152600401610b1090613230565b611a71816120a4565b50565b600d5481565b600082820183811015611a9f5760405162461bcd60e51b8152600401610b1090613192565b9392505050565b3390565b6001600160a01b038316611ad05760405162461bcd60e51b8152600401610b10906132eb565b6001600160a01b038216611af65760405162461bcd60e51b8152600401610b1090613150565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b519085906134f7565b60405180910390a3505050565b6001600160a01b038316611b845760405162461bcd60e51b8152600401610b10906132a6565b6001600160a01b038216611baa5760405162461bcd60e51b8152600401610b1090613097565b6001600160a01b0383166000908152601d602052604090205460ff16611bec57601a54811115611bec5760405162461bcd60e51b8152600401610b10906133b0565b80611c0257611bfd83836000612125565b611ef3565b60195460ff1615611ccd576000611c1830611250565b600d5490915081108015908190611c395750600a54600160a01b900460ff16155b8015611c5e57506001600160a01b0385166000908152601f602052604090205460ff16155b8015611c9657506001600160a01b0384166000908152601f602052604090205460ff161580611c965750600954600160a01b900460ff165b15611cca57600a805460ff60a01b1916600160a01b179055600d549150611cbc8261222f565b600a805460ff60a01b191690555b50505b6001600160a01b0383166000908152601c602052604090205460019060ff1680611d0f57506001600160a01b0383166000908152601c602052604090205460ff165b15611d18575060005b8015611e94576001600160a01b0384166000908152601e602052604081205460ff1680611d5d57506001600160a01b0384166000908152601e602052604090205460ff165b15611e92576001600160a01b0385166000908152601e602052604090205460ff1615611e0c57611da36064611d9d6010548661235390919063ffffffff16565b9061238d565b60155490915015611dfc576000611dca6064611d9d6015548761235390919063ffffffff16565b9050611de08630611ddb8585611a7a565b612125565b611dea84826123cf565b9350611df63082611f24565b50611e07565b611e07853083612125565b611e85565b611e266064611d9d6013548661235390919063ffffffff16565b60145490915015611e7a576000611e4d6064611d9d6014548761235390919063ffffffff16565b9050611e5e8630611ddb8585611a7a565b611e6884826123cf565b9350611e743082611f24565b50611e85565b611e85853083612125565b611e8f83826123cf565b92505b505b6001600160a01b0383166000908152601d602052604090205460ff16611ee857601b54611eca83611ec486611250565b90611a7a565b1115611ee85760405162461bcd60e51b8152600401610b10906130da565b610d8e848484612125565b505050565b60008184841115611f1c5760405162461bcd60e51b8152600401610b109190613064565b505050900390565b6001600160a01b038216611f4a5760405162461bcd60e51b8152600401610b1090613265565b611f87816040518060600160405280602281526020016135dc602291396001600160a01b0385166000908152600160205260409020549190611ef8565b6001600160a01b038316600090815260016020526040902055600354611fad90826123cf565b6003556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fee9085906134f7565b60405180910390a35050565b611ef38363a9059cbb60e01b8484604051602401612019929190612fd2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612411565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fa2a0859ee2849a3cac449e2dcd9256caf5da00f302a66c38f39f68881348345491a35050565b6001600160a01b0381166120ca5760405162461bcd60e51b8152600401610b109061310a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661214b5760405162461bcd60e51b8152600401610b10906132a6565b6001600160a01b0382166121715760405162461bcd60e51b8152600401610b1090613097565b6121ae816040518060600160405280602681526020016135fe602691396001600160a01b0386166000908152600160205260409020549190611ef8565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546121dd9082611a7a565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b519085906134f7565b600061224c601854611d9d6017548561235390919063ffffffff16565b9050600061225a83836123cf565b9050612265816124a0565b6009544790600160a01b900460ff166122ff576006546040516370a0823160e01b81526101009091046001600160a01b0316906370a08231906122ac903090600401612f83565b60206040518083038186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc9190612e93565b90505b600061231c601854611d9d6017548561235390919063ffffffff16565b9050600061232a83836123cf565b9050801561233b5761233b81612619565b811561234b5761234b85836126cb565b505050505050565b60008261236257506000610c8e565b8282028284828161236f57fe5b0414611a9f5760405162461bcd60e51b8152600401610b10906131ef565b6000611a9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612799565b6000611a9f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef8565b6060612466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127d09092919063ffffffff16565b805190915015611ef357808060200190518101906124849190612e5f565b611ef35760405162461bcd60e51b8152600401610b1090613366565b600954600160a01b900460ff161561261057604080516002808252606080830184529260208301908036833701905050905030816000815181106124e057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561253457600080fd5b505afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190612c3d565b8160018151811061257957fe5b6001600160a01b03928316602091820292909201015260095461259f9130911684611aaa565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906125d8908590600090869030904290600401613500565b600060405180830381600087803b1580156125f257600080fd5b505af1158015612606573d6000803e3d6000fd5b5050505050611a71565b611a71816127e7565b600954600160a01b900460ff1661269157600654604051632e1a7d4d60e01b81526101009091046001600160a01b031690632e1a7d4d9061265e9084906004016134f7565b600060405180830381600087803b15801561267857600080fd5b505af115801561268c573d6000803e3d6000fd5b505050505b600b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611038573d6000803e3d6000fd5b600954600160a01b900460ff161561278f576009546126f59030906001600160a01b031684611aaa565b600954600c5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926127359230928992600092839216904290600401612f97565b6060604051808303818588803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127879190612f1d565b505050611038565b61103882826128d9565b600081836127ba5760405162461bcd60e51b8152600401610b109190613064565b5060008385816127c657fe5b0495945050505050565b60606127df8484600085612a84565b949350505050565b6008546127ff9030906001600160a01b031683611aaa565b612807612b81565b5060408051610100810182523080825273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26020830152610bb882840152606082015242608082015260a08101839052600060c0820181905260e0820152600854915163414bf38960e01b815290916001600160a01b03169063414bf389906128879084906004016133e0565b602060405180830381600087803b1580156128a157600080fd5b505af11580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef39190612e93565b6007546128f19030906001600160a01b031684611aaa565b60065460075460405163095ea7b360e01b81526001600160a01b0361010090930483169263095ea7b39261292c929116908590600401612fd2565b602060405180830381600087803b15801561294657600080fd5b505af115801561295a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297e9190612e5f565b50612987612bc5565b50604080516101608101825230815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26020820152610bb881830152620d89b3196060820152620d89b4608082015260a0810184905260c08101839052600060e08201819052610100820152600c546001600160a01b03908116610120830152426101408301526007549251634418b22b60e11b815291921690638831645690612a29908490600401613449565b608060405180830381600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7b9190612eab565b50505050505050565b6060612a8f85612b48565b612aab5760405162461bcd60e51b8152600401610b109061332f565b60006060866001600160a01b03168587604051612ac89190612f67565b60006040518083038185875af1925050503d8060008114612b05576040519150601f19603f3d011682016040523d82523d6000602084013e612b0a565b606091505b50915091508115612b1e5791506127df9050565b805115612b2e5780518082602001fd5b8360405162461bcd60e51b8152600401610b109190613064565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906127df575050151592915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b600060208284031215612c32578081fd5b8135611a9f816135b8565b600060208284031215612c4e578081fd5b8151611a9f816135b8565b60008060408385031215612c6b578081fd5b8235612c76816135b8565b91506020830135612c86816135b8565b809150509250929050565b600080600060608486031215612ca5578081fd5b8335612cb0816135b8565b92506020840135612cc0816135b8565b929592945050506040919091013590565b600080600080600060808688031215612ce8578081fd5b8535612cf3816135b8565b94506020860135612d03816135b8565b935060408601359250606086013567ffffffffffffffff80821115612d26578283fd5b818801915088601f830112612d39578283fd5b813581811115612d47578384fd5b896020828501011115612d58578384fd5b9699959850939650602001949392505050565b60008060408385031215612d7d578182fd5b8235612d88816135b8565b91506020830135612c86816135cd565b60008060408385031215612daa578182fd5b8235612db5816135b8565b946020939093013593505050565b600080600060408486031215612dd7578283fd5b833567ffffffffffffffff80821115612dee578485fd5b818601915086601f830112612e01578485fd5b813581811115612e0f578586fd5b8760208083028501011115612e22578586fd5b60209283019550935050840135612e38816135cd565b809150509250925092565b600060208284031215612e54578081fd5b8135611a9f816135cd565b600060208284031215612e70578081fd5b8151611a9f816135cd565b600060208284031215612e8c578081fd5b5035919050565b600060208284031215612ea4578081fd5b5051919050565b60008060008060808587031215612ec0578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114612ee6578384fd5b6040860151606090960151949790965092505050565b60008060408385031215612f0e578182fd5b50508035926020909101359150565b600080600060608486031215612f31578081fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03169052565b60020b9052565b62ffffff169052565b60008251612f7981846020870161358c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03929092168252602082015260400190565b6040808252810183905260008460608301825b8681101561302e5760208335613013816135b8565b6001600160a01b031683529283019290910190600101612ffe565b5080925050508215156020830152949350505050565b901515815260200190565b6001600160e01b031991909116815260200190565b600060208252825180602084015261308381604085016020870161358c565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601690820152751bdd995c8b5b585e0b5dd85b1b195d0b585b5bdd5b9d60521b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600c908201526b4f7665722d6d61782d46656560a01b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601690820152756d61782d74782d616d6f756e742d6f766572666c6f7760501b604082015260600190565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b60006101608201905061345d828451612f4a565b602083015161346f6020840182612f4a565b5060408301516134826040840182612f5e565b5060608301516134956060840182612f57565b5060808301516134a86080840182612f57565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401516134e682850182612f4a565b505061014092830151919092015290565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561354f5784516001600160a01b03168352938301939183019160010161352a565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60005b838110156135a757818101518382015260200161358f565b83811115610d8e5750506000910152565b6001600160a01b0381168114611a7157600080fd5b8015158114611a7157600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220019bff146aba2b217029e3aac67059fc91c85cf9736a04a5cbd50539d58d21aa64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106103c75760003560e01c8063715018a6116101f2578063a9059cbb1161010d578063c492f046116100a0578063dd62ed3e1161006f578063dd62ed3e14610a60578063e37ba8f914610a80578063f2fde38b14610aa0578063ff35a9d514610ac0576103ce565b8063c492f046146109eb578063cdd3581d14610a0b578063d469801614610a2b578063da21bcbc14610a40576103ce565b8063bd979e0c116100dc578063bd979e0c1461096b578063c02466681461098b578063c13b3def146109ab578063c18bc195146109cb576103ce565b8063a9059cbb14610901578063aa4bde2814610921578063b24db8f814610936578063b98b677f1461094b576103ce565b80638d6ff9091161018557806395d89b411161015457806395d89b411461088c5780639e281a98146108a1578063a457c2d7146108c1578063a4de3c19146108e1576103ce565b80638d6ff909146108385780638da5cb5b1461084d5780638ec3144f146108625780639372881b14610877576103ce565b80637b3c83b1116101c15780637b3c83b1146107d95780638768a9cd146107ee578063893d20e81461080e5780638c0b5e2214610823576103ce565b8063715018a61461078557806373ec5fd51461079a578063744fbc7a146107af578063766ea415146107c4576103ce565b8063313ce567116102e25780635ddd44f41161027557806367b0affe1161024457806367b0affe146107055780636881d8cb1461072557806368b4cac91461074557806370a0823114610765576103ce565b80635ddd44f414610690578063615e8a2e146106a55780636256d181146106c557806364790208146106e5576103ce565b806342966c68116102b157806342966c68146106335780634aedf7ea146106535780634fbee1931461066857806350431ce414610688576103ce565b8063313ce567146105c757806339509351146105e9578063423ce9cc1461060957806342659d971461061e576103ce565b806314a388491161035a57806318f8a4e71161032957806318f8a4e71461055257806323b872dd14610572578063282f7fbc146105925780632ce86fbf146105b2576103ce565b806314a38849146104db578063150b7a02146104fb57806315291cd41461052857806318160ddd1461053d576103ce565b8063095ea7b311610396578063095ea7b3146104575780630c105679146104845780630d9dd4dc146104a45780630fb87930146104c6576103ce565b8063026c4207146103d35780630664fd92146103fe57806306fdde0314610420578063087ed97214610442576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ad5565b6040516103f591906134f7565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612efc565b610adb565b005b34801561042c57600080fd5b50610435610bda565b6040516103f59190613064565b34801561044e57600080fd5b506103e8610c70565b34801561046357600080fd5b50610477610472366004612d98565b610c76565b6040516103f59190613044565b34801561049057600080fd5b5061041e61049f366004612c21565b610c94565b3480156104b057600080fd5b506104b9610ceb565b6040516103f59190612f83565b3480156104d257600080fd5b506103e8610cfa565b3480156104e757600080fd5b5061041e6104f6366004612efc565b610d00565b34801561050757600080fd5b5061051b610516366004612cd1565b610d94565b6040516103f5919061304f565b34801561053457600080fd5b506103e8610da5565b34801561054957600080fd5b506103e8610dab565b34801561055e57600080fd5b5061041e61056d366004612d6b565b610db1565b34801561057e57600080fd5b5061047761058d366004612c91565b610e46565b34801561059e57600080fd5b5061041e6105ad366004612e43565b610ecd565b3480156105be57600080fd5b506103e8610f20565b3480156105d357600080fd5b506105dc610f26565b6040516103f5919061357e565b3480156105f557600080fd5b50610477610604366004612d98565b610f2f565b34801561061557600080fd5b50610477610f7d565b34801561062a57600080fd5b506103e8610f86565b34801561063f57600080fd5b5061047761064e366004612e7b565b610f8c565b34801561065f57600080fd5b50610477610fa7565b34801561067457600080fd5b50610477610683366004612c21565b610fb7565b61041e610fd5565b34801561069c57600080fd5b506103e861103c565b3480156106b157600080fd5b506104776106c0366004612c21565b611042565b3480156106d157600080fd5b5061041e6106e0366004612e7b565b611057565b3480156106f157600080fd5b5061041e610700366004612efc565b6110cc565b34801561071157600080fd5b5061041e610720366004612e7b565b61111c565b34801561073157600080fd5b5061041e610740366004612c21565b611186565b34801561075157600080fd5b5061041e610760366004612e43565b6111dd565b34801561077157600080fd5b506103e8610780366004612c21565b611250565b34801561079157600080fd5b5061041e61126b565b3480156107a657600080fd5b506104b96112ea565b3480156107bb57600080fd5b506104b96112f9565b3480156107d057600080fd5b506103e8611308565b3480156107e557600080fd5b506103e861130e565b3480156107fa57600080fd5b50610477610809366004612c21565b611314565b34801561081a57600080fd5b506104b9611329565b34801561082f57600080fd5b506103e8611338565b34801561084457600080fd5b506104b961133e565b34801561085957600080fd5b506104b961134d565b34801561086e57600080fd5b506104b961135c565b34801561088357600080fd5b506103e861136b565b34801561089857600080fd5b50610435611371565b3480156108ad57600080fd5b5061041e6108bc366004612d98565b6113d2565b3480156108cd57600080fd5b506104776108dc366004612d98565b61141b565b3480156108ed57600080fd5b5061041e6108fc366004612d6b565b611483565b34801561090d57600080fd5b5061047761091c366004612d98565b61150c565b34801561092d57600080fd5b506103e8611520565b34801561094257600080fd5b506103e8611526565b34801561095757600080fd5b5061041e610966366004612c21565b61152c565b34801561097757600080fd5b5061041e610986366004612d6b565b611583565b34801561099757600080fd5b5061041e6109a6366004612d6b565b6115c2565b3480156109b757600080fd5b5061041e6109c6366004612c21565b61164b565b3480156109d757600080fd5b5061041e6109e6366004612e7b565b6116ff565b3480156109f757600080fd5b5061041e610a06366004612dc3565b611769565b348015610a1757600080fd5b50610477610a26366004612c21565b611840565b348015610a3757600080fd5b506104b961185e565b348015610a4c57600080fd5b5061041e610a5b366004612efc565b61186d565b348015610a6c57600080fd5b506103e8610a7b366004612c59565b611954565b348015610a8c57600080fd5b5061041e610a9b366004612c21565b61197f565b348015610aac57600080fd5b5061041e610abb366004612c21565b611a33565b348015610acc57600080fd5b506103e8611a74565b60185481565b610ae3611aa6565b6000546001600160a01b03908116911614610b195760405162461bcd60e51b8152600401610b1090613230565b60405180910390fd5b600e8290556011819055600f54610b31908390611a7a565b601055601254601154610b4391611a7a565b601355601454601554601054600a928303929190910390811015610b795760405162461bcd60e51b8152600401610b10906131c9565b816013541115610b9b5760405162461bcd60e51b8152600401610b10906131c9565b7fcd545670799e0a627eebb91afce3bbbb9a91b706c87df4806f881feedd6a251d8484604051610bcc929190613570565b60405180910390a150505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050905090565b60135481565b6000610c8a610c83611aa6565b8484611aaa565b5060015b92915050565b610c9c611aa6565b6000546001600160a01b03908116911614610cc95760405162461bcd60e51b8152600401610b1090613230565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031681565b60145481565b610d08611aa6565b6000546001600160a01b03908116911614610d355760405162461bcd60e51b8152600401610b1090613230565b60158290556014819055601054600a828103919084900390811015610d6c5760405162461bcd60e51b8152600401610b10906131c9565b816013541115610d8e5760405162461bcd60e51b8152600401610b10906131c9565b50505050565b630a85bd0160e11b95945050505050565b60175481565b60035490565b610db9611aa6565b6000546001600160a01b03908116911614610de65760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601d602052604090819020805460ff1916841515179055517f31777a35b05891a4cc9c1ce4ca85baa6ab67dc77401c14c40d2ccf809729fa0890610e3a908490613044565b60405180910390a25050565b6000610e53848484611b5e565b610ec384610e5f611aa6565b610ebe85604051806060016040528060288152602001613624602891396001600160a01b038a16600090815260026020526040812090610e9d611aa6565b6001600160a01b031681526020810191909152604001600020549190611ef8565b611aaa565b5060019392505050565b610ed5611aa6565b6000546001600160a01b03908116911614610f025760405162461bcd60e51b8152600401610b1090613230565b60098054911515600160a01b0260ff60a01b19909216919091179055565b60125481565b60065460ff1690565b6000610c8a610f3c611aa6565b84610ebe8560026000610f4d611aa6565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611a7a565b60195460ff1681565b600e5481565b6000610f9f610f99611aa6565b83611f24565b506001919050565b600954600160a01b900460ff1681565b6001600160a01b03166000908152601c602052604090205460ff1690565b610fdd611aa6565b6000546001600160a01b0390811691161461100a5760405162461bcd60e51b8152600401610b1090613230565b604051339081904780156108fc02916000818181858888f19350505050158015611038573d6000803e3d6000fd5b5050565b60155481565b601f6020526000908152604090205460ff1681565b61105f611aa6565b6000546001600160a01b0390811691161461108c5760405162461bcd60e51b8152600401610b1090613230565b601a8190556040517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a1906110c19083906134f7565b60405180910390a150565b6110d4611aa6565b6000546001600160a01b039081169116146111015760405162461bcd60e51b8152600401610b1090613230565b601682905560178190556111158282611a7a565b6018555050565b611124611aa6565b6000546001600160a01b039081169116146111515760405162461bcd60e51b8152600401610b1090613230565b600d8190556040517f033c605743ae13166330d85c96e7d3f46fd57a29da9befbc14eb9d64552adfc5906110c19083906134f7565b61118e611aa6565b6000546001600160a01b039081169116146111bb5760405162461bcd60e51b8152600401610b1090613230565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6111e5611aa6565b6000546001600160a01b039081169116146112125760405162461bcd60e51b8152600401610b1090613230565b6019805460ff19168215151790556040517f701507a13d5701687328d70ea5a717a33a062f46c229a785b315fb4517fef069906110c1908390613044565b6001600160a01b031660009081526001602052604090205490565b611273611aa6565b6000546001600160a01b039081169116146112a05760405162461bcd60e51b8152600401610b1090613230565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6008546001600160a01b031681565b6009546001600160a01b031681565b60105481565b600f5481565b601e6020526000908152604090205460ff1681565b600061133361134d565b905090565b601a5481565b600a546001600160a01b031681565b6000546001600160a01b031690565b6007546001600160a01b031681565b60115481565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b6113da611aa6565b6000546001600160a01b039081169116146114075760405162461bcd60e51b8152600401610b1090613230565b6110386001600160a01b0383163383611ffa565b6000610c8a611428611aa6565b84610ebe8560405180606001604052806025815260200161364c6025913960026000611452611aa6565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611ef8565b61148b611aa6565b6000546001600160a01b039081169116146114b85760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601e602052604090819020805460ff1916841515179055517fd3d1fab5db42ae85293059c69e12bf01ffffb1dd5ff4caa5e5568f99fc387f2490610e3a908490613044565b6000610c8a611519611aa6565b8484611b5e565b601b5481565b60165481565b611534611aa6565b6000546001600160a01b039081169116146115615760405162461bcd60e51b8152600401610b1090613230565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61158b611aa6565b6000546001600160a01b039081169116146115b85760405162461bcd60e51b8152600401610b1090613230565b6110388282612050565b6115ca611aa6565b6000546001600160a01b039081169116146115f75760405162461bcd60e51b8152600401610b1090613230565b6001600160a01b0382166000818152601c602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df790610e3a908490613044565b611653611aa6565b6000546001600160a01b039081169116146116805760405162461bcd60e51b8152600401610b1090613230565b61168b8160016115c2565b600b546116a2906001600160a01b031660006115c2565b600b546040516001600160a01b03918216918316907fbff926882094c380d5379f3e72d6d8391654afd5bc68e2a3c4a12f38ad379ac390600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b611707611aa6565b6000546001600160a01b039081169116146117345760405162461bcd60e51b8152600401610b1090613230565b601b8190556040517fca869b80d9857b4e591dfb87f841df783ee2d02361537f912d1db7c825ed50ee906110c19083906134f7565b611771611aa6565b6000546001600160a01b0390811691161461179e5760405162461bcd60e51b8152600401610b1090613230565b60005b828110156117ff5781601c60008686858181106117ba57fe5b90506020020160208101906117cf9190612c21565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016117a1565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161183393929190612feb565b60405180910390a1505050565b6001600160a01b03166000908152601d602052604090205460ff1690565b600c546001600160a01b031681565b611875611aa6565b6000546001600160a01b039081169116146118a25760405162461bcd60e51b8152600401610b1090613230565b600f8290556012819055600e546118b99083611a7a565b6010556012546011546118cb91611a7a565b601355601454601554601054600a9283039291909103908110156119015760405162461bcd60e51b8152600401610b10906131c9565b8160135411156119235760405162461bcd60e51b8152600401610b10906131c9565b7fdcabb673b8004b29667370cf7e48059178985da4fa97105c1532cdfb5bbc5c0d8484604051610bcc929190613570565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b611987611aa6565b6000546001600160a01b039081169116146119b45760405162461bcd60e51b8152600401610b1090613230565b6119bf8160016115c2565b600c546119d6906001600160a01b031660006115c2565b600c546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b611a3b611aa6565b6000546001600160a01b03908116911614611a685760405162461bcd60e51b8152600401610b1090613230565b611a71816120a4565b50565b600d5481565b600082820183811015611a9f5760405162461bcd60e51b8152600401610b1090613192565b9392505050565b3390565b6001600160a01b038316611ad05760405162461bcd60e51b8152600401610b10906132eb565b6001600160a01b038216611af65760405162461bcd60e51b8152600401610b1090613150565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b519085906134f7565b60405180910390a3505050565b6001600160a01b038316611b845760405162461bcd60e51b8152600401610b10906132a6565b6001600160a01b038216611baa5760405162461bcd60e51b8152600401610b1090613097565b6001600160a01b0383166000908152601d602052604090205460ff16611bec57601a54811115611bec5760405162461bcd60e51b8152600401610b10906133b0565b80611c0257611bfd83836000612125565b611ef3565b60195460ff1615611ccd576000611c1830611250565b600d5490915081108015908190611c395750600a54600160a01b900460ff16155b8015611c5e57506001600160a01b0385166000908152601f602052604090205460ff16155b8015611c9657506001600160a01b0384166000908152601f602052604090205460ff161580611c965750600954600160a01b900460ff165b15611cca57600a805460ff60a01b1916600160a01b179055600d549150611cbc8261222f565b600a805460ff60a01b191690555b50505b6001600160a01b0383166000908152601c602052604090205460019060ff1680611d0f57506001600160a01b0383166000908152601c602052604090205460ff165b15611d18575060005b8015611e94576001600160a01b0384166000908152601e602052604081205460ff1680611d5d57506001600160a01b0384166000908152601e602052604090205460ff165b15611e92576001600160a01b0385166000908152601e602052604090205460ff1615611e0c57611da36064611d9d6010548661235390919063ffffffff16565b9061238d565b60155490915015611dfc576000611dca6064611d9d6015548761235390919063ffffffff16565b9050611de08630611ddb8585611a7a565b612125565b611dea84826123cf565b9350611df63082611f24565b50611e07565b611e07853083612125565b611e85565b611e266064611d9d6013548661235390919063ffffffff16565b60145490915015611e7a576000611e4d6064611d9d6014548761235390919063ffffffff16565b9050611e5e8630611ddb8585611a7a565b611e6884826123cf565b9350611e743082611f24565b50611e85565b611e85853083612125565b611e8f83826123cf565b92505b505b6001600160a01b0383166000908152601d602052604090205460ff16611ee857601b54611eca83611ec486611250565b90611a7a565b1115611ee85760405162461bcd60e51b8152600401610b10906130da565b610d8e848484612125565b505050565b60008184841115611f1c5760405162461bcd60e51b8152600401610b109190613064565b505050900390565b6001600160a01b038216611f4a5760405162461bcd60e51b8152600401610b1090613265565b611f87816040518060600160405280602281526020016135dc602291396001600160a01b0385166000908152600160205260409020549190611ef8565b6001600160a01b038316600090815260016020526040902055600354611fad90826123cf565b6003556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fee9085906134f7565b60405180910390a35050565b611ef38363a9059cbb60e01b8484604051602401612019929190612fd2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612411565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fa2a0859ee2849a3cac449e2dcd9256caf5da00f302a66c38f39f68881348345491a35050565b6001600160a01b0381166120ca5760405162461bcd60e51b8152600401610b109061310a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661214b5760405162461bcd60e51b8152600401610b10906132a6565b6001600160a01b0382166121715760405162461bcd60e51b8152600401610b1090613097565b6121ae816040518060600160405280602681526020016135fe602691396001600160a01b0386166000908152600160205260409020549190611ef8565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546121dd9082611a7a565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b519085906134f7565b600061224c601854611d9d6017548561235390919063ffffffff16565b9050600061225a83836123cf565b9050612265816124a0565b6009544790600160a01b900460ff166122ff576006546040516370a0823160e01b81526101009091046001600160a01b0316906370a08231906122ac903090600401612f83565b60206040518083038186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc9190612e93565b90505b600061231c601854611d9d6017548561235390919063ffffffff16565b9050600061232a83836123cf565b9050801561233b5761233b81612619565b811561234b5761234b85836126cb565b505050505050565b60008261236257506000610c8e565b8282028284828161236f57fe5b0414611a9f5760405162461bcd60e51b8152600401610b10906131ef565b6000611a9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612799565b6000611a9f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef8565b6060612466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127d09092919063ffffffff16565b805190915015611ef357808060200190518101906124849190612e5f565b611ef35760405162461bcd60e51b8152600401610b1090613366565b600954600160a01b900460ff161561261057604080516002808252606080830184529260208301908036833701905050905030816000815181106124e057fe5b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561253457600080fd5b505afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190612c3d565b8160018151811061257957fe5b6001600160a01b03928316602091820292909201015260095461259f9130911684611aaa565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906125d8908590600090869030904290600401613500565b600060405180830381600087803b1580156125f257600080fd5b505af1158015612606573d6000803e3d6000fd5b5050505050611a71565b611a71816127e7565b600954600160a01b900460ff1661269157600654604051632e1a7d4d60e01b81526101009091046001600160a01b031690632e1a7d4d9061265e9084906004016134f7565b600060405180830381600087803b15801561267857600080fd5b505af115801561268c573d6000803e3d6000fd5b505050505b600b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611038573d6000803e3d6000fd5b600954600160a01b900460ff161561278f576009546126f59030906001600160a01b031684611aaa565b600954600c5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926127359230928992600092839216904290600401612f97565b6060604051808303818588803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127879190612f1d565b505050611038565b61103882826128d9565b600081836127ba5760405162461bcd60e51b8152600401610b109190613064565b5060008385816127c657fe5b0495945050505050565b60606127df8484600085612a84565b949350505050565b6008546127ff9030906001600160a01b031683611aaa565b612807612b81565b5060408051610100810182523080825273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26020830152610bb882840152606082015242608082015260a08101839052600060c0820181905260e0820152600854915163414bf38960e01b815290916001600160a01b03169063414bf389906128879084906004016133e0565b602060405180830381600087803b1580156128a157600080fd5b505af11580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef39190612e93565b6007546128f19030906001600160a01b031684611aaa565b60065460075460405163095ea7b360e01b81526001600160a01b0361010090930483169263095ea7b39261292c929116908590600401612fd2565b602060405180830381600087803b15801561294657600080fd5b505af115801561295a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297e9190612e5f565b50612987612bc5565b50604080516101608101825230815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26020820152610bb881830152620d89b3196060820152620d89b4608082015260a0810184905260c08101839052600060e08201819052610100820152600c546001600160a01b03908116610120830152426101408301526007549251634418b22b60e11b815291921690638831645690612a29908490600401613449565b608060405180830381600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7b9190612eab565b50505050505050565b6060612a8f85612b48565b612aab5760405162461bcd60e51b8152600401610b109061332f565b60006060866001600160a01b03168587604051612ac89190612f67565b60006040518083038185875af1925050503d8060008114612b05576040519150601f19603f3d011682016040523d82523d6000602084013e612b0a565b606091505b50915091508115612b1e5791506127df9050565b805115612b2e5780518082602001fd5b8360405162461bcd60e51b8152600401610b109190613064565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906127df575050151592915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b600060208284031215612c32578081fd5b8135611a9f816135b8565b600060208284031215612c4e578081fd5b8151611a9f816135b8565b60008060408385031215612c6b578081fd5b8235612c76816135b8565b91506020830135612c86816135b8565b809150509250929050565b600080600060608486031215612ca5578081fd5b8335612cb0816135b8565b92506020840135612cc0816135b8565b929592945050506040919091013590565b600080600080600060808688031215612ce8578081fd5b8535612cf3816135b8565b94506020860135612d03816135b8565b935060408601359250606086013567ffffffffffffffff80821115612d26578283fd5b818801915088601f830112612d39578283fd5b813581811115612d47578384fd5b896020828501011115612d58578384fd5b9699959850939650602001949392505050565b60008060408385031215612d7d578182fd5b8235612d88816135b8565b91506020830135612c86816135cd565b60008060408385031215612daa578182fd5b8235612db5816135b8565b946020939093013593505050565b600080600060408486031215612dd7578283fd5b833567ffffffffffffffff80821115612dee578485fd5b818601915086601f830112612e01578485fd5b813581811115612e0f578586fd5b8760208083028501011115612e22578586fd5b60209283019550935050840135612e38816135cd565b809150509250925092565b600060208284031215612e54578081fd5b8135611a9f816135cd565b600060208284031215612e70578081fd5b8151611a9f816135cd565b600060208284031215612e8c578081fd5b5035919050565b600060208284031215612ea4578081fd5b5051919050565b60008060008060808587031215612ec0578384fd5b8451935060208501516fffffffffffffffffffffffffffffffff81168114612ee6578384fd5b6040860151606090960151949790965092505050565b60008060408385031215612f0e578182fd5b50508035926020909101359150565b600080600060608486031215612f31578081fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03169052565b60020b9052565b62ffffff169052565b60008251612f7981846020870161358c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03929092168252602082015260400190565b6040808252810183905260008460608301825b8681101561302e5760208335613013816135b8565b6001600160a01b031683529283019290910190600101612ffe565b5080925050508215156020830152949350505050565b901515815260200190565b6001600160e01b031991909116815260200190565b600060208252825180602084015261308381604085016020870161358c565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601690820152751bdd995c8b5b585e0b5dd85b1b195d0b585b5bdd5b9d60521b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600c908201526b4f7665722d6d61782d46656560a01b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601690820152756d61782d74782d616d6f756e742d6f766572666c6f7760501b604082015260600190565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b60006101608201905061345d828451612f4a565b602083015161346f6020840182612f4a565b5060408301516134826040840182612f5e565b5060608301516134956060840182612f57565b5060808301516134a86080840182612f57565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401516134e682850182612f4a565b505061014092830151919092015290565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561354f5784516001600160a01b03168352938301939183019160010161352a565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60005b838110156135a757818101518382015260200161358f565b83811115610d8e5750506000910152565b6001600160a01b0381168114611a7157600080fd5b8015158114611a7157600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220019bff146aba2b217029e3aac67059fc91c85cf9736a04a5cbd50539d58d21aa64736f6c634300060c0033
Deployed Bytecode Sourcemap
37461:17517:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38781:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42812:619;;;;;;;;;;-1:-1:-1;42812:619:0;;;;;:::i;:::-;;:::i;:::-;;18405:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38578:34::-;;;;;;;;;;;;;:::i;19892:161::-;;;;;;;;;;-1:-1:-1;19892:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42179:123::-;;;;;;;;;;-1:-1:-1;42179:123:0;;;;;:::i;:::-;;:::i;38081:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38619:32::-;;;;;;;;;;;;;:::i;44056:399::-;;;;;;;;;;-1:-1:-1;44056:399:0;;;;;:::i;:::-;;:::i;42412:233::-;;;;;;;;;;-1:-1:-1;42412:233:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38741:33::-;;;;;;;;;;;;;:::i;18881:100::-;;;;;;;;;;;;;:::i;44900:202::-;;;;;;;;;;-1:-1:-1;44900:202:0;;;;;:::i;:::-;;:::i;20524:397::-;;;;;;;;;;-1:-1:-1;20524:397:0;;;;;:::i;:::-;;:::i;42310:94::-;;;;;;;;;;-1:-1:-1;42310:94:0;;;;;:::i;:::-;;:::i;38534:37::-;;;;;;;;;;;;;:::i;18564:92::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21329:210::-;;;;;;;;;;-1:-1:-1;21329:210:0;;;;;:::i;:::-;;:::i;38857:41::-;;;;;;;;;;;;;:::i;38358:39::-;;;;;;;;;;;;;:::i;22472:120::-;;;;;;;;;;-1:-1:-1;22472:120:0;;;;;:::i;:::-;;:::i;37979:28::-;;;;;;;;;;;;;:::i;47283:126::-;;;;;;;;;;-1:-1:-1;47283:126:0;;;;;:::i;:::-;;:::i;54652:171::-;;;:::i;38658:31::-;;;;;;;;;;;;;:::i;39488:57::-;;;;;;;;;;-1:-1:-1;39488:57:0;;;;;:::i;:::-;;:::i;46969:143::-;;;;;;;;;;-1:-1:-1;46969:143:0;;;;;:::i;:::-;;:::i;44463:237::-;;;;;;;;;;-1:-1:-1;44463:237:0;;;;;:::i;:::-;;:::i;45987:177::-;;;;;;;;;;-1:-1:-1;45987:177:0;;;;;:::i;:::-;;:::i;41893:151::-;;;;;;;;;;-1:-1:-1;41893:151:0;;;;;:::i;:::-;;:::i;42653:::-;;;;;;;;;;-1:-1:-1;42653:151:0;;;;;:::i;:::-;;:::i;19043:119::-;;;;;;;;;;-1:-1:-1;19043:119:0;;;;;:::i;:::-;;:::i;1790:140::-;;;;;;;;;;;;;:::i;37899:34::-;;;;;;;;;;;;;:::i;37940:32::-;;;;;;;;;;;;;:::i;38447:33::-;;;;;;;;;;;;;:::i;38404:36::-;;;;;;;;;;;;;:::i;39288:42::-;;;;;;;;;;-1:-1:-1;39288:42:0;;;;;:::i;:::-;;:::i;18248:94::-;;;;;;;;;;;;;:::i;38905:50::-;;;;;;;;;;;;;:::i;38014:28::-;;;;;;;;;;;;;:::i;1148:79::-;;;;;;;;;;;;;:::i;37833:59::-;;;;;;;;;;;;;:::i;38487:40::-;;;;;;;;;;;;;:::i;18721:96::-;;;;;;;;;;;;;:::i;54833:142::-;;;;;;;;;;-1:-1:-1;54833:142:0;;;;;:::i;:::-;;:::i;22041:311::-;;;;;;;;;;-1:-1:-1;22041:311:0;;;;;:::i;:::-;;:::i;45110:164::-;;;;;;;;;;-1:-1:-1;45110:164:0;;;;;:::i;:::-;;:::i;19374:167::-;;;;;;;;;;-1:-1:-1;19374:167:0;;;;;:::i;:::-;;:::i;38987:54::-;;;;;;;;;;;;;:::i;38698:36::-;;;;;;;;;;;;;:::i;42052:119::-;;;;;;;;;;-1:-1:-1;42052:119:0;;;;;:::i;:::-;;:::i;45620:163::-;;;;;;;;;;-1:-1:-1;45620:163:0;;;;;:::i;:::-;;:::i;44708:184::-;;;;;;;;;;-1:-1:-1;44708:184:0;;;;;:::i;:::-;;:::i;46172:404::-;;;;;;;;;;-1:-1:-1;46172:404:0;;;;;:::i;:::-;;:::i;47120:155::-;;;;;;;;;;-1:-1:-1;47120:155:0;;;;;:::i;:::-;;:::i;45282:330::-;;;;;;;;;;-1:-1:-1;45282:330:0;;;;;:::i;:::-;;:::i;47417:138::-;;;;;;;;;;-1:-1:-1;47417:138:0;;;;;:::i;:::-;;:::i;38192:101::-;;;;;;;;;;;;;:::i;43439:609::-;;;;;;;;;;-1:-1:-1;43439:609:0;;;;;:::i;:::-;;:::i;19603:143::-;;;;;;;;;;-1:-1:-1;19603:143:0;;;;;:::i;:::-;;:::i;46584:377::-;;;;;;;;;;-1:-1:-1;46584:377:0;;;;;:::i;:::-;;:::i;2085:109::-;;;;;;;;;;-1:-1:-1;2085:109:0;;;;;:::i;:::-;;:::i;38302:47::-;;;;;;;;;;;;;:::i;38781:65::-;;;;:::o;42812:619::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;;;;;;;;;42926:20:::1;:29:::0;;;42966:21:::1;:31:::0;;;43050:17:::1;::::0;43025:43:::1;::::0;42949:6;;43025:24:::1;:43::i;:::-;43008:14;:60:::0;43123:18:::1;::::0;43097:21:::1;::::0;:45:::1;::::0;:25:::1;:45::i;:::-;43079:15;:63:::0;43181:13:::1;::::0;43230:12:::1;::::0;43263:14:::1;::::0;43176:2:::1;:18:::0;;::::1;::::0;43225:17;;;::::1;::::0;43263:27;-1:-1:-1;43263:27:0::1;43255:52;;;;-1:-1:-1::0;;;43255:52:0::1;;;;;;;:::i;:::-;43345:10;43326:15;;:29;;43318:54;;;;-1:-1:-1::0;;;43318:54:0::1;;;;;;;:::i;:::-;43388:35;43407:6;43415:7;43388:35;;;;;;;:::i;:::-;;;;;;;;1430:1;;42812:619:::0;;:::o;18405:92::-;18484:5;18477:12;;;;;;;;-1:-1:-1;;18477:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18451:13;;18477:12;;18484:5;;18477:12;;18484:5;18477:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18405:92;:::o;38578:34::-;;;;:::o;19892:161::-;19967:4;19984:39;19993:12;:10;:12::i;:::-;20007:7;20016:6;19984:8;:39::i;:::-;-1:-1:-1;20041:4:0;19892:161;;;;;:::o;42179:123::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;42256:12:::1;:38:::0;;-1:-1:-1;;;;;;42256:38:0::1;-1:-1:-1::0;;;;;42256:38:0;;;::::1;::::0;;;::::1;::::0;;42179:123::o;38081:104::-;;;-1:-1:-1;;;;;38081:104:0;;:::o;38619:32::-;;;;:::o;44056:399::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;44162:12:::1;:21:::0;;;44194:13:::1;:23:::0;;;44338:14:::1;::::0;44251:2:::1;:18:::0;;::::1;::::0;44300:17;;;::::1;::::0;44338:27;-1:-1:-1;44338:27:0::1;44330:52;;;;-1:-1:-1::0;;;44330:52:0::1;;;;;;;:::i;:::-;44420:10;44401:15;;:29;;44393:54;;;;-1:-1:-1::0;;;44393:54:0::1;;;;;;;:::i;:::-;1430:1;;44056:399:::0;;:::o;42412:233::-;-1:-1:-1;;;42412:233:0;;;;;;;:::o;38741:33::-;;;;:::o;18881:100::-;18961:12;;18881:100;:::o;44900:202::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44991:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;:45;;-1:-1:-1;;44991:45:0::1;::::0;::::1;;;::::0;;45054:40;::::1;::::0;::::1;::::0;44991:45;;45054:40:::1;:::i;:::-;;;;;;;;44900:202:::0;;:::o;20524:397::-;20656:4;20673:36;20683:6;20691:9;20702:6;20673:9;:36::i;:::-;20720:171;20743:6;20764:12;:10;:12::i;:::-;20791:89;20829:6;20791:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20791:19:0;;;;;;:11;:19;;;;;;20811:12;:10;:12::i;:::-;-1:-1:-1;;;;;20791:33:0;;;;;;;;;;;;-1:-1:-1;20791:33:0;;;:89;:37;:89::i;:::-;20720:8;:171::i;:::-;-1:-1:-1;20909:4:0;20524:397;;;;;:::o;42310:94::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;42378:8:::1;:18:::0;;;::::1;;-1:-1:-1::0;;;42378:18:0::1;-1:-1:-1::0;;;;42378:18:0;;::::1;::::0;;;::::1;::::0;;42310:94::o;38534:37::-;;;;:::o;18564:92::-;18639:9;;;;18564:92;:::o;21329:210::-;21409:4;21426:83;21435:12;:10;:12::i;:::-;21449:7;21458:50;21497:10;21458:11;:25;21470:12;:10;:12::i;:::-;-1:-1:-1;;;;;21458:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21458:25:0;;;:34;;;;;;;;;;;:38;:50::i;38857:41::-;;;;;;:::o;38358:39::-;;;;:::o;22472:120::-;22518:4;22535:27;22541:12;:10;:12::i;:::-;22555:6;22535:5;:27::i;:::-;-1:-1:-1;22580:4:0;22472:120;;;:::o;37979:28::-;;;-1:-1:-1;;;37979:28:0;;;;;:::o;47283:126::-;-1:-1:-1;;;;;47373:28:0;47349:4;47373:28;;;:19;:28;;;;;;;;;47283:126::o;54652:171::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;54774:41:::1;::::0;54752:10:::1;::::0;;;54793:21:::1;54774:41:::0;::::1;;;::::0;54716:25:::1;54774:41:::0;54716:25;54774:41;54793:21;54752:10;54774:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1430:1;54652:171::o:0;38658:31::-;;;;:::o;39488:57::-;;;;;;;;;;;;;;;:::o;46969:143::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;47041:11:::1;:21:::0;;;47078:26:::1;::::0;::::1;::::0;::::1;::::0;47055:7;;47078:26:::1;:::i;:::-;;;;;;;;46969:143:::0;:::o;44463:237::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;44558:17:::1;:33:::0;;;44602:14:::1;:27:::0;;;44655:37:::1;44578:13:::0;44619:10;44655:21:::1;:37::i;:::-;44642:10;:50:::0;-1:-1:-1;;44463:237:0:o;45987:177::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;46065:20:::1;:30:::0;;;46111:45:::1;::::0;::::1;::::0;::::1;::::0;46088:7;;46111:45:::1;:::i;41893:151::-:0;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;41972:24:::1;:64:::0;;-1:-1:-1;;;;;;41972:64:0::1;-1:-1:-1::0;;;;;41972:64:0;;;::::1;::::0;;;::::1;::::0;;41893:151::o;42653:::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;42724:21:::1;:29:::0;;-1:-1:-1;;42724:29:0::1;::::0;::::1;;;::::0;;42769:27:::1;::::0;::::1;::::0;::::1;::::0;42724:29;;42769:27:::1;:::i;19043:119::-:0;-1:-1:-1;;;;;19136:18:0;19109:7;19136:18;;;:9;:18;;;;;;;19043:119::o;1790:140::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;1889:1:::1;1873:6:::0;;1852:40:::1;::::0;-1:-1:-1;;;;;1873:6:0;;::::1;::::0;1852:40:::1;::::0;1889:1;;1852:40:::1;1920:1;1903:19:::0;;-1:-1:-1;;;;;;1903:19:0::1;::::0;;1790:140::o;37899:34::-;;;-1:-1:-1;;;;;37899:34:0;;:::o;37940:32::-;;;-1:-1:-1;;;;;37940:32:0;;:::o;38447:33::-;;;;:::o;38404:36::-;;;;:::o;39288:42::-;;;;;;;;;;;;;;;:::o;18248:94::-;18300:7;18327;:5;:7::i;:::-;18320:14;;18248:94;:::o;38905:50::-;;;;:::o;38014:28::-;;;-1:-1:-1;;;;;38014:28:0;;:::o;1148:79::-;1186:7;1213:6;-1:-1:-1;;;;;1213:6:0;1148:79;:::o;37833:59::-;;;-1:-1:-1;;;;;37833:59:0;;:::o;38487:40::-;;;;:::o;18721:96::-;18802:7;18795:14;;;;;;;;-1:-1:-1;;18795:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18769:13;;18795:14;;18802:7;;18795:14;;18802:7;18795:14;;;;;;;;;;;;;;;;;;;;;;;;54833:142;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;54919:48:::1;-1:-1:-1::0;;;;;54919:27:0;::::1;54947:10;54959:7:::0;54919:27:::1;:48::i;22041:311::-:0;22126:4;22143:179;22166:12;:10;:12::i;:::-;22193:7;22215:96;22254:15;22215:96;;;;;;;;;;;;;;;;;:11;:25;22227:12;:10;:12::i;:::-;-1:-1:-1;;;;;22215:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22215:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;45110:164::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45193:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;;:30;;-1:-1:-1;;45193:30:0::1;::::0;::::1;;;::::0;;45241:25;::::1;::::0;::::1;::::0;45193:30;;45241:25:::1;:::i;19374:167::-:0;19452:4;19469:42;19479:12;:10;:12::i;:::-;19493:9;19504:6;19469:9;:42::i;38987:54::-;;;;:::o;38698:36::-;;;;:::o;42052:119::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;42125:15:::1;:38:::0;;-1:-1:-1;;;;;;42125:38:0::1;-1:-1:-1::0;;;;;42125:38:0;;;::::1;::::0;;;::::1;::::0;;42052:119::o;45620:163::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;45734:41:::1;45763:4;45769:5;45734:28;:41::i;44708:184::-:0;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44793:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;:39;;-1:-1:-1;;44793:39:0::1;::::0;::::1;;;::::0;;44850:34;::::1;::::0;::::1;::::0;44793:39;;44850:34:::1;:::i;46172:404::-:0;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;46288:44:::1;46304:21;46327:4;46288:15;:44::i;:::-;46359:18;::::0;46343:42:::1;::::0;-1:-1:-1;;;;;46359:18:0::1;;46343:15;:42::i;:::-;46477:18;::::0;46401:105:::1;::::0;-1:-1:-1;;;;;46477:18:0;;::::1;::::0;46401:105;::::1;::::0;::::1;::::0;46477:18:::1;::::0;46401:105:::1;46517:18;:51:::0;;-1:-1:-1;;;;;;46517:51:0::1;-1:-1:-1::0;;;;;46517:51:0;;;::::1;::::0;;;::::1;::::0;;46172:404::o;47120:155::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;47196:15:::1;:25:::0;;;47237:30:::1;::::0;::::1;::::0;::::1;::::0;47214:7;;47237:30:::1;:::i;45282:330::-:0;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;45425:9:::1;45420:116;45440:19:::0;;::::1;45420:116;;;45516:8;45481:19;:32;45501:8;;45510:1;45501:11;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45481:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45481:32:0;:43;;-1:-1:-1;;45481:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;45461:3:0::1;45420:116;;;;45553:51;45585:8;;45595;45553:51;;;;;;;;:::i;:::-;;;;;;;;45282:330:::0;;;:::o;47417:138::-;-1:-1:-1;;;;;47513:34:0;47489:4;47513:34;;;:25;:34;;;;;;;;;47417:138::o;38192:101::-;;;-1:-1:-1;;;;;38192:101:0;;:::o;43439:609::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;43550:17:::1;:26:::0;;;43587:18:::1;:28:::0;;;43643:20:::1;::::0;:43:::1;::::0;43570:6;43643:24:::1;:43::i;:::-;43626:14;:60:::0;43741:18:::1;::::0;43715:21:::1;::::0;:45:::1;::::0;:25:::1;:45::i;:::-;43697:15;:63:::0;43799:13:::1;::::0;43848:12:::1;::::0;43881:14:::1;::::0;43794:2:::1;:18:::0;;::::1;::::0;43843:17;;;::::1;::::0;43881:27;-1:-1:-1;43881:27:0::1;43873:52;;;;-1:-1:-1::0;;;43873:52:0::1;;;;;;;:::i;:::-;43963:10;43944:15;;:29;;43936:54;;;;-1:-1:-1::0;;;43936:54:0::1;;;;;;;:::i;:::-;44008:32;44024:6;44032:7;44008:32;;;;;;;:::i;19603:143::-:0;-1:-1:-1;;;;;19711:18:0;;;19684:7;19711:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19603:143::o;46584:377::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;46694:41:::1;46710:18;46730:4;46694:15;:41::i;:::-;46762:15;::::0;46746:39:::1;::::0;-1:-1:-1;;;;;46762:15:0::1;;46746;:39::i;:::-;46871:15;::::0;46801:96:::1;::::0;-1:-1:-1;;;;;46871:15:0;;::::1;::::0;46801:96;::::1;::::0;::::1;::::0;46871:15:::1;::::0;46801:96:::1;46908:15;:45:::0;;-1:-1:-1;;;;;;46908:45:0::1;-1:-1:-1::0;;;;;46908:45:0;;;::::1;::::0;;;::::1;::::0;;46584:377::o;2085:109::-;1370:12;:10;:12::i;:::-;1360:6;;-1:-1:-1;;;;;1360:6:0;;;:22;;;1352:67;;;;-1:-1:-1;;;1352:67:0;;;;;;;:::i;:::-;2158:28:::1;2177:8;2158:18;:28::i;:::-;2085:109:::0;:::o;38302:47::-;;;;:::o;5948:181::-;6006:7;6038:5;;;6062:6;;;;6054:46;;;;-1:-1:-1;;;6054:46:0;;;;;;;:::i;:::-;6120:1;5948:181;-1:-1:-1;;;5948:181:0:o;310:98::-;390:10;310:98;:::o;25304:372::-;-1:-1:-1;;;;;25432:19:0;;25424:68;;;;-1:-1:-1;;;25424:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25511:21:0;;25503:68;;;;-1:-1:-1;;;25503:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25584:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;25636:32;;;;;25614:6;;25636:32;:::i;:::-;;;;;;;;25304:372;;;:::o;47563:2903::-;-1:-1:-1;;;;;47695:18:0;;47687:68;;;;-1:-1:-1;;;47687:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47774:16:0;;47766:64;;;;-1:-1:-1;;;47766:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47848:31:0;;;;;;:25;:31;;;;;;;;47843:121;;47914:11;;47904:6;:21;;47896:56;;;;-1:-1:-1;;;47896:56:0;;;;;;;:::i;:::-;47980:11;47976:93;;48008:28;48024:4;48030:2;48034:1;48008:15;:28::i;:::-;48051:7;;47976:93;48085:21;;;;48081:582;;;48123:28;48154:24;48172:4;48154:9;:24::i;:::-;48234:20;;48123:55;;-1:-1:-1;48210:44:0;;;;;;;48275:20;;-1:-1:-1;48287:8:0;;-1:-1:-1;;;48287:8:0;;;;48286:9;48275:20;:56;;;;-1:-1:-1;;;;;;48300:31:0;;;;;;:25;:31;;;;;;;;48299:32;48275:56;:104;;;;-1:-1:-1;;;;;;48337:29:0;;;;;;:25;:29;;;;;;;;48336:30;;:42;;-1:-1:-1;48370:8:0;;-1:-1:-1;;;48370:8:0;;;;48336:42;48271:381;;;48400:8;:15;;-1:-1:-1;;;;48400:15:0;-1:-1:-1;;;48400:15:0;;;48530:20;;;-1:-1:-1;48569:32:0;48530:20;48569:10;:32::i;:::-;48620:8;:16;;-1:-1:-1;;;;48620:16:0;;;48271:381;48081:582;;;-1:-1:-1;;;;;48858:25:0;;48737:12;48858:25;;;:19;:25;;;;;;48752:4;;48858:25;;;:52;;-1:-1:-1;;;;;;48887:23:0;;;;;;:19;:23;;;;;;;;48858:52;48854:100;;;-1:-1:-1;48937:5:0;48854:100;48970:7;48966:1293;;;-1:-1:-1;;;;;49025:16:0;;48994:12;49025:16;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;49045:14:0;;;;;;:10;:14;;;;;;;;49025:34;49021:1227;;;-1:-1:-1;;;;;49084:16:0;;;;;;:10;:16;;;;;;;;49080:1109;;;49132:37;49163:5;49132:26;49143:14;;49132:6;:10;;:26;;;;:::i;:::-;:30;;:37::i;:::-;49196:12;;49125:44;;-1:-1:-1;49196:16:0;49192:430;;49241:18;49262:35;49291:5;49262:24;49273:12;;49262:6;:10;;:24;;;;:::i;:35::-;49241:56;-1:-1:-1;49324:58:0;49340:4;49354;49361:20;:4;49241:56;49361:8;:20::i;:::-;49324:15;:58::i;:::-;49418:22;:6;49429:10;49418;:22::i;:::-;49409:31;;49467:32;49481:4;49488:10;49467:5;:32::i;:::-;49192:430;;;;49556:42;49572:4;49586;49593;49556:15;:42::i;:::-;49080:1109;;;49677:38;49709:5;49677:27;49688:15;;49677:6;:10;;:27;;;;:::i;:38::-;49742:13;;49670:45;;-1:-1:-1;49742:17:0;49738:432;;49788:18;49809:36;49839:5;49809:25;49820:13;;49809:6;:10;;:25;;;;:::i;:36::-;49788:57;-1:-1:-1;49872:58:0;49888:4;49902;49909:20;:4;49788:57;49909:8;:20::i;49872:58::-;49966:22;:6;49977:10;49966;:22::i;:::-;49957:31;;50015:32;50029:4;50036:10;50015:5;:32::i;:::-;49738:432;;;;50104:42;50120:4;50134;50141;50104:15;:42::i;:::-;50216:16;:6;50227:4;50216:10;:16::i;:::-;50207:25;;49021:1227;48966:1293;;-1:-1:-1;;;;;50276:29:0;;;;;;:25;:29;;;;;;;;50271:142;;50359:15;;50330:25;50348:6;50330:13;50340:2;50330:9;:13::i;:::-;:17;;:25::i;:::-;:44;;50322:79;;;;-1:-1:-1;;;50322:79:0;;;;;;;:::i;:::-;50425:33;50441:4;50447:2;50451:6;50425:15;:33::i;47563:2903::-;;;;:::o;6851:226::-;6971:7;7007:12;6999:6;;;;6991:29;;;;-1:-1:-1;;;6991:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7043:5:0;;;6851:226::o;24516:348::-;-1:-1:-1;;;;;24592:21:0;;24584:67;;;;-1:-1:-1;;;24584:67:0;;;;;;;:::i;:::-;24685:68;24708:6;24685:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24685:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;24664:18:0;;;;;;:9;:18;;;;;:89;24779:12;;:24;;24796:6;24779:16;:24::i;:::-;24764:12;:39;24819:37;;24845:1;;-1:-1:-1;;;;;24819:37:0;;;;;;;24849:6;;24819:37;:::i;:::-;;;;;;;;24516:348;;:::o;26243:211::-;26360:86;26380:5;26410:23;;;26435:2;26439:5;26387:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26387:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26387:58:0;-1:-1:-1;;;;;;26387:58:0;;;;;;;;;;26360:19;:86::i;45791:188::-;-1:-1:-1;;;;;45874:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;45874:39:0;;;;;;;;;;45931:40;;45874:39;;:31;45931:40;;;45791:188;;:::o;2300:229::-;-1:-1:-1;;;;;2374:22:0;;2366:73;;;;-1:-1:-1;;;2366:73:0;;;;;;;:::i;:::-;2476:6;;;2455:38;;-1:-1:-1;;;;;2455:38:0;;;;2476:6;;;2455:38;;;2504:6;:17;;-1:-1:-1;;;;;;2504:17:0;-1:-1:-1;;;;;2504:17:0;;;;;;;;;;2300:229::o;23082:513::-;-1:-1:-1;;;;;23222:20:0;;23214:70;;;;-1:-1:-1;;;23214:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23303:23:0;;23295:71;;;;-1:-1:-1;;;23295:71:0;;;;;;;:::i;:::-;23399;23421:6;23399:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23399:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23379:17:0;;;;;;;:9;:17;;;;;;:91;;;;23504:20;;;;;;;:32;;23529:6;23504:24;:32::i;:::-;-1:-1:-1;;;;;23481:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23552:35;;;;;;;;;;23580:6;;23552:35;:::i;50474:834::-;50534:26;50563:47;50599:10;;50563:31;50579:14;;50563:11;:15;;:31;;;;:::i;:47::-;50534:76;-1:-1:-1;50621:23:0;50647:35;:11;50534:76;50647:15;:35::i;:::-;50621:61;;50693:36;50713:15;50693:19;:36::i;:::-;50811:8;;50764:21;;-1:-1:-1;;;50811:8:0;;;;50806:87;;50852:4;;:29;;-1:-1:-1;;;50852:29:0;;:4;;;;-1:-1:-1;;;;;50852:4:0;;:14;;:29;;50875:4;;50852:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50836:45;;50806:87;50905:26;50934:49;50972:10;;50934:33;50952:14;;50934:13;:17;;:33;;;;:::i;:49::-;50905:78;-1:-1:-1;50994:26:0;51023:37;:13;50905:78;51023:17;:37::i;:::-;50994:66;-1:-1:-1;51077:22:0;;51073:109;;51116:54;51151:18;51116:34;:54::i;:::-;51198:22;;51194:107;;51237:52;51250:18;51270;51237:12;:52::i;:::-;50474:834;;;;;;:::o;7336:471::-;7394:7;7639:6;7635:47;;-1:-1:-1;7669:1:0;7662:8;;7635:47;7706:5;;;7710:1;7706;:5;:1;7730:5;;;;;:10;7722:56;;;;-1:-1:-1;;;7722:56:0;;;;;;;:::i;8283:132::-;8341:7;8368:39;8372:1;8375;8368:39;;;;;;;;;;;;;;;;;:3;:39::i;6412:136::-;6470:7;6497:43;6501:1;6504;6497:43;;;;;;;;;;;;;;;;;:3;:43::i;28778:774::-;29202:23;29228:69;29256:4;29228:69;;;;;;;;;;;;;;;;;29236:5;-1:-1:-1;;;;;29228:27:0;;;:69;;;;;:::i;:::-;29312:17;;29202:95;;-1:-1:-1;29312:21:0;29308:237;;29467:10;29456:30;;;;;;;;;;;;:::i;:::-;29448:85;;;;-1:-1:-1;;;29448:85:0;;;;;;;:::i;51336:744::-;51409:8;;-1:-1:-1;;;51409:8:0;;;;51405:668;;;51525:16;;;51539:1;51525:16;;;51501:21;51525:16;;;;;51501:21;51525:16;;;;;;;;;;-1:-1:-1;51525:16:0;51501:40;;51574:4;51556;51561:1;51556:7;;;;;;;;-1:-1:-1;;;;;51556:23:0;;;:7;;;;;;;;;;:23;;;;51604:12;;:19;;;-1:-1:-1;;;51604:19:0;;;;:12;;;;;:17;;:19;;;;;51556:7;;51604:19;;;;;:12;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51594:4;51599:1;51594:7;;;;;;;;-1:-1:-1;;;;;51594:29:0;;;:7;;;;;;;;;:29;51672:12;;51640:59;;51657:4;;51672:12;51687:11;51640:8;:59::i;:::-;51746:12;;:248;;-1:-1:-1;;;51746:248:0;;-1:-1:-1;;;;;51746:12:0;;;;:63;;:248;;51828:11;;51746:12;;51909:4;;51940;;51964:15;;51746:248;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51405:668;;;;52027:34;52049:11;52027:21;:34::i;54449:195::-;54533:8;;-1:-1:-1;;;54533:8:0;;;;54528:63;;54558:4;;:21;;-1:-1:-1;;;54558:21:0;;:4;;;;-1:-1:-1;;;;;54558:4:0;;:13;;:21;;54572:6;;54558:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54528:63;54601:18;;:35;;-1:-1:-1;;;;;54601:18:0;;;;:35;;;;;54629:6;;54601:18;:35;:18;:35;54629:6;54601:18;:35;;;;;;;;;;;;;;;;;;;52088:666;52173:8;;-1:-1:-1;;;52173:8:0;;;;52169:578;;;52301:12;;52269:59;;52286:4;;-1:-1:-1;;;;;52301:12:0;52316:11;52269:8;:59::i;:::-;52379:12;;52600:15;;52379:285;;-1:-1:-1;;;52379:285:0;;-1:-1:-1;;;;;52379:12:0;;;;:28;;52415:9;;52379:285;;52452:4;;52476:11;;52379:12;;;;52600:15;;52634;;52379:285;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;52169:578;;;52697:38;52712:11;52725:9;52697:14;:38::i;8911:312::-;9031:7;9066:12;9059:5;9051:28;;;;-1:-1:-1;;;9051:28:0;;;;;;;;:::i;:::-;;9090:9;9106:1;9102;:5;;;;;;;8911:312;-1:-1:-1;;;;;8911:312:0:o;14800:230::-;14937:12;14969:53;14992:6;15000:4;15006:1;15009:12;14969:22;:53::i;:::-;14962:60;14800:230;-1:-1:-1;;;;14800:230:0:o;52782:655::-;52885:15;;52853:62;;52870:4;;-1:-1:-1;;;;;52885:15:0;52903:11;52853:8;:62::i;:::-;52954:48;;:::i;:::-;-1:-1:-1;53005:371:0;;;;;;;;53090:4;53005:371;;;37606:42;53005:371;;;;53152:4;53005:371;;;;;;;;53228:15;53005:371;;;;;;;;;;-1:-1:-1;53005:371:0;;;;;;;;;;53389:15;;:40;;-1:-1:-1;;;53389:40:0;;53005:371;;-1:-1:-1;;;;;53389:15:0;;:32;;:40;;53005:371;;53389:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;53445:996::-;53627:24;;53595:71;;53612:4;;-1:-1:-1;;;;;53627:24:0;53654:11;53595:8;:71::i;:::-;53677:4;;53698:24;;53677:58;;-1:-1:-1;;;53677:58:0;;-1:-1:-1;;;;;53677:4:0;;;;;;;:12;;:58;;53698:24;;;53725:9;;53677:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53778:65;;:::i;:::-;-1:-1:-1;53846:537:0;;;;;;;;53920:4;53846:537;;37606:42;53846:537;;;;53980:4;53846:537;;;;-1:-1:-1;;53846:537:0;;;;54084:40;53846:537;;;;;;;;;;;;;;;;-1:-1:-1;53846:537:0;;;;;;;;;;54308:15;;-1:-1:-1;;;;;54308:15:0;;;53846:537;;;;54352:15;53846:537;;;;54396:24;;:37;;-1:-1:-1;;;54396:37:0;;53846:537;;54396:24;;:29;;:37;;53846:537;;54396:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;53445:996;;;:::o;16288:1020::-;16461:12;16494:18;16505:6;16494:10;:18::i;:::-;16486:60;;;;-1:-1:-1;;;16486:60:0;;;;;;;:::i;:::-;16620:12;16634:23;16661:6;-1:-1:-1;;;;;16661:11:0;16680:8;16690:4;16661:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16619:76;;;;16710:7;16706:595;;;16741:10;-1:-1:-1;16734:17:0;;-1:-1:-1;16734:17:0;16706:595;16855:17;;:21;16851:439;;17118:10;17112:17;17179:15;17166:10;17162:2;17158:19;17151:44;17066:148;17261:12;17254:20;;-1:-1:-1;;;17254:20:0;;;;;;;;:::i;11663:641::-;11723:4;12204:20;;12034:66;12253:23;;;;;;:42;;-1:-1:-1;;12280:15:0;;;12245:51;-1:-1:-1;;11663:641:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1704:241::-;;1808:2;1796:9;1787:7;1783:23;1779:32;1776:2;;;-1:-1;;1814:12;1776:2;85:6;72:20;97:33;124:5;97:33;:::i;1952:263::-;;2067:2;2055:9;2046:7;2042:23;2038:32;2035:2;;;-1:-1;;2073:12;2035:2;226:6;220:13;238:33;265:5;238:33;:::i;2222:366::-;;;2343:2;2331:9;2322:7;2318:23;2314:32;2311:2;;;-1:-1;;2349:12;2311:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2401:63;-1:-1;2501:2;2540:22;;72:20;97:33;72:20;97:33;:::i;:::-;2509:63;;;;2305:283;;;;;:::o;2595:491::-;;;;2733:2;2721:9;2712:7;2708:23;2704:32;2701:2;;;-1:-1;;2739:12;2701:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2791:63;-1:-1;2891:2;2930:22;;72:20;97:33;72:20;97:33;:::i;:::-;2695:391;;2899:63;;-1:-1;;;2999:2;3038:22;;;;1493:20;;2695:391::o;3093:741::-;;;;;;3267:3;3255:9;3246:7;3242:23;3238:33;3235:2;;;-1:-1;;3274:12;3235:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3326:63;-1:-1;3426:2;3465:22;;72:20;97:33;72:20;97:33;:::i;:::-;3434:63;-1:-1;3534:2;3573:22;;1493:20;;-1:-1;3670:2;3655:18;;3642:32;3694:18;3683:30;;;3680:2;;;-1:-1;;3716:12;3680:2;3801:6;3790:9;3786:22;;;1055:3;1048:4;1040:6;1036:17;1032:27;1022:2;;-1:-1;;1063:12;1022:2;1106:6;1093:20;3694:18;1125:6;1122:30;1119:2;;;-1:-1;;1155:12;1119:2;1250:3;3426:2;1230:17;1191:6;1216:32;;1213:41;1210:2;;;-1:-1;;1257:12;1210:2;3229:605;;;;-1:-1;3229:605;;-1:-1;3426:2;1187:17;;3736:82;3229:605;-1:-1;;;3229:605::o;3841:360::-;;;3959:2;3947:9;3938:7;3934:23;3930:32;3927:2;;;-1:-1;;3965:12;3927:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4017:63;-1:-1;4117:2;4153:22;;725:20;750:30;725:20;750:30;:::i;4208:366::-;;;4329:2;4317:9;4308:7;4304:23;4300:32;4297:2;;;-1:-1;;4335:12;4297:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4387:63;4487:2;4526:22;;;;1493:20;;-1:-1;;;4291:283::o;4581:516::-;;;;4734:2;4722:9;4713:7;4709:23;4705:32;4702:2;;;-1:-1;;4740:12;4702:2;4798:17;4785:31;4836:18;;4828:6;4825:30;4822:2;;;-1:-1;;4858:12;4822:2;4959:6;4948:9;4944:22;;;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;482:6;469:20;4836:18;501:6;498:30;495:2;;;-1:-1;;531:12;495:2;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;-1:-1;;633:12;586:2;575:4;563:17;;;;-1:-1;4878:98;-1:-1;;5049:22;;725:20;750:30;725:20;750:30;:::i;:::-;5021:60;;;;4696:401;;;;;:::o;5104:235::-;;5205:2;5193:9;5184:7;5180:23;5176:32;5173:2;;;-1:-1;;5211:12;5173:2;738:6;725:20;750:30;774:5;750:30;:::i;5346:257::-;;5458:2;5446:9;5437:7;5433:23;5429:32;5426:2;;;-1:-1;;5464:12;5426:2;873:6;867:13;885:30;909:5;885:30;:::i;5610:241::-;;5714:2;5702:9;5693:7;5689:23;5685:32;5682:2;;;-1:-1;;5720:12;5682:2;-1:-1;1493:20;;5676:175;-1:-1;5676:175::o;5858:263::-;;5973:2;5961:9;5952:7;5948:23;5944:32;5941:2;;;-1:-1;;5979:12;5941:2;-1:-1;1641:13;;5935:186;-1:-1;5935:186::o;6128:672::-;;;;;6294:3;6282:9;6273:7;6269:23;6265:33;6262:2;;;-1:-1;;6301:12;6262:2;1647:6;1641:13;6353:74;;6464:2;6518:9;6514:22;1363:13;35601:34;38209:5;35590:46;38184:5;38181:35;38171:2;;-1:-1;;38220:12;38171:2;6583;6633:22;;1641:13;6702:2;6752:22;;;1641:13;6256:544;;6472:74;;-1:-1;6256:544;-1:-1;;;6256:544::o;6807:366::-;;;6928:2;6916:9;6907:7;6903:23;6899:32;6896:2;;;-1:-1;;6934:12;6896:2;-1:-1;;1493:20;;;7086:2;7125:22;;;1493:20;;-1:-1;6890:283::o;7180:535::-;;;;7329:2;7317:9;7308:7;7304:23;7300:32;7297:2;;;-1:-1;;7335:12;7297:2;1647:6;1641:13;7387:74;;7498:2;7552:9;7548:22;1641:13;7506:74;;7617:2;7671:9;7667:22;1641:13;7625:74;;7291:424;;;;;:::o;7904:142::-;-1:-1;;;;;35710:54;7983:58;;7977:69::o;11004:97::-;35507:1;35496:20;11061:35;;11055:46::o;20383:100::-;35848:8;35837:20;20442:36;;20436:47::o;20834:271::-;;10248:5;33819:12;10359:52;10404:6;10399:3;10392:4;10385:5;10381:16;10359:52;:::i;:::-;10423:16;;;;;20968:137;-1:-1;;20968:137::o;21112:222::-;-1:-1;;;;;35710:54;;;;8140:45;;21239:2;21224:18;;21210:124::o;21847:844::-;-1:-1;;;;;35710:54;;;7983:58;;22319:2;22304:18;;20551:37;;;;22410:2;22395:18;;11187:58;;;;22501:2;22486:18;;11187:58;;;;35710:54;;;22592:3;22577:19;;7983:58;35721:42;22661:19;;20551:37;;;;22146:3;22131:19;;22117:574::o;22698:333::-;-1:-1;;;;;35710:54;;;;8140:45;;23017:2;23002:18;;20551:37;22853:2;22838:18;;22824:207::o;23038:489::-;23247:2;23261:47;;;23232:18;;34468:19;;;23038:489;8783:21;34508:14;;;23038:489;8810:291;8835:6;8832:1;8829:13;8810:291;;;34517:4;85:6;72:20;97:33;124:5;97:33;:::i;:::-;-1:-1;;;;;35710:54;8140:45;;34962:12;;;;7876:14;;;;3694:18;8850:9;8810:291;;;8814:14;23314:126;;;;;9952:5;35259:13;35252:21;34517:4;23502:9;23498:18;9925:34;23218:309;;;;;;:::o;23534:210::-;35259:13;;35252:21;9925:34;;23655:2;23640:18;;23626:118::o;23751:218::-;-1:-1;;;;;;35346:78;;;;10040:36;;23876:2;23861:18;;23847:122::o;24817:310::-;;24964:2;24985:17;24978:47;11402:5;33819:12;34480:6;24964:2;24953:9;24949:18;34468:19;11496:52;11541:6;34508:14;24953:9;34508:14;24964:2;11522:5;11518:16;11496:52;:::i;:::-;37859:7;37843:14;-1:-1;;37839:28;11560:39;;;;34508:14;11560:39;;24935:192;-1:-1;;24935:192::o;25134:416::-;25334:2;25348:47;;;11836:2;25319:18;;;34468:19;11872:34;34508:14;;;11852:55;-1:-1;;;11927:12;;;11920:27;11966:12;;;25305:245::o;25557:416::-;25757:2;25771:47;;;12217:2;25742:18;;;34468:19;-1:-1;;;34508:14;;;12233:45;12297:12;;;25728:245::o;25980:416::-;26180:2;26194:47;;;12548:2;26165:18;;;34468:19;12584:34;34508:14;;;12564:55;-1:-1;;;12639:12;;;12632:30;12681:12;;;26151:245::o;26403:416::-;26603:2;26617:47;;;12932:2;26588:18;;;34468:19;12968:34;34508:14;;;12948:55;-1:-1;;;13023:12;;;13016:26;13061:12;;;26574:245::o;26826:416::-;27026:2;27040:47;;;13312:2;27011:18;;;34468:19;13348:29;34508:14;;;13328:50;13397:12;;;26997:245::o;27249:416::-;27449:2;27463:47;;;13648:2;27434:18;;;34468:19;-1:-1;;;34508:14;;;13664:35;13718:12;;;27420:245::o;27672:416::-;27872:2;27886:47;;;13969:2;27857:18;;;34468:19;14005:34;34508:14;;;13985:55;-1:-1;;;14060:12;;;14053:25;14097:12;;;27843:245::o;28095:416::-;28295:2;28309:47;;;28280:18;;;34468:19;14384:34;34508:14;;;14364:55;14438:12;;;28266:245::o;28518:416::-;28718:2;28732:47;;;14689:2;28703:18;;;34468:19;14725:34;34508:14;;;14705:55;-1:-1;;;14780:12;;;14773:25;14817:12;;;28689:245::o;28941:416::-;29141:2;29155:47;;;15068:2;29126:18;;;34468:19;15104:34;34508:14;;;15084:55;-1:-1;;;15159:12;;;15152:29;15200:12;;;29112:245::o;29364:416::-;29564:2;29578:47;;;15451:2;29549:18;;;34468:19;15487:34;34508:14;;;15467:55;-1:-1;;;15542:12;;;15535:28;15582:12;;;29535:245::o;29787:416::-;29987:2;30001:47;;;15833:2;29972:18;;;34468:19;15869:31;34508:14;;;15849:52;15920:12;;;29958:245::o;30210:416::-;30410:2;30424:47;;;16171:2;30395:18;;;34468:19;16207:34;34508:14;;;16187:55;-1:-1;;;16262:12;;;16255:34;16308:12;;;30381:245::o;30633:416::-;30833:2;30847:47;;;16559:2;30818:18;;;34468:19;-1:-1;;;34508:14;;;16575:45;16639:12;;;30804:245::o;31056:383::-;17002:23;;-1:-1;;;;;35710:54;;;7983:58;;17177:4;17166:16;;;17160:23;35710:54;;17237:14;;;7983:58;17330:4;17319:16;;;17313:23;35848:8;35837:20;17388:14;;;20442:36;17487:4;17476:16;;;17470:23;35710:54;;17547:14;;;7983:58;17645:4;17634:16;;;17628:23;17705:14;;;20551:37;35721:42;17792:16;;;17786:23;17863:14;;;20551:37;17969:4;17958:16;;;17952:23;18029:14;;;20551:37;18136:4;18125:16;;;18119:23;35710:54;18196:14;;;7983:58;;;;31263:3;31248:19;;31234:205::o;31446:335::-;;31629:3;31618:9;31614:19;31606:27;;18588:63;18636:14;18565:16;18559:23;18588:63;:::i;:::-;18732:4;18725:5;18721:16;18715:23;18744:63;18732:4;18796:3;18792:14;18778:12;18744:63;:::i;:::-;;18885:4;18878:5;18874:16;18868:23;18897:61;18885:4;18947:3;18943:14;18929:12;18897:61;:::i;:::-;;19042:4;19035:5;19031:16;19025:23;19054:59;19042:4;19102:3;19098:14;19084:12;19054:59;:::i;:::-;;19197:4;19190:5;19186:16;19180:23;19209:59;19197:4;19257:3;19253:14;19239:12;19209:59;:::i;:::-;;19357:4;19350:5;19346:16;19340:23;19357:4;19421:3;19417:14;20551:37;19521:4;19514:5;19510:16;19504:23;19521:4;19585:3;19581:14;20551:37;19681:4;19674:5;19670:16;19664:23;19681:4;19745:3;19741:14;20551:37;19841:6;;19834:5;19830:18;19824:25;19841:6;19907:3;19903:16;20551:37;;20004:6;;19997:5;19993:18;19987:25;20018:65;20004:6;20070:3;20066:16;20052:12;20018:65;:::i;:::-;-1:-1;;20166:6;20155:18;;;20149:25;20228:16;;;;20551:37;31600:181;:::o;31788:222::-;20551:37;;;31915:2;31900:18;;31886:124::o;32017:848::-;;32322:3;32311:9;32307:19;20581:5;20558:3;20551:37;32495:2;37219:24;32495:2;32484:9;32480:18;11187:58;32322:3;32532:2;32521:9;32517:18;32510:48;32572:108;9355:5;33819:12;34480:6;34475:3;34468:19;34508:14;32311:9;34508:14;9367:93;;32495:2;9531:5;33673:14;9543:21;;-1:-1;9570:260;9595:6;9592:1;9589:13;9570:260;;;9656:13;;-1:-1;;;;;35710:54;7983:58;;34208:14;;;;7876;;;;3694:18;9610:9;9570:260;;;-1:-1;;;;;;;35710:54;;;;32767:2;32752:18;;7983:58;-1:-1;;;32850:3;32835:19;20551:37;32564:116;32293:572;-1:-1;;;32293:572::o;32872:333::-;20551:37;;;33191:2;33176:18;;20551:37;33027:2;33012:18;;32998:207::o;33212:214::-;36019:4;36008:16;;;;20787:35;;33335:2;33320:18;;33306:120::o;37499:268::-;37564:1;37571:101;37585:6;37582:1;37579:13;37571:101;;;37652:11;;;37646:18;37633:11;;;37626:39;37607:2;37600:10;37571:101;;;37687:6;37684:1;37681:13;37678:2;;;-1:-1;;37564:1;37734:16;;37727:27;37548:219::o;37880:117::-;-1:-1;;;;;35710:54;;37939:35;;37929:2;;37988:1;;37978:12;38004:111;38085:5;35259:13;35252:21;38063:5;38060:32;38050:2;;38106:1;;38096:12
Swarm Source
ipfs://019bff146aba2b217029e3aac67059fc91c85cf9736a04a5cbd50539d58d21aa
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.